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.12
Committed: Fri Mar 16 01:33:46 2001 UTC (23 years, 1 month ago) by tdb
Branch: MAIN
CVS Tags: PROJECT_COMPLETION
Changes since 1.11: +13 -17 lines
Log Message:
Further drive for efficiency. Now uses a LinkedList with an Iterator, over an
ArrayList. This should work better as we're only really iterating over it from
beginning to end. Also removed the indentLevel, because although it seemed to be
sensible.. it didn't actually get used anywhere.

File Contents

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