Merge branch 'develop' into features/JAL-2094_colourInterface
[jalview.git] / src / jalview / io / AlignFile.java
index e4891f0..5760fbe 100755 (executable)
@@ -20,7 +20,6 @@
  */
 package jalview.io;
 
-import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
@@ -48,7 +47,8 @@ public abstract class AlignFile extends FileParse
   int maxLength = 0;
 
   /**
-   * Sequences to be added to form a new alignment.
+   * Sequences to be added to form a new alignment. TODO: remove vector in this
+   * class
    */
   protected Vector<SequenceI> seqs;
 
@@ -89,35 +89,39 @@ public abstract class AlignFile extends FileParse
   /**
    * Constructor which parses the data from a file of some specified type.
    * 
-   * @param inFile
-   *          Filename to read from.
+   * @param dataObject
+   *          Filename, URL or Pasted String to read from.
    * @param type
-   *          What type of file to read from (File, URL)
+   *          What type of file to read from (File, URL, Pasted String)
    */
-  public AlignFile(String inFile, String type) throws IOException
+  public AlignFile(String dataObject, String type) throws IOException
   {
-    this(true, inFile, type);
+    this(true, dataObject, type);
   }
-  
+
   /**
-   * Constructor which (optionally delays) parsing of data from a file of some specified type.
+   * Constructor which (optionally delays) parsing of data from a file of some
+   * specified type.
    * 
    * @param parseImmediately
    *          if false, need to call 'doParse()' to begin parsing data
-   * @param inFile
-   *          Filename to read from.
+   * @param dataObject
+   *          Filename, URL or Pasted String to read from.
    * @param type
    *          What type of file to read from (File, URL)
    * @throws IOException
    */
-  public AlignFile(boolean parseImmediately, String inFile, String type) throws IOException
+  public AlignFile(boolean parseImmediately, String dataObject, String type)
+          throws IOException
   {
-    super(inFile, type);
+    super(dataObject, type);
     initData();
-    if (parseImmediately) {
+    if (parseImmediately)
+    {
       doParse();
     }
   }
+
   /**
    * Attempt to read from the position where some other parsing process left
    * off.
@@ -127,25 +131,31 @@ public abstract class AlignFile extends FileParse
    */
   public AlignFile(FileParse source) throws IOException
   {
-    this(true,source);
+    this(true, source);
   }
+
   /**
-   * Construct a new parser to read from the position where some other parsing process left
+   * Construct a new parser to read from the position where some other parsing
+   * process left
    * 
    * @param parseImmediately
    *          if false, need to call 'doParse()' to begin parsing data
    * @param source
    */
-  public AlignFile(boolean parseImmediately, FileParse source) throws IOException
+  public AlignFile(boolean parseImmediately, FileParse source)
+          throws IOException
   {
     super(source);
     initData();
-    if (parseImmediately) {
+    if (parseImmediately)
+    {
       doParse();
     }
   }
+
   /**
    * called if parsing was delayed till after parser was constructed
+   * 
    * @throws IOException
    */
   public void doParse() throws IOException
@@ -156,7 +166,7 @@ public abstract class AlignFile extends FileParse
               "Implementation error: Parser called twice for same data.\n"
                       + "Need to call initData() again before parsing can be reattempted.");
     }
-    parseCalled=true;
+    parseCalled = true;
     parse();
     // sets the index of each sequence in the alignment
     for (int i = 0, c = seqs.size(); i < c; i++)
@@ -165,7 +175,6 @@ public abstract class AlignFile extends FileParse
     }
   }
 
-
   /**
    * Return the seqs Vector
    */
@@ -200,7 +209,7 @@ public abstract class AlignFile extends FileParse
    * 
    * @param al
    */
-  public void addAnnotations(Alignment al)
+  public void addAnnotations(AlignmentI al)
   {
     addProperties(al);
     for (int i = 0; i < annotations.size(); i++)
@@ -212,14 +221,18 @@ public abstract class AlignFile extends FileParse
        * Rna.GetBasePairsFromAlignmentAnnotation(annotations.elementAt(i));
        * Rna.HelixMap(pairArray);
        */
-      AlignmentAnnotation an = annotations
-              .elementAt(i);
+      AlignmentAnnotation an = annotations.elementAt(i);
       an.validateRangeAndDisplay();
       al.addAnnotation(an);
     }
 
   }
 
+  /**
+   * register sequence groups on the alignment for **output**
+   * 
+   * @param al
+   */
   public void addSeqGroups(AlignmentI al)
   {
     this.seqGroups = al.getGroups();
@@ -233,7 +246,7 @@ public abstract class AlignFile extends FileParse
    * @note implicitly called by addAnnotations()
    * @param al
    */
-  public void addProperties(Alignment al)
+  public void addProperties(AlignmentI al)
   {
     if (properties != null && properties.size() > 0)
     {
@@ -260,7 +273,9 @@ public abstract class AlignFile extends FileParse
   {
     if (key == null)
     {
-      throw new Error(MessageManager.getString("error.implementation_error_cannot_have_null_alignment"));
+      throw new Error(
+              MessageManager
+                      .getString("error.implementation_error_cannot_have_null_alignment"));
     }
     if (value == null)
     {
@@ -290,7 +305,7 @@ public abstract class AlignFile extends FileParse
     seqs = new Vector<SequenceI>();
     annotations = new Vector<AlignmentAnnotation>();
     seqGroups = new ArrayList<SequenceGroup>();
-    parseCalled=false;
+    parseCalled = false;
   }
 
   /**
@@ -337,7 +352,15 @@ public abstract class AlignFile extends FileParse
     if (space > -1)
     {
       seq = new Sequence(id.substring(0, space), "");
-      seq.setDescription(id.substring(space + 1));
+      String desc = id.substring(space + 1);
+      seq.setDescription(desc);
+
+      /*
+       * it is tempting to parse Ensembl style gene description e.g.
+       * chromosome:GRCh38:7:140696688:140721955:1 and set the
+       * start position of the sequence, but this causes much confusion
+       * for reverse strand feature locations
+       */
     }
     else
     {
@@ -369,8 +392,7 @@ public abstract class AlignFile extends FileParse
     {
       newickStrings = new Vector<String[]>();
     }
-    newickStrings.addElement(new String[]
-    { treeName, newickString });
+    newickStrings.addElement(new String[] { treeName, newickString });
   }
 
   protected int getTreeCount()