JAL-3725 restrict mapped virtual feature location to mapped region
[jalview.git] / src / jalview / io / FormatAdapter.java
index 1408cd1..4d8794f 100755 (executable)
@@ -26,13 +26,14 @@ import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
-import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.util.Comparison;
 
 import java.io.IOException;
+import java.util.Locale;
 
 /**
  * Additional formatting methods used by the application in a number of places.
@@ -116,8 +117,8 @@ public class FormatAdapter extends AppletFormatAdapter
           startIndex = startEnd[0];
           endIndex = startEnd[1];
           // get first non-gaped residue start position
-          while (Comparison.isGap(seqs[i]
-                  .getCharAt(startIndex)) && startIndex < endIndex)
+          while (Comparison.isGap(seqs[i].getCharAt(startIndex))
+                  && startIndex < endIndex)
           {
             startIndex++;
           }
@@ -155,103 +156,25 @@ public class FormatAdapter extends AppletFormatAdapter
    */
   public String formatSequences(FileFormatI format, SequenceI[] seqs)
   {
-    //
-    // try
-    // {
-      boolean withSuffix = getCacheSuffixDefault(format);
-    return format.getAlignmentFile().print(seqs, withSuffix);
-      // null;
-      //
-      // if (format.equalsIgnoreCase("FASTA"))
-      // {
-      // afile = new FastaFile();
-      // afile.addJVSuffix(jalview.bin.Cache.getDefault("FASTA_JVSUFFIX",
-      // true));
-      // }
-      // else if (format.equalsIgnoreCase("MSF"))
-      // {
-      // afile = new MSFfile();
-      // afile.addJVSuffix(jalview.bin.Cache
-      // .getDefault("MSF_JVSUFFIX", true));
-      // }
-      // else if (format.equalsIgnoreCase("PileUp"))
-      // {
-      // afile = new PileUpfile();
-      // afile.addJVSuffix(jalview.bin.Cache.getDefault("PILEUP_JVSUFFIX",
-      // true));
-      // }
-      // else if (format.equalsIgnoreCase("CLUSTAL"))
-      // {
-      // afile = new ClustalFile();
-      // afile.addJVSuffix(jalview.bin.Cache.getDefault("CLUSTAL_JVSUFFIX",
-      // true));
-      // }
-      // else if (format.equalsIgnoreCase("BLC"))
-      // {
-      // afile = new BLCFile();
-      // afile.addJVSuffix(jalview.bin.Cache
-      // .getDefault("BLC_JVSUFFIX", true));
-      // }
-      // else if (format.equalsIgnoreCase("PIR"))
-      // {
-      // afile = new PIRFile();
-      // afile.addJVSuffix(jalview.bin.Cache
-      // .getDefault("PIR_JVSUFFIX", true));
-      // }
-      // else if (format.equalsIgnoreCase("PFAM"))
-      // {
-      // afile = new PfamFile();
-      // afile.addJVSuffix(jalview.bin.Cache.getDefault("PFAM_JVSUFFIX",
-      // true));
-      // }
-      // /*
-      // * amsa is not supported by this function - it requires an alignment
-      // * rather than a sequence vector else if
-      // (format.equalsIgnoreCase("AMSA"))
-      // * { afile = new AMSAFile(); afile.addJVSuffix(
-      // * jalview.bin.Cache.getDefault("AMSA_JVSUFFIX", true)); }
-      // */
-
-//      afile.setSeqs(seqs);
-//      String afileresp = afile.print();
-//      if (afile.hasWarningMessage())
-//      {
-//        System.err.println("Warning raised when writing as " + format
-//                + " : " + afile.getWarningMessage());
-//      }
-//      return afileresp;
-//    } catch (Exception e)
-//    {
-//      System.err.println("Failed to write alignment as a '" + format
-//              + "' file\n");
-//      e.printStackTrace();
-//    }
-//
-//    return null;
+    boolean withSuffix = getCacheSuffixDefault(format);
+    return format.getWriter(null).print(seqs, withSuffix);
   }
 
   public boolean getCacheSuffixDefault(FileFormatI format)
   {
-    return Cache.getDefault(format.toString() + "_JVSUFFIX", true);
+    return Cache.getDefault(format.getName().toUpperCase(Locale.ROOT) + "_JVSUFFIX",
+            true);
   }
 
   public String formatSequences(FileFormatI format, AlignmentI alignment,
-          String[] omitHidden, int[] exportRange, ColumnSelection colSel)
+          String[] omitHidden, int[] exportRange, HiddenColumns hidden)
   {
     return formatSequences(format, alignment, omitHidden, exportRange,
-            getCacheSuffixDefault(format), colSel, null);
-  }
-
-  public String formatSequences(FileFormatI format, AlignmentI alignment,
-          String[] omitHidden, int[] exportRange, ColumnSelection colSel,
-          SequenceGroup sgp)
-  {
-    return formatSequences(format, alignment, omitHidden, exportRange,
-            getCacheSuffixDefault(format), colSel, sgp);
+            getCacheSuffixDefault(format), hidden, null);
   }
 
   /**
-   * hack function to replace seuqences with visible sequence strings before
+   * hack function to replace sequences with visible sequence strings before
    * generating a string of the alignment in the given format.
    * 
    * @param format
@@ -264,15 +187,15 @@ public class FormatAdapter extends AppletFormatAdapter
    */
   public String formatSequences(FileFormatI format, AlignmentI alignment,
           String[] omitHidden, int[] exportRange, boolean suffix,
-          ColumnSelection colSel)
+          HiddenColumns hidden)
   {
     return formatSequences(format, alignment, omitHidden, exportRange,
-            suffix, colSel, null);
+            suffix, hidden, null);
   }
 
   public String formatSequences(FileFormatI format, AlignmentI alignment,
           String[] omitHidden, int[] exportRange, boolean suffix,
-          ColumnSelection colSel, SequenceGroup selgp)
+          HiddenColumns hidden, SequenceGroup selgp)
   {
     if (omitHidden != null)
     {
@@ -290,12 +213,12 @@ public class FormatAdapter extends AppletFormatAdapter
           AlignmentAnnotation na = new AlignmentAnnotation(ala[i]);
           if (selgp != null)
           {
-            colSel.makeVisibleAnnotation(selgp.getStartRes(),
-                    selgp.getEndRes(), na);
+            na.makeVisibleAnnotation(selgp.getStartRes(), selgp.getEndRes(),
+                    hidden);
           }
           else
           {
-            colSel.makeVisibleAnnotation(na);
+            na.makeVisibleAnnotation(hidden);
           }
           alv.addAnnotation(na);
         }
@@ -337,4 +260,12 @@ public class FormatAdapter extends AppletFormatAdapter
             selectedOnly);
   }
 
+  public AlignmentI readFromFile(AlignmentFileReaderI source,
+          FileFormatI format) throws IOException
+  {
+    FileParse fp = new FileParse(source.getInFile(),
+            source.getDataSourceType());
+    return readFromFile(fp, format);
+  }
+
 }