Report invalid chars
[jalview.git] / src / jalview / io / AlignFile.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.io;\r
20 \r
21 import jalview.datamodel.*;\r
22 \r
23 import java.io.*;\r
24 \r
25 import java.util.*;\r
26 \r
27 \r
28 /**\r
29  * DOCUMENT ME!\r
30  *\r
31  * @author $author$\r
32  * @version $Revision$\r
33  */\r
34 public abstract class AlignFile extends FileParse\r
35 {\r
36     int noSeqs = 0;\r
37     int maxLength = 0;\r
38     Vector seqs;\r
39     Vector headers;\r
40     long start;\r
41     long end;\r
42     boolean jvSuffix = true;\r
43 \r
44     /**\r
45      * Creates a new AlignFile object.\r
46      */\r
47     public AlignFile()\r
48     {\r
49     }\r
50 \r
51     /**\r
52      * Creates a new AlignFile object.\r
53      *\r
54      * @param inStr DOCUMENT ME!\r
55      */\r
56     public AlignFile(String inStr)\r
57     {\r
58         initData();\r
59         System.out.println("is this ever called??");\r
60 \r
61         try\r
62         {\r
63             parse();\r
64         }\r
65         catch (Exception ex)\r
66         {\r
67         }\r
68     }\r
69 \r
70     /**\r
71      * Constructor which parses the data from a file of some specified type.\r
72      * @param inFile Filename to read from.\r
73      * @param type   What type of file to read from (File, URL)\r
74      */\r
75     public AlignFile(String inFile, String type) throws IOException\r
76     {\r
77         super(inFile, type);\r
78 \r
79         initData();\r
80 \r
81         parse();\r
82     }\r
83 \r
84     /**\r
85      * Return the seqs Vector\r
86      */\r
87     public Vector getSeqs()\r
88     {\r
89         return seqs;\r
90     }\r
91 \r
92     /**\r
93      * Return the Sequences in the seqs Vector as an array of Sequences\r
94      */\r
95     public SequenceI[] getSeqsAsArray()\r
96     {\r
97         SequenceI[] s = new SequenceI[seqs.size()];\r
98 \r
99         for (int i = 0; i < seqs.size(); i++)\r
100         {\r
101             s[i] = (SequenceI) seqs.elementAt(i);\r
102         }\r
103 \r
104         return s;\r
105     }\r
106 \r
107     /**\r
108      * Initialise objects to store sequence data in.\r
109      */\r
110     protected void initData()\r
111     {\r
112         seqs = new Vector();\r
113         headers = new Vector();\r
114     }\r
115 \r
116     /**\r
117      * DOCUMENT ME!\r
118      *\r
119      * @param s DOCUMENT ME!\r
120      */\r
121     protected void setSeqs(SequenceI[] s)\r
122     {\r
123         seqs = new Vector();\r
124 \r
125         for (int i = 0; i < s.length; i++)\r
126         {\r
127             seqs.addElement(s[i]);\r
128         }\r
129     }\r
130 \r
131     // Checks whether sequence is valid aa characters\r
132     protected boolean isValidProteinSequence(String sequence)\r
133     {\r
134         for (int i = 0; i < sequence.length(); i++)\r
135             if (!jalview.schemes.ResidueProperties.aaHash.containsKey(\r
136                         String.valueOf(sequence.charAt(i))))\r
137             {\r
138                 invalidCharacter = sequence.charAt(i);\r
139                 return false;\r
140             }\r
141 \r
142         return true;\r
143     }\r
144 \r
145     char invalidCharacter;\r
146 \r
147     /**\r
148      * This method must be implemented to parse the contents of the file.\r
149      */\r
150     public abstract void parse() throws IOException;\r
151 \r
152     /**\r
153      * Print out in alignment file format the Sequences in the seqs Vector.\r
154      */\r
155     public abstract String print();\r
156 \r
157     public void addJVSuffix(boolean b)\r
158     {\r
159       jvSuffix = b;\r
160     }\r
161 \r
162     /**\r
163      * A general parser for ids.\r
164      *\r
165      * @String id Id to be parsed\r
166      */\r
167     Sequence parseId(String id)\r
168     {\r
169       Sequence seq = null;\r
170       id = id.trim();\r
171       int space = id.indexOf(" ");\r
172       if(space>-1)\r
173       {\r
174         seq = new Sequence(id.substring(0, space),"");\r
175         seq.setDescription(id.substring(space+1));\r
176       }\r
177       else\r
178       {\r
179         seq = new Sequence(id, "");\r
180       }\r
181 \r
182       return seq;\r
183     }\r
184 \r
185     /**\r
186      * Creates the output id.\r
187      * Adds prefix Uniprot format source|id\r
188      * And suffix Jalview /start-end\r
189      *\r
190      * @String id Id to be parsed\r
191      */\r
192     String printId(SequenceI seq)\r
193     {\r
194      return seq.getDisplayId(jvSuffix);\r
195     }\r
196 \r
197 }\r