temp push
[jalview.git] / src / jalview / io / gff / SequenceOntologyFactory.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.io.gff;
22
23 import jalview.bin.ApplicationSingletonProvider;
24 import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI;
25
26 /**
27  * A factory class that returns a model of the Sequence Ontology. By default a
28  * hard-coded subset is used (for the applet, or testing), or
29  * setSequenceOntology() can be used to set full Ontology data.
30  * 
31  * @author gmcarstairs
32  *
33  */
34 public class SequenceOntologyFactory implements ApplicationSingletonI
35 {
36   /**
37    * Answers an instance of this class for the current application context. Note
38    * that this supports running two JS 'applets' on the same page, one with the
39    * full Sequence Ontology (USE_FULL_SO = true) and one with a hard-coded
40    * subset (USE_FULL_SO = false). If this is overkill, could change this method
41    * to just return a common static instance.
42    * 
43    * @return
44    */
45   private static synchronized SequenceOntologyFactory getInstance()
46   {
47     return (SequenceOntologyFactory) ApplicationSingletonProvider
48             .getInstance(SequenceOntologyFactory.class);
49   }
50
51   /**
52    * Answers the configured model of the Sequence Ontology.
53    * 
54    * @return
55    */
56   public static synchronized SequenceOntologyI getSequenceOntology()
57   {
58     SequenceOntologyFactory f = getInstance();
59     return (f.sequenceOntology == null
60             ? f.sequenceOntology = new SequenceOntologyLite()
61             : f.sequenceOntology);
62   }
63
64   /**
65    * For testng only
66    * 
67    * @param so
68    */
69   public static void setSequenceOntology(SequenceOntologyI so)
70   {
71     getInstance().sequenceOntology = so;
72   }
73
74   private SequenceOntologyI sequenceOntology;
75
76   private SequenceOntologyFactory()
77   {
78     // private singleton
79   }
80
81 }