001: package net.sf.saxon;
002:
003: import net.sf.saxon.event.PipelineConfiguration;
004: import net.sf.saxon.event.ReceivingContentHandler;
005: import net.sf.saxon.event.ResultWrapper;
006: import net.sf.saxon.trans.XPathException;
007: import org.xml.sax.SAXException;
008:
009: import javax.xml.transform.Result;
010: import javax.xml.transform.Transformer;
011: import javax.xml.transform.sax.TransformerHandler;
012: import javax.xml.transform.stream.StreamResult;
013: import java.util.Properties;
014:
015: /**
016: * <b>IdentityTransformerHandler</b> implements the javax.xml.transform.sax.TransformerHandler
017: * interface. It acts as a ContentHandler and LexicalHandler which receives a stream of
018: * SAX events representing an input document, and performs an identity transformation passing
019: * these events to a Result
020: * @author Michael H. Kay
021: */
022:
023: public class IdentityTransformerHandler extends ReceivingContentHandler
024: implements TransformerHandler {
025:
026: private Result result;
027: private String systemId;
028: private Controller controller;
029:
030: /**
031: * Create a IdentityTransformerHandler and initialise variables. The constructor is protected, because
032: * the Filter should be created using newTransformerHandler() in the SAXTransformerFactory
033: * class
034: */
035:
036: protected IdentityTransformerHandler(Controller controller) {
037: this .controller = controller;
038: setPipelineConfiguration(controller.makePipelineConfiguration());
039:
040: }
041:
042: /**
043: * Get the Transformer used for this transformation
044: */
045:
046: public Transformer getTransformer() {
047: return controller;
048: }
049:
050: /**
051: * Set the SystemId of the document
052: */
053:
054: public void setSystemId(String url) {
055: systemId = url;
056: }
057:
058: /**
059: * Get the systemId of the document
060: */
061:
062: public String getSystemId() {
063: return systemId;
064: }
065:
066: /**
067: * Set the output destination of the transformation
068: */
069:
070: public void setResult(Result result) {
071: if (result == null) {
072: throw new IllegalArgumentException(
073: "Result must not be null");
074: }
075: this .result = result;
076: }
077:
078: /**
079: * Get the output destination of the transformation
080: */
081:
082: public Result getResult() {
083: return result;
084: }
085:
086: /**
087: * Override the behaviour of startDocument() in ReceivingContentHandler
088: */
089:
090: public void startDocument() throws SAXException {
091: if (result == null) {
092: result = new StreamResult(System.out);
093: }
094: try {
095: Properties props = controller.getOutputProperties();
096: PipelineConfiguration pipe = controller
097: .makePipelineConfiguration();
098: setReceiver(ResultWrapper.getReceiver(result, pipe, props));
099: setPipelineConfiguration(pipe);
100: } catch (XPathException err) {
101: throw new SAXException(err);
102: }
103: super .startDocument();
104: }
105:
106: }
107:
108: //
109: // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
110: // you may not use this file except in compliance with the License. You may obtain a copy of the
111: // License at http://www.mozilla.org/MPL/
112: //
113: // Software distributed under the License is distributed on an "AS IS" basis,
114: // WITHOUT WARRANTY OF ANY KIND, either express or implied.
115: // See the License for the specific language governing rights and limitations under the License.
116: //
117: // The Original Code is: all this file.
118: //
119: // The Initial Developer of the Original Code is Michael H. Kay.
120: //
121: // Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
122: //
123: // Contributor(s): None
124: //
|