ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/experimental/server/XMLReader/XMLPacketMaker.java
Revision: 1.7
Committed: Tue Nov 14 12:01:19 2000 UTC (23 years, 5 months ago) by pjm2
Branch: MAIN
Changes since 1.6: +12 -6 lines
Log Message:
Added a function to XMLPacket.java that allows the entire contents of the
packet to be echoed to the screen.  The main method of XMLPacketMaker now
makes use of this feature.

File Contents

# Content
1 import java.io.*;
2 import java.util.ArrayList;
3
4 import org.xml.sax.*;
5
6 import javax.xml.parsers.SAXParserFactory;
7 import javax.xml.parsers.ParserConfigurationException;
8 import javax.xml.parsers.SAXParser;
9
10 // Paul Mutton, pjm2@ukc.ac.uk
11
12 // XMLPacketMaker - Creates an XMLPacket object.
13 public class XMLPacketMaker extends HandlerBase {
14
15 public XMLPacketMaker () {
16 // default no-args constructor.
17 }
18
19 // Constructor for accepting a reference to an XMLPacket
20 public XMLPacketMaker (XMLPacket packet) {
21 this.packet = packet;
22 }
23
24 public static void main(String[] args){
25 if (args.length != 1) {
26 System.err.println ("Usage: cmd filename");
27 System.exit (1);
28 }
29
30 // Use the default (non-validating) parser
31 SAXParserFactory factory = SAXParserFactory.newInstance();
32 try {
33 // Set up output stream
34 out = new OutputStreamWriter (System.out, "UTF8");
35
36 // Create the XMLPacket to store values in.
37 packet = new XMLPacket();
38
39 // Parse the input
40 SAXParser saxParser = factory.newSAXParser();
41 saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
42
43 // By means of example, print out some things from the packet: -
44 System.out.println("bung.wibble="+packet.getParam("bung.wibble"));
45 System.out.println("bung.ping.value1="+packet.getParam("bung.ping.value1"));
46
47 // Print out the entire contents of the packet.
48 packet.printAll();
49
50 } catch (Throwable t) {
51 t.printStackTrace ();
52 }
53 System.exit (0);
54 }
55
56 static private Writer out;
57 private String indentString = " "; // Amount to indent
58 private int indentLevel = 0;
59
60 // For storing the tag heirarchy.
61 private ArrayList tagList = new ArrayList();
62 static private XMLPacket packet = null;
63
64 //===========================================================
65 // SAX DocumentHandler methods
66 //===========================================================
67
68 public void startDocument () throws SAXException {
69 nl();
70 nl();
71 emit ("START DOCUMENT");
72 nl();
73 emit ("<?xml version='1.0' encoding='UTF-8'?>");
74 }
75
76 public void endDocument () throws SAXException {
77 nl(); emit ("END DOCUMENT");
78 try {
79 nl();
80 out.flush ();
81 } catch (IOException e) {
82 throw new SAXException ("I/O error", e);
83 }
84 }
85
86 public void startElement (String name, AttributeList attrs) throws SAXException {
87 indentLevel++;
88 tagList.add(name);
89 nl(); emit ("ELEMENT: ");
90 emit ("<"+name);
91 if (attrs != null) {
92 for (int i = 0; i < attrs.getLength (); i++) {
93 nl();
94 emit(" ATTR: ");
95 emit (attrs.getName (i));
96 emit ("\t\"");
97 emit (attrs.getValue (i));
98 emit ("\"");
99 }
100 }
101 if (attrs.getLength() > 0) nl();
102 emit (">");
103 }
104
105 public void endElement (String name) throws SAXException {
106 nl();
107 emit ("END_ELM: ");
108 emit ("</"+name+">");
109 tagList.remove(tagList.size()-1);
110 indentLevel--;
111 }
112
113 public void characters (char[] buf, int offset, int len) throws SAXException {
114 nl(); emit ("CHARS: ");
115 String s = new String(buf, offset, len);
116 if (!s.trim().equals("")) {
117 emit (s);
118 packet.addParam(getPath(), s);
119 }
120 }
121
122 //===========================================================
123 // Helpers ...
124 //===========================================================
125
126 // Wrap I/O exceptions in SAX exceptions, to
127 // suit handler signature requirements
128 private void emit (String s) throws SAXException {
129 try {
130 out.write (s);
131 out.flush ();
132 } catch (IOException e) {
133 throw new SAXException ("I/O error", e);
134 }
135 }
136
137 // Start a new line
138 // and indent the next line appropriately
139 private void nl () throws SAXException {
140 String lineEnd = System.getProperty("line.separator");
141 try {
142 out.write (lineEnd);
143 for (int i=0; i < indentLevel; i++) out.write(indentString);
144 } catch (IOException e) {
145 throw new SAXException ("I/O error", e);
146 }
147 }
148
149 // Return the heirarchical string to be used as a key value
150 // in the XMLPacket.
151 private String getPath () {
152 String path = (String)tagList.get(0);
153 if (tagList.size() > 0) {
154 for (int i = 1 ; i < tagList.size() ; i++) {
155 path = path + "." + (String)tagList.get(i);
156 }
157 }
158 return path;
159 }
160 }