Package org.exist.util.serializer

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

/*
*  eXist Open Source Native XML Database
*  Copyright (C) 2001-04 Wolfgang M. Meier (wolfgang@exist-db.org)
*  and others (see 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 program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*  $Id$
*/
package org.exist.util.serializer;

import org.exist.dom.QName;
import org.exist.dom.StoredNode;
import org.w3c.dom.Document;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.AttributesImpl;

/**
* A wrapper class that forwards the method calls defined in the
* {@link org.exist.util.serializer.Receiver} interface to a
* SAX content handler and lexical handler.
*
* @author wolf
*/
public class ReceiverToSAX implements Receiver {

  private ContentHandler contentHandler;
  private LexicalHandler lexicalHandler = null;
 
  private char[] charBuf = new char[2048];
 
  /**
   *
   */
  public ReceiverToSAX(ContentHandler handler) {
    super();
    this.contentHandler = handler;
   
    if (handler instanceof LexicalHandler) {
            lexicalHandler = (LexicalHandler) handler;
        }
  }

  public void setLexicalHandler(LexicalHandler handler) {
    this.lexicalHandler = handler;
  }
 
  public void setContentHandler(ContentHandler handler) {
    this.contentHandler = handler;
  }
 
  public ContentHandler getContentHandler() {
    return contentHandler;
  }
 
  public LexicalHandler getLexicalHandler() {
    return lexicalHandler;
  }
 
  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#startDocument()
   */
  public void startDocument() throws SAXException {
    contentHandler.startDocument();
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#endDocument()
   */
  public void endDocument() throws SAXException {
    contentHandler.endDocument();
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#startPrefixMapping(java.lang.String, java.lang.String)
   */
  public void startPrefixMapping(String prefix, String namespaceURI)
      throws SAXException {
    contentHandler.startPrefixMapping(prefix, namespaceURI);
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#endPrefixMapping(java.lang.String)
   */
  public void endPrefixMapping(String prefix) throws SAXException {
    contentHandler.endPrefixMapping(prefix);
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#startElement(org.exist.dom.QName, org.exist.util.serializer.AttrList)
   */
  public void startElement(QName qname, AttrList attribs) throws SAXException {
    final AttributesImpl a = new AttributesImpl();
    if(attribs != null) {
      QName attrQName;
      for(int i = 0; i < attribs.getLength(); i++) {
        attrQName = attribs.getQName(i);
        a.addAttribute(attrQName.getNamespaceURI(), attrQName.getLocalName(), attrQName.getStringValue(),
            "CDATA", attribs.getValue(i));
      }
    }
    contentHandler.startElement(qname.getNamespaceURI(), qname.getLocalName(), qname.getStringValue(), a);
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#endElement(org.exist.dom.QName)
   */
  public void endElement(QName qname) throws SAXException {
    contentHandler.endElement(qname.getNamespaceURI(), qname.getLocalName(), qname.getStringValue());
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#characters(java.lang.CharSequence)
   */
  public void characters(CharSequence seq) throws SAXException {
    final int len = seq.length();
    if(len < charBuf.length) {
      for (int i = 0; i < len; i++)
        charBuf[i] = seq.charAt(i);
      contentHandler.characters(charBuf, 0, len);
    } else {
      contentHandler.characters(seq.toString().toCharArray(), 0, seq.length());
    }
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#attribute(org.exist.dom.QName, java.lang.String)
   */
  public void attribute(QName qname, String value) throws SAXException {
    contentHandler.characters(value.toCharArray(), 0, value.length());
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#comment(char[], int, int)
   */
  public void comment(char[] ch, int start, int length) throws SAXException {
    if(lexicalHandler != null)
      {lexicalHandler.comment(ch, start, length);}
  }

  /* (non-Javadoc)
   * @see org.exist.util.serializer.Receiver#processingInstruction(java.lang.String, java.lang.String)
   */
  public void processingInstruction(String target, String data)
      throws SAXException {
    contentHandler.processingInstruction(target, data);
  }

    /* (non-Javadoc)
     * @see org.exist.util.serializer.Receiver#cdataSection(char[], int, int)
     */
    public void cdataSection(char[] ch, int start, int len) throws SAXException {
        if(lexicalHandler != null)
            {lexicalHandler.startCDATA();}
        contentHandler.characters(ch, start, len);
        if(lexicalHandler != null)
            {lexicalHandler.endCDATA();}
    }

  public void documentType(String name, String publicId, String systemId)
  throws SAXException {
    if(lexicalHandler != null){
      lexicalHandler.startDTD( name, publicId, systemId);
      lexicalHandler.endDTD();
    }
  }

    public void highlightText(CharSequence seq) {
        // not supported with this receiver
    }

    public void setCurrentNode(StoredNode node) {
        // just ignore
    }
   
    public Document getDocument() {
      //just ignore
      return null;
    }   
}
TOP

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

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.