Reads in anything following seq id as a description
[jalview.git] / src / jalview / io / BLCFile.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2006 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 class BLCFile extends AlignFile\r
35 {\r
36     Vector titles;\r
37 \r
38     /**\r
39      * Creates a new BLCFile object.\r
40      */\r
41     public BLCFile()\r
42     {\r
43     }\r
44 \r
45 \r
46     /**\r
47      * Creates a new BLCFile object.\r
48      *\r
49      * @param inFile DOCUMENT ME!\r
50      * @param type DOCUMENT ME!\r
51      *\r
52      * @throws IOException DOCUMENT ME!\r
53      */\r
54     public BLCFile(String inFile, String type) throws IOException\r
55     {\r
56         super(inFile, type);\r
57     }\r
58 \r
59     /**\r
60      * DOCUMENT ME!\r
61      */\r
62     public void initData()\r
63     {\r
64         super.initData();\r
65         titles = new Vector();\r
66     }\r
67 \r
68     /**\r
69      * DOCUMENT ME!\r
70      */\r
71     public void parse() throws IOException\r
72     {\r
73         boolean idsFound = false;\r
74         StringBuffer[] seqstrings;\r
75 \r
76         String line = null;\r
77 \r
78             do\r
79             {\r
80                 line = nextLine();\r
81 \r
82                 // seek end of ids\r
83                 if (line.indexOf("*") > -1)\r
84                 {\r
85                     idsFound = true;\r
86 \r
87                     break;\r
88                 }\r
89 \r
90                 int abracket = line.indexOf(">");\r
91 \r
92                 if (abracket > -1)\r
93                 {\r
94                   line = line.substring(abracket+1);\r
95 \r
96                   Sequence seq = parseId(line);\r
97                   seqs.addElement(seq);\r
98                 }\r
99             }\r
100             while (!idsFound);\r
101 \r
102             int starCol = line.indexOf("*");\r
103             seqstrings = new StringBuffer[seqs.size()];\r
104 \r
105             for (int i = 0; i < seqs.size(); i++)\r
106             {\r
107                 if (seqstrings[i] == null)\r
108                 {\r
109                     seqstrings[i] = new StringBuffer();\r
110                 }\r
111             }\r
112 \r
113             while ((line = nextLine()).indexOf("*") == -1)\r
114             {\r
115                 for (int i = 0; i < seqs.size(); i++)\r
116                 {\r
117                     if (line.length() > (i + starCol))\r
118                     {\r
119                         seqstrings[i].append(line.charAt(i + starCol));\r
120                     }\r
121                 }\r
122             }\r
123 \r
124             for (int i = 0; i < seqs.size(); i++)\r
125             {\r
126               Sequence newSeq = (Sequence) seqs.elementAt(i);\r
127 \r
128               if (!isValidProteinSequence(newSeq.getSequence()))\r
129               {\r
130                 throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS\r
131                                +" : "+ newSeq.getName()\r
132                                +" : "+invalidCharacter);\r
133               }\r
134 \r
135               newSeq.setSequence(seqstrings[i].toString());\r
136             }\r
137 \r
138     }\r
139 \r
140     /**\r
141      * DOCUMENT ME!\r
142      *\r
143      * @return DOCUMENT ME!\r
144      */\r
145     public String print()\r
146     {\r
147         return print(getSeqsAsArray());\r
148     }\r
149 \r
150     /**\r
151      * DOCUMENT ME!\r
152      *\r
153      * @param s DOCUMENT ME!\r
154      *\r
155      * @return DOCUMENT ME!\r
156      */\r
157     public String print(SequenceI[] s)\r
158     {\r
159         StringBuffer out = new StringBuffer();\r
160         /**\r
161          * A general parser for ids. Will look for dbrefs in\r
162          * Uniprot format source|id\r
163          * And also Jalview /start-end\r
164          *\r
165          * @String id Id to be parsed\r
166      */\r
167         int i = 0;\r
168         int max = -1;\r
169 \r
170         while ((i < s.length) && (s[i] != null))\r
171         {\r
172             out.append(">" + printId(s[i]));\r
173             if(s[i].getDescription()!=null)\r
174               out.append(" "+s[i].getDescription());\r
175 \r
176             out.append("\n");\r
177 \r
178             if (s[i].getSequence().length > max)\r
179             {\r
180                 max = s[i].getSequence().length;\r
181             }\r
182 \r
183             i++;\r
184         }\r
185 \r
186         out.append("* iteration 1\n");\r
187 \r
188         for (int j = 0; j < max; j++)\r
189         {\r
190             i = 0;\r
191 \r
192             while ((i < s.length) && (s[i] != null))\r
193             {\r
194                 if (s[i].getSequence().length > j)\r
195                 {\r
196                     out.append(s[i].getSequenceAsString(j, j + 1));\r
197                 }\r
198                 else\r
199                 {\r
200                     out.append("-");\r
201                 }\r
202 \r
203                 i++;\r
204             }\r
205 \r
206             out.append("\n");\r
207         }\r
208 \r
209         out.append("*\n");\r
210 \r
211         return out.toString();\r
212     }\r
213 }\r