/*
* Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
* Copyright (C) 2014 The Jalview Authors
*
* 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 .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
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,uline;
Sequence seq = null;
boolean annotation = false;
while ((uline = nextLine()) != null)
{
line = uline.trim();
if (line.length() > 0)
{
if (line.charAt(0) == '>')
{
if (line.startsWith(">#_"))
{
if (annotation)
{
annotations.addElement(makeAnnotation(seq, sb));
}
}
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(annotation ? uline : line);
}
}
}
if (annotation)
{
annotations.addElement(makeAnnotation(seq, sb));
}
else if (!firstLine)
{
seq.setSequence(sb.toString());
seqs.addElement(seq);
}
}
private AlignmentAnnotation makeAnnotation(SequenceI seq, StringBuffer sb)
{
Annotation[] anots = new Annotation[sb.length()];
char cb;
for (int i=0;i" + 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());
}
}