JAL-1260 file formats and IdentifyFile updates for GenBank and ENA
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 18 Aug 2020 13:22:56 +0000 (14:22 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Fri, 17 Sep 2021 16:11:21 +0000 (17:11 +0100)
src/jalview/io/FileFormat.java
src/jalview/io/FlatFile.java
src/jalview/io/IdentifyFile.java
test/jalview/io/EmblFlatFileTest.java
test/jalview/io/GenBankFileTest.java
test/jalview/io/IdentifyFileTest.java

index 4f0480d..1d240b2 100644 (file)
  */
 package jalview.io;
 
+import java.io.IOException;
+
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefSource;
 import jalview.datamodel.PDBEntry;
 import jalview.ext.jmol.JmolParser;
 import jalview.structure.StructureImportSettings;
 
-import java.io.IOException;
-
 public enum FileFormat implements FileFormatI
 {
   Fasta("Fasta", "fa, fasta, mfa, fastq", true, true)
@@ -244,7 +244,22 @@ public enum FileFormat implements FileFormatI
       return new PhylipFile();
     }
   },
-  GenBank("GenBank/ENA Flatfile","gb",false,false)
+  GenBank("GenBank Flatfile", "gb", true, false)
+  {
+    @Override
+    public AlignmentFileReaderI getReader(FileParse source)
+            throws IOException
+    {
+      return new GenBankFile(source, "GenBank");
+    }
+
+    @Override
+    public AlignmentFileWriterI getWriter(AlignmentI al)
+    {
+      return null;
+    }
+  },
+  Embl("ENA Flatfile", "txt", true, false)
   {
     @Override
     public AlignmentFileReaderI getReader(FileParse source)
@@ -253,13 +268,13 @@ public enum FileFormat implements FileFormatI
       // Always assume we import from EMBL for now
       return new EmblFlatFile(source, DBRefSource.EMBL);
     }
+
     @Override
     public AlignmentFileWriterI getWriter(AlignmentI al)
     {
       return null;
     }
-  }
-  ,
+  },
   Jnet("JnetFile", "", false, false)
   {
     @Override
index 737f1d8..01ce085 100644 (file)
@@ -194,6 +194,8 @@ public abstract class FlatFile extends AlignFile
      * using TreeMap gives CDS sequences in alphabetical, so readable, order
      */
     cds = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+    
+    parse();
   }
 
   /**
index b312474..e7ee711 100755 (executable)
@@ -185,6 +185,19 @@ public class IdentifyFile
           reply = FileFormat.ScoreMatrix;
           break;
         }
+        if (data.startsWith("LOCUS"))
+        {
+          reply = FileFormat.GenBank;
+          break;
+        }
+        if (data.startsWith("ID "))
+        {
+          if (data.substring(2).trim().split(";").length == 7)
+          {
+            reply = FileFormat.Embl;
+            break;
+          }
+        }
         if (data.startsWith("H ") && !aaIndexHeaderRead)
         {
           aaIndexHeaderRead = true;
index c893c09..ee853f3 100644 (file)
@@ -47,7 +47,6 @@ public class EmblFlatFileTest
     File dataFile = new File("test/jalview/io/J03321.embl.txt");
     FileParse fp = new FileParse(dataFile, DataSourceType.FILE);
     EmblFlatFile parser = new EmblFlatFile(fp, "EmblTest");
-    parser.parse();
     List<SequenceI> seqs = parser.getSeqs();
 
     assertEquals(seqs.size(), 1);
@@ -263,7 +262,6 @@ public class EmblFlatFileTest
             + "     ggatGcgtaa gttagacgaa attttgtctt tgcgcacaga        40\n";
     FileParse fp = new FileParse(data, DataSourceType.PASTE);
     EmblFlatFile parser = new EmblFlatFile(fp, "EmblTest");
-    parser.parse();
     List<SequenceI> seqs = parser.getSeqs();
     assertEquals(seqs.size(), 1);
     SequenceI seq = seqs.get(0);
index d800b1d..25ad601 100644 (file)
@@ -44,7 +44,6 @@ public class GenBankFileTest
     FileParse fp = new FileParse(dataFile.getAbsolutePath(),
             DataSourceType.FILE);
     FlatFile parser = new GenBankFile(fp, "GenBankTest");
-    parser.parse();
     List<SequenceI> seqs = parser.getSeqs();
 
     assertEquals(seqs.size(), 1);
index cf7f58f..68c099e 100644 (file)
@@ -24,13 +24,13 @@ import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 
-import jalview.gui.JvOptionPane;
-
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import jalview.gui.JvOptionPane;
+
 public class IdentifyFileTest
 {
 
@@ -102,6 +102,8 @@ public class IdentifyFileTest
         { "examples/testdata/test.html", FileFormat.Html },
         { "examples/testdata/test.pileup", FileFormat.Pileup },
         { "examples/testdata/test.blc", FileFormat.BLC },
+        { "test/jalview/io/J03321.embl.txt", FileFormat.Embl },
+        { "test/jalview/io/J03321.gb", FileFormat.GenBank },
         { "examples/exampleFeatures.txt", FileFormat.Features },
         { "examples/testdata/simpleGff3.gff", FileFormat.Features },
         { "examples/testdata/test.jvp", FileFormat.Jalview },