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.17
Committed: Wed Feb 5 14:27:59 2003 UTC (21 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.16: +3 -3 lines
Log Message:
Util package has been pulled out of the server. Next step will be to modify
the server and conient (and anything else?) to use this instead. New
package name is uk.org.iscream.cms.util. All the java files were moved with
a repo copy, so they retain their history.

File Contents

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