import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
-import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import jalview.api.structures.JalviewStructureDisplayI;
import jalview.bin.Cache;
+import jalview.bin.Console;
import jalview.bin.Jalview;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
private static final String AUTOSUPERIMPOSE = "AUTOSUPERIMPOSE";
/**
- * transient combo box choice for initiating 3db fetch
+ * warn user if need to fetch more than this many uniprot records at once
*/
- private static final String VIEWS_QUERYING_TDB = "QUERY_3DB";
+ private static final int THRESHOLD_WARN_UNIPROT_FETCH_NEEDED = 20;
private SequenceI selectedSequence;
canQueryTDB = true;
if (needCanonical)
{
- notQueriedTDBYet = false;
+ // triggers display of the 'Query TDB' button
+ notQueriedTDBYet = true;
}
}
};
}
chk_superpose.setSelected(Cache.getDefault(AUTOSUPERIMPOSE, true));
+ btn_queryTDB.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ promptForTDBFetch(false);
+ }
+ });
Executors.defaultThreadFactory().newThread(new Runnable()
{
+ @Override
public void run()
{
populateSeqsWithoutSourceDBRef();
updateCurrentView();
}
- private void promptForTDBFetch()
+ /**
+ * raises dialog for Uniprot fetch followed by 3D beacons search
+ *
+ * @param ignoreGui
+ * - when true, don't ask, just fetch
+ */
+ public void promptForTDBFetch(boolean ignoreGui)
{
final long progressId = System.currentTimeMillis();
@Override
public void run()
{
- progressBar.setProgressBar("status.searching_3d_beacons", progressId);
+ mainFrame.setEnabled(false);
+ cmb_filterOption.setEnabled(false);
+ progressBar.setProgressBar(
+ MessageManager.getString("status.searching_3d_beacons"),
+ progressId);
+ btn_queryTDB.setEnabled(false);
// TODO: warn if no accessions discovered
populateSeqsWithoutSourceDBRef();
// redo initial discovery - this time with 3d beacons
// Executors.
- previousWantedFields=null;
+ previousWantedFields = null;
+ lastSelected = (FilterOption) cmb_filterOption.getSelectedItem();
+ cmb_filterOption.setSelectedItem(null);
+ cachedPDBExists = false; // reset to initial
initialStructureDiscovery();
if (!isStructuresDiscovered())
{
- progressBar.setProgressBar("status.no_structures_discovered_from_3d_beacons", progressId);
- } else {
+ progressBar.setProgressBar(MessageManager.getString(
+ "status.no_structures_discovered_from_3d_beacons"),
+ progressId);
+ btn_queryTDB.setToolTipText(MessageManager.getString(
+ "status.no_structures_discovered_from_3d_beacons"));
+ btn_queryTDB.setEnabled(false);
+ pnl_queryTDB.setVisible(false);
+ }
+ else
+ {
+ cmb_filterOption.setSelectedIndex(0); // select 'best'
+ btn_queryTDB.setVisible(false);
+ pnl_queryTDB.setVisible(false);
progressBar.setProgressBar(null, progressId);
}
+ mainFrame.setEnabled(true);
+ cmb_filterOption.setEnabled(true);
}
};
final FetchFinishedListenerI afterDbRefFetch = new FetchFinishedListenerI()
{
-
+
@Override
public void finished()
{
notQueriedTDBYet = false;
// new thread to discover structures - via 3d beacons
Executors.defaultThreadFactory().newThread(strucDiscovery).start();
-
+
}
};
-
+
// fetch db refs if OK pressed
- final Runnable discoverCanonicalDBrefs = new Runnable()
+ final Runnable discoverCanonicalDBrefs = new Runnable()
{
@Override
public void run()
{
+ btn_queryTDB.setEnabled(false);
populateSeqsWithoutSourceDBRef();
final int y = seqsWithoutSourceDBRef.size();
{ new jalview.ws.dbsources.Uniprot() }, null, false);
dbRefFetcher.addListener(afterDbRefFetch);
// ideally this would also gracefully run with callbacks
+
dbRefFetcher.fetchDBRefs(true);
- } else {
+ }
+ else
+ {
// call finished action directly
afterDbRefFetch.finished();
}
}
};
- final Runnable revertview = new Runnable() {
- public void run() {
- if (lastSelected!=null) {
+ final Runnable revertview = new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ if (lastSelected != null)
+ {
cmb_filterOption.setSelectedItem(lastSelected);
}
};
};
+ int threshold = Cache.getDefault("UNIPROT_AUTOFETCH_THRESHOLD",
+ THRESHOLD_WARN_UNIPROT_FETCH_NEEDED);
+ Console.debug("Using Uniprot fetch threshold of " + threshold);
+ if (ignoreGui || seqsWithoutSourceDBRef.size() < threshold)
+ {
+ Executors.defaultThreadFactory().newThread(discoverCanonicalDBrefs)
+ .start();
+ return;
+ }
// need cancel and no to result in the discoverPDB action - mocked is
- // 'cancel'
- JvOptionPane.newOptionDialog(this)
+ // 'cancel' TODO: mock should be OK
+
+ StructureChooser thisSC = this;
+ JvOptionPane.newOptionDialog(thisSC.getFrame())
.setResponseHandler(JvOptionPane.OK_OPTION,
discoverCanonicalDBrefs)
.setResponseHandler(JvOptionPane.CANCEL_OPTION, revertview)
MessageManager.formatMessage(
"label.fetch_references_for_3dbeacons",
seqsWithoutSourceDBRef.size()),
- MessageManager
- .getString("label.3dbeacons"),
+ MessageManager.getString("label.3dbeacons"),
JvOptionPane.YES_NO_OPTION, JvOptionPane.PLAIN_MESSAGE,
null, new Object[]
{ MessageManager.getString("action.ok"),
MessageManager.getString("action.cancel") },
- MessageManager.getString("action.ok"));
+ MessageManager.getString("action.ok"), false);
}
/**
// StructureChooser
// works
jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(
- jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
+ Cache.getProperty("LAST_DIRECTORY"));
chooser.setFileView(new jalview.io.JalviewFileView());
chooser.setDialogTitle(
MessageManager.formatMessage("label.select_pdb_file_for",
if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
{
selectedPdbFileName = chooser.getSelectedFile().getPath();
- jalview.bin.Cache.setProperty("LAST_DIRECTORY", selectedPdbFileName);
+ Cache.setProperty("LAST_DIRECTORY", selectedPdbFileName);
validateSelections();
}
}
"-", VIEWS_FROM_FILE, false, null));
if (canQueryTDB && notQueriedTDBYet)
{
- FilterOption queryTDBOption = new FilterOption(
- MessageManager.getString("label.search_3dbeacons"), "-",
- VIEWS_QUERYING_TDB, false, null);
- cmb_filterOption.addItem(queryTDBOption);
+ btn_queryTDB.setVisible(true);
+ pnl_queryTDB.setVisible(true);
}
if (cachedPDBExist)
{
FilterOption selectedFilterOpt = ((FilterOption) cmb_filterOption
.getSelectedItem());
-
- // first check if we need to rebuild dialog
- if (selectedFilterOpt.getView() == VIEWS_QUERYING_TDB)
- {
- promptForTDBFetch();
- return;
- }
+
if (lastSelected == selectedFilterOpt)
{
// don't need to do anything, probably
String filterTitle = mainFrame.getTitle();
mainFrame.setTitle(frameTitle);
chk_invertFilter.setVisible(false);
-
+
if (selectedFilterOpt.getView() == VIEWS_FILTER)
{
mainFrame.setTitle(filterTitle);
FilterOption selectedFilterOpt = ((FilterOption) cmb_filterOption
.getSelectedItem());
String currentView = selectedFilterOpt.getView();
-
- if (currentView == VIEWS_FILTER && data instanceof ThreeDBStructureChooserQuerySource)
+
+ if (currentView == VIEWS_FILTER
+ && data instanceof ThreeDBStructureChooserQuerySource)
{
-
- TDB_FTSData row=((ThreeDBStructureChooserQuerySource)data).getFTSDataFor(getResultTable(), selectedRow, discoveredStructuresSet);
- String pageUrl = row.getModelViewUrl();
+
+ TDB_FTSData row = ((ThreeDBStructureChooserQuerySource) data)
+ .getFTSDataFor(getResultTable(), selectedRow,
+ discoveredStructuresSet);
+ String pageUrl = row.getModelViewUrl();
JPopupMenu popup = new JPopupMenu("3D Beacons");
JMenuItem viewUrl = new JMenuItem("View model web page");
- viewUrl.addActionListener(
- new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- Desktop.showUrl(pageUrl);
- }
- }
- );
+ viewUrl.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ Desktop.showUrl(pageUrl);
+ }
+ });
popup.add(viewUrl);
- SwingUtilities.invokeLater(new Runnable() {
- public void run() { popup.show(getResultTable(), x, y); }
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ popup.show(getResultTable(), x, y);
+ }
});
return true;
}
// event not handled by us
return false;
}
+
/**
* Validates inputs from the Manual PDB entry panel
*/
{
validateSelections();
}
- private FilterOption lastSelected=null;
+
+ private FilterOption lastSelected = null;
+
/**
* Handles the state change event for the 'filter' combo-box and 'invert'
* check-box
if (pdbIdStr.split(":").length > 1)
{
pdbEntry.setId(pdbIdStr.split(":")[0]);
- pdbEntry.setChainCode(pdbIdStr.split(":")[1].toUpperCase(Locale.ROOT));
+ pdbEntry.setChainCode(
+ pdbIdStr.split(":")[1].toUpperCase(Locale.ROOT));
}
else
{
{
if (selectedSequences != null)
{
+ lbl_loading.setVisible(true);
Thread refreshThread = new Thread(new Runnable()
{
@Override
filterResultSet(
((FilterOption) cmb_filterOption.getSelectedItem())
.getValue());
+ lbl_loading.setVisible(false);
}
});
refreshThread.start();
&& mainFrame.isVisible()
&& cmb_filterOption.getSelectedItem() != null;
}
+
+ /**
+ *
+ * @return true if the 3D-Beacons query button will/has been displayed
+ */
+ public boolean isCanQueryTDB()
+ {
+ return canQueryTDB;
+ }
+
+ public boolean isNotQueriedTDBYet()
+ {
+ return notQueriedTDBYet;
+ }
}