ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/experimental/server/XMLReader/XMLPacketMaker.java
(Generate patch)

Comparing experimental/server/XMLReader/XMLPacketMaker.java (file contents):
Revision 1.1 by pjm2, Mon Nov 13 12:31:27 2000 UTC vs.
Revision 1.7 by pjm2, Tue Nov 14 12:01:19 2000 UTC

# Line 1 | Line 1
1 < import java.io.*;
2 <
3 < import org.xml.sax.*;
4 <
5 < import javax.xml.parsers.SAXParserFactory;  
6 < import javax.xml.parsers.ParserConfigurationException;  
7 < import javax.xml.parsers.SAXParser;  
8 <
9 <
10 < public class XMLPacketMaker extends HandlerBase
11 < {
12 <    public static void main (String argv [])
13 <    {
14 <        if (argv.length != 1) {
15 <            System.err.println ("Usage: cmd filename.xml");
16 <            System.exit (1);
17 <        }
18 <
19 <        // Use the default (non-validating) parser
20 <        SAXParserFactory factory = SAXParserFactory.newInstance();
21 <        try {
22 <            // Set up output stream
23 <            out = new OutputStreamWriter (System.out, "UTF8");
24 <
25 <            // Parse the input
26 <            SAXParser saxParser = factory.newSAXParser();
27 <            saxParser.parse( new File(argv [0]), new Echo03() );
28 <
29 <        } catch (Throwable t) {
30 <            t.printStackTrace ();
31 <        }
32 <        System.exit (0);
33 <    }
34 <
35 <    static private Writer  out;
36 <    private String indentString = "    "; // Amount to indent
37 <    private int indentLevel = 0;
38 <
39 <
40 <    //===========================================================
41 <    // SAX DocumentHandler methods
42 <    //===========================================================
43 <
44 <    public void startDocument ()
45 <    throws SAXException
46 <    {
47 <        nl();
48 <        nl();
49 <        emit ("START DOCUMENT");
50 <        nl();
51 <        emit ("<?xml version='1.0' encoding='UTF-8'?>");
52 <    }
53 <
54 <    public void endDocument ()
55 <    throws SAXException
56 <    {
57 <        nl(); emit ("END DOCUMENT");
58 <        try {
59 <            nl();
60 <            out.flush ();
61 <        } catch (IOException e) {
62 <            throw new SAXException ("I/O error", e);
63 <        }
64 <    }
65 <
66 <    public void startElement (String name, AttributeList attrs)
67 <    throws SAXException
68 <    {
69 <        indentLevel++;
70 <        nl(); emit ("ELEMENT: ");
71 <        emit ("<"+name);
72 <        if (attrs != null) {
73 <            for (int i = 0; i < attrs.getLength (); i++) {
74 <                nl();
75 <                emit("   ATTR: ");
76 <                emit (attrs.getName (i));
77 <                emit ("\t\"");
78 <                emit (attrs.getValue (i));
79 <                emit ("\"");
80 <            }
81 <        }
82 <        if (attrs.getLength() > 0) nl();
83 <        emit (">");
84 <    }
85 <
86 <    public void endElement (String name)
87 <    throws SAXException
88 <    {
89 <        nl();
90 <        emit ("END_ELM: ");
91 <        emit ("</"+name+">");
92 <        indentLevel--;
93 <    }
94 <
95 <    public void characters (char buf [], int offset, int len) throws SAXException {
96 <        nl(); emit ("CHARS:   ");
97 <        String s = new String(buf, offset, len);
98 <        if (!s.trim().equals("")) emit (s);
99 <    }
100 <
101 <    //===========================================================
102 <    // Helpers ...
103 <    //===========================================================
104 <
105 <    // Wrap I/O exceptions in SAX exceptions, to
106 <    // suit handler signature requirements
107 <    private void emit (String s) throws SAXException {
108 <        try {
109 <            out.write (s);
110 <            out.flush ();
111 <        } catch (IOException e) {
112 <            throw new SAXException ("I/O error", e);
113 <        }
114 <    }
115 <
116 <    // Start a new line
117 <    // and indent the next line appropriately
118 <    private void nl () throws SAXException {
119 <        String lineEnd =  System.getProperty("line.separator");
120 <        try {
121 <            out.write (lineEnd);
122 <            for (int i=0; i < indentLevel; i++) out.write(indentString);
123 <        } catch (IOException e) {
124 <            throw new SAXException ("I/O error", e);
125 <        }
126 <    }
127 < }
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 > }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines