JAL-3365 expand range of allowed DSSP secondary structure symbols in Stockholm files
[jalview.git] / src / jalview / io / AlignFile.java
index 7b1e84a..3202ac9 100755 (executable)
  */
 package jalview.io;
 
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
-import jalview.util.MessageManager;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Enumeration;
@@ -34,6 +27,13 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.Vector;
 
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.util.MessageManager;
+
 /**
  * DOCUMENT ME!
  * 
@@ -75,9 +75,11 @@ public abstract class AlignFile extends FileParse
   /**
    * true if parse() has been called
    */
-  private boolean parseCalled;
+  private boolean parseCalled = false;
+
+  private boolean parseImmediately = true;
 
-  private boolean parseImmediately;
+  private boolean dataClosed = false;
 
   /**
    * @return if doParse() was called at construction time
@@ -112,7 +114,7 @@ public abstract class AlignFile extends FileParse
    * @param sourceType
    *          What type of file to read from (File, URL, Pasted String)
    */
-  public AlignFile(String dataObject, DataSourceType sourceType)
+  public AlignFile(Object dataObject, DataSourceType sourceType)
           throws IOException
   {
     this(true, dataObject, sourceType);
@@ -130,9 +132,10 @@ public abstract class AlignFile extends FileParse
    *          What type of file to read from (File, URL)
    * @throws IOException
    */
-  public AlignFile(boolean parseImmediately, String dataObject,
+  public AlignFile(boolean parseImmediately, Object dataObject,
           DataSourceType sourceType) throws IOException
   {
+    // BH allows File or String
     super(dataObject, sourceType);
     initData();
     if (parseImmediately)
@@ -164,6 +167,12 @@ public abstract class AlignFile extends FileParse
   public AlignFile(boolean parseImmediately, FileParse source)
           throws IOException
   {
+    this(parseImmediately, source, true);
+  }
+
+  public AlignFile(boolean parseImmediately, FileParse source,
+          boolean closeData) throws IOException
+  {
     super(source);
     initData();
 
@@ -173,7 +182,7 @@ public abstract class AlignFile extends FileParse
 
     if (parseImmediately)
     {
-      doParse();
+      doParse(closeData);
     }
   }
 
@@ -184,6 +193,11 @@ public abstract class AlignFile extends FileParse
    */
   public void doParse() throws IOException
   {
+    doParse(true);
+  }
+
+  public void doParse(boolean closeData) throws IOException
+  {
     if (parseCalled)
     {
       throw new IOException(
@@ -192,6 +206,11 @@ public abstract class AlignFile extends FileParse
     }
     parseCalled = true;
     parse();
+    if (closeData && !dataClosed)
+    {
+      dataIn.close();
+      dataClosed = true;
+    }
   }
 
   /**