001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 */
021package org.biojava.bio.seq.io.agave;
022import java.util.ListIterator;
023
024import org.xml.sax.Attributes;
025import org.xml.sax.SAXException;
026
027/**
028 * 
029 * @author Hanning Ni    Doubletwist Inc
030 */
031public class AGAVEElementIdPropHandler extends StAXPropertyHandler{
032
033   public static final StAXHandlerFactory AGAVE_ELEMENT_ID_PROP_HANDLER_FACTORY
034    = new StAXHandlerFactory() {
035    public StAXContentHandler getHandler(StAXFeatureHandler staxenv) {
036      return new AGAVEElementIdPropHandler(staxenv);
037    }
038   };
039   private String id ;
040   AGAVEElementIdPropHandler(StAXFeatureHandler staxenv) {
041    // execute superclass method to setup environment
042    super(staxenv);
043    setHandlerCharacteristics("element_id", true);
044  }
045
046  public void startElementHandler(
047                String nsURI,
048                String localName,
049                String qName,
050                Attributes attrs)
051         throws SAXException
052  {
053      id = attrs.getValue("id") ;
054  }
055
056  public void endElementHandler(
057                String nsURI,
058                String localName,
059                String qName,
060                StAXContentHandler handler)
061                throws SAXException
062  {
063       int currLevel = staxenv.getLevel();
064       if (currLevel >=1) {
065           ListIterator li = staxenv.getHandlerStackIterator(currLevel);
066           while( li.hasPrevious() )
067          {
068              Object ob =   li.previous() ;
069              if( ob instanceof AGAVEEvidenceCallbackItf )
070              {
071                  ( (AGAVEEvidenceCallbackItf) ob ).addElementId( id ) ;
072                   return ;
073              }
074          }
075       }
076
077  }
078
079}