After merge
[jalview.git] / src / jalview / io / FastaFile.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 \r
26 /**\r
27  * DOCUMENT ME!\r
28  *\r
29  * @author $author$\r
30  * @version $Revision$\r
31  */\r
32 public class FastaFile extends AlignFile\r
33 {\r
34     /**\r
35      * Creates a new FastaFile object.\r
36      */\r
37     public FastaFile()\r
38     {\r
39     }\r
40 \r
41     /**\r
42      * Creates a new FastaFile object.\r
43      *\r
44      * @param inStr DOCUMENT ME!\r
45      */\r
46     public FastaFile(String inStr)\r
47     {\r
48         super(inStr);\r
49     }\r
50 \r
51     /**\r
52      * Creates a new FastaFile object.\r
53      *\r
54      * @param inFile DOCUMENT ME!\r
55      * @param type DOCUMENT ME!\r
56      *\r
57      * @throws IOException DOCUMENT ME!\r
58      */\r
59     public FastaFile(String inFile, String type) throws IOException\r
60     {\r
61         super(inFile, type);\r
62     }\r
63 \r
64     /**\r
65      * DOCUMENT ME!\r
66      *\r
67      * @throws IOException DOCUMENT ME!\r
68      */\r
69     public void parse() throws IOException\r
70     {\r
71         StringBuffer sb = new StringBuffer();\r
72         int count = 0;\r
73 \r
74         String line;\r
75         Sequence seq = null;\r
76 \r
77         while ((line = nextLine()) != null)\r
78         {\r
79             if (line.length() > 0)\r
80             {\r
81                 if (line.charAt(0)=='>')\r
82                 {\r
83                     if (count != 0)\r
84                     {\r
85                        seq.setSequence(sb.toString());\r
86                        seqs.addElement(seq);\r
87                     }\r
88 \r
89                     seq = parseId(line.substring(1));\r
90 \r
91                     count++;\r
92                     sb = new StringBuffer();\r
93                 }\r
94                 else\r
95                 {\r
96                     sb.append(line);\r
97                 }\r
98             }\r
99         }\r
100 \r
101         if (count > 0)\r
102         {\r
103             if (!isValidProteinSequence(sb.toString().toUpperCase()))\r
104             {\r
105                 throw new IOException("Invalid protein sequence");\r
106             }\r
107 \r
108             seq.setSequence(sb.toString());\r
109             seqs.addElement(seq);\r
110         }\r
111     }\r
112 \r
113 \r
114     /**\r
115      * DOCUMENT ME!\r
116      *\r
117      * @param s DOCUMENT ME!\r
118      * @param len DOCUMENT ME!\r
119      * @param gaps DOCUMENT ME!\r
120      * @param displayId DOCUMENT ME!\r
121      *\r
122      * @return DOCUMENT ME!\r
123      */\r
124     public String print(SequenceI[] s)\r
125     {\r
126         int len = 72;\r
127         StringBuffer out = new StringBuffer();\r
128         int i = 0;\r
129 \r
130         while ((i < s.length) && (s[i] != null))\r
131         {\r
132             out.append(">" + printId(s[i]));\r
133             if(s[i].getDescription()!=null)\r
134               out.append(" "+s[i].getDescription());\r
135 \r
136             out.append("\n");\r
137 \r
138             int nochunks = (s[i].getLength() / len) + 1;\r
139 \r
140             for (int j = 0; j < nochunks; j++)\r
141             {\r
142                 int start = j * len;\r
143                 int end = start + len;\r
144 \r
145                 if (end < s[i].getLength())\r
146                 {\r
147                     out.append(s[i].getSequence(start, end) + "\n");\r
148                 }\r
149                 else if (start < s[i].getLength())\r
150                 {\r
151                     out.append(s[i].getSequence(start, s[i].getLength()) + "\n");\r
152                 }\r
153             }\r
154 \r
155             i++;\r
156         }\r
157 \r
158         return out.toString();\r
159     }\r
160 \r
161     /**\r
162      * DOCUMENT ME!\r
163      *\r
164      * @return DOCUMENT ME!\r
165      */\r
166     public String print()\r
167     {\r
168         return print(getSeqsAsArray());\r
169     }\r
170 }\r