Report invalid chars
[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                       if (!isValidProteinSequence(sb.toString()))\r
86                       {\r
87                         throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS\r
88                                               +" : "+seq.getName()\r
89                                               +" : "+invalidCharacter);\r
90                       }\r
91 \r
92                        seq.setSequence(sb.toString());\r
93                        seqs.addElement(seq);\r
94                     }\r
95 \r
96                     seq = parseId(line.substring(1));\r
97 \r
98                     count++;\r
99                     sb = new StringBuffer();\r
100                 }\r
101                 else\r
102                 {\r
103                     sb.append(line);\r
104                 }\r
105             }\r
106         }\r
107 \r
108         if (count > 0)\r
109         {\r
110             if (!isValidProteinSequence(sb.toString()))\r
111             {\r
112                 throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS\r
113                                       +" : "+seq.getName()\r
114                                       +" : "+invalidCharacter);\r
115             }\r
116 \r
117             seq.setSequence(sb.toString());\r
118             seqs.addElement(seq);\r
119         }\r
120     }\r
121 \r
122 \r
123     /**\r
124      * DOCUMENT ME!\r
125      *\r
126      * @param s DOCUMENT ME!\r
127      * @param len DOCUMENT ME!\r
128      * @param gaps DOCUMENT ME!\r
129      * @param displayId DOCUMENT ME!\r
130      *\r
131      * @return DOCUMENT ME!\r
132      */\r
133     public String print(SequenceI[] s)\r
134     {\r
135         int len = 72;\r
136         StringBuffer out = new StringBuffer();\r
137         int i = 0;\r
138 \r
139         while ((i < s.length) && (s[i] != null))\r
140         {\r
141             out.append(">" + printId(s[i]));\r
142             if(s[i].getDescription()!=null)\r
143               out.append(" "+s[i].getDescription());\r
144 \r
145             out.append("\n");\r
146 \r
147             int nochunks = (s[i].getLength() / len) + 1;\r
148 \r
149             for (int j = 0; j < nochunks; j++)\r
150             {\r
151                 int start = j * len;\r
152                 int end = start + len;\r
153 \r
154                 if (end < s[i].getLength())\r
155                 {\r
156                     out.append(s[i].getSequence(start, end) + "\n");\r
157                 }\r
158                 else if (start < s[i].getLength())\r
159                 {\r
160                     out.append(s[i].getSequence(start, s[i].getLength()) + "\n");\r
161                 }\r
162             }\r
163 \r
164             i++;\r
165         }\r
166 \r
167         return out.toString();\r
168     }\r
169 \r
170     /**\r
171      * DOCUMENT ME!\r
172      *\r
173      * @return DOCUMENT ME!\r
174      */\r
175     public String print()\r
176     {\r
177         return print(getSeqsAsArray());\r
178     }\r
179 }\r