Merge branch 'Jalview-JS/develop' into merge_js_develop
[jalview.git] / src / jalview / io / gff / SequenceOntologyFactory.java
index 90cae7a..08a2c6a 100644 (file)
@@ -20,6 +20,9 @@
  */
 package jalview.io.gff;
 
+import jalview.bin.ApplicationSingletonProvider;
+import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI;
+
 /**
  * A factory class that returns a model of the Sequence Ontology. By default a
  * hard-coded subset is used (for the applet, or testing), or setInstance() can
@@ -28,21 +31,53 @@ package jalview.io.gff;
  * @author gmcarstairs
  *
  */
-public class SequenceOntologyFactory
+public class SequenceOntologyFactory implements ApplicationSingletonI
 {
-  private static SequenceOntologyI instance;
+  /**
+   * Answers an instance of this class for the current application context. Note
+   * that this supports running two JS 'applets' on the same page, one with the
+   * full Sequence Ontology (USE_FULL_SO = true) and one with a hard-coded
+   * subset (USE_FULL_SO = false). If this is overkill, could change this method
+   * to just return a common static instance.
+   * 
+   * @return
+   */
+  private static synchronized SequenceOntologyFactory getInstance()
+  {
+    return (SequenceOntologyFactory) ApplicationSingletonProvider
+            .getInstance(SequenceOntologyFactory.class);
+  }
+
+  private SequenceOntologyFactory()
+  {
+    // private singleton
+  }
+
 
-  public static synchronized SequenceOntologyI getInstance()
+  /**
+   * Answers the configured model of the Sequence Ontology.
+   * 
+   * @return
+   */
+  public static synchronized SequenceOntologyI getSequenceOntology()
   {
-    if (instance == null)
-    {
-      instance = new SequenceOntologyLite();
-    }
-    return instance;
+    SequenceOntologyFactory f = getInstance();
+    return (f.sequenceOntology == null
+            ? f.sequenceOntology = new SequenceOntologyLite()
+            : f.sequenceOntology);
   }
 
-  public static void setInstance(SequenceOntologyI so)
+  /**
+   * For testng only
+   * 
+   * @param so
+   */
+  public static void setSequenceOntology(SequenceOntologyI so)
   {
-    instance = so;
+    getInstance().sequenceOntology = so;
   }
+
+
+  private SequenceOntologyI sequenceOntology;
+
 }