1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 /* 19 * $Id: $ 20 */ 21 22 package org.apache.xml.serializer.dom3; 23 24 import org.w3c.dom.ls.LSOutput; 25 26 import java.io.Writer; 27 import java.io.OutputStream; 28 29 /** 30 * This is a copy of the Xerces-2J class org.apache.xerces.dom.DOMOutputImpl.java 31 * 32 * This class represents an output destination for data. 33 * This interface allows an application to encapsulate information about an 34 * output destination in a single object, which may include a URI, a byte stream 35 * (possibly with a specifiedencoding), a base URI, and/or a character stream. 36 * The exact definitions of a byte stream and a character stream are binding 37 * dependent. 38 * The application is expected to provide objects that implement this interface 39 * whenever such objects are needed. The application can either provide its 40 * own objects that implement this interface, or it can use the generic factory 41 * method DOMImplementationLS.createLSOutput() to create objects that 42 * implement this interface. 43 * The DOMSerializer will use the LSOutput object to determine where to 44 * serialize the output to. The DOMSerializer will look at the different 45 * outputs specified in the LSOutput in the following order to know which one 46 * to output to, the first one that data can be output to will be used: 47 * 1.LSOutput.characterStream 48 * 2.LSOutput.byteStream 49 * 3.LSOutput.systemId 50 * LSOutput objects belong to the application. The DOM implementation will 51 * never modify them (though it may make copies and modify the copies, 52 * if necessary). 53 * 54 * 55 * @author Arun Yadav, Sun Microsytems 56 * @author Gopal Sharma, Sun Microsystems 57 * @version $Id : 58 * @xsl.usage internal 59 */ 60 61 final class DOMOutputImpl implements LSOutput { 62 63 private Writer fCharStream = null; 64 private OutputStream fByteStream = null; 65 private String fSystemId = null; 66 private String fEncoding = null; 67 68 /** 69 * Default Constructor 70 */ DOMOutputImpl()71 DOMOutputImpl() {} 72 73 /** 74 * An attribute of a language and binding dependent type that represents a 75 * writable stream of bytes. If the application knows the character encoding 76 * of the byte stream, it should set the encoding attribute. Setting the 77 * encoding in this way will override any encoding specified in an XML 78 * declaration in the data. 79 */ 80 getCharacterStream()81 public Writer getCharacterStream(){ 82 return fCharStream; 83 }; 84 85 /** 86 * An attribute of a language and binding dependent type that represents a 87 * writable stream of bytes. If the application knows the character encoding 88 * of the byte stream, it should set the encoding attribute. Setting the 89 * encoding in this way will override any encoding specified in an XML 90 * declaration in the data. 91 */ 92 setCharacterStream(Writer characterStream)93 public void setCharacterStream(Writer characterStream){ 94 fCharStream = characterStream; 95 }; 96 97 /** 98 * Depending on the language binding in use, this attribute may not be 99 * available. An attribute of a language and binding dependent type that 100 * represents a writable stream to which 16-bit units can be output. The 101 * application must encode the stream using UTF-16 (defined in [Unicode] and 102 * Amendment 1 of [ISO/IEC 10646]). 103 */ 104 getByteStream()105 public OutputStream getByteStream(){ 106 return fByteStream; 107 }; 108 109 /** 110 * Depending on the language binding in use, this attribute may not be 111 * available. An attribute of a language and binding dependent type that 112 * represents a writable stream to which 16-bit units can be output. The 113 * application must encode the stream using UTF-16 (defined in [Unicode] and 114 * Amendment 1 of [ISO/IEC 10646]). 115 */ 116 setByteStream(OutputStream byteStream)117 public void setByteStream(OutputStream byteStream){ 118 fByteStream = byteStream; 119 }; 120 121 /** 122 * The system identifier, a URI reference [IETF RFC 2396], for this output 123 * destination. If the application knows the character encoding of the 124 * object pointed to by the system identifier, it can set the encoding 125 * using the encoding attribute. If the system ID is a relative URI 126 * reference (see section 5 in [IETF RFC 2396]), the behavior is 127 * implementation dependent. 128 */ 129 getSystemId()130 public String getSystemId(){ 131 return fSystemId; 132 }; 133 134 /** 135 * The system identifier, a URI reference [IETF RFC 2396], for this output 136 * destination. If the application knows the character encoding of the 137 * object pointed to by the system identifier, it can set the encoding 138 * using the encoding attribute. If the system ID is a relative URI 139 * reference (see section 5 in [IETF RFC 2396]), the behavior is 140 * implementation dependent. 141 */ 142 setSystemId(String systemId)143 public void setSystemId(String systemId){ 144 fSystemId = systemId; 145 }; 146 147 /** 148 * The character encoding, if known. The encoding must be a string 149 * acceptable for an XML encoding declaration ([XML 1.0] section 4.3.3 150 * "Character Encoding in Entities"). This attribute has no effect when the 151 * application provides a character stream or string data. For other sources 152 * of input, an encoding specified by means of this attribute will override 153 * any encoding specified in the XML declaration or the Text declaration, or 154 * an encoding obtained from a higher level protocol, such as HTTP 155 * [IETF RFC 2616]. 156 */ 157 getEncoding()158 public String getEncoding(){ 159 return fEncoding; 160 }; 161 162 /** 163 * The character encoding, if known. The encoding must be a string 164 * acceptable for an XML encoding declaration ([XML 1.0] section 4.3.3 165 * "Character Encoding in Entities"). This attribute has no effect when the 166 * application provides a character stream or string data. For other sources 167 * of input, an encoding specified by means of this attribute will override 168 * any encoding specified in the XML declaration or the Text declaration, or 169 * an encoding obtained from a higher level protocol, such as HTTP 170 * [IETF RFC 2616]. 171 */ 172 setEncoding(String encoding)173 public void setEncoding(String encoding){ 174 fEncoding = encoding; 175 }; 176 177 }//DOMOutputImpl 178