KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfree > xml > FrontendDefaultHandler


1 /* ========================================================================
2  * JCommon : a free general purpose class library for the Java(tm) platform
3  * ========================================================================
4  *
5  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
6  *
7  * Project Info: http://www.jfree.org/jcommon/index.html
8  *
9  * This library is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22  * USA.
23  *
24  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
25  * in the United States and other countries.]
26  *
27  * ------------
28  * FrontendDefaultHandler.java
29  * ------------
30  * (C) Copyright 2002-2005, by Object Refinery Limited.
31  *
32  * Original Author: David Gilbert (for Object Refinery Limited);
33  * Contributor(s): -;
34  *
35  * $Id: FrontendDefaultHandler.java,v 1.8 2006/11/20 21:36:30 taqua Exp $
36  *
37  * Changes
38  * -------
39  * 02-Feb-2005 : Initial version.
40  *
41  */

42 package org.jfree.xml;
43
44 import java.net.MalformedURLException JavaDoc;
45 import java.net.URL JavaDoc;
46 import java.util.Iterator JavaDoc;
47 import java.util.Enumeration JavaDoc;
48
49 import org.jfree.util.Configuration;
50 import org.jfree.util.DefaultConfiguration;
51 import org.xml.sax.Locator JavaDoc;
52 import org.xml.sax.SAXException JavaDoc;
53 import org.xml.sax.helpers.DefaultHandler JavaDoc;
54
55 /**
56  * The frontenddefault handler connects the SAX-backend with the handler implementations.
57  * It must be the base class for all parser implementations used by the ParserFrontEnd.
58  *
59  * @author Thomas Morgner
60  */

61 public abstract class FrontendDefaultHandler extends DefaultHandler JavaDoc implements Configuration {
62     /**
63      * A key for the content base.
64      */

65     public static final String JavaDoc CONTENTBASE_KEY = "content-base";
66
67     /**
68      * Storage for the parser configuration.
69      */

70     private DefaultConfiguration parserConfiguration;
71
72     /**
73      * The DocumentLocator can be used to resolve the current parse position.
74      */

75     private Locator JavaDoc locator;
76
77     /**
78      * The current comment handler used to receive xml comments.
79      */

80     private final CommentHandler commentHandler;
81
82     /**
83      * Default constructor.
84      */

85     protected FrontendDefaultHandler() {
86         this.parserConfiguration = new DefaultConfiguration();
87         this.commentHandler = new CommentHandler();
88     }
89
90     /**
91      * Returns the comment handler that is used to collect comments.
92      *
93      * @return the comment handler.
94      */

95     public CommentHandler getCommentHandler() {
96         return this.commentHandler;
97     }
98
99     /**
100      * Receive an object for locating the origin of SAX document events.
101      * <p/>
102      * The locator allows the application to determine the end position of
103      * any document-related event, even if the parser is not reporting an
104      * error. Typically, the application will use this information for
105      * reporting its own errors (such as character content that does not
106      * match an application's business rules). The information returned by
107      * the locator is probably not sufficient for use with a search engine.
108      *
109      * @param locator the locator.
110      */

111     public void setDocumentLocator(final Locator JavaDoc locator) {
112         this.locator = locator;
113     }
114
115     /**
116      * Returns the current locator.
117      *
118      * @return the locator.
119      */

120     public Locator JavaDoc getLocator() {
121         return this.locator;
122     }
123
124     /**
125      * Returns the configuration property with the specified key.
126      *
127      * @param key the property key.
128      * @return the property value.
129      */

130     public String JavaDoc getConfigProperty(final String JavaDoc key) {
131         return getConfigProperty(key, null);
132     }
133
134     /**
135      * Returns the configuration property with the specified key (or the specified default value
136      * if there is no such property).
137      * <p/>
138      * If the property is not defined in this configuration, the code will lookup the property in
139      * the parent configuration.
140      *
141      * @param key the property key.
142      * @param defaultValue the default value.
143      * @return the property value.
144      */

145     public String JavaDoc getConfigProperty(final String JavaDoc key, final String JavaDoc defaultValue) {
146         return this.parserConfiguration.getConfigProperty(key, defaultValue);
147     }
148
149     /**
150      * Sets a parser configuration value.
151      *
152      * @param key the key.
153      * @param value the value.
154      */

155     public void setConfigProperty(final String JavaDoc key, final String JavaDoc value) {
156         if (value == null) {
157             this.parserConfiguration.remove(key);
158         }
159         else {
160             this.parserConfiguration.setProperty(key, value);
161         }
162     }
163
164     public Enumeration JavaDoc getConfigProperties()
165     {
166       return parserConfiguration.getConfigProperties();
167     }
168
169   /**
170      * Returns a new instance of the parser.
171      *
172      * @return a new instance of the parser.
173      */

174     public abstract FrontendDefaultHandler newInstance();
175
176     /**
177      * Returns all keys with the given prefix.
178      *
179      * @param prefix the prefix
180      * @return the iterator containing all keys with that prefix
181      */

182     public Iterator JavaDoc findPropertyKeys(final String JavaDoc prefix) {
183         return this.parserConfiguration.findPropertyKeys(prefix);
184     }
185
186     /**
187      * Returns the parse result. This method is called at the end of the
188      * parsing process and expects the generated object.
189      *
190      * @return the object.
191      * @throws SAXException if something went wrong.
192      */

193     public abstract Object JavaDoc getResult() throws SAXException JavaDoc;
194
195     /**
196      * Gets the ContentBase used to resolve relative URLs.
197      *
198      * @return the current contentbase, or null if no contentBase is set.
199      */

200     public URL JavaDoc getContentBase() {
201         final String JavaDoc contentBase = getConfigProperty(Parser.CONTENTBASE_KEY);
202         if (contentBase == null) {
203             return null;
204         }
205         try {
206             return new URL JavaDoc(contentBase);
207         }
208         catch (MalformedURLException JavaDoc mfe) {
209             throw new IllegalStateException JavaDoc("Content Base is illegal." + contentBase);
210         }
211     }
212
213     public Object JavaDoc clone () throws CloneNotSupportedException JavaDoc
214     {
215       final FrontendDefaultHandler o = (FrontendDefaultHandler) super.clone();
216       o.parserConfiguration = (DefaultConfiguration) parserConfiguration.clone();
217       return o;
218     }
219 }
220
Popular Tags