KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > fulcrum > intake > transform > XmlToAppData


1 package org.apache.fulcrum.intake.transform;
2
3 /* ====================================================================
4  * The Apache Software License, Version 1.1
5  *
6  * Copyright (c) 2001 The Apache Software Foundation. All rights
7  * reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * 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,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed by the
24  * Apache Software Foundation (http://www.apache.org/)."
25  * Alternately, this acknowledgment may appear in the software itself,
26  * if and wherever such third-party acknowledgments normally appear.
27  *
28  * 4. The names "Apache" and "Apache Software Foundation" and
29  * "Apache Turbine" must not be used to endorse or promote products
30  * derived from this software without prior written permission. For
31  * written permission, please contact apache@apache.org.
32  *
33  * 5. Products derived from this software may not be called "Apache",
34  * "Apache Turbine", nor may "Apache" appear in their name, without
35  * prior written permission of the Apache Software Foundation.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals on behalf of the Apache Software Foundation. For more
53  * information on the Apache Software Foundation, please see
54  * <http://www.apache.org/>.
55  */

56
57 import java.io.BufferedReader JavaDoc;
58 import java.io.FileReader JavaDoc;
59
60 import org.apache.fulcrum.intake.xmlmodel.AppData;
61 import org.apache.fulcrum.intake.xmlmodel.Rule;
62 import org.apache.fulcrum.intake.xmlmodel.XmlField;
63 import org.apache.fulcrum.intake.xmlmodel.XmlGroup;
64 import org.apache.xerces.parsers.SAXParser;
65 import org.xml.sax.Attributes JavaDoc;
66 import org.xml.sax.InputSource JavaDoc;
67 import org.xml.sax.SAXParseException JavaDoc;
68 import org.xml.sax.helpers.DefaultHandler JavaDoc;
69
70 /**
71  * A Class that is used to parse an input
72  * xml schema file and creates and AppData java structure.
73  * It uses apache Xerces to do the xml parsing.
74  *
75  * @author <a HREF="mailto:jmcnally@collab.net>John McNally</a>
76  * @version $Id: XmlToAppData.java,v 1.1 2004/11/12 10:25:56 epugh Exp $
77  */

78 public class XmlToAppData extends DefaultHandler JavaDoc
79 {
80     private AppData app;
81     private XmlGroup currGroup;
82     private XmlField currField;
83     private Rule currRule;
84     private String JavaDoc currElement;
85
86     /**
87      * Default custructor
88      */

89     public XmlToAppData()
90     {
91         app = new AppData();
92     }
93
94
95     /**
96      * Parse and xml input file and returns a newly
97      * created and populated AppData structure
98      */

99     public AppData parseFile(String JavaDoc xmlFile)
100         throws Exception JavaDoc
101     {
102         return parseFile(xmlFile, false);
103     }
104
105     /**
106      * Parse and xml input file and returns a newly
107      * created and populated AppData structure
108      */

109     public AppData parseFile(String JavaDoc xmlFile, boolean skipValidation)
110         throws Exception JavaDoc
111     {
112         SAXParser parser = new SAXParser();
113
114         // set the Resolver for the database DTD
115
DTDResolver dtdResolver = new DTDResolver();
116         parser.setEntityResolver(dtdResolver);
117
118         // We don't use an external content handler - we use this object
119
parser.setContentHandler(this);
120         parser.setErrorHandler(this);
121
122         // Validate the input file
123
parser.setFeature(
124             "http://apache.org/xml/features/validation/dynamic", true);
125         parser.setFeature("http://xml.org/sax/features/validation", true);
126
127         FileReader JavaDoc fr = new FileReader JavaDoc (xmlFile);
128         BufferedReader JavaDoc br = new BufferedReader JavaDoc (fr);
129         try
130         {
131             InputSource JavaDoc is = new InputSource JavaDoc (br);
132             parser.parse(is);
133         }
134         finally
135         {
136             br.close();
137         }
138
139         return app;
140     }
141
142
143
144     /**
145      * Handles opening elements of the xml file.
146      */

147     public void startElement(String JavaDoc uri, String JavaDoc localName,
148                              String JavaDoc rawName, Attributes JavaDoc attributes)
149     {
150         currElement = rawName;
151         if (rawName.equals("input-data"))
152         {
153             app.loadFromXML(attributes);
154         }
155         else if (rawName.equals("group"))
156         {
157             currGroup = app.addGroup(attributes);
158         }
159         else if (rawName.equals("field"))
160         {
161             currField = currGroup.addField(attributes);
162         }
163         else if (rawName.equals("rule"))
164         {
165             currRule = currField.addRule(attributes);
166         }
167     }
168
169
170     /**
171      * Handles the character data, which we are using to specify the
172      * error message.
173      */

174     public void characters(char[] mesgArray, int start, int length)
175     {
176         String JavaDoc cdata = new String JavaDoc(mesgArray, start, length).trim();
177         if ( "rule".equals(currElement) && cdata.length() > 0)
178         {
179             currRule.setMessage(cdata);
180         }
181         if ( "required-message".equals(currElement) && cdata.length() > 0)
182         {
183             currField.setIfRequiredMessage(cdata);
184         }
185     }
186
187     /**
188      * Callback function for the xml parser to give warnings.
189      *
190      * @param spe a <code>SAXParseException</code> value
191      */

192     public void warning(SAXParseException JavaDoc spe)
193     {
194         System.out.println("Warning Line: " + spe.getLineNumber() +
195                            " Row: " + spe.getColumnNumber() +
196                            " Msg: " + spe.getMessage());
197     }
198
199     /**
200      * Callback function for the xml parser to give errors.
201      *
202      * @param spe a <code>SAXParseException</code> value
203      */

204     public void error(SAXParseException JavaDoc spe)
205     {
206         System.out.println("Error Line: " + spe.getLineNumber() +
207                            " Row: " + spe.getColumnNumber() +
208                            " Msg: " + spe.getMessage());
209     }
210
211     /**
212      * Callback function for the xml parser to give fatalErrors.
213      *
214      * @param spe a <code>SAXParseException</code> value
215      */

216     public void fatalError(SAXParseException JavaDoc spe)
217     {
218         System.out.println("Fatal Error Line: " + spe.getLineNumber() +
219                            " Row: " + spe.getColumnNumber() +
220                            " Msg: " + spe.getMessage());
221     }
222 }
223
Popular Tags