All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jdom2.output.support.SAXTarget Maven / Gradle / Ivy

Go to download

A complete, Java-based solution for accessing, manipulating, and outputting XML data

There is a newer version: 2.0.2
Show newest version
/*-- 

 Copyright (C) 2011 - 2012 Jason Hunter & Brett McLaughlin.
 All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:

 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions, and the following disclaimer.

 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions, and the disclaimer that follows 
    these conditions in the documentation and/or other materials 
    provided with the distribution.

 3. The name "JDOM" must not be used to endorse or promote products
    derived from this software without prior written permission.  For
    written permission, please contact .

 4. Products derived from this software may not be called "JDOM", nor
    may "JDOM" appear in their name, without prior written permission
    from the JDOM Project Management .

 In addition, we request (but do not require) that you include in the 
 end-user documentation provided with the redistribution and/or in the 
 software itself an acknowledgement equivalent to the following:
     "This product includes software developed by the
      JDOM Project (http://www.jdom.org/)."
 Alternatively, the acknowledgment may be graphical using the logos 
 available at http://www.jdom.org/images/logos.

 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 DISCLAIMED.  IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 SUCH DAMAGE.

 This software consists of voluntary contributions made by many 
 individuals on behalf of the JDOM Project and was originally 
 created by Jason Hunter  and
 Brett McLaughlin .  For more information
 on the JDOM Project, please see .

 */

package org.jdom2.output.support;

import org.xml.sax.ContentHandler;
import org.xml.sax.DTDHandler;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.ext.DeclHandler;
import org.xml.sax.ext.LexicalHandler;

import org.jdom2.output.JDOMLocator;

/**
 * The target for all SAX notifications in this OuputProcessor
 * 
 * @author Rolf Lear
 */
public final class SAXTarget {
	
	/**
	 * A locator specific to the SAXOutputter process.
	 * @author Rolf Lear
	 *
	 */
	public static final class SAXLocator implements JDOMLocator {
		
		private final String publicid, systemid;
		private Object node = null ;
		
		/**
		 * Creates a SAXLocator which implements JDOMLocator
		 * @param publicid This Locator's SystemID
		 * @param systemid This Locator's PublicID
		 */
		public SAXLocator(String publicid, String systemid) {
			super();
			this.publicid = publicid;
			this.systemid = systemid;
		}

		@Override
		public int getColumnNumber() {
			return -1;
		}

		@Override
		public int getLineNumber() {
			return -1;
		}

		@Override
		public String getPublicId() {
			return publicid;
		}

		@Override
		public String getSystemId() {
			return systemid;
		}

		@Override
		public Object getNode() {
			return node;
		}

		/**
		 * Set the location on this SAXLocator
		 * @param node The location to set.
		 */
		public void setNode(Object node) {
			this.node = node;
		}
		
	}
	
	/** registered ContentHandler */
	private final ContentHandler contentHandler;

	/** registered ErrorHandler */
	private final ErrorHandler errorHandler;

	/** registered DTDHandler */
	private final DTDHandler dtdHandler;

	/** registered EntityResolver */
	private final EntityResolver entityResolver;

	/** registered LexicalHandler */
	private final LexicalHandler lexicalHandler;

	/** registered DeclHandler */
	private final DeclHandler declHandler;

	private final SAXLocator locator;

	/**
	 * Whether to report attribute namespace declarations as xmlns
	 * attributes. Defaults to false as per SAX specifications.
	 * 
	 * @see  SAX
	 *      namespace specifications
	 */
	private final boolean declareNamespaces;

	/**
	 * Whether to report DTD events to DeclHandlers and LexicalHandlers.
	 * Defaults to true.
	 */
	private final boolean reportDtdEvents;

	/**
	 * Create the collection of handlers for a SAXOutputProcessor
	 * 
	 * @param contentHandler
	 *        The ContentHandler
	 * @param errorHandler
	 *        The ErrorHandler
	 * @param dtdHandler
	 *        The DTDHandler
	 * @param entityResolver
	 *        The EntityResolver
	 * @param lexicalHandler
	 *        The LexicalHandler
	 * @param declHandler
	 *        The DeclHandler
	 * @param declareNamespaces
	 *        Whether to declare Namespaces
	 * @param reportDtdEvents
	 *        Whether to report DTD Events
	 * @param publicID
	 *        The public ID (null if none)
	 * @param systemID
	 *        The System ID (null if none)
	 */
	public SAXTarget(ContentHandler contentHandler,
			ErrorHandler errorHandler, DTDHandler dtdHandler,
			EntityResolver entityResolver, LexicalHandler lexicalHandler,
			DeclHandler declHandler, boolean declareNamespaces,
			boolean reportDtdEvents, String publicID, String systemID) {
		super();
		this.contentHandler = contentHandler;
		this.errorHandler = errorHandler;
		this.dtdHandler = dtdHandler;
		this.entityResolver = entityResolver;
		this.lexicalHandler = lexicalHandler;
		this.declHandler = declHandler;
		this.declareNamespaces = declareNamespaces;
		this.reportDtdEvents = reportDtdEvents;
		this.locator = new SAXLocator(publicID, systemID);

	}

	/**
	 * @return The target ContentHandler
	 */
	public ContentHandler getContentHandler() {
		return contentHandler;
	}

	/**
	 * @return The target ErrorHandler
	 */
	public ErrorHandler getErrorHandler() {
		return errorHandler;
	}

	/**
	 * @return The target DTDHandler
	 */
	public DTDHandler getDTDHandler() {
		return dtdHandler;
	}

	/**
	 * @return The target EntityResolver
	 */
	public EntityResolver getEntityResolver() {
		return entityResolver;
	}

	/**
	 * @return The target LexicalHandler
	 */
	public LexicalHandler getLexicalHandler() {
		return lexicalHandler;
	}

	/**
	 * @return The target DeclHandler
	 */
	public DeclHandler getDeclHandler() {
		return declHandler;
	}

	/**
	 * @return Whether to declare Namespaces
	 */
	public boolean isDeclareNamespaces() {
		return declareNamespaces;
	}

	/**
	 * @return Whether to report DTD Events
	 */
	public boolean isReportDTDEvents() {
		return reportDtdEvents;
	}

	/**
	 * @return the Locator used for this Output
	 */
	public SAXLocator getLocator() {
		return locator;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy