Save links and scores and keyValues for features
[jalview.git] / src / jalview / datamodel / SequenceFeature.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.datamodel;\r
20 \r
21 import java.util.Hashtable;\r
22 \r
23 /**\r
24  * DOCUMENT ME!\r
25  *\r
26  * @author $author$\r
27  * @version $Revision$\r
28  */\r
29 public class SequenceFeature\r
30 {\r
31     public int begin;\r
32     public int end;\r
33     public float score;\r
34     public String type;\r
35     public String description;\r
36     public Hashtable otherDetails;\r
37     public java.util.Vector links;\r
38 \r
39     // Feature group can be set from a features file\r
40     // as a group of features between STARTGROUP and ENDGROUP markers\r
41     public String featureGroup;\r
42 \r
43     public SequenceFeature()\r
44     {}\r
45 \r
46     public SequenceFeature(String type,\r
47                            String desc,\r
48                            String status,\r
49                            int begin, int end,\r
50                            String featureGroup)\r
51     {\r
52       this.type = type;\r
53       this.description = desc;\r
54       setValue("status", status);\r
55       this.begin = begin;\r
56       this.end = end;\r
57       this.featureGroup = featureGroup;\r
58     }\r
59 \r
60     public SequenceFeature(String type,\r
61                            String desc,\r
62                            int begin, int end,\r
63                            float score,\r
64                            String featureGroup)\r
65     {\r
66       this.type = type;\r
67       this.description = desc;\r
68       this.begin = begin;\r
69       this.end = end;\r
70       this.score = score;\r
71       this.featureGroup = featureGroup;\r
72     }\r
73 \r
74     public boolean equals(SequenceFeature sf)\r
75     {\r
76       if (begin != sf.begin\r
77           || end != sf.end\r
78           || score != sf.score)\r
79         return false;\r
80 \r
81       if(!(type+description+featureGroup).equals\r
82          (sf.type+sf.description+sf.featureGroup))\r
83         return false;\r
84 \r
85       return true;\r
86     }\r
87 \r
88 \r
89     /**\r
90      * DOCUMENT ME!\r
91      *\r
92      * @return DOCUMENT ME!\r
93      */\r
94     public int getBegin()\r
95     {\r
96         return begin;\r
97     }\r
98 \r
99     public void setBegin(int start)\r
100     {\r
101       this.begin = start;\r
102     }\r
103 \r
104     /**\r
105      * DOCUMENT ME!\r
106      *\r
107      * @return DOCUMENT ME!\r
108      */\r
109     public int getEnd()\r
110     {\r
111         return end;\r
112     }\r
113 \r
114     public void setEnd(int end)\r
115     {\r
116       this.end = end;\r
117     }\r
118 \r
119     /**\r
120      * DOCUMENT ME!\r
121      *\r
122      * @return DOCUMENT ME!\r
123      */\r
124     public String getType()\r
125     {\r
126         return type;\r
127     }\r
128 \r
129     public void setType(String type)\r
130     {\r
131       this.type = type;\r
132     }\r
133 \r
134     /**\r
135      * DOCUMENT ME!\r
136      *\r
137      * @return DOCUMENT ME!\r
138      */\r
139     public String getDescription()\r
140     {\r
141         return description;\r
142     }\r
143 \r
144     public void setDescription(String desc)\r
145     {\r
146       description = desc;\r
147     }\r
148 \r
149     public String getFeatureGroup()\r
150     {\r
151       return featureGroup;\r
152     }\r
153 \r
154     public void setFeatureGroup(String featureGroup)\r
155     {\r
156       this.featureGroup = featureGroup;\r
157     }\r
158 \r
159     public void addLink(String labelLink)\r
160     {\r
161       if(links==null)\r
162         links = new java.util.Vector();\r
163 \r
164       links.insertElementAt(labelLink,0);\r
165     }\r
166 \r
167     public float getScore()\r
168     {\r
169       return score;\r
170     }\r
171 \r
172     public void setScore(float value)\r
173     {\r
174       score = value;\r
175     }\r
176 \r
177     /**\r
178      * Used for getting values which are not in the\r
179      * basic set. eg STRAND, FRAME for GFF file\r
180      * @param key String\r
181      */\r
182     public Object getValue(String key)\r
183     {\r
184       if(otherDetails==null)\r
185         return null;\r
186       else\r
187         return otherDetails.get(key);\r
188     }\r
189 \r
190     /**\r
191      * Used for setting values which are not in the\r
192      * basic set. eg STRAND, FRAME for GFF file\r
193      * @param key   eg STRAND\r
194      * @param value eg +\r
195      */\r
196     public void setValue(String key, Object value)\r
197     {\r
198       if(value!=null)\r
199       {\r
200         if (otherDetails == null)\r
201           otherDetails = new Hashtable();\r
202 \r
203         otherDetails.put(key, value);\r
204       }\r
205     }\r
206 \r
207 \r
208     /*\r
209      * The following methods are added to maintain\r
210      * the castor Uniprot mapping file for the moment.\r
211      */\r
212     public void setStatus(String status)\r
213     {\r
214       setValue("status", status);\r
215     }\r
216 \r
217     public String getStatus()\r
218     {\r
219       if (otherDetails != null)\r
220         return otherDetails.get("status").toString();\r
221       else\r
222         return null;\r
223     }\r
224 \r
225     public void setPosition(int pos)\r
226     {\r
227       begin = pos;\r
228       end = pos;\r
229     }\r
230 \r
231     public int getPosition()\r
232     {\r
233       return begin;\r
234     }\r
235 \r
236 }\r