X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FGff3File.java;fp=src%2Fjalview%2Fio%2FGff3File.java;h=53179e07aa36fac7e15ab127481bd204c421b247;hb=da8b21b7e461c8f9b4c64f00de0344b4bd0ebacf;hp=0000000000000000000000000000000000000000;hpb=9d50ff04f4bc9b6c8a73d9e0058b604a042f36ee;p=jalview.git diff --git a/src/jalview/io/Gff3File.java b/src/jalview/io/Gff3File.java new file mode 100644 index 0000000..53179e0 --- /dev/null +++ b/src/jalview/io/Gff3File.java @@ -0,0 +1,154 @@ +package jalview.io; + +import jalview.api.AlignViewportI; +import jalview.datamodel.AlignedCodonFrame; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.SequenceI; + +import java.io.IOException; +import java.util.List; + +/** + * A GFF3 File parsing wrapper for the tangled mess that is FeaturesFile. + * + * This class implements the methods relied on by FileLoader/FormatAdapter in + * order to allow them to load alignments directly from GFF2 and GFF3 files that + * contain sequence data and alignment information. + * + * Major issues: + * + * 1. GFF3 files commonly include mappings between DNA, RNA and Protein - so + * this class needs a dataset AlignmentI context to create alignment codon + * mappings. + * + * 2. A single GFF3 file can generate many distinct alignments. Support will be + * needed to allow several AlignmentI instances to be generated from a single + * file. + * + * + * @author jprocter + * + */ +public class Gff3File extends FeaturesFile +{ + + /** + * + */ + public Gff3File() + { + super(); + } + + /** + * @param source + * @throws IOException + */ + public Gff3File(FileParse source) throws IOException + { + super(source); + } + + /** + * @param inFile + * @param type + * @throws IOException + */ + public Gff3File(String inFile, String type) throws IOException + { + super(inFile, type); + } + + /** + * @param parseImmediately + * @param source + * @throws IOException + */ + public Gff3File(boolean parseImmediately, FileParse source) + throws IOException + { + super(parseImmediately, source); + } + + /** + * @param parseImmediately + * @param inFile + * @param type + * @throws IOException + */ + public Gff3File(boolean parseImmediately, String inFile, String type) + throws IOException + { + super(parseImmediately, inFile, type); + } + + /* + * (non-Javadoc) + * + * @see jalview.io.FeaturesFile#print() + */ + @Override + public String print() + { + // TODO GFF3 writer with sensible defaults for writing alignment data + + // return super.printGFFFormat(seqs, visible); + return ("Not yet implemented."); + } + + AlignmentI dataset; + + List alignments; + @Override + public void parse() + { + AlignViewportI av = getViewport(); + if (av != null) + { + if (av.getAlignment() != null) + { + dataset = av.getAlignment().getDataset(); + } + if (dataset == null) + { + // working in the applet context ? + dataset = av.getAlignment(); + } + } + else + { + dataset = new Alignment(new SequenceI[] + {}); + } + + boolean parseResult = parse(dataset, null, null, false, true); + if (!parseResult) + { + // pass error up somehow + } + if (av != null) + { + // update viewport with the dataset data ? + } + else + { + setSeqs(dataset.getSequencesArray()); + } + + } + + @Override + public void addProperties(Alignment al) + { + super.addProperties(al); + if (dataset.getCodonFrames() != null) + { + AlignmentI ds = (al.getDataset() == null) ? al : al.getDataset(); + for (AlignedCodonFrame codons : dataset.getCodonFrames()) + { + ds.addCodonFrame(codons); + } + } + } +}