/* * 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.xff; import org.biojava.bio.seq.Feature; import org.biojava.bio.seq.StrandedFeature; import org.biojava.utils.stax.DelegationManager; import org.biojava.utils.stax.StAXContentHandler; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * StAX handler for XFF strandedFeature type. By default, XFFFeatureSetHandler * uses this handler for all feature elements which have the strand * attribute. * *

* Like the basic FeatureHandler, this class can be subclassed * to give handlers for more specialized feature types. *

* * @author Thomas Down * @since 1.2 */ public class StrandedFeatureHandler extends FeatureHandler { boolean inFeature = false; public static final XFFPartHandlerFactory STRANDEDFEATURE_HANDLER_FACTORY = new XFFPartHandlerFactory() { public StAXContentHandler getPartHandler(XFFFeatureSetHandler xffenv) { return new StrandedFeatureHandler(xffenv); } } ; public StrandedFeatureHandler(XFFFeatureSetHandler xffenv) { super(xffenv); } protected Feature.Template createFeatureTemplate() { return new StrandedFeature.Template(); } protected StrandedFeature.Template getStrandedFeatureTemplate() { return (StrandedFeature.Template) getFeatureTemplate(); } public void startElement(String nsURI, String localName, String qName, Attributes attrs, DelegationManager dm) throws SAXException { if (!inFeature) { // This is the root startElement. Check the strand= attribute. String strands = attrs.getValue("strand"); StrandedFeature.Template ft = getStrandedFeatureTemplate(); if (strands != null) { if (strands.equals("+")) { ft.strand = StrandedFeature.POSITIVE; } else if (strands.equals("-")) { ft.strand = StrandedFeature.NEGATIVE; } else { ft.strand = StrandedFeature.UNKNOWN; } } else { ft.strand = StrandedFeature.UNKNOWN; } inFeature = true; } // Pass everything on to the basic feature parser. super.startElement(nsURI, localName, qName, attrs, dm); } }