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