/*
* Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
* Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with Jalview. If not, see .
*/
package jalview.gui;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import org.biojava.dasobert.dasregistry.*;
import jalview.jbgui.*;
import jalview.util.*;
public class DasSourceBrowser extends GDasSourceBrowser implements
Runnable, ListSelectionListener
{
static DasSource[] dasSources = null;
Hashtable localSources = null;
Vector selectedSources;
public static String DEFAULT_REGISTRY = "http://www.dasregistry.org/das1/sources/";
/**
* true if thread is running and we are talking to DAS registry service
*/
public boolean loadingDasSources = false;
protected static String getDasRegistryURL()
{
String registry = jalview.bin.Cache.getDefault("DAS_REGISTRY_URL",
DEFAULT_REGISTRY);
if (registry.indexOf("/registry/das1/sources/") > -1)
{
jalview.bin.Cache.setProperty(jalview.bin.Cache.DAS_REGISTRY_URL,
DEFAULT_REGISTRY);
registry = DEFAULT_REGISTRY;
}
return registry;
}
public DasSourceBrowser(FeatureSettings featureSettings)
{
fs = featureSettings;
String registry = getDasRegistryURL();
registryURL.setText(registry);
setSelectedFromProperties();
displayFullDetails(null);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
filter1.addListSelectionListener(this);
filter2.addListSelectionListener(this);
filter3.addListSelectionListener(this);
// Ask to be notified of selection changes.
ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (!lsm.isSelectionEmpty())
{
int selectedRow = lsm.getMinSelectionIndex();
displayFullDetails(table.getValueAt(selectedRow, 0).toString());
}
}
});
table.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent evt)
{
if (evt.getClickCount() == 2
|| SwingUtilities.isRightMouseButton(evt))
{
editRemoveLocalSource(evt);
}
}
});
if (dasSources != null)
{
init();
}
}
FeatureSettings fs = null;
public DasSourceBrowser()
{
this(null);
}
public void paintComponent(java.awt.Graphics g)
{
if (dasSources == null && !loadingDasSources)
{
Thread worker = new Thread(this);
worker.start();
}
}
void init()
{
int dSize = dasSources.length;
Object[][] data = new Object[dSize][2];
for (int i = 0; i < dSize; i++)
{
data[i][0] = dasSources[i].getNickname();
data[i][1] = new Boolean(selectedSources.contains(dasSources[i]
.getNickname()));
}
refreshTableData(data);
setCapabilities(dasSources);
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
TableSorter sorter = (TableSorter) table.getModel();
sorter.setSortingStatus(1, TableSorter.DESCENDING);
sorter.setSortingStatus(1, TableSorter.NOT_SORTED);
}
});
progressBar.setIndeterminate(false);
progressBar.setVisible(false);
addLocal.setVisible(true);
refresh.setVisible(true);
}
public void refreshTableData(Object[][] data)
{
TableSorter sorter = new TableSorter(new DASTableModel(data));
sorter.setTableHeader(table.getTableHeader());
table.setModel(sorter);
}
void displayFullDetails(String nickName)
{
StringBuffer text = new StringBuffer(
"");
if (nickName == null)
{
fullDetails.setText(text + "Select a DAS service from the table"
+ " to read a full description here.");
return;
}
int dSize = dasSources.length;
for (int i = 0; i < dSize; i++)
{
if (!dasSources[i].getNickname().equals(nickName))
{
continue;
}
DasSource ds = dasSources[i];
text.append("Id: "
+ dasSources[i].getId() + "
");
text.append("Nickname: "
+ dasSources[i].getNickname() + "
");
text.append("URL: "
+ dasSources[i].getUrl() + "
");
text.append("Admin Email: "
+ dasSources[i].getAdminemail() + "" + "
");
text.append("Registered at: "
+ dasSources[i].getRegisterDate() + "
");
text.append("Last successful test: "
+ dasSources[i].getLeaseDate() + "
");
text.append("Labels: ");
for (int s = 0; s < dasSources[i].getLabels().length; s++)
{
text.append(dasSources[i].getLabels()[s]);
if (s < dasSources[i].getLabels().length - 1)
{
text.append(",");
}
text.append(" ");
}
text.append("
");
text.append("Capabilities: ");
String[] scap = dasSources[i].getCapabilities();
for (int j = 0; j < scap.length; j++)
{
text.append(scap[j]);
if (j < scap.length - 1)
{
text.append(", ");
}
}
text.append("
");
text.append("Coordinates: ");
DasCoordinateSystem[] dcs = ds.getCoordinateSystem();
for (int j = 0; j < dcs.length; j++)
{
text.append("(" + dcs[j].getUniqueId() + ") "
+ dcs[j].getCategory() + ", " + dcs[j].getName());
if (dcs[j].getNCBITaxId() != 0)
{
text.append(", " + dcs[j].getNCBITaxId());
}
if (dcs[j].getOrganismName().length() > 0)
{
text.append(", " + dcs[j].getOrganismName());
}
text.append("
");
}
text.append("Description: "
+ dasSources[i].getDescription() + "
");
if (dasSources[i].getHelperurl() != null
&& dasSources[i].getHelperurl().length() > 0)
{
text.append("Go to site");
}
text.append("