JAL-3878 Create skeleton for alignment service action
[jalview.git] / src / jalview / ws / SequenceFetcher.java
index 4526b26..5c94faf 100644 (file)
@@ -20,8 +20,9 @@
  */
 package jalview.ws;
 
+import jalview.bin.ApplicationSingletonProvider;
+import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI;
 import jalview.ext.ensembl.EnsemblGene;
-import jalview.ext.ensembl.EnsemblGenomes;
 import jalview.ws.dbsources.EmblCdsSource;
 import jalview.ws.dbsources.EmblSource;
 import jalview.ws.dbsources.Pdb;
@@ -40,8 +41,39 @@ import java.util.List;
  * This implements the run-time discovery of sequence database clients.
  * 
  */
-public class SequenceFetcher extends ASequenceFetcher
+public class SequenceFetcher extends ASequenceFetcher implements ApplicationSingletonI
 {
+  /*
+   * set a mock fetcher here for testing only - reset to null afterwards
+   */
+  private static SequenceFetcher mockFetcher;
+
+  /**
+   * Set the instance object to use (intended for unit testing with mock
+   * objects).
+   * 
+   * Be sure to reset to null in the tearDown method of any tests!
+   * 
+   * @param sf
+   */
+  public static void setMockFetcher(SequenceFetcher sf)
+  {
+    mockFetcher = sf;
+  }
+  
+  /**
+   * Returns a new SequenceFetcher singleton, or a mock object if one has been
+   * set.
+   * 
+   * @return
+   */
+  public static SequenceFetcher getInstance()
+  {
+    return mockFetcher != null ? mockFetcher
+            : (SequenceFetcher) ApplicationSingletonProvider
+                    .getInstance(SequenceFetcher.class);
+  }
+
   /**
    * Thread safe construction of database proxies TODO: extend to a configurable
    * database plugin mechanism where classes are instantiated by reflection and
@@ -51,7 +83,7 @@ public class SequenceFetcher extends ASequenceFetcher
   public SequenceFetcher()
   {
     addDBRefSourceImpl(EnsemblGene.class);
-    addDBRefSourceImpl(EnsemblGenomes.class);
+    // addDBRefSourceImpl(EnsemblGenomes.class);
     addDBRefSourceImpl(EmblSource.class);
     addDBRefSourceImpl(EmblCdsSource.class);
     addDBRefSourceImpl(Uniprot.class);
@@ -87,6 +119,7 @@ public class SequenceFetcher extends ASequenceFetcher
         src.add(srcs[i]);
       }
     }
+
     Collections.sort(src, String.CASE_INSENSITIVE_ORDER);
     return src.toArray(new String[src.size()]);
   }