JAL-653 JAL-1780 refactor getGroups so HTMLfile/JSONfile adopt same pattern as other...
[jalview.git] / src / jalview / io / AppletFormatAdapter.java
index 41fac7f..7810771 100755 (executable)
@@ -25,7 +25,6 @@ import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentView;
-import jalview.datamodel.SequenceGroup;
 import jalview.util.MessageManager;
 
 import java.io.File;
@@ -43,12 +42,46 @@ import java.util.List;
  */
 public class AppletFormatAdapter
 {
+  private AlignViewportI viewport;
+
+  public static String FILE = "File";
+
+  public static String URL = "URL";
+
+  public static String PASTE = "Paste";
+
+  public static String CLASSLOADER = "ClassLoader";
+
+  /**
+   * add jalview-derived non-secondary structure annotation from PDB structure
+   */
+  boolean annotFromStructure = false;
+
+  /**
+   * add secondary structure from PDB data with built-in algorithms
+   */
+  boolean localSecondaryStruct = false;
+
+  /**
+   * process PDB data with web services
+   */
+  boolean serviceSecondaryStruct = false;
+
+  private AlignFile alignFile = null;
+
+  String inFile;
+
+  /**
+   * character used to write newlines
+   */
+  protected String newline = System.getProperty("line.separator");
+
   /**
    * List of valid format strings used in the isValidFormat method
    */
   public static final String[] READABLE_FORMATS = new String[]
   { "BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "STH",
-      "PDB", "JnetFile", "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC,
+      "PDB", "JnetFile", "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC, IdentifyFile.GFF3File,
       "HTML" };
 
   /**
@@ -58,6 +91,7 @@ public class AppletFormatAdapter
   public static final String[] READABLE_EXTENSIONS = new String[]
   { "fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa",
       "sto,stk", "xml,rnaml", PhylipFile.FILE_EXT, JSONFile.FILE_EXT,
+      ".gff2,gff3",
       "jar,jvp", HtmlFile.FILE_EXT };
 
   /**
@@ -66,7 +100,7 @@ public class AppletFormatAdapter
    */
   public static final String[] READABLE_FNAMES = new String[]
   { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Stockholm",
-      "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC, "Jalview",
+      "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC, IdentifyFile.GFF3File, "Jalview",
       HtmlFile.FILE_DESC };
 
   /**
@@ -99,6 +133,15 @@ public class AppletFormatAdapter
   public static String SUPPORTED_FORMATS = "Formats currently supported are\n"
           + prettyPrint(READABLE_FORMATS);
 
+  public AppletFormatAdapter()
+  {
+  }
+
+  public AppletFormatAdapter(AlignViewportI viewport)
+  {
+    this.viewport = viewport;
+  }
+
   /**
    *
    * @param els
@@ -116,37 +159,6 @@ public class AppletFormatAdapter
     return list.toString();
   }
 
-  public static String FILE = "File";
-
-  public static String URL = "URL";
-
-  public static String PASTE = "Paste";
-
-  public static String CLASSLOADER = "ClassLoader";
-
-  /**
-   * add jalview-derived non-secondary structure annotation from PDB structure
-   */
-  boolean annotFromStructure = false;
-
-  /**
-   * add secondary structure from PDB data with built-in algorithms
-   */
-  boolean localSecondaryStruct = false;
-
-  /**
-   * process PDB data with web services
-   */
-  boolean serviceSecondaryStruct = false;
-
-  AlignFile afile = null;
-
-  String inFile;
-
-  /**
-   * character used to write newlines
-   */
-  protected String newline = System.getProperty("line.separator");
 
   public void setNewlineString(String nl)
   {
@@ -220,86 +232,80 @@ public class AppletFormatAdapter
       Alignment al;
       if (format.equals("FASTA"))
       {
-        afile = new FastaFile(inFile, type);
+        alignFile = new FastaFile(inFile, type);
       }
       else if (format.equals("MSF"))
       {
-        afile = new MSFfile(inFile, type);
+        alignFile = new MSFfile(inFile, type);
       }
       else if (format.equals("PileUp"))
       {
-        afile = new PileUpfile(inFile, type);
+        alignFile = new PileUpfile(inFile, type);
       }
       else if (format.equals("CLUSTAL"))
       {
-        afile = new ClustalFile(inFile, type);
+        alignFile = new ClustalFile(inFile, type);
       }
       else if (format.equals("BLC"))
       {
-        afile = new BLCFile(inFile, type);
+        alignFile = new BLCFile(inFile, type);
       }
       else if (format.equals("PIR"))
       {
-        afile = new PIRFile(inFile, type);
+        alignFile = new PIRFile(inFile, type);
       }
       else if (format.equals("PFAM"))
       {
-        afile = new PfamFile(inFile, type);
+        alignFile = new PfamFile(inFile, type);
       }
       else if (format.equals("JnetFile"))
       {
-        afile = new JPredFile(inFile, type);
-        ((JPredFile) afile).removeNonSequences();
+        alignFile = new JPredFile(inFile, type);
+        ((JPredFile) alignFile).removeNonSequences();
       }
       else if (format.equals("PDB"))
       {
-        afile = new MCview.PDBfile(annotFromStructure,
+        alignFile = new MCview.PDBfile(annotFromStructure,
                 localSecondaryStruct, serviceSecondaryStruct, inFile, type);
         // Uncomment to test Jmol data based PDB processing: JAL-1213
         // afile = new jalview.ext.jmol.PDBFileWithJmol(inFile, type);
       }
       else if (format.equals("STH"))
       {
-        afile = new StockholmFile(inFile, type);
+        alignFile = new StockholmFile(inFile, type);
       }
       else if (format.equals("SimpleBLAST"))
       {
-        afile = new SimpleBlastFile(inFile, type);
+        alignFile = new SimpleBlastFile(inFile, type);
       }
       else if (format.equals(PhylipFile.FILE_DESC))
       {
-        afile = new PhylipFile(inFile, type);
+        alignFile = new PhylipFile(inFile, type);
       }
       else if (format.equals(JSONFile.FILE_DESC))
       {
-        afile = new JSONFile(inFile, type);
-        al = new Alignment(afile.getSeqsAsArray());
-        afile.addAnnotations(al);
-        for (SequenceGroup sg : afile.getSeqGroups())
-        {
-          al.addGroup(sg);
-        }
-        return al;
+        alignFile = new JSONFile(inFile, type);
       }
       else if (format.equals(HtmlFile.FILE_DESC))
       {
-        afile = new HtmlFile(inFile, type);
-        al = new Alignment(afile.getSeqsAsArray());
-        afile.addAnnotations(al);
-        for (SequenceGroup sg : afile.getSeqGroups())
-        {
-          al.addGroup(sg);
-        }
-        return al;
+        alignFile = new HtmlFile(inFile, type);
       }
       else if (format.equals("RNAML"))
       {
-        afile = new RnamlFile(inFile, type);
+        alignFile = new RnamlFile(inFile, type);
       }
+      else if (format.equals(IdentifyFile.GFF3File))
+      {
+        alignFile = new Gff3File(inFile, type);
+      }
+      // Standard boilerplate for creating alignment from parser
+      alignFile.setViewport(viewport);
+      
+      al = new Alignment(alignFile.getSeqsAsArray());
 
-      al = new Alignment(afile.getSeqsAsArray());
+      alignFile.addAnnotations(al);
 
-      afile.addAnnotations(al);
+      alignFile.addGroups(al);
 
       return al;
     } catch (Exception e)
@@ -320,11 +326,11 @@ public class AppletFormatAdapter
         try
         {
           // Possible sequence is just residues with no label
-          afile = new FastaFile(">UNKNOWN\n" + inFile, "Paste");
-          Alignment al = new Alignment(afile.getSeqsAsArray());
+          alignFile = new FastaFile(">UNKNOWN\n" + inFile, "Paste");
+          Alignment al = new Alignment(alignFile.getSeqsAsArray());
 
-          afile.addSeqGroups(al);
-          afile.addAnnotations(al);
+          alignFile.addSeqGroups(al);
+          alignFile.addAnnotations(al);
           return al;
 
         } catch (Exception ex)
@@ -367,72 +373,76 @@ public class AppletFormatAdapter
       Alignment al;
       if (format.equals("FASTA"))
       {
-        afile = new FastaFile(source);
+        alignFile = new FastaFile(source);
       }
       else if (format.equals("MSF"))
       {
-        afile = new MSFfile(source);
+        alignFile = new MSFfile(source);
       }
       else if (format.equals("PileUp"))
       {
-        afile = new PileUpfile(source);
+        alignFile = new PileUpfile(source);
       }
       else if (format.equals("CLUSTAL"))
       {
-        afile = new ClustalFile(source);
+        alignFile = new ClustalFile(source);
       }
       else if (format.equals("BLC"))
       {
-        afile = new BLCFile(source);
+        alignFile = new BLCFile(source);
       }
       else if (format.equals("PIR"))
       {
-        afile = new PIRFile(source);
+        alignFile = new PIRFile(source);
       }
       else if (format.equals("PFAM"))
       {
-        afile = new PfamFile(source);
+        alignFile = new PfamFile(source);
       }
       else if (format.equals("JnetFile"))
       {
-        afile = new JPredFile(source);
-        ((JPredFile) afile).removeNonSequences();
+        alignFile = new JPredFile(source);
+        ((JPredFile) alignFile).removeNonSequences();
       }
       else if (format.equals("PDB"))
       {
-        afile = new MCview.PDBfile(annotFromStructure,
+        alignFile = new MCview.PDBfile(annotFromStructure,
                 localSecondaryStruct, serviceSecondaryStruct, source);
       }
       else if (format.equals("STH"))
       {
-        afile = new StockholmFile(source);
+        alignFile = new StockholmFile(source);
       }
       else if (format.equals("RNAML"))
       {
-        afile = new RnamlFile(source);
+        alignFile = new RnamlFile(source);
       }
       else if (format.equals("SimpleBLAST"))
       {
-        afile = new SimpleBlastFile(source);
+        alignFile = new SimpleBlastFile(source);
       }
       else if (format.equals(PhylipFile.FILE_DESC))
       {
-        afile = new PhylipFile(source);
+        alignFile = new PhylipFile(source);
+      }
+      else if (format.equals(IdentifyFile.GFF3File))
+      {
+        alignFile = new Gff3File(inFile, type);
       }
       else if (format.equals(JSONFile.FILE_DESC))
       {
-        afile = new JSONFile(source);
-        al = new Alignment(afile.getSeqsAsArray());
-        afile.addAnnotations(al);
-        afile.addSeqGroups(al);
+        alignFile = new JSONFile(source);
+        al = new Alignment(alignFile.getSeqsAsArray());
+        alignFile.addAnnotations(al);
+        alignFile.addSeqGroups(al);
         return al;
       }
       else if (format.equals(HtmlFile.FILE_DESC))
       {
-        afile = new HtmlFile(source);
+        alignFile = new HtmlFile(source);
       }
-      al = new Alignment(afile.getSeqsAsArray());
-      afile.addAnnotations(al);
+      al = new Alignment(alignFile.getSeqsAsArray());
+      alignFile.addAnnotations(al);
 
       return al;
     } catch (Exception e)
@@ -453,10 +463,10 @@ public class AppletFormatAdapter
         try
         {
           // Possible sequence is just residues with no label
-          afile = new FastaFile(">UNKNOWN\n" + inFile, "Paste");
-          Alignment al = new Alignment(afile.getSeqsAsArray());
-          afile.addAnnotations(al);
-          afile.addSeqGroups(al);
+          alignFile = new FastaFile(">UNKNOWN\n" + inFile, "Paste");
+          Alignment al = new Alignment(alignFile.getSeqsAsArray());
+          alignFile.addAnnotations(al);
+          alignFile.addSeqGroups(al);
           return al;
 
         } catch (Exception ex)
@@ -568,6 +578,7 @@ public class AppletFormatAdapter
        else if (format.equalsIgnoreCase(JSONFile.FILE_DESC))
        {
         afile = new JSONFile();
+        afile.setViewport(viewport);
         // Add groups to AlignFile
         afile.seqGroups = alignment.getGroups();
 
@@ -857,4 +868,14 @@ public class AppletFormatAdapter
     }
     return null;
   }
+
+  public AlignFile getAlignFile()
+  {
+    return alignFile;
+  }
+
+  public void setAlignFile(AlignFile alignFile)
+  {
+    this.alignFile = alignFile;
+  }
 }