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