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.15
Committed: Sat May 18 18:16:04 2002 UTC (21 years, 11 months ago) by tdb
Branch: MAIN
Changes since 1.14: +22 -3 lines
Log Message:
i-scream is now licensed under the GPL. I've added the GPL headers to every
source file, and put a full copy of the license in the appropriate places.
I think I've covered everything. This is going to be a mad commit ;)

File Contents

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