| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package xni; |
| |
| import org.apache.xerces.xni.Augmentations; |
| import org.apache.xerces.xni.QName; |
| import org.apache.xerces.xni.NamespaceContext; |
| import org.apache.xerces.xni.XMLAttributes; |
| import org.apache.xerces.xni.XMLDocumentHandler; |
| import org.apache.xerces.xni.XMLLocator; |
| import org.apache.xerces.xni.XMLResourceIdentifier; |
| import org.apache.xerces.xni.XMLString; |
| import org.apache.xerces.xni.XNIException; |
| import org.apache.xerces.xni.parser.XMLDocumentSource; |
| |
| /** |
| * This sample demonstrates how to implement a simple pass-through |
| * filter for the document "streaming" information set using XNI. |
| * This filter could be used in a pipeline of XNI parser components |
| * that communicate document events. |
| * <p> |
| * <strong>Note:</strong> This sample does not contain a |
| * <code>main</code> method and cannot be run. It is only for |
| * demonstration purposes. |
| * |
| * @author Andy Clark, IBM |
| * |
| * @version $Id$ |
| */ |
| public class PassThroughFilter |
| implements XMLDocumentHandler { |
| |
| // |
| // Data |
| // |
| |
| /** The document handler. */ |
| protected XMLDocumentHandler fDocumentHandler; |
| |
| /** The document source */ |
| protected XMLDocumentSource fDocumentSource; |
| |
| // |
| // Public methods |
| // |
| |
| /** |
| * Sets the document handler. |
| * |
| * @param handler The new document handler. |
| */ |
| public void setDocumentHandler(XMLDocumentHandler handler) { |
| fDocumentHandler = handler; |
| } // setDocumentHandler(XMLDocumentHandler) |
| |
| // |
| // XMLDocumentHandler methods |
| // |
| |
| /** |
| * The start of the document. |
| * |
| * @param locator The document locator, or null if the document |
| * location cannot be reported during the parsing |
| * of this document. However, it is <em>strongly</em> |
| * recommended that a locator be supplied that can |
| * at least report the system identifier of the |
| * document. |
| * @param encoding The auto-detected IANA encoding name of the entity |
| * stream. This value will be null in those situations |
| * where the entity encoding is not auto-detected (e.g. |
| * internal entities or a document entity that is |
| * parsed from a java.io.Reader). |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void startDocument(XMLLocator locator, String encoding, |
| NamespaceContext namespaceContext, Augmentations augs) |
| throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.startDocument(locator, encoding, namespaceContext, augs); |
| } |
| } // startDocument(XMLLocator,String) |
| |
| /** |
| * Notifies of the presence of an XMLDecl line in the document. If |
| * present, this method will be called immediately following the |
| * startDocument call. |
| * |
| * @param version The XML version. |
| * @param encoding The IANA encoding name of the document, or null if |
| * not specified. |
| * @param standalone The standalone value, or null if not specified. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void xmlDecl(String version, String encoding, |
| String standalone, Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.xmlDecl(version, encoding, standalone, augs); |
| } |
| } // xmlDecl(String,String,String |
| |
| /** |
| * Notifies of the presence of the DOCTYPE line in the document. |
| * |
| * @param rootElement The name of the root element. |
| * @param publicId The public identifier if an external DTD or null |
| * if the external DTD is specified using SYSTEM. |
| * @param systemId The system identifier if an external DTD, null |
| * otherwise. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void doctypeDecl(String rootElement, String publicId, |
| String systemId, Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.doctypeDecl(rootElement, publicId, systemId, augs); |
| } |
| } // doctypeDecl(String,String,String) |
| |
| /** |
| * A comment. |
| * |
| * @param text The text in the comment. |
| * |
| * @throws XNIException Thrown by application to signal an error. |
| */ |
| public void comment(XMLString text, Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.comment(text, augs); |
| } |
| } // comment(XMLString) |
| |
| /** |
| * A processing instruction. Processing instructions consist of a |
| * target name and, optionally, text data. The data is only meaningful |
| * to the application. |
| * <p> |
| * Typically, a processing instruction's data will contain a series |
| * of pseudo-attributes. These pseudo-attributes follow the form of |
| * element attributes but are <strong>not</strong> parsed or presented |
| * to the application as anything other than text. The application is |
| * responsible for parsing the data. |
| * |
| * @param target The target. |
| * @param data The data or null if none specified. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void processingInstruction(String target, XMLString data, Augmentations augs) |
| throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.processingInstruction(target, data, augs); |
| } |
| } // processingInstruction(String,XMLString) |
| |
| /** |
| * The start of an element. |
| * |
| * @param element The name of the element. |
| * @param attributes The element attributes. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void startElement(QName element, XMLAttributes attributes, Augmentations augs) |
| throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.startElement(element, attributes, augs); |
| } |
| } // startElement(QName,XMLAttributes) |
| |
| /** |
| * An empty element. |
| * |
| * @param element The name of the element. |
| * @param attributes The element attributes. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void emptyElement(QName element, XMLAttributes attributes, Augmentations augs) |
| throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.emptyElement(element, attributes, augs); |
| } |
| } // emptyElement(QName,XMLAttributes) |
| |
| /** |
| * The end of an element. |
| * |
| * @param element The name of the element. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void endElement(QName element, Augmentations augs) |
| throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.endElement(element, augs); |
| } |
| } // endElement(QName) |
| |
| /** |
| * This method notifies the start of an entity. |
| * <p> |
| * <strong>Note:</strong> This method is not called for entity references |
| * appearing as part of attribute values. |
| * |
| * @param name The name of the entity. |
| * @param publicId The public identifier of the entity if the entity |
| * is external, null otherwise. |
| * @param systemId The system identifier of the entity if the entity |
| * is external, null otherwise. |
| * @param baseSystemId The base system identifier of the entity if |
| * the entity is external, null otherwise. |
| * @param encoding The auto-detected IANA encoding name of the entity |
| * stream. This value will be null in those situations |
| * where the entity encoding is not auto-detected (e.g. |
| * internal entities or a document entity that is |
| * parsed from a java.io.Reader). |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void startGeneralEntity(String name, |
| XMLResourceIdentifier identifier, |
| String encoding, Augmentations augs) |
| throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.startGeneralEntity(name, identifier, encoding, augs); |
| } |
| } // startGeneralEntity(String,XMLResourceIdentifier,String,Augmentations) |
| |
| /** |
| * Notifies of the presence of a TextDecl line in an entity. If present, |
| * this method will be called immediately following the startEntity call. |
| * <p> |
| * <strong>Note:</strong> This method will never be called for the |
| * document entity; it is only called for external general entities |
| * referenced in document content. |
| * <p> |
| * <strong>Note:</strong> This method is not called for entity references |
| * appearing as part of attribute values. |
| * |
| * @param version The XML version, or null if not specified. |
| * @param encoding The IANA encoding name of the entity. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void textDecl(String version, String encoding, Augmentations augs) |
| throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.textDecl(version, encoding, augs); |
| } |
| } // textDecl(String,String) |
| |
| /** |
| * This method notifies the end of an entity. |
| * <p> |
| * <strong>Note:</strong> This method is not called for entity references |
| * appearing as part of attribute values. |
| * |
| * @param name The name of the entity. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void endGeneralEntity(String name, Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.endGeneralEntity(name, augs); |
| } |
| } // endGeneralEntity(String,Augmentations) |
| |
| /** |
| * Character content. |
| * |
| * @param text The content. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void characters(XMLString text, Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.characters(text, augs); |
| } |
| } // characters(XMLString) |
| |
| /** |
| * Ignorable whitespace. For this method to be called, the document |
| * source must have some way of determining that the text containing |
| * only whitespace characters should be considered ignorable. For |
| * example, the validator can determine if a length of whitespace |
| * characters in the document are ignorable based on the element |
| * content model. |
| * |
| * @param text The ignorable whitespace. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void ignorableWhitespace(XMLString text, Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.ignorableWhitespace(text, augs); |
| } |
| } // ignorableWhitespace(XMLString) |
| |
| /** |
| * The start of a CDATA section. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void startCDATA(Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.startCDATA(augs); |
| } |
| } // startCDATA() |
| |
| /** |
| * The end of a CDATA section. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void endCDATA(Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.endCDATA(augs); |
| } |
| } // endCDATA() |
| |
| /** |
| * The end of the document. |
| * |
| * @throws XNIException Thrown by handler to signal an error. |
| */ |
| public void endDocument(Augmentations augs) throws XNIException { |
| if (fDocumentHandler != null) { |
| fDocumentHandler.endDocument(augs); |
| } |
| } // endDocument() |
| |
| |
| /** Sets the document source. */ |
| public void setDocumentSource(XMLDocumentSource source){ |
| fDocumentSource = source; |
| } |
| |
| |
| /** Returns the document source. */ |
| public XMLDocumentSource getDocumentSource(){ |
| return fDocumentSource; |
| } |
| |
| } // class PassThroughFilter |