1320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/* 2320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 3320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 4320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this work for additional information regarding copyright ownership. 5320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 6320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * (the "License"); you may not use this file except in compliance with 7320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the License. You may obtain a copy of the License at 8320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 9320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 10320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 11320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Unless required by applicable law or agreed to in writing, software 12320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 13320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * See the License for the specific language governing permissions and 15320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * limitations under the License. 16320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 17320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 18320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson// $Id: StreamResult.java 829970 2009-10-26 21:15:29Z mrglavas $ 19320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 20320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpackage javax.xml.transform.stream; 21320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 22320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport java.io.File; 23320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport java.io.OutputStream; 24320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport java.io.Writer; 25320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport javax.xml.transform.Result; 26320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 27320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/** 28320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Acts as an holder for a transformation result, 29320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * which may be XML, plain Text, HTML, or some other form of markup.</p> 30320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 31320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @author <a href="Jeff.Suttor@Sun.com">Jeff Suttor</a> 32320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 33320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpublic class StreamResult implements Result { 34320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 35320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** If {@link javax.xml.transform.TransformerFactory#getFeature} 36320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * returns true when passed this value as an argument, 37320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the Transformer supports Result output of this type. 38320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 39320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public static final String FEATURE = 40320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson "http://javax.xml.transform.stream.StreamResult/feature"; 41320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 42320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 43320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Zero-argument default constructor. 44320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 45320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public StreamResult() { 46320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 47320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 48320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 49320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Construct a StreamResult from a byte stream. Normally, 50320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * a stream should be used rather than a reader, so that 51320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the transformer may use instructions contained in the 52320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * transformation instructions to control the encoding. 53320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 54320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param outputStream A valid OutputStream reference. 55320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 56320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public StreamResult(OutputStream outputStream) { 57320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson setOutputStream(outputStream); 58320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 59320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 60320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 61320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Construct a StreamResult from a character stream. Normally, 62320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * a stream should be used rather than a reader, so that 63320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the transformer may use instructions contained in the 64320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * transformation instructions to control the encoding. However, 65320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * there are times when it is useful to write to a character 66320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * stream, such as when using a StringWriter. 67320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 68320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param writer A valid Writer reference. 69320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 70320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public StreamResult(Writer writer) { 71320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson setWriter(writer); 72320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 73320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 74320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 75320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Construct a StreamResult from a URL. 76320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 77320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param systemId Must be a String that conforms to the URI syntax. 78320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 79320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public StreamResult(String systemId) { 80320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson this.systemId = systemId; 81320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 82320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 83320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 84320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Construct a StreamResult from a File. 85320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 86320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param f Must a non-null File reference. 87320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 88320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public StreamResult(File f) { 89320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson setSystemId(f); 90320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 91320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 92320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 93320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Set the ByteStream that is to be written to. Normally, 94320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * a stream should be used rather than a reader, so that 95320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the transformer may use instructions contained in the 96320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * transformation instructions to control the encoding. 97320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 98320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param outputStream A valid OutputStream reference. 99320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 100320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public void setOutputStream(OutputStream outputStream) { 101320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson this.outputStream = outputStream; 102320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 103320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 104320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 105320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Get the byte stream that was set with setOutputStream. 106320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 107320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return The byte stream that was set with setOutputStream, or null 108320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * if setOutputStream or the ByteStream constructor was not called. 109320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 110320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public OutputStream getOutputStream() { 111320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson return outputStream; 112320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 113320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 114320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 115320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Set the writer that is to receive the result. Normally, 116320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * a stream should be used rather than a writer, so that 117320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the transformer may use instructions contained in the 118320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * transformation instructions to control the encoding. However, 119320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * there are times when it is useful to write to a writer, 120320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * such as when using a StringWriter. 121320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 122320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param writer A valid Writer reference. 123320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 124320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public void setWriter(Writer writer) { 125320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson this.writer = writer; 126320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 127320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 128320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 129320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Get the character stream that was set with setWriter. 130320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 131320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return The character stream that was set with setWriter, or null 132320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * if setWriter or the Writer constructor was not called. 133320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 134320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public Writer getWriter() { 135320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson return writer; 136320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 137320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 138320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 139320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Set the systemID that may be used in association 140320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * with the byte or character stream, or, if neither is set, use 141320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this value as a writeable URI (probably a file name). 142320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 143320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param systemId The system identifier as a URI string. 144320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 145320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public void setSystemId(String systemId) { 146320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson this.systemId = systemId; 147320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 148320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 149320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 150320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Set the system ID from a <code>File</code> reference.</p> 151f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 152320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Note the use of {@link File#toURI()} and {@link File#toURL()}. 153320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <code>toURI()</code> is preferred and used if possible. 154320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * To allow JAXP 1.3 to run on J2SE 1.3, <code>toURL()</code> 155320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * is used if a {@link NoSuchMethodException} is thrown by the attempt 156320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * to use <code>toURI()</code>.</p> 157320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 158320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param f Must a non-null File reference. 159320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 160320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public void setSystemId(File f) { 161320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson this.systemId = FilePathToURI.filepath2URI(f.getAbsolutePath()); 162320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 163320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 164320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 165320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Get the system identifier that was set with setSystemId. 166320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 167320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return The system identifier that was set with setSystemId, or null 168320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * if setSystemId was not called. 169320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 170320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public String getSystemId() { 171320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson return systemId; 172320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 173320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 174320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson ////////////////////////////////////////////////////////////////////// 175320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson // Internal state. 176320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson ////////////////////////////////////////////////////////////////////// 177320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 178320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 179320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The systemID that may be used in association 180320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * with the byte or character stream, or, if neither is set, use 181320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this value as a writeable URI (probably a file name). 182320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 183320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson private String systemId; 184320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 185320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 186320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The byte stream that is to be written to. 187320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 188320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson private OutputStream outputStream; 189320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 190320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 191320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The character stream that is to be written to. 192320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 193320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson private Writer writer; 194320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 195