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.3 by pjm2, Tue Nov 14 09:32:31 2000 UTC vs.
Revision 1.8 by pjm2, Tue Nov 14 12:23:17 2000 UTC

# Line 3 | Line 3 | 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;  
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");
# Line 21 | Line 33 | public class XMLPacketMaker extends HandlerBase {
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());
41 >            saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
42  
43 +            // Print out the entire contents of the packet's HashMap.
44 +            System.out.println("XMLPacket contents: -");
45 +            packet.printAll();
46 +
47          } catch (Throwable t) {
48              t.printStackTrace ();
49          }
# Line 35 | Line 54 | public class XMLPacketMaker extends HandlerBase {
54      private String indentString = "    "; // Amount to indent
55      private int indentLevel = 0;
56  
57 +    // For storing the tag heirarchy.
58      private ArrayList tagList = new ArrayList();
59 +    static private XMLPacket packet = null;
60  
61      //===========================================================
62      // SAX DocumentHandler methods
63      //===========================================================
64  
65      public void startDocument () throws SAXException {
66 <        nl();
46 <        nl();
47 <        emit ("START DOCUMENT");
48 <        nl();
49 <        emit ("<?xml version='1.0' encoding='UTF-8'?>");
66 >        // No purpose currently.
67      }
68  
69      public void endDocument () throws SAXException {
70 <        nl(); emit ("END DOCUMENT");
54 <        try {
55 <            nl();
56 <            out.flush ();
57 <        } catch (IOException e) {
58 <            throw new SAXException ("I/O error", e);
59 <        }
70 >        // No purpose currently.
71      }
72  
73 +    // Add each tag's attribute to the XMLPacket.
74 +    // Note that all attributes within an opening tag are
75 +    // stored as "someroot.sometag.attributes.attribute_name"
76 +    // E.g. If <packet> is the root node, then:
77 +    //     <packet machine_name="raptor">
78 +    // is stored as:
79 +    //     "packet.attributes.machine_name"
80 +    // within the XMLPacket.
81      public void startElement (String name, AttributeList attrs) throws SAXException {
82          indentLevel++;
83 <        nl(); emit ("ELEMENT: ");
65 <        emit ("<"+name);
83 >        tagList.add(name);
84          if (attrs != null) {
85              for (int i = 0; i < attrs.getLength (); i++) {
86 <                nl();
69 <                emit("   ATTR: ");
70 <                emit (attrs.getName (i));
71 <                emit ("\t\"");
72 <                emit (attrs.getValue (i));
73 <                emit ("\"");
86 >                packet.addParam(getPath()+".attributes."+attrs.getName(i), attrs.getValue(i));
87              }
88          }
76        if (attrs.getLength() > 0) nl();
77        emit (">");
89      }
90  
91 +    // When an XML element is finished with, we must remove
92 +    // the tag name from the tagList and decrement the indent
93 +    // level.
94      public void endElement (String name) throws SAXException {
95 <        nl();
82 <        emit ("END_ELM: ");
83 <        emit ("</"+name+">");
95 >        tagList.remove(tagList.size()-1);    
96          indentLevel--;
97      }
98  
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      public void characters (char[] buf, int offset, int len) throws SAXException {
88        nl(); emit ("CHARS:   ");
104          String s = new String(buf, offset, len);
105 <        if (!s.trim().equals("")) emit (s);
105 >        if (!s.trim().equals("")) {
106 >            packet.addParam(getPath(), s);
107 >        }
108      }
109  
110 +
111      //===========================================================
112      // Helpers ...
113      //===========================================================
114 <
115 <    // Wrap I/O exceptions in SAX exceptions, to
116 <    // suit handler signature requirements
117 <    private void emit (String s) throws SAXException {
118 <        try {
119 <            out.write (s);
120 <            out.flush ();
121 <        } catch (IOException e) {
122 <            throw new SAXException ("I/O error", e);
114 >    
115 >    
116 >    // Return the heirarchical string to be used as a key value
117 >    // in the XMLPacket.
118 >    private String getPath () {
119 >        String path = (String)tagList.get(0);
120 >        if (tagList.size() > 0) {
121 >            for (int i = 1 ; i < tagList.size() ; i++) {
122 >                path = path + "." + (String)tagList.get(i);
123 >            }
124          }
125 +        return path;
126      }
127 <
108 <    // Start a new line
109 <    // and indent the next line appropriately
110 <    private void nl () throws SAXException {
111 <        String lineEnd =  System.getProperty("line.separator");
112 <        try {
113 <            out.write (lineEnd);
114 <            for (int i=0; i < indentLevel; i++) out.write(indentString);
115 <        } catch (IOException e) {
116 <            throw new SAXException ("I/O error", e);
117 <        }
118 <    }
127 >    
128   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines