Ye olde SequenceFeatureFetcher
[jalview.git] / src / jalview / io / MSFfile.java
index 8082ee3..bae4342 100755 (executable)
@@ -70,7 +70,7 @@ public class MSFfile extends AlignFile
     /**\r
      * DOCUMENT ME!\r
      */\r
-    public void parse()\r
+    public void parse() throws IOException\r
     {\r
         int i = 0;\r
         boolean seqFlag = false;\r
@@ -147,38 +147,25 @@ public class MSFfile extends AlignFile
                 String head = headers.elementAt(i).toString();\r
                 String seq = seqhash.get(head).toString();\r
 \r
-                int start = -1;\r
-                int end =  -1;\r
-\r
                 if (maxLength < head.length())\r
                 {\r
                     maxLength = head.length();\r
                 }\r
 \r
-                if (head.indexOf("/") > 0)\r
+                // Replace ~ with a sensible gap character\r
+                seq = seq.replace('~', '-');\r
+                if (!isValidProteinSequence(seq))\r
                 {\r
-                    StringTokenizer st = new StringTokenizer(head, "/");\r
-\r
-                    if (st.countTokens() == 2)\r
-                    {\r
-                        head = st.nextToken();\r
-\r
-                        String tmp = st.nextToken();\r
-                        st = new StringTokenizer(tmp, "-");\r
-\r
-                        if (st.countTokens() == 2)\r
-                        {\r
-                            start = Integer.valueOf(st.nextToken()).intValue();\r
-                            end = Integer.valueOf(st.nextToken()).intValue();\r
-                        }\r
-                    }\r
+                    throw new IOException(AppletFormatAdapter.\r
+                                          INVALID_CHARACTERS\r
+                                          + " : " + head\r
+                                          + " : " + invalidCharacter);\r
                 }\r
 \r
 \r
-                // Replace ~ with a sensible gap character\r
-                seq = seq.replace('~', '-');\r
+                Sequence newSeq = parseId(head);\r
 \r
-                Sequence newSeq = new Sequence(head, seq, start, end);\r
+                newSeq.setSequence(seq);\r
 \r
                 seqs.addElement(newSeq);\r
             }\r
@@ -197,7 +184,7 @@ public class MSFfile extends AlignFile
      *\r
      * @return DOCUMENT ME!\r
      */\r
-    public static int checkSum(String seq)\r
+    public int checkSum(String seq)\r
     {\r
         int check = 0;\r
         String sequence = seq.toUpperCase();\r
@@ -223,17 +210,6 @@ public class MSFfile extends AlignFile
         return check % 10000;\r
     }\r
 \r
-    /**\r
-     * DOCUMENT ME!\r
-     *\r
-     * @param s DOCUMENT ME!\r
-     *\r
-     * @return DOCUMENT ME!\r
-     */\r
-    public static String print(SequenceI[] s)\r
-    {\r
-        return print(s, false);\r
-    }\r
 \r
     /**\r
      * DOCUMENT ME!\r
@@ -243,9 +219,11 @@ public class MSFfile extends AlignFile
      *\r
      * @return DOCUMENT ME!\r
      */\r
-    public static String print(SequenceI[] seqs, boolean is_NA)\r
+    public String print(SequenceI[] seqs)\r
     {\r
 \r
+      boolean is_NA = jalview.util.Comparison.isNucleotide(seqs);\r
+\r
       SequenceI [] s = new SequenceI[seqs.length];\r
 \r
         StringBuffer out = new StringBuffer("!!" + (is_NA ? "NA" : "AA") +\r
@@ -265,7 +243,7 @@ public class MSFfile extends AlignFile
           {\r
             if (sb.charAt(ii) == '.')\r
             {\r
-              sb.replace(ii, ii + 1, "~");\r
+              sb.setCharAt(ii, '~');\r
             }\r
             else\r
               break;\r
@@ -275,7 +253,7 @@ public class MSFfile extends AlignFile
           {\r
             if (sb.charAt(ii) == '.')\r
             {\r
-              sb.replace(ii, ii + 1, "~");\r
+              sb.setCharAt(ii,'~');\r
             }\r
             else\r
               break;\r
@@ -316,7 +294,9 @@ public class MSFfile extends AlignFile
         i=0;\r
         while ((i < s.length) && (s[i] != null))\r
         {\r
-            nameBlock[i] = new String("  Name: " + s[i].getName() + " ");\r
+\r
+            nameBlock[i] = new String("  Name: " + printId(s[i])+" ");\r
+\r
             idBlock[i] = new String("Len: " +\r
                     maxLenpad.form(s[i].getSequence().length()) + "  Check: " +\r
                     maxChkpad.form(checksums[i]) + "  Weight: 1.00\n");\r
@@ -369,8 +349,10 @@ public class MSFfile extends AlignFile
 \r
             while ((j < s.length) && (s[j] != null))\r
             {\r
-                String name = s[j].getName();\r
-                out.append(new Format("%-" + maxid + "s").form(name)+ " ");\r
+                String name = printId( s[j] );\r
+\r
+                out.append(new Format("%-" + maxid + "s").form(name+" "));\r
+\r
 \r
                 for (int k = 0; k < 5; k++)\r
                 {\r