\r
import java.io.*;\r
\r
+import java.util.*;\r
+\r
\r
/**\r
* DOCUMENT ME!\r
*/\r
public class FastaFile extends AlignFile\r
{\r
+ /**\r
+ * Length of a sequence line\r
+ */\r
+ int len = 72;\r
+\r
+ StringBuffer out;\r
+\r
/**\r
* Creates a new FastaFile object.\r
*/\r
public void parse() throws IOException\r
{\r
StringBuffer sb = new StringBuffer();\r
- int count = 0;\r
+ boolean firstLine = true;\r
\r
String line;\r
Sequence seq = null;\r
\r
+ boolean annotation = false;\r
+\r
while ((line = nextLine()) != null)\r
{\r
line = line.trim();\r
if (line.length() > 0)\r
{\r
- if (line.charAt(0)=='>')\r
+ if (line.charAt(0)=='>')\r
{\r
- if (count != 0)\r
+ if (line.startsWith(">#_"))\r
+ {\r
+ if (annotation)\r
{\r
- if (!isValidProteinSequence(sb.toString()))\r
+ Annotation[] anots = new Annotation[sb.length()];\r
+ String anotString = sb.toString();\r
+ for (int i = 0; i < sb.length(); i++)\r
+ {\r
+ anots[i] = new Annotation(anotString.substring(i, i+1),\r
+ null,\r
+ ' ', 0);\r
+ }\r
+ AlignmentAnnotation aa = new AlignmentAnnotation(\r
+ seq.getName().substring(2), seq.getDescription(),\r
+ anots);\r
+\r
+ annotations.addElement(aa);\r
+ }\r
+ }\r
+ else\r
+ annotation = false;\r
+\r
+ if (!firstLine)\r
+ {\r
+ if (!annotation && !isValidProteinSequence(sb.toString().toCharArray()))\r
{\r
throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS\r
+" : "+seq.getName()\r
}\r
\r
seq.setSequence(sb.toString());\r
- seqs.addElement(seq);\r
+\r
+ if (!annotation)\r
+ seqs.addElement(seq);\r
}\r
\r
seq = parseId(line.substring(1));\r
+ firstLine = false;\r
\r
- count++;\r
sb = new StringBuffer();\r
+\r
+ if (line.startsWith(">#_"))\r
+ annotation = true;\r
}\r
else\r
{\r
}\r
}\r
\r
- if (count > 0)\r
+ if (annotation)\r
+ {\r
+ Annotation[] anots = new Annotation[sb.length()];\r
+ String anotString = sb.toString();\r
+ for (int i = 0; i < sb.length(); i++)\r
+ {\r
+ anots[i] = new Annotation(anotString.substring(i, i + 1),\r
+ null,\r
+ ' ', 0);\r
+ }\r
+ AlignmentAnnotation aa = new AlignmentAnnotation(\r
+ seq.getName().substring(2), seq.getDescription(),\r
+ anots);\r
+\r
+ annotations.addElement(aa);\r
+ }\r
+\r
+ else if (!firstLine)\r
{\r
- if (!isValidProteinSequence(sb.toString()))\r
+\r
+ if (!isValidProteinSequence(sb.toString().toCharArray()))\r
{\r
throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS\r
+" : "+seq.getName()\r
}\r
}\r
\r
-\r
/**\r
* DOCUMENT ME!\r
*\r
*/\r
public String print(SequenceI[] s)\r
{\r
- int len = 72;\r
- StringBuffer out = new StringBuffer();\r
+ out = new StringBuffer();\r
int i = 0;\r
\r
while ((i < s.length) && (s[i] != null))\r
\r
if (end < s[i].getLength())\r
{\r
- out.append(s[i].getSequence(start, end) + "\n");\r
+ out.append(s[i].getSequenceAsString(start, end) + "\n");\r
}\r
else if (start < s[i].getLength())\r
{\r
- out.append(s[i].getSequence(start, s[i].getLength()) + "\n");\r
+ out.append(s[i].getSequenceAsString(start, s[i].getLength()) + "\n");\r
}\r
}\r
\r