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

# User Rev Content
1 pjm2 1.3 import java.io.*;
2     import java.util.ArrayList;
3    
4     import org.xml.sax.*;
5    
6 pjm2 1.7 import javax.xml.parsers.SAXParserFactory;
7     import javax.xml.parsers.ParserConfigurationException;
8     import javax.xml.parsers.SAXParser;
9 pjm2 1.3
10 pjm2 1.7 // Paul Mutton, pjm2@ukc.ac.uk
11 pjm2 1.3
12 pjm2 1.7 // XMLPacketMaker - Creates an XMLPacket object.
13 pjm2 1.3 public class XMLPacketMaker extends HandlerBase {
14 pjm2 1.5
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 pjm2 1.3 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 pjm2 1.5 // Create the XMLPacket to store values in.
37     packet = new XMLPacket();
38    
39 pjm2 1.3 // Parse the input
40     SAXParser saxParser = factory.newSAXParser();
41 pjm2 1.5 saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
42    
43 pjm2 1.7 // By means of example, print out some things from the packet: -
44 pjm2 1.6 System.out.println("bung.wibble="+packet.getParam("bung.wibble"));
45 pjm2 1.7 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 pjm2 1.3
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 pjm2 1.4 // For storing the tag heirarchy.
61 pjm2 1.3 private ArrayList tagList = new ArrayList();
62 pjm2 1.5 static private XMLPacket packet = null;
63 pjm2 1.3
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 pjm2 1.5 tagList.add(name);
89 pjm2 1.3 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 pjm2 1.5 tagList.remove(tagList.size()-1);
110 pjm2 1.3 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 pjm2 1.5 if (!s.trim().equals("")) {
117     emit (s);
118 pjm2 1.6 packet.addParam(getPath(), s);
119 pjm2 1.5 }
120 pjm2 1.3 }
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 pjm2 1.6 }
148    
149 pjm2 1.7 // Return the heirarchical string to be used as a key value
150     // in the XMLPacket.
151 pjm2 1.6 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 pjm2 1.3 }
160     }