apply version 2.7 copyright
[jalview.git] / src / jalview / io / FastaFile.java
index 8de469d..1f51f44 100755 (executable)
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
- */\r
-package jalview.io;\r
-\r
-import java.io.*;\r
-\r
-import jalview.datamodel.*;\r
-\r
-/**\r
- * DOCUMENT ME!\r
- *\r
- * @author $author$\r
- * @version $Revision$\r
- */\r
-public class FastaFile\r
-    extends AlignFile\r
-{\r
-  /**\r
-   * Length of a sequence line\r
-   */\r
-  int len = 72;\r
-\r
-  StringBuffer out;\r
-\r
-  /**\r
-   * Creates a new FastaFile object.\r
-   */\r
-  public FastaFile()\r
-  {\r
-  }\r
-\r
-  /**\r
-   * Creates a new FastaFile object.\r
-   *\r
-   * @param inFile DOCUMENT ME!\r
-   * @param type DOCUMENT ME!\r
-   *\r
-   * @throws IOException DOCUMENT ME!\r
-   */\r
-  public FastaFile(String inFile, String type)\r
-      throws IOException\r
-  {\r
-    super(inFile, type);\r
-  }\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   *\r
-   * @throws IOException DOCUMENT ME!\r
-   */\r
-  public void parse()\r
-      throws IOException\r
-  {\r
-    StringBuffer sb = new StringBuffer();\r
-    boolean firstLine = true;\r
-\r
-    String line;\r
-    Sequence seq = null;\r
-\r
-    boolean annotation = false;\r
-\r
-    while ( (line = nextLine()) != null)\r
-    {\r
-      line = line.trim();\r
-      if (line.length() > 0)\r
-      {\r
-        if (line.charAt(0) == '>')\r
-        {\r
-          if (line.startsWith(">#_"))\r
-          {\r
-            if (annotation)\r
-            {\r
-              Annotation[] anots = new Annotation[sb.length()];\r
-              String anotString = sb.toString();\r
-              for (int i = 0; i < sb.length(); i++)\r
-              {\r
-                anots[i] = new Annotation(anotString.substring(i, i + 1),\r
-                                          null,\r
-                                          ' ', 0);\r
-              }\r
-              AlignmentAnnotation aa = new AlignmentAnnotation(\r
-                  seq.getName().substring(2), seq.getDescription(),\r
-                  anots);\r
-\r
-              annotations.addElement(aa);\r
-            }\r
-          }\r
-          else\r
-          {\r
-            annotation = false;\r
-          }\r
-\r
-          if (!firstLine)\r
-          {\r
-            seq.setSequence(sb.toString());\r
-\r
-            if (!annotation)\r
-            {\r
-              seqs.addElement(seq);\r
-            }\r
-          }\r
-\r
-          seq = parseId(line.substring(1));\r
-          firstLine = false;\r
-\r
-          sb = new StringBuffer();\r
-\r
-          if (line.startsWith(">#_"))\r
-          {\r
-            annotation = true;\r
-          }\r
-        }\r
-        else\r
-        {\r
-          sb.append(line);\r
-        }\r
-      }\r
-    }\r
-\r
-    if (annotation)\r
-    {\r
-      Annotation[] anots = new Annotation[sb.length()];\r
-      String anotString = sb.toString();\r
-      for (int i = 0; i < sb.length(); i++)\r
-      {\r
-        anots[i] = new Annotation(anotString.substring(i, i + 1),\r
-                                  null,\r
-                                  ' ', 0);\r
-      }\r
-      AlignmentAnnotation aa = new AlignmentAnnotation(\r
-          seq.getName().substring(2), seq.getDescription(),\r
-          anots);\r
-\r
-      annotations.addElement(aa);\r
-    }\r
-\r
-    else if (!firstLine)\r
-    {\r
-      seq.setSequence(sb.toString());\r
-      seqs.addElement(seq);\r
-    }\r
-  }\r
-\r
-  /**\r
-   * called by AppletFormatAdapter to generate\r
-   * an annotated alignment, rather than bare\r
-   * sequences.\r
-   * @param al\r
-   */\r
-  public void addAnnotations(Alignment al)\r
-  {\r
-    addProperties(al);\r
-    for (int i = 0; i < annotations.size(); i++)\r
-    {\r
-      AlignmentAnnotation aa = (AlignmentAnnotation) annotations.elementAt(i);\r
-      aa.setPadGaps(true, al.getGapCharacter());\r
-      al.addAnnotation( aa );\r
-    }\r
-  }\r
-\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   *\r
-   * @param s DOCUMENT ME!\r
-   * @param len DOCUMENT ME!\r
-   * @param gaps DOCUMENT ME!\r
-   * @param displayId DOCUMENT ME!\r
-   *\r
-   * @return DOCUMENT ME!\r
-   */\r
-  public String print(SequenceI[] s)\r
-  {\r
-    out = new StringBuffer();\r
-    int i = 0;\r
-\r
-    while ( (i < s.length) && (s[i] != null))\r
-    {\r
-      out.append(">" + printId(s[i]));\r
-      if (s[i].getDescription() != null)\r
-      {\r
-        out.append(" " + s[i].getDescription());\r
-      }\r
-\r
-      out.append("\n");\r
-\r
-      int nochunks = (s[i].getLength() / len) + 1;\r
-\r
-      for (int j = 0; j < nochunks; j++)\r
-      {\r
-        int start = j * len;\r
-        int end = start + len;\r
-\r
-        if (end < s[i].getLength())\r
-        {\r
-          out.append(s[i].getSequenceAsString(start, end) + "\n");\r
-        }\r
-        else if (start < s[i].getLength())\r
-        {\r
-          out.append(s[i].getSequenceAsString(start, s[i].getLength()) + "\n");\r
-        }\r
-      }\r
-\r
-      i++;\r
-    }\r
-\r
-    return out.toString();\r
-  }\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   *\r
-   * @return DOCUMENT ME!\r
-   */\r
-  public String print()\r
-  {\r
-    return print(getSeqsAsArray());\r
-  }\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * 
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package jalview.io;
+
+import java.io.*;
+
+import jalview.datamodel.*;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class FastaFile extends AlignFile
+{
+  /**
+   * Length of a sequence line
+   */
+  int len = 72;
+
+  StringBuffer out;
+
+  /**
+   * Creates a new FastaFile object.
+   */
+  public FastaFile()
+  {
+  }
+
+  /**
+   * Creates a new FastaFile object.
+   * 
+   * @param inFile
+   *          DOCUMENT ME!
+   * @param type
+   *          DOCUMENT ME!
+   * 
+   * @throws IOException
+   *           DOCUMENT ME!
+   */
+  public FastaFile(String inFile, String type) throws IOException
+  {
+    super(inFile, type);
+  }
+
+  public FastaFile(FileParse source) throws IOException
+  {
+    super(source);
+  }
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @throws IOException
+   *           DOCUMENT ME!
+   */
+  public void parse() throws IOException
+  {
+    StringBuffer sb = new StringBuffer();
+    boolean firstLine = true;
+
+    String line;
+    Sequence seq = null;
+
+    boolean annotation = false;
+
+    while ((line = nextLine()) != null)
+    {
+      line = line.trim();
+      if (line.length() > 0)
+      {
+        if (line.charAt(0) == '>')
+        {
+          if (line.startsWith(">#_"))
+          {
+            if (annotation)
+            {
+              Annotation[] anots = new Annotation[sb.length()];
+              String anotString = sb.toString();
+              for (int i = 0; i < sb.length(); i++)
+              {
+                anots[i] = new Annotation(anotString.substring(i, i + 1),
+                        null, ' ', 0);
+              }
+              AlignmentAnnotation aa = new AlignmentAnnotation(seq
+                      .getName().substring(2), seq.getDescription(), anots);
+
+              annotations.addElement(aa);
+            }
+          }
+          else
+          {
+            annotation = false;
+          }
+
+          if (!firstLine)
+          {
+            seq.setSequence(sb.toString());
+
+            if (!annotation)
+            {
+              seqs.addElement(seq);
+            }
+          }
+
+          seq = parseId(line.substring(1));
+          firstLine = false;
+
+          sb = new StringBuffer();
+
+          if (line.startsWith(">#_"))
+          {
+            annotation = true;
+          }
+        }
+        else
+        {
+          sb.append(line);
+        }
+      }
+    }
+
+    if (annotation)
+    {
+      Annotation[] anots = new Annotation[sb.length()];
+      String anotString = sb.toString();
+      for (int i = 0; i < sb.length(); i++)
+      {
+        anots[i] = new Annotation(anotString.substring(i, i + 1), null,
+                ' ', 0);
+      }
+      AlignmentAnnotation aa = new AlignmentAnnotation(seq.getName()
+              .substring(2), seq.getDescription(), anots);
+
+      annotations.addElement(aa);
+    }
+
+    else if (!firstLine)
+    {
+      seq.setSequence(sb.toString());
+      seqs.addElement(seq);
+    }
+  }
+
+  /**
+   * called by AppletFormatAdapter to generate an annotated alignment, rather
+   * than bare sequences.
+   * 
+   * @param al
+   */
+  public void addAnnotations(Alignment al)
+  {
+    addProperties(al);
+    for (int i = 0; i < annotations.size(); i++)
+    {
+      AlignmentAnnotation aa = (AlignmentAnnotation) annotations
+              .elementAt(i);
+      aa.setPadGaps(true, al.getGapCharacter());
+      al.addAnnotation(aa);
+    }
+  }
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param s
+   *          DOCUMENT ME!
+   * @param len
+   *          DOCUMENT ME!
+   * @param gaps
+   *          DOCUMENT ME!
+   * @param displayId
+   *          DOCUMENT ME!
+   * 
+   * @return DOCUMENT ME!
+   */
+  public String print(SequenceI[] s)
+  {
+    out = new StringBuffer();
+    int i = 0;
+
+    while ((i < s.length) && (s[i] != null))
+    {
+      out.append(">" + printId(s[i]));
+      if (s[i].getDescription() != null)
+      {
+        out.append(" " + s[i].getDescription());
+      }
+
+      out.append(newline);
+
+      int nochunks = (s[i].getLength() / len) + 1;
+
+      for (int j = 0; j < nochunks; j++)
+      {
+        int start = j * len;
+        int end = start + len;
+
+        if (end < s[i].getLength())
+        {
+          out.append(s[i].getSequenceAsString(start, end) + newline);
+        }
+        else if (start < s[i].getLength())
+        {
+          out.append(s[i].getSequenceAsString(start, s[i].getLength())
+                  + newline);
+        }
+      }
+
+      i++;
+    }
+
+    return out.toString();
+  }
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @return DOCUMENT ME!
+   */
+  public String print()
+  {
+    return print(getSeqsAsArray());
+  }
+}