seq size cant be less than 2 for tree
[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 inFile DOCUMENT ME!\r
45      * @param type DOCUMENT ME!\r
46      *\r
47      * @throws IOException DOCUMENT ME!\r
48      */\r
49     public FastaFile(String inFile, String type) throws IOException\r
50     {\r
51         super(inFile, type);\r
52     }\r
53 \r
54     /**\r
55      * DOCUMENT ME!\r
56      *\r
57      * @throws IOException DOCUMENT ME!\r
58      */\r
59     public void parse() throws IOException\r
60     {\r
61         StringBuffer sb = new StringBuffer();\r
62         int count = 0;\r
63 \r
64         String line;\r
65         Sequence seq = null;\r
66 \r
67         while ((line = nextLine()) != null)\r
68         {\r
69             line = line.trim();\r
70             if (line.length() > 0)\r
71             {\r
72                 if (line.charAt(0)=='>')\r
73                 {\r
74                     if (count != 0)\r
75                     {\r
76                       if (!isValidProteinSequence(sb.toString()))\r
77                       {\r
78                         throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS\r
79                                               +" : "+seq.getName()\r
80                                               +" : "+invalidCharacter);\r
81                       }\r
82 \r
83                        seq.setSequence(sb.toString());\r
84                        seqs.addElement(seq);\r
85                     }\r
86 \r
87                     seq = parseId(line.substring(1));\r
88 \r
89                     count++;\r
90                     sb = new StringBuffer();\r
91                 }\r
92                 else\r
93                 {\r
94                     sb.append(line);\r
95                 }\r
96             }\r
97         }\r
98 \r
99         if (count > 0)\r
100         {\r
101             if (!isValidProteinSequence(sb.toString()))\r
102             {\r
103                 throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS\r
104                                       +" : "+seq.getName()\r
105                                       +" : "+invalidCharacter);\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