patch primary issue causing JAL-664 re testing for properly formed PIR file entry
authorjprocter <Jim Procter>
Fri, 29 Oct 2010 13:59:38 +0000 (13:59 +0000)
committerjprocter <Jim Procter>
Fri, 29 Oct 2010 13:59:38 +0000 (13:59 +0000)
src/jalview/io/IdentifyFile.java

index dc341b9..8a9a121 100755 (executable)
@@ -163,7 +163,7 @@ public class IdentifyFile
         else if (data.indexOf(">") > -1)
         {
           // FASTA, PIR file or BLC file
-          boolean checkPIR = false;
+          boolean checkPIR = false,starterm=false;
           if ((data.indexOf(">P1;") > -1) || (data.indexOf(">DL;") > -1))
           {
             // watch for PIR file attributes
@@ -180,8 +180,12 @@ public class IdentifyFile
           else
           {
             // Is this a single line BLC file?
-            source.nextLine();
+            String data1 = source.nextLine();
             String data2 = source.nextLine();
+            if (checkPIR)
+            {
+              starterm = (data1!=null && data1.indexOf("*")>-1) || (data2!=null && data2.indexOf("*")>-1);
+            }
             if (data2 != null && data.indexOf("*") > -1)
             {
               if (data.indexOf("*") == data2.indexOf("*"))
@@ -196,13 +200,40 @@ public class IdentifyFile
               // TODO : AMSA File is indicated if there is annotation in the
               // FASTA file - but FASTA will automatically generate this at the
               // mo.
-              break;
+              if (!checkPIR) {
+                break;
+              }
             }
           }
-          // TODO final check for PIR content. require
+          // final check for PIR content. require
           // >P1;title\n<blah>\nterminated sequence to occur at least once.
-          // the PIR/fasta ambiguity may be the use case that is needed to have
+
+          // TODO the PIR/fasta ambiguity may be the use case that is needed to have
           // a 'Parse as type XXX' parameter for the applet/application.
+          if (checkPIR)
+          {
+            String dta=null;
+            if (!starterm)
+            {
+              do {
+                try {
+                  dta = source.nextLine();
+                } catch(IOException ex) {};
+                if (dta!=null && dta.indexOf("*")>-1)
+                {
+                  starterm = true;
+                }
+              } while (dta!=null && !starterm);
+            }
+            if (starterm)
+            {
+              reply="PIR";
+              break;
+            } else {
+              reply="FASTA"; // probably a bad choice!
+            }
+          }
+          // read as a FASTA (probably)
           break;
         }
         else if (data.indexOf("HEADER") == 0 || data.indexOf("ATOM") == 0)