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.7
Committed: Mon Jan 29 15:36:33 2001 UTC (23 years, 3 months ago) by pjm2
Branch: MAIN
Changes since 1.6: +4 -6 lines
Log Message:
The 'character' helper method has been altered to add empty items to the
hash.  This means that a record still exists in the hash for (for
example) the user list, even if there are no users.

File Contents

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