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

# User Rev Content
1 tdb 1.15 /*
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 ajm 1.5 //---PACKAGE DECLARATION---
21 tdb 1.13 package uk.org.iscream.cms.server.util;
22 ajm 1.5
23     //---IMPORTS---
24     import java.io.*;
25 tdb 1.12 import java.util.LinkedList;
26     import java.util.Iterator;
27 ajm 1.5 import org.xml.sax.*;
28 tdb 1.8 import org.xml.sax.helpers.*;
29 tdb 1.10 import javax.xml.parsers.*;
30 ajm 1.5
31     /**
32     * XMLStringParser - Used to assist in creating XMLPacket objects.
33     *
34 tdb 1.15 * @author $Author: tdb $
35     * @version $Id: XMLStringParser.java,v 1.14 2002/03/13 12:44:55 tdb Exp $
36 ajm 1.5 */
37 tdb 1.8 public class XMLStringParser extends DefaultHandler {
38 ajm 1.5
39     //---FINAL ATTRIBUTES---
40    
41     /**
42     * The current CVS revision of this class
43     */
44 tdb 1.15 public final String REVISION = "$Revision: 1.14 $";
45 ajm 1.5
46     //---STATIC METHODS---
47    
48     //---CONSTRUCTORS---
49    
50     /**
51     * No-args constructor. Generally not used.
52     */
53     public XMLStringParser () {
54 tdb 1.9 _packet = new XMLPacket();
55 ajm 1.5 }
56    
57     /**
58     * Constructor for accepting a reference to an XMLPacket
59     */
60     public XMLStringParser (XMLPacket packet) {
61 tdb 1.9 _packet = packet;
62 ajm 1.5 }
63    
64     //---PUBLIC METHODS---
65    
66     //===========================================================
67     // SAX DocumentHandler methods
68     //===========================================================
69    
70 tdb 1.9 /**
71     * Add each tag's attribute to the XMLPacket.
72 ajm 1.5 * 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 tdb 1.9 public void startElement (String uri, String name, String qName, Attributes atts) {
81 tdb 1.14 _tagList.addLast(qName);
82 tdb 1.9 if (atts != null) {
83     for (int i = 0; i < atts.getLength (); i++) {
84 tdb 1.14 _packet.addParam(getPath()+".attributes."+atts.getQName(i), atts.getValue(i));
85 ajm 1.5 }
86     }
87     }
88 tdb 1.10
89 ajm 1.5 /**
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 tdb 1.9 public void endElement (String uri, String name, String qName) {
95 tdb 1.12 _tagList.removeLast();
96 ajm 1.5 }
97 tdb 1.10
98 ajm 1.5 /**
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 tdb 1.9 _packet.addParam(getPath(), s);
107 ajm 1.5 }
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 tdb 1.13 * This uses the uk.org.iscream.cms.server.util.NameFormat class
114 ajm 1.5 * 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 tdb 1.12 String path = "";
137 tdb 1.9 if (_tagList.size() > 0) {
138 tdb 1.12 Iterator i = _tagList.iterator();
139     path = (String) i.next();
140     while(i.hasNext()) {
141     path = path + "." + (String) i.next();
142 ajm 1.5 }
143     }
144     return path;
145     }
146    
147     //---ACCESSOR/MUTATOR METHODS---
148 tdb 1.10
149     /**
150     * Accessor to the XMLPacket.
151     */
152     public XMLPacket getXMLPacket() {
153     return _packet;
154     }
155 ajm 1.5
156     //---ATTRIBUTES---
157 tdb 1.6
158     /**
159 tdb 1.12 * A LinkedList of tags
160 tdb 1.6 */
161 tdb 1.12 private LinkedList _tagList = new LinkedList();
162 tdb 1.6
163     /**
164     * A reference to the XMLPacket we are making
165     */
166 tdb 1.9 private XMLPacket _packet;
167 ajm 1.5
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     }