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: StreamSource.java 829971 2009-10-26 21:15:39Z mrglavas $
19320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
20320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpackage javax.xml.transform.stream;
21320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
22320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport java.io.File;
23320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport java.io.InputStream;
24320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport java.io.Reader;
25320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport javax.xml.transform.Source;
26320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
27320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/**
28320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Acts as an holder for a transformation Source in the form
29320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * of a stream of XML markup.</p>
30320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson *
31320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p><em>Note:</em> Due to their internal use of either a {@link Reader} or {@link InputStream} instance,
32320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <code>StreamSource</code> instances may only be used once.</p>
33320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson *
34320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @author <a href="Jeff.Suttor@Sun.com">Jeff Suttor</a>
35320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @version $Revision: 829971 $, $Date: 2009-10-26 14:15:39 -0700 (Mon, 26 Oct 2009) $
36320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */
37320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpublic class StreamSource implements Source {
38320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
39320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /** If {@link javax.xml.transform.TransformerFactory#getFeature}
40320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * returns true when passed this value as an argument,
41320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the Transformer supports Source input of this type.
42320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
43320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public static final String FEATURE =
44320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        "http://javax.xml.transform.stream.StreamSource/feature";
45f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
46320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
47320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>Zero-argument default constructor.  If this constructor is used, and
48320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * no Stream source is set using
49320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * {@link #setInputStream(java.io.InputStream inputStream)} or
50320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * {@link #setReader(java.io.Reader reader)}, then the
51320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <code>Transformer</code> will
52320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * create an empty source {@link java.io.InputStream} using
53320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * {@link java.io.InputStream#InputStream() new InputStream()}.</p>
54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
55320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @see javax.xml.transform.Transformer#transform(Source xmlSource, Result outputTarget)
56f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     */
57320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public StreamSource() { }
58320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
59320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
60320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Construct a StreamSource from a byte stream.  Normally,
61320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * a stream should be used rather than a reader, so
62320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the XML parser can resolve character encoding specified
63320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * by the XML declaration.
64320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
65320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>If this constructor is used to process a stylesheet, normally
66320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * setSystemId should also be called, so that relative URI references
67320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * can be resolved.</p>
68320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
69320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param inputStream A valid InputStream reference to an XML stream.
70320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
71320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public StreamSource(InputStream inputStream) {
72320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setInputStream(inputStream);
73320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
74320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
75320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
76320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Construct a StreamSource from a byte stream.  Normally,
77320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * a stream should be used rather than a reader, so that
78320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the XML parser can resolve character encoding specified
79320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * by the XML declaration.
80320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
81320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>This constructor allows the systemID to be set in addition
82320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * to the input stream, which allows relative URIs
83320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * to be processed.</p>
84320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
85320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param inputStream A valid InputStream reference to an XML stream.
86320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param systemId Must be a String that conforms to the URI syntax.
87320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
88320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public StreamSource(InputStream inputStream, String systemId) {
89320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setInputStream(inputStream);
90320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setSystemId(systemId);
91320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
92320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
93320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
94320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Construct a StreamSource from a character reader.  Normally,
95320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * a stream should be used rather than a reader, so that
96320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the XML parser can resolve character encoding specified
97320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * by the XML declaration.  However, in many cases the encoding
98320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * of the input stream is already resolved, as in the case of
99320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * reading XML from a StringReader.
100320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
101320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param reader A valid Reader reference to an XML character stream.
102320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
103320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public StreamSource(Reader reader) {
104320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setReader(reader);
105320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
106320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
107320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
108320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Construct a StreamSource from a character reader.  Normally,
109320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * a stream should be used rather than a reader, so that
110320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the XML parser may resolve character encoding specified
111320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * by the XML declaration.  However, in many cases the encoding
112320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * of the input stream is already resolved, as in the case of
113320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * reading XML from a StringReader.
114320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
115320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param reader A valid Reader reference to an XML character stream.
116320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param systemId Must be a String that conforms to the URI syntax.
117320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
118320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public StreamSource(Reader reader, String systemId) {
119320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setReader(reader);
120320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setSystemId(systemId);
121320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
122320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
123320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
124320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Construct a StreamSource from a URL.
125320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
126320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param systemId Must be a String that conforms to the URI syntax.
127320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
128320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public StreamSource(String systemId) {
129320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.systemId = systemId;
130320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
131320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
132320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
133320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Construct a StreamSource from a File.
134320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
135320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param f Must a non-null File reference.
136320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
137320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public StreamSource(File f) {
138320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setSystemId(f);
139320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
140320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
141320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
142320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Set the byte stream to be used as input.  Normally,
143320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * a stream should be used rather than a reader, so that
144320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the XML parser can resolve character encoding specified
145320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * by the XML declaration.
146320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
147320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>If this Source object is used to process a stylesheet, normally
148320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * setSystemId should also be called, so that relative URL references
149320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * can be resolved.</p>
150320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
151320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param inputStream A valid InputStream reference to an XML stream.
152320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
153320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public void setInputStream(InputStream inputStream) {
154320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.inputStream = inputStream;
155320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
156320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
157320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
158320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Get the byte stream that was set with setByteStream.
159320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
160320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @return The byte stream that was set with setByteStream, or null
161320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * if setByteStream or the ByteStream constructor was not called.
162320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
163320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public InputStream getInputStream() {
164320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        return inputStream;
165320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
166320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
167320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
168320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Set the input to be a character reader.  Normally,
169320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * a stream should be used rather than a reader, so that
170320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the XML parser can resolve character encoding specified
171320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * by the XML declaration.  However, in many cases the encoding
172320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * of the input stream is already resolved, as in the case of
173320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * reading XML from a StringReader.
174320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
175320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param reader A valid Reader reference to an XML CharacterStream.
176320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
177320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public void setReader(Reader reader) {
178320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.reader = reader;
179320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
180320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
181320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
182320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Get the character stream that was set with setReader.
183320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
184320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @return The character stream that was set with setReader, or null
185320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * if setReader or the Reader constructor was not called.
186320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
187320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public Reader getReader() {
188320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        return reader;
189320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
190320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
191320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
192320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Set the public identifier for this Source.
193320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
194320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>The public identifier is always optional: if the application
195320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * writer includes one, it will be provided as part of the
196320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * location information.</p>
197320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
198320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param publicId The public identifier as a string.
199320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
200320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public void setPublicId(String publicId) {
201320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.publicId = publicId;
202320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
203320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
204320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
205320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Get the public identifier that was set with setPublicId.
206320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
207320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @return The public identifier that was set with setPublicId, or null
208320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * if setPublicId was not called.
209320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
210320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public String getPublicId() {
211320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        return publicId;
212320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
213320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
214320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
215320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Set the system identifier for this Source.
216320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
217320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>The system identifier is optional if there is a byte stream
218320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * or a character stream, but it is still useful to provide one,
219320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * since the application can use it to resolve relative URIs
220320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * and can include it in error messages and warnings (the parser
221320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * will attempt to open a connection to the URI only if
222320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * there is no byte stream or character stream specified).</p>
223320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
224320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param systemId The system identifier as a URL string.
225320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
226320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public void setSystemId(String systemId) {
227320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.systemId = systemId;
228320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
229320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
230320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
231320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Get the system identifier that was set with setSystemId.
232320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
233320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @return The system identifier that was set with setSystemId, or null
234320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * if setSystemId was not called.
235320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
236320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public String getSystemId() {
237320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        return systemId;
238320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
239320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
240320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
241320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Set the system ID from a File reference.
242320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
243320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param f Must a non-null File reference.
244320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
245320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public void setSystemId(File f) {
246320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.systemId = FilePathToURI.filepath2URI(f.getAbsolutePath());
247320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
248320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
249320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    //////////////////////////////////////////////////////////////////////
250320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    // Internal state.
251320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    //////////////////////////////////////////////////////////////////////
252320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
253320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
254320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * The public identifier for this input source, or null.
255320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
256320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    private String publicId;
257320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
258320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
259320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * The system identifier as a URL string, or null.
260320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
261320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    private String systemId;
262320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
263320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
264320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * The byte stream for this Source, or null.
265320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
266320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    private InputStream inputStream;
267320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
268320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
269320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * The character stream for this Source, or null.
270320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
271320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    private Reader reader;
272320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson}
273