- 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");
+ return textArea;
+ }
+
+ /**
+ * Blocking method that initialises and returns the shared instance of the
+ * SequenceFetcher client
+ *
+ * @param guiWindow
+ * - where the initialisation delay message should be shown
+ * @return the singleton instance of the sequence fetcher client
+ */
+ public static jalview.ws.SequenceFetcher getSequenceFetcherSingleton(
+ final IProgressIndicator guiWindow)
+ {
+ 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()
+ {