001    //
002    // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.1-05/30/2003 05:06 AM(java_re)-fcs 
003    // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
004    // Any modifications to this file will be lost upon recompilation of the source schema. 
005    // Generated on: 2004.10.11 at 12:13:34 EDT 
006    //
007    
008    /*
009     * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
010     * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
011     */
012    
013    /*
014     * @(#)$Id: UnmarshallingEventHandlerAdaptor.java,v 1.7 2003/05/20 18:27:56 kk122374 Exp $
015     */
016    package astronomy.data.spectra.impl.runtime;
017    
018    import javax.xml.bind.ValidationEvent;
019    import javax.xml.bind.helpers.ValidationEventImpl;
020    import javax.xml.bind.helpers.ValidationEventLocatorImpl;
021    
022    import org.xml.sax.Attributes;
023    import org.xml.sax.ContentHandler;
024    import org.xml.sax.SAXException;
025    
026    /**
027     * Redirects events to another SAX ContentHandler.
028     * 
029     * <p>
030     * Note that the SAXException returned by the ContentHandler is
031     * unreported. So we have to catch them and report it, then rethrow
032     * it if necessary. 
033     * 
034     * @author
035     *      Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
036     */
037    public class UnmarshallingEventHandlerAdaptor implements UnmarshallingEventHandler {
038        
039        protected final UnmarshallingContext context;
040    
041        /** This handler will receive SAX events. */
042        protected final ContentHandler handler;
043    
044        public UnmarshallingEventHandlerAdaptor(UnmarshallingContext _ctxt,ContentHandler _handler) throws SAXException {
045            this.context = _ctxt;
046            this.handler = _handler;
047            
048            // emulate the start of documents
049            try {
050                handler.setDocumentLocator(context.getLocator());
051                handler.startDocument();
052            } catch( SAXException e ) {
053                error(e);
054            }
055        }
056    
057        public Object owner() {
058            return null;
059        }
060    
061    
062        // nest level of elements.
063        private int depth = 0;
064            
065        public void enterAttribute(String uri, String local, String qname) throws SAXException {
066        }
067    
068        public void enterElement(String uri, String local, String qname, Attributes atts) throws SAXException {
069            depth++;
070            try {
071                handler.startElement(uri,local,qname,atts);
072            } catch( SAXException e ) {
073                error(e);
074            }
075            context.pushAttributes(atts,true);
076        }
077    
078        public void leaveAttribute(String uri, String local, String qname) throws SAXException {
079        }
080    
081        public void leaveElement(String uri, String local, String qname) throws SAXException {
082            try {
083                handler.endElement(uri,local,qname);
084            } catch( SAXException e ) {
085                error(e);
086            }
087            context.popAttributes();
088            
089            depth--;
090            if(depth==0) {
091                // emulate the end of the document
092                try {
093                    handler.endDocument();
094                } catch( SAXException e ) {
095                    error(e);
096                }
097                context.popContentHandler();
098            }
099        }
100    
101        public void text(String s) throws SAXException {
102            try {
103                handler.characters(s.toCharArray(),0,s.length());
104            } catch( SAXException e ) {
105                error(e);
106            }
107        }
108        
109        private void error( SAXException e ) throws SAXException {
110            context.handleEvent(new ValidationEventImpl(
111                ValidationEvent.ERROR,
112                e.getMessage(),
113                new ValidationEventLocatorImpl(context.getLocator()),
114                e
115            ), false);
116        }
117    
118        public void leaveChild(int nextState) throws SAXException {
119        }
120    }