OSDN Git Service

* external/w3c_dom/Makefile.am: New file.
[pf3gnuchains/gcc-fork.git] / libjava / javax / xml / transform / sax / SAXSource.java
1 /* SAXSource.java -- 
2    Copyright (C) 2004 Free Software Foundation, Inc.
3
4 This file is part of GNU Classpath.
5
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING.  If not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA.
20
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library.  Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
25
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module.  An independent module is a module which is not derived from
33 or based on this library.  If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so.  If you do not wish to do so, delete this
36 exception statement from your version. */
37
38 package javax.xml.transform.sax;
39
40 import java.io.InputStream;
41 import java.io.Reader;
42 import javax.xml.transform.Source;
43 import javax.xml.transform.stream.StreamSource;
44 import org.xml.sax.InputSource;
45 import org.xml.sax.XMLReader;
46
47 /**
48  * Specifies a SAX XML source. This is a tuple of input source and SAX
49  * parser.
50  *
51  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
52  */
53 public class SAXSource
54   implements Source
55 {
56
57   /**
58    * Factory feature indicating that SAX sources are supported.
59    */
60   public static final String FEATURE =
61     "http://javax.xml.transform.sax.SAXSource/feature";
62
63   private XMLReader  xmlReader;
64   private InputSource  inputSource;
65
66   /**
67    * Default constructor.
68    */
69   public SAXSource()
70   {
71   }
72
73   /**
74    * Constructor with a SAX parser and input source.
75    */
76   public SAXSource(XMLReader reader, InputSource inputSource)
77   {
78     xmlReader = reader;
79     this.inputSource = inputSource;
80   }
81
82   /**
83    * Constructor with an input source.
84    * The SAX parser will be instantiated by the transformer.
85    */
86   public SAXSource(InputSource inputSource)
87   {
88     this.inputSource = inputSource;
89   }
90
91   /**
92    * Sets the SAX parser to be used by this source.
93    * If null, the transformer will instantiate its own parser.
94    */
95   public void setXMLReader(XMLReader reader)
96   {
97     xmlReader = reader;
98   }
99
100   /**
101    * Returns the SAX parser to be used by this source.
102    * If null, the transformer will instantiate its own parser.
103    */
104   public XMLReader getXMLReader()
105   {
106     return xmlReader;
107   }
108
109   /**
110    * Sets the input source to parse.
111    */
112   public void setInputSource(InputSource inputSource)
113   {
114     this.inputSource = inputSource;
115   }
116
117   /**
118    * Returns the input source to parse.
119    */
120   public InputSource getInputSource()
121   {
122     return inputSource;
123   }
124
125   /**
126    * Sets the system ID for this source.
127    */
128   public void setSystemId(String systemId)
129   {
130     if (inputSource != null)
131       {
132         inputSource.setSystemId(systemId);
133       }
134   }
135
136   /**
137    * Returns the system ID for this source.
138    */
139   public String getSystemId()
140   {
141     if (inputSource != null)
142       {
143         return inputSource.getSystemId();
144       }
145     return null;
146   }
147
148   /**
149    * Converts a source into a SAX input source.
150    * This method can use a StreamSource or the system ID.
151    * @return an input source or null
152    */
153   public static InputSource sourceToInputSource(Source source)
154   {
155     InputSource in = null;
156     if (source instanceof SAXSource)
157       {
158         in = ((SAXSource) source).getInputSource();
159       }
160     else if (source instanceof StreamSource)
161       {
162         StreamSource streamSource = (StreamSource) source;
163         InputStream inputStream = streamSource.getInputStream();
164         if (inputStream != null)
165           {
166             in = new InputSource(inputStream);
167           }
168         else
169           {
170             Reader reader = streamSource.getReader();
171             if (reader != null)
172               {
173                 in = new InputSource(reader);
174               }
175           }
176         String publicId = streamSource.getPublicId();
177         if (publicId != null && in != null)
178           {
179             in.setPublicId(publicId);
180           }
181       }
182     String systemId = source.getSystemId();
183     if (systemId != null)
184       {
185         if (in == null)
186           {
187             in = new InputSource(systemId);
188           }
189         else
190           {
191             in.setSystemId(systemId);
192           }
193       }
194     return in;
195   }
196
197 }