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 * @author Brian King
029 * @author Hanning Ni    Doubletwist Inc
030 */
031public class AGAVEIdAliasPropHandler extends StAXPropertyHandler{
032
033   public static final StAXHandlerFactory AGAVE_ID_ALIAS_PROP_HANDLER_FACTORY
034    = new StAXHandlerFactory() {
035    public StAXContentHandler getHandler(StAXFeatureHandler staxenv) {
036      return new AGAVEIdAliasPropHandler(staxenv);
037    }
038   };
039
040   private AGAVEIdAlias db_id ;
041    AGAVEIdAliasPropHandler(StAXFeatureHandler staxenv) {
042    // execute superclass method to setup environment
043    super(staxenv);
044    setHandlerCharacteristics("id_alias", true);
045  }
046
047  public void startElementHandler(
048                String nsURI,
049                String localName,
050                String qName,
051                Attributes attrs)
052         throws SAXException
053  {
054      db_id = new AGAVEIdAlias(attrs.getValue("id"), attrs.getValue("type") ) ;
055  }
056
057  public void endElementHandler(
058                String nsURI,
059                String localName,
060                String qName,
061                StAXContentHandler handler)
062                throws SAXException
063  {
064       int currLevel = staxenv.getLevel();
065       if (currLevel >=1) {
066           ListIterator li = staxenv.getHandlerStackIterator(currLevel);
067           while( li.hasPrevious() )
068          {
069              Object ob =   li.previous() ;
070              if( ob instanceof AGAVEIdAliasCallbackItf )
071              {
072                  ( (AGAVEIdAliasCallbackItf) ob ).addIdAlias( db_id ) ;
073                   return ;
074              }
075           }
076       }
077
078  }
079
080}