Merge branch 'documentation/JAL-3407_2.11.1_release' into releases/Release_2_11_1_Branch
[jalview.git] / src / jalview / datamodel / features / FeatureSources.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.datamodel.features;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 /**
27  * A singleton to hold metadata about feature attributes, keyed by a unique
28  * feature source identifier
29  * 
30  * @author gmcarstairs
31  *
32  */
33 public class FeatureSources
34 {
35   private static FeatureSources instance = new FeatureSources();
36
37   private Map<String, FeatureSourceI> sources;
38
39   /**
40    * Answers the singleton instance of this class
41    * 
42    * @return
43    */
44   public static FeatureSources getInstance()
45   {
46     return instance;
47   }
48
49   private FeatureSources()
50   {
51     sources = new HashMap<>();
52   }
53
54   /**
55    * Answers the FeatureSource with the given unique identifier, or null if not
56    * known
57    * 
58    * @param sourceId
59    * @return
60    */
61   public FeatureSourceI getSource(String sourceId)
62   {
63     return sources.get(sourceId);
64   }
65
66   /**
67    * Adds the given source under the given key. This will replace any existing
68    * source with the same id, it is the caller's responsibility to ensure keys
69    * are unique if necessary.
70    * 
71    * @param sourceId
72    * @param source
73    */
74   public void addSource(String sourceId, FeatureSource source)
75   {
76     sources.put(sourceId, source);
77   }
78 }