JAL-3210 Improvements to eclipse detection. New src tree and SwingJS updated from...
[jalview.git] / src / jalview / io / gff / SequenceOntologyFactory.java
index 90cae7a..2ba41da 100644 (file)
  */
 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
- * be used to set full Ontology data.
+ * hard-coded subset is used (for the applet, or testing), or
+ * setSequenceOntology() can be used to set full Ontology data.
  * 
  * @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);
+  }
+
+  /**
+   * Answers the configured model of the Sequence Ontology.
+   * 
+   * @return
+   */
+  public static synchronized SequenceOntologyI getSequenceOntology()
+  {
+    SequenceOntologyFactory f = getInstance();
+    return (f.sequenceOntology == null
+            ? f.sequenceOntology = new SequenceOntologyLite()
+            : f.sequenceOntology);
+  }
 
-  public static synchronized SequenceOntologyI getInstance()
+  /**
+   * For testng only
+   * 
+   * @param so
+   */
+  public static void setSequenceOntology(SequenceOntologyI so)
   {
-    if (instance == null)
-    {
-      instance = new SequenceOntologyLite();
-    }
-    return instance;
+    getInstance().sequenceOntology = so;
   }
 
-  public static void setInstance(SequenceOntologyI so)
+  private SequenceOntologyI sequenceOntology;
+
+  private SequenceOntologyFactory()
   {
-    instance = so;
+    // private singleton
   }
+
 }