org.biojava.bio.program.sax.blastxml.StAXFeatureHandlerMod Maven / Gradle / Ivy
/*
* 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.sax.blastxml;
import org.biojava.utils.stax.DelegationManager;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* StAX handler shamelessly ripped off from Thomas Down's XFFFeatureSetHandler.
* It was modified for greater generality. NOTE This class is
* not thread-safe -- it must only be used for one parse at any time.
*
*@author Thomas Down
*@author David Huen
*@created 19 January 2002
*@since 1.8
*/
class StAXFeatureHandlerMod extends StAXFeatureHandler {
public void startElement(
String nsURI,
String localName,
String qName,
Attributes attrs,
DelegationManager dm)
throws SAXException {
level++;
// perform delegation
// we must delegate only on features that are directly attached.
// if I do not check that that's so, any element of a kind I delegate
// on will be detected any depth within unrecognized tags.
if (level == 1) {
// System.out.println("StaxFeaturehandler.startElement starting. localName: " + localName + " " + level);
for (int i = handlers.size() - 1; i >= 0; --i) {
Binding b = (Binding) handlers.get(i);
if (b.recognizer.filterStartElement(nsURI, localName, qName, attrs)) {
dm.delegate(b.handlerFactory.getHandler(this));
return;
}
}
}
// call the element specific handler now.
// remember that if we we have a delegation failure we pass here too!
if (level == 1) {
startElementHandler(nsURI, localName, qName, attrs);
}
}
}