/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.bio.program.gff; import java.io.PrintWriter; import java.util.Map; import org.biojava.bio.BioException; import org.biojava.bio.seq.StrandedFeature; /** * Listens to a stream of GFF events and writes the lines to a * PrintWriter. *
* This will ignore all exceptions. Perhaps the error-handling needs to move into
* an error handling interface?
*
* @author Matthew Pocock
* @author Keith James (docs)
*/
public class GFFWriter implements GFFDocumentHandler {
/**
* The destination of the lines.
*/
private PrintWriter out;
/**
* Create a new GFFWriter that will write to
* out.
*
* @param out the PrintWriter to write to
*/
public GFFWriter(PrintWriter out) {
this.out = out;
}
public void startDocument(String locator) {}
/**
* Flushes the PrintWriter to make sure that everything is written.
*/
public void endDocument() {
out.flush();
}
/**
* Prints the comment directly to the PrintWriter
* after adding a leading '#
'.
*/
public void commentLine(String comment) {
out.println("#" + comment);
}
/**
* Prints record to the PrintWriter.
*/
public void recordLine(GFFRecord record) {
out.print(
record.getSeqName() + "\t" +
record.getSource() + "\t" +
record.getFeature() + "\t" +
record.getStart() + "\t" +
record.getEnd() + "\t"
);
double score = record.getScore();
if(score == GFFTools.NO_SCORE) {
out.print(".\t");
} else {
out.print(score + "\t");
}
StrandedFeature.Strand strand = record.getStrand();
if(strand == StrandedFeature.POSITIVE) {
out.print("+\t");
} else if(strand == StrandedFeature.NEGATIVE) {
out.print("-\t");
} else {
out.print(".\t");
}
int frame = record.getFrame();
if(frame == GFFTools.NO_FRAME) {
out.print(".");
} else {
out.print(frame + "");
}
Map gaMap = record.getGroupAttributes();
String ga = SimpleGFFRecord.stringifyAttributes(gaMap);
if(ga != null && ga.length() > 0) {
out.print("\t" + ga);
}
String comment = record.getComment();
if(comment != null && comment.length() > 0) {
if(ga != null && ga.length() > 0) {
out.print(" ");
}
out.print(comment);
}
out.println("");
}
public void invalidStart(String token, NumberFormatException nfe)
throws BioException {}
public void invalidEnd(String token, NumberFormatException nfe)
throws BioException {}
public void invalidScore(String token, NumberFormatException nfe)
throws BioException {}
public void invalidStrand(String token)
throws BioException {}
public void invalidFrame(String token, NumberFormatException nfe)
throws BioException {}
}