ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/util/uk/org/iscream/cms/util/XMLStringParser.java
Revision: 1.8
Committed: Sat Mar 10 00:49:39 2001 UTC (23 years, 1 month ago) by tdb
Branch: MAIN
Changes since 1.7: +7 -6 lines
Log Message:
A new parsing library.

File Contents

# User Rev Content
1 ajm 1.5 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.util;
3    
4     //---IMPORTS---
5     import java.io.*;
6     import java.util.ArrayList;
7    
8     import org.xml.sax.*;
9 tdb 1.8 import org.xml.sax.helpers.*;
10 ajm 1.5 import javax.xml.parsers.SAXParserFactory;
11     import javax.xml.parsers.ParserConfigurationException;
12     import javax.xml.parsers.SAXParser;
13    
14     /**
15     * XMLStringParser - Used to assist in creating XMLPacket objects.
16     *
17 tdb 1.8 * @author $Author: pjm2 $
18     * @version $Id: XMLStringParser.java,v 1.7 2001/01/29 15:36:33 pjm2 Exp $
19 ajm 1.5 */
20 tdb 1.8 public class XMLStringParser extends DefaultHandler {
21 ajm 1.5
22     //---FINAL ATTRIBUTES---
23    
24     /**
25     * The current CVS revision of this class
26     */
27 tdb 1.8 public final String REVISION = "$Revision: 1.7 $";
28 ajm 1.5
29     //---STATIC METHODS---
30    
31     //---CONSTRUCTORS---
32    
33     /**
34     * No-args constructor. Generally not used.
35     */
36     public XMLStringParser () {
37     this.packet = new XMLPacket();
38     }
39    
40     /**
41     * Constructor for accepting a reference to an XMLPacket
42     */
43     public XMLStringParser (XMLPacket packet) {
44     this.packet = packet;
45     }
46    
47     //---PUBLIC METHODS---
48    
49     /**
50     * Accessor to the XMLPacket.
51     */
52     public XMLPacket getXMLPacket() {
53     return packet;
54     }
55    
56     //===========================================================
57     // SAX DocumentHandler methods
58     //===========================================================
59    
60     public void startDocument () throws SAXException {
61     //System.out.println("XMLPacketParser - Starting parse process...");
62     }
63    
64     public void endDocument () throws SAXException {
65     //System.out.println("XMLPacketParser - I just finished parsing an XML String.");
66     }
67    
68     /** Add each tag's attribute to the XMLPacket.
69     * Note that all attributes within an opening tag are
70     * stored as "someroot.sometag.attributes.attribute_name"
71     * E.g. If <packet> is the root node, then:
72     * <packet machine_name="raptor">
73     * is stored as:
74     * "packet.attributes.machine_name"
75     * within the XMLPacket.
76     */
77 tdb 1.8 public void startElement (String name, Attributes attrs) throws SAXException {
78 ajm 1.5 indentLevel++;
79     tagList.add(name);
80     if (attrs != null) {
81     for (int i = 0; i < attrs.getLength (); i++) {
82 tdb 1.8 packet.addParam(getPath()+".attributes."+attrs.getLocalName(i), attrs.getValue(i));
83 ajm 1.5 }
84     }
85     }
86    
87     /**
88     * When an XML element is finished with, we must remove
89     * the tag name from the tagList and decrement the indent
90     * level.
91     */
92     public void endElement (String name) throws SAXException {
93     tagList.remove(tagList.size()-1);
94     indentLevel--;
95     }
96    
97     /**
98     * Any text falling within a pair of terminal tags must
99     * be added to the XMLPacket. Trim leading and trailing
100     * spaces and do not bother to add if there is no data
101     * specified within the tags.
102     */
103     public void characters (char[] buf, int offset, int len) throws SAXException {
104     String s = new String(buf, offset, len);
105 pjm2 1.7 packet.addParam(getPath(), s);
106 ajm 1.5 }
107    
108     /**
109     * Overrides the {@link java.lang.Object#toString() Object.toString()}
110     * method to provide clean logging (every class should have this).
111     *
112     * This uses the uk.ac.ukc.iscream.util.NameFormat class
113     * to format the toString()
114     *
115     * @return the name of this class and its CVS revision
116     */
117     public String toString() {
118     return FormatName.getName(
119     _name,
120     getClass().getName(),
121     REVISION);
122     }
123    
124     //---PRIVATE METHODS---
125    
126     //===========================================================
127     // Helpers ...
128     //===========================================================
129    
130     /**
131     * Return the heirarchical string to be used as a key value
132     * in the XMLPacket.
133     */
134     private String getPath () {
135     String path = (String)tagList.get(0);
136     if (tagList.size() > 0) {
137     for (int i = 1 ; i < tagList.size() ; i++) {
138     path = path + "." + (String)tagList.get(i);
139     }
140     }
141     return path;
142     }
143    
144     //---ACCESSOR/MUTATOR METHODS---
145    
146     //---ATTRIBUTES---
147    
148 tdb 1.6 /**
149     * To keep track of our identation level
150     */
151 ajm 1.5 private int indentLevel = 0;
152 tdb 1.6
153     /**
154     * An ArrayList of tags
155     */
156 ajm 1.5 private ArrayList tagList = new ArrayList();
157 tdb 1.6
158     /**
159     * A reference to the XMLPacket we are making
160     */
161 ajm 1.5 private XMLPacket packet;
162    
163     /**
164     * This is the friendly identifier of the
165     * component this class is running in.
166     * eg, a Filter may be called "filter1",
167     * If this class does not have an owning
168     * component, a name from the configuration
169     * can be placed here. This name could also
170     * be changed to null for utility classes.
171     */
172     private String _name = null;
173    
174     //---STATIC ATTRIBUTES---
175    
176     }