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