- alignFrame = af;
- sfetch = new jalview.ws.SequenceFetcher();
- database.addItem(noDbSelected);
- /*
- * Dynamically generated database list
- * will need a translation function from
- * internal source to externally distinct names.
- * UNIPROT and UP_NAME are identical DB sources,
- * and should be collapsed.
- *
-
- String dbs[] = sfetch.getSupportedDb();
- for (int i=0; i<dbs.length;i++)
- {
- if (DBRefSource.isPrimaryDb(dbs[i]))
- {
- database.addItem(dbs[i]);
- // should have some kind of human readable description of each database displayed when
- * that combo is selected.
- }
- }*/
- database.addItem("Uniprot");
- database.addItem("EMBL");
- database.addItem("EMBLCDS");
- database.addItem("PDB");
- database.addItem("PFAM");
+ if (_initingFetcher && initingThread != null && initingThread.isAlive())
+ {
+ if (guiWindow != null)
+ {
+ guiWindow
+ .setProgressBar(
+ MessageManager
+ .getString("status.waiting_sequence_database_fetchers_init"),
+ Thread.currentThread().hashCode());
+ }
+ // initting happening on another thread - so wait around to see if it
+ // finishes.
+ while (_initingFetcher && initingThread != null
+ && initingThread.isAlive())
+ {
+ try
+ {
+ Thread.sleep(10);
+ } catch (Exception e)
+ {
+ }
+ ;
+ }
+ if (guiWindow != null)
+ {
+ guiWindow
+ .setProgressBar(
+ MessageManager
+ .getString("status.waiting_sequence_database_fetchers_init"),
+ Thread.currentThread().hashCode());
+ }
+ }
+ if (sfetch == null
+ || dasRegistry != Cache.getDasSourceRegistry()
+ || lastDasSourceRegistry != (Cache.getDasSourceRegistry()
+ .getDasRegistryURL() + Cache.getDasSourceRegistry()
+ .getLocalSourceString()).hashCode())
+ {
+ _initingFetcher = true;
+ initingThread = Thread.currentThread();
+ /**
+ * give a visual indication that sequence fetcher construction is occuring
+ */
+ if (guiWindow != null)
+ {
+ guiWindow.setProgressBar(MessageManager
+ .getString("status.init_sequence_database_fetchers"),
+ Thread.currentThread().hashCode());
+ }
+ dasRegistry = Cache.getDasSourceRegistry();
+ dasRegistry.refreshSources();
+
+ jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher();
+ if (guiWindow != null)
+ {
+ guiWindow.setProgressBar(null, Thread.currentThread().hashCode());
+ }
+ lastDasSourceRegistry = (dasRegistry.getDasRegistryURL() + dasRegistry
+ .getLocalSourceString()).hashCode();
+ sfetch = sf;
+ _initingFetcher = false;
+ initingThread = null;
+ }
+ return sfetch;
+ }
+
+ private IProgressIndicator progressIndicator;
+
+ private volatile boolean _isConstructing = false;
+
+ private List<AlignFrame> newAlframes = null;
+
+ public SequenceFetcher(IProgressIndicator guiIndic)
+ {
+ this(guiIndic, null, null);
+ }
+
+ public SequenceFetcher(IProgressIndicator guiIndic,
+ final String selectedDb, final String queryString)
+ {
+ this._isConstructing = true;
+ this.progressIndicator = guiIndic;
+ final SequenceFetcher us = this;
+ // launch initialiser thread
+ Thread sf = new Thread(new Runnable()
+ {
+
+ @Override
+ public void run()
+ {
+ if (getSequenceFetcherSingleton(progressIndicator) != null)
+ {
+ us.initGui(progressIndicator, selectedDb, queryString);
+ us._isConstructing = false;
+ }
+ else
+ {
+ javax.swing.SwingUtilities.invokeLater(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ JvOptionPane
+ .showInternalMessageDialog(
+ Desktop.desktop,
+ MessageManager
+ .getString("warn.couldnt_create_sequence_fetcher_client"),
+ MessageManager
+ .getString("label.couldnt_create_sequence_fetcher"),
+ JvOptionPane.ERROR_MESSAGE);
+ }
+ });
+
+ // raise warning dialog
+ }
+ }
+ });
+ sf.start();
+ }