Formatting
[jalview.git] / src / jalview / io / BLCFile.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 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 java.io.*;\r
22 import java.util.*;\r
23 \r
24 import jalview.datamodel.*;\r
25 \r
26 /**\r
27  * DOCUMENT ME!\r
28  *\r
29  * @author $author$\r
30  * @version $Revision$\r
31  */\r
32 public class BLCFile\r
33     extends AlignFile\r
34 {\r
35   Vector titles;\r
36 \r
37   /**\r
38    * Creates a new BLCFile object.\r
39    */\r
40   public BLCFile()\r
41   {\r
42   }\r
43 \r
44   /**\r
45    * Creates a new BLCFile object.\r
46    *\r
47    * @param inFile DOCUMENT ME!\r
48    * @param type DOCUMENT ME!\r
49    *\r
50    * @throws IOException DOCUMENT ME!\r
51    */\r
52   public BLCFile(String inFile, String type)\r
53       throws IOException\r
54   {\r
55     super(inFile, type);\r
56   }\r
57 \r
58   /**\r
59    * DOCUMENT ME!\r
60    */\r
61   public void initData()\r
62   {\r
63     super.initData();\r
64     titles = new Vector();\r
65   }\r
66 \r
67   /**\r
68    * DOCUMENT ME!\r
69    */\r
70   public void parse()\r
71       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       newSeq.setSequence(seqstrings[i].toString());\r
129     }\r
130 \r
131   }\r
132 \r
133   /**\r
134    * DOCUMENT ME!\r
135    *\r
136    * @return DOCUMENT ME!\r
137    */\r
138   public String print()\r
139   {\r
140     return print(getSeqsAsArray());\r
141   }\r
142 \r
143   /**\r
144    * DOCUMENT ME!\r
145    *\r
146    * @param s DOCUMENT ME!\r
147    *\r
148    * @return DOCUMENT ME!\r
149    */\r
150   public String print(SequenceI[] s)\r
151   {\r
152     StringBuffer out = new StringBuffer();\r
153     /**\r
154      * A general parser for ids. Will look for dbrefs in\r
155      * Uniprot format source|id\r
156      * And also Jalview /start-end\r
157      *\r
158      * @String id Id to be parsed\r
159      */\r
160     int i = 0;\r
161     int max = -1;\r
162 \r
163     while ( (i < s.length) && (s[i] != null))\r
164     {\r
165       out.append(">" + printId(s[i]));\r
166       if (s[i].getDescription() != null)\r
167       {\r
168         out.append(" " + s[i].getDescription());\r
169       }\r
170 \r
171       out.append("\n");\r
172 \r
173       if (s[i].getSequence().length > max)\r
174       {\r
175         max = s[i].getSequence().length;\r
176       }\r
177 \r
178       i++;\r
179     }\r
180 \r
181     out.append("* iteration 1\n");\r
182 \r
183     for (int j = 0; j < max; j++)\r
184     {\r
185       i = 0;\r
186 \r
187       while ( (i < s.length) && (s[i] != null))\r
188       {\r
189         if (s[i].getSequence().length > j)\r
190         {\r
191           out.append(s[i].getSequenceAsString(j, j + 1));\r
192         }\r
193         else\r
194         {\r
195           out.append("-");\r
196         }\r
197 \r
198         i++;\r
199       }\r
200 \r
201       out.append("\n");\r
202     }\r
203 \r
204     out.append("*\n");\r
205 \r
206     return out.toString();\r
207   }\r
208 }\r