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

# User Rev Content
1 ajm 1.5 //---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 pjm2 1.7 * @author $Author: tdb1 $
17     * @version $Id: XMLStringParser.java,v 1.6 2001/01/28 05:47:05 tdb1 Exp $
18 ajm 1.5 */
19     public class XMLStringParser extends HandlerBase {
20    
21     //---FINAL ATTRIBUTES---
22    
23     /**
24     * The current CVS revision of this class
25     */
26 pjm2 1.7 public final String REVISION = "$Revision: 1.6 $";
27 ajm 1.5
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 pjm2 1.7 packet.addParam(getPath(), s);
105 ajm 1.5 }
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 tdb 1.6 /**
148     * To keep track of our identation level
149     */
150 ajm 1.5 private int indentLevel = 0;
151 tdb 1.6
152     /**
153     * An ArrayList of tags
154     */
155 ajm 1.5 private ArrayList tagList = new ArrayList();
156 tdb 1.6
157     /**
158     * A reference to the XMLPacket we are making
159     */
160 ajm 1.5 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     }