JAL-1760 JAL-1641 Serialisation of Hidden Seqs and Cols in JSON output. Added ability...
[jalview.git] / src / jalview / io / AppletFormatAdapter.java
index 41fac7f..e2cd43a 100755 (executable)
  */
 package jalview.io;
 
+import java.io.File;
+import java.io.InputStream;
+import java.util.List;
+
 import jalview.api.AlignViewportI;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
@@ -28,10 +32,6 @@ import jalview.datamodel.AlignmentView;
 import jalview.datamodel.SequenceGroup;
 import jalview.util.MessageManager;
 
-import java.io.File;
-import java.io.InputStream;
-import java.util.List;
-
 /**
  * A low level class for alignment and feature IO with alignment formatting
  * methods used by both applet and application for generating flat alignment
@@ -43,6 +43,40 @@ 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
    */
@@ -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,73 +232,75 @@ 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())
+        alignFile = new JSONFile(inFile, type);
+        al = new Alignment(alignFile.getSeqsAsArray());
+        alignFile.addAnnotations(al);
+        ((JSONFile) alignFile).setViewport(viewport);
+        for (SequenceGroup sg : alignFile.getSeqGroups())
         {
           al.addGroup(sg);
         }
+
         return al;
       }
       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())
+        alignFile = new HtmlFile(inFile, type);
+        al = new Alignment(alignFile.getSeqsAsArray());
+        alignFile.addAnnotations(al);
+        for (SequenceGroup sg : alignFile.getSeqGroups())
         {
           al.addGroup(sg);
         }
@@ -294,12 +308,12 @@ public class AppletFormatAdapter
       }
       else if (format.equals("RNAML"))
       {
-        afile = new RnamlFile(inFile, type);
+        alignFile = new RnamlFile(inFile, type);
       }
 
-      al = new Alignment(afile.getSeqsAsArray());
+      al = new Alignment(alignFile.getSeqsAsArray());
 
-      afile.addAnnotations(al);
+      alignFile.addAnnotations(al);
 
       return al;
     } catch (Exception e)
@@ -320,11 +334,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 +381,73 @@ 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(JSONFile.FILE_DESC))
       {
-        afile = new JSONFile(source);
-        al = new Alignment(afile.getSeqsAsArray());
-        afile.addAnnotations(al);
-        afile.addSeqGroups(al);
+        alignFile = new JSONFile(source);
+        // ((JSONFile) afile).setViewport(viewport);
+        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 +468,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 +583,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 +873,14 @@ public class AppletFormatAdapter
     }
     return null;
   }
+
+  public AlignFile getAlignFile()
+  {
+    return alignFile;
+  }
+
+  public void setAlignFile(AlignFile alignFile)
+  {
+    this.alignFile = alignFile;
+  }
 }