KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openlaszlo > iv > flash > xml > XMLHelper


1 /*
2  * $Id: XMLHelper.java,v 1.4 2002/04/02 21:50:35 awason Exp $
3  *
4  * ===========================================================================
5  *
6  * The JGenerator Software License, Version 1.0
7  *
8  * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by Dmitry Skavish
24  * (skavish@usa.net, http://www.flashgap.com/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The name "The JGenerator" must not be used to endorse or promote
29  * products derived from this software without prior written permission.
30  * For written permission, please contact skavish@usa.net.
31  *
32  * 5. Products derived from this software may not be called "The JGenerator"
33  * nor may "The JGenerator" appear in their names without prior written
34  * permission of Dmitry Skavish.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
40  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  */

50
51 package org.openlaszlo.iv.flash.xml;
52
53 import java.io.*;
54 import java.net.*;
55 import java.util.*;
56
57 import java.io.FileInputStream JavaDoc;
58 import java.io.FileNotFoundException JavaDoc;
59 import java.util.Properties JavaDoc;
60
61 import org.w3c.dom.*;
62 import org.w3c.dom.traversal.*;
63 import org.xml.sax.SAXException JavaDoc;
64 import org.xml.sax.InputSource JavaDoc;
65
66 import javax.xml.parsers.*;
67 import javax.xml.transform.*;
68
69 import org.openlaszlo.iv.flash.api.*;
70 import org.openlaszlo.iv.flash.url.*;
71 import org.openlaszlo.iv.flash.util.*;
72
73 import org.openlaszlo.iv.flash.cache.*;
74
75 import org.xml.sax.EntityResolver JavaDoc;
76 import org.xml.sax.InputSource JavaDoc;
77
78 /**
79  * XMl Helper class.
80  * <P>
81  * Provides various methods for XML stuff
82  *
83  * @author Dmitry Skavish
84  */

85 public class XMLHelper {
86
87     private static XMLFactory factory = XMLFactory.getFactory();
88
89     /**
90      * Returns XMLFactory
91      *
92      * @return xml factory
93      */

94     public static XMLFactory getXMLFactory() {
95         return factory;
96     }
97
98     /**
99      * Returns DocumentBuilder or null
100      *
101      * @return DocumentBuilder or null
102      */

103     public static DocumentBuilder getDocumentBuilder() {
104         try {
105             return factory.getDocumentBuilder();
106         } catch( ParserConfigurationException e ) {
107             Log.logRB(e);
108             return null;
109         }
110     }
111
112     /**
113      * Creates new empty xml document
114      *
115      * @return new empty xml document
116      */

117     public static Document newDocument() {
118         return getDocumentBuilder().newDocument();
119     }
120
121     /**
122      * Parses input stream of some xml data into xml document.
123      *
124      * @param is xml input stream
125      * @return xml document
126      * @exception IOException
127      * @exception SAXException
128      */

129     public static Document parse( InputStream JavaDoc is ) throws IOException, SAXException JavaDoc {
130         return parse( new InputSource JavaDoc(is) );
131     }
132
133     /**
134      * Parses input source of some xml data into xml document.
135      *
136      * @param isrc xml input source
137      * @return xml document
138      * @exception IOException
139      * @exception SAXException
140      */

141     public static Document parse( InputSource JavaDoc isrc ) throws IOException, SAXException JavaDoc {
142         return getDocumentBuilder().parse( isrc );
143     }
144
145     /**
146      * Parses xml document specified by url.
147      * <P>
148      * First tries to retrieve xml document from cache.
149      * If it is not cached then reads it, parses it and caches (if needed).
150      *
151      * @param url url to xml document
152      * @return xml document
153      * @exception IOException
154      * @exception SAXException
155      */

156     public static Document getDocument( IVUrl url ) throws IOException, SAXException JavaDoc {
157         Document doc = XMLCache.getXMLDocument( url );
158         if( doc != null ) return doc;
159         doc = parse( url.getInputStream() );
160         XMLCache.addXMLDocument( url, doc );
161         return doc;
162     }
163
164     /**
165      * Parses xml document specified by url and resolves it to one node.
166      * <P>
167      * First tries to retrieve xml document from cache.
168      * If it is not cached then reads it, parses it and caches (if needed).
169      * Then if there is no any xpath expression in url returns Document itself as a xml node.
170      * If there is some Xpath then evaluates this XPath to one xml node and returns it.
171      * <P>
172      * The url's format: <url itself>#<xpath expression which returns single node><BR>
173      * Example: <CODE>http://myserver.com/mydata.xml#/doc/item/firstNode</CODE>
174      *
175      * @param url url to xml document
176      * @return xml node
177      * @exception IOException
178      * @exception SAXException
179      */

180     public static Node getNode( IVUrl url ) throws IOException, SAXException JavaDoc {
181         Document doc = getDocument( url );
182         String JavaDoc ref = url.getRef();
183         if( ref == null ) return doc;
184         Node node;
185         try {
186             node = getXMLFactory().getXPathProcessor().selectSingleNode(ref, doc);
187         } catch( TransformerException e ) {
188             throw new SAXException JavaDoc(e);
189         }
190         return node;
191     }
192
193 }
194
Popular Tags