19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: ToSAXHandler.java 468654 2006-10-28 07:09:23Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.serializer;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Vector;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.Attributes;
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.ContentHandler;
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.ErrorHandler;
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.SAXException;
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.SAXParseException;
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.ext.LexicalHandler;
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is used to provide a base behavior to be inherited
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * by other To...SAXHandler serializers.
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is not a public API.
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic abstract class ToSAXHandler extends SerializerBase
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public ToSAXHandler()
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public ToSAXHandler(
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        ContentHandler hdlr,
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        LexicalHandler lex,
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        String encoding)
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        setContentHandler(hdlr);
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        setLexHandler(lex);
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        setEncoding(encoding);
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public ToSAXHandler(ContentHandler handler, String encoding)
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        setContentHandler(handler);
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        setEncoding(encoding);
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Underlying SAX handler. Taken from XSLTC
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected ContentHandler m_saxHandler;
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Underlying LexicalHandler. Taken from XSLTC
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected LexicalHandler m_lexHandler;
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * A startPrefixMapping() call on a ToSAXHandler will pass that call
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * on to the wrapped ContentHandler, but should we also mirror these calls
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * with matching attributes, if so this field is true.
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * For example if this field is true then a call such as
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * startPrefixMapping("prefix1","uri1") will also cause the additional
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * internally generated attribute xmlns:prefix1="uri1" to be effectively added
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * to the attributes passed to the wrapped ContentHandler.
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    private boolean m_shouldGenerateNSAttribute = true;
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /** If this is true, then the content handler wrapped by this
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * serializer implements the TransformState interface which
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * will give the content handler access to the state of
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * the transform. */
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected TransformStateSetter m_state = null;
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Pass callback to the SAX Handler
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected void startDocumentInternal() throws SAXException
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_needToCallStartDocument)
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            super.startDocumentInternal();
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_saxHandler.startDocument();
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_needToCallStartDocument = false;
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Do nothing.
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ext.LexicalHandler#startDTD(String, String, String)
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void startDTD(String arg0, String arg1, String arg2)
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        throws SAXException
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // do nothing for now
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Receive notification of character data.
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param characters The string of characters to process.
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @throws org.xml.sax.SAXException
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see ExtendedContentHandler#characters(String)
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void characters(String characters) throws SAXException
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        final int len = characters.length();
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (len > m_charsBuff.length)
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           m_charsBuff = new char[len*2 + 1];
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        characters.getChars(0,len, m_charsBuff, 0);
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        characters(m_charsBuff, 0, len);
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Receive notification of a comment.
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see ExtendedLexicalHandler#comment(String)
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void comment(String comment) throws SAXException
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        flushPending();
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // Ignore if a lexical handler has not been set
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_lexHandler != null)
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            final int len = comment.length();
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (len > m_charsBuff.length)
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            {
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson               m_charsBuff = new char[len*2 + 1];
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            }
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            comment.getChars(0,len, m_charsBuff, 0);
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_lexHandler.comment(m_charsBuff, 0, len);
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // time to fire off comment event
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (m_tracer != null)
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                super.fireCommentEvent(m_charsBuff, 0, len);
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Do nothing as this is an abstract class. All subclasses will need to
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * define their behavior if it is different.
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ContentHandler#processingInstruction(String, String)
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void processingInstruction(String target, String data)
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        throws SAXException
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // Redefined in SAXXMLOutput
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected void closeStartTag() throws SAXException
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected void closeCDATA() throws SAXException
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // Redefined in SAXXMLOutput
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Receive notification of the beginning of an element, although this is a
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * SAX method additional namespace or attribute information can occur before
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * or after this call, that is associated with this element.
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @throws org.xml.sax.SAXException Any SAX exception, possibly
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *            wrapping another exception.
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ContentHandler#startElement
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ContentHandler#endElement
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.AttributeList
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @throws org.xml.sax.SAXException
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ContentHandler#startElement(String,String,String,Attributes)
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void startElement(
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        String arg0,
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        String arg1,
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        String arg2,
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        Attributes arg3)
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        throws SAXException
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_state != null) {
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_state.resetState(getTransformer());
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // fire off the start element event
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_tracer != null)
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            super.fireStartElem(arg2);
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Sets the LexicalHandler.
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param _lexHandler The LexicalHandler to set
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void setLexHandler(LexicalHandler _lexHandler)
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        this.m_lexHandler = _lexHandler;
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Sets the SAX ContentHandler.
2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param _saxHandler The ContentHandler to set
2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void setContentHandler(ContentHandler _saxHandler)
2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        this.m_saxHandler = _saxHandler;
2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_lexHandler == null && _saxHandler instanceof LexicalHandler)
2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // we are not overwriting an existing LexicalHandler, and _saxHandler
2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // is also implements LexicalHandler, so lets use it
2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_lexHandler = (LexicalHandler) _saxHandler;
2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Does nothing. The setting of CDATA section elements has an impact on
2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * stream serializers.
2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see SerializationHandler#setCdataSectionElements(java.util.Vector)
2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void setCdataSectionElements(Vector URI_and_localNames)
2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // do nothing
2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /** Set whether or not namespace declarations (e.g.
2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * xmlns:foo) should appear as attributes of
2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * elements
2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param doOutputNSAttr whether or not namespace declarations
2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * should appear as attributes
2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void setShouldOutputNSAttr(boolean doOutputNSAttr)
2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        m_shouldGenerateNSAttribute = doOutputNSAttr;
2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Returns true if namespace declarations from calls such as
2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * startPrefixMapping("prefix1","uri1") should
2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * also be mirrored with self generated additional attributes of elements
2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * that declare the namespace, for example the attribute xmlns:prefix1="uri1"
2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    boolean getShouldOutputNSAttr()
2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return m_shouldGenerateNSAttribute;
2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * This method flushes any pending events, which can be startDocument()
2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * closing the opening tag of an element, or closing an open CDATA section.
2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void flushPending() throws SAXException
2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (m_needToCallStartDocument)
2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            {
2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                startDocumentInternal();
2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                m_needToCallStartDocument = false;
2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            }
2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (m_elemContext.m_startTagOpen)
2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            {
2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                closeStartTag();
2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                m_elemContext.m_startTagOpen = false;
2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            }
2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (m_cdataTagOpen)
2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            {
2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                closeCDATA();
2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                m_cdataTagOpen = false;
2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            }
2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Pass in a reference to a TransformState object, which
2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * can be used during SAX ContentHandler events to obtain
2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * information about he state of the transformation. This
2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * method will be called  before each startDocument event.
2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param ts A reference to a TransformState object
2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void setTransformState(TransformStateSetter ts) {
3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        this.m_state = ts;
3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Receives notification that an element starts, but attributes are not
3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * fully known yet.
3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param uri the URI of the namespace of the element (optional)
3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param localName the element name, but without prefix (optional)
3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param qName the element name, with prefix, if any (required)
3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see ExtendedContentHandler#startElement(String, String, String)
3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void startElement(String uri, String localName, String qName)
3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        throws SAXException {
3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_state != null) {
3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_state.resetState(getTransformer());
3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // fire off the start element event
3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_tracer != null)
3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            super.fireStartElem(qName);
3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * An element starts, but attributes are not fully known yet.
3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param qName the element name, with prefix (if any).
3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see ExtendedContentHandler#startElement(String)
3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void startElement(String qName) throws SAXException {
3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_state != null) {
3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_state.resetState(getTransformer());
3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // fire off the start element event
3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_tracer != null)
3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            super.fireStartElem(qName);
3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * This method gets the node's value as a String and uses that String as if
3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * it were an input character notification.
3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param node the Node to serialize
3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @throws org.xml.sax.SAXException
3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void characters(org.w3c.dom.Node node)
3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        throws org.xml.sax.SAXException
3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // remember the current node
3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_state != null)
3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            m_state.setCurrentNode(node);
3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // Get the node's value as a String and use that String as if
3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // it were an input character notification.
3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        String data = node.getNodeValue();
3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (data != null) {
3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            this.characters(data);
3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ErrorHandler#fatalError(SAXParseException)
3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void fatalError(SAXParseException exc) throws SAXException {
3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        super.fatalError(exc);
3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        m_needToCallStartDocument = false;
3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_saxHandler instanceof ErrorHandler) {
3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            ((ErrorHandler)m_saxHandler).fatalError(exc);
3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ErrorHandler#error(SAXParseException)
3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void error(SAXParseException exc) throws SAXException {
3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        super.error(exc);
3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_saxHandler instanceof ErrorHandler)
3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            ((ErrorHandler)m_saxHandler).error(exc);
3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see org.xml.sax.ErrorHandler#warning(SAXParseException)
3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void warning(SAXParseException exc) throws SAXException {
3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        super.warning(exc);
3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (m_saxHandler instanceof ErrorHandler)
3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            ((ErrorHandler)m_saxHandler).warning(exc);
3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Try's to reset the super class and reset this class for
4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * re-use, so that you don't need to create a new serializer
4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * (mostly for performance reasons).
4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @return true if the class was successfuly reset.
4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see Serializer#reset()
4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public boolean reset()
4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        boolean wasReset = false;
4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (super.reset())
4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            resetToSAXHandler();
4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            wasReset = true;
4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return wasReset;
4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Reset all of the fields owned by ToSAXHandler class
4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    private void resetToSAXHandler()
4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        this.m_lexHandler = null;
4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        this.m_saxHandler = null;
4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        this.m_state = null;
4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        this.m_shouldGenerateNSAttribute = false;
4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Add a unique attribute
4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void addUniqueAttribute(String qName, String value, int flags)
4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        throws SAXException
4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        addAttribute(qName, value);
4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
439