Package org.exist.util.serializer

Source Code of org.exist.util.serializer.SAXToReceiver

/*
*  eXist Open Source Native XML Database
*  Copyright (C) 2001-07 The eXist Project
*  http://exist-db.org
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser General Public License
*  as published by the Free Software Foundation; either version 2
*  of the License, or (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public
*  License along with this library; if not, write to the Free Software
*  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*
* $Id$
*/
package org.exist.util.serializer;

import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.Attributes;
import org.exist.dom.QName;
import org.exist.dom.AttrImpl;
import org.exist.util.XMLString;

public class SAXToReceiver implements ContentHandler, LexicalHandler {

    private Receiver receiver;
    private boolean inCDATASection = false;

    public SAXToReceiver(Receiver receiver) {
        this.receiver = receiver;
    }

    public void setDocumentLocator(Locator locator) {
    }

    public void startDocument() throws SAXException {
        receiver.startDocument();
    }

    public void endDocument() throws SAXException {
        receiver.endDocument();
    }

    public void startPrefixMapping(String prefix, String uri) throws SAXException {
        receiver.startPrefixMapping(prefix, uri);
    }

    public void endPrefixMapping(String prefix) throws SAXException {
        receiver.endPrefixMapping(prefix);
    }

    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
        String prefix = null;
        int p = qName.indexOf(':');
        if (p > -1)
            {prefix = qName.substring(0, p - 1);}
        final AttrList attrs = new AttrList();
        for (int i = 0; i < atts.getLength(); i++) {
            if (atts.getQName(i).startsWith("xmlns"))
                {continue;}
            String attrPrefix = null;
            p = atts.getQName(i).indexOf(':');
            if (p > -1)
                {attrPrefix = atts.getQName(i).substring(0, p - 1);}
            int type = AttrImpl.CDATA;
            final String atype = atts.getType(i);
            if ("ID".equals(atype))
                {type = AttrImpl.ID;}
            else if ("IDREF".equals(atype))
                {type = AttrImpl.IDREF;}
            else if ("IDREFS".equals(atype))
                {type = AttrImpl.IDREFS;}
            attrs.addAttribute(new QName(atts.getLocalName(i), atts.getURI(i), attrPrefix), atts.getValue(i), type);
        }
        receiver.startElement(new QName(localName, uri, prefix), attrs);
    }

    public void endElement(String uri, String localName, String qName) throws SAXException {
        String prefix = null;
        final int p = qName.indexOf(':');
        if (p > -1)
            {prefix = qName.substring(0, p - 1);}
        receiver.endElement(new QName(localName, uri, prefix));
    }

    public void characters(char[] ch, int start, int length) throws SAXException {
        if (inCDATASection)
            {receiver.cdataSection(ch, start, length);}
        else
            {receiver.characters(new XMLString(ch, start, length));}
    }

    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
    }

    public void processingInstruction(String target, String data) throws SAXException {
        receiver.processingInstruction(target, data);
    }

    public void skippedEntity(String name) throws SAXException {
    }

    public void startDTD(String name, String publicId, String systemId) throws SAXException {
    }

    public void endDTD() throws SAXException {
    }

    public void startEntity(String name) throws SAXException {
    }

    public void endEntity(String name) throws SAXException {
    }

    public void startCDATA() throws SAXException {
        inCDATASection = true;
    }

    public void endCDATA() throws SAXException {
        inCDATASection = false;
    }

    public void comment(char[] ch, int start, int length) throws SAXException {
        receiver.comment(ch, start, length);
    }
}
TOP

Related Classes of org.exist.util.serializer.SAXToReceiver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.