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.5 by pjm2, Tue Nov 14 10:04:01 2000 UTC vs.
Revision 1.9 by pjm2, Tue Nov 14 12:36:11 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 () {
# Line 38 | Line 40 | public class XMLPacketMaker extends HandlerBase {
40              SAXParser saxParser = factory.newSAXParser();
41              saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
42  
43 <            // Print out some things from the packet: -
44 <            
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 ();
48 >            System.out.println("The recieved packet did not contain valid XML, so I'm gonna reject it.");
49 >            //t.printStackTrace ();
50          }
51          System.exit (0);
52      }
# Line 60 | Line 64 | public class XMLPacketMaker extends HandlerBase {
64      //===========================================================
65  
66      public void startDocument () throws SAXException {
67 <        nl();
64 <        nl();
65 <        emit ("START DOCUMENT");
66 <        nl();
67 <        emit ("<?xml version='1.0' encoding='UTF-8'?>");
67 >        // No purpose currently.
68      }
69  
70      public void endDocument () throws SAXException {
71 <        nl(); emit ("END DOCUMENT");
72 <        try {
73 <            nl();
74 <            out.flush ();
75 <        } catch (IOException e) {
76 <            throw new SAXException ("I/O error", e);
77 <        }
71 >        // No purpose currently.
72      }
73  
74 +    // Add each tag's attribute to the XMLPacket.
75 +    // Note that all attributes within an opening tag are
76 +    // stored as "someroot.sometag.attributes.attribute_name"
77 +    // E.g. If <packet> is the root node, then:
78 +    //     <packet machine_name="raptor">
79 +    // is stored as:
80 +    //     "packet.attributes.machine_name"
81 +    // within the XMLPacket.
82      public void startElement (String name, AttributeList attrs) throws SAXException {
83          indentLevel++;
84          tagList.add(name);
83        nl(); emit ("ELEMENT: ");
84        emit ("<"+name);
85          if (attrs != null) {
86              for (int i = 0; i < attrs.getLength (); i++) {
87 <                nl();
88 <                emit("   ATTR: ");
89 <                emit (attrs.getName (i));
90 <                emit ("\t\"");
91 <                emit (attrs.getValue (i));
92 <                emit ("\"");
87 >                packet.addParam(getPath()+".attributes."+attrs.getName(i), attrs.getValue(i));
88              }
89          }
95        if (attrs.getLength() > 0) nl();
96        emit (">");
90      }
91  
92 +    // When an XML element is finished with, we must remove
93 +    // the tag name from the tagList and decrement the indent
94 +    // level.
95      public void endElement (String name) throws SAXException {
100        nl();
101        emit ("END_ELM: ");
102        emit ("</"+name+">");
96          tagList.remove(tagList.size()-1);    
97          indentLevel--;
98      }
99  
100 +    // Any text falling within a pair of terminal tags must
101 +    // be added to the XMLPacket.  Trim leading and trailing
102 +    // spaces and do not bother to add if there is no data
103 +    // specified within the tags.
104      public void characters (char[] buf, int offset, int len) throws SAXException {
108        nl(); emit ("CHARS:   ");
105          String s = new String(buf, offset, len);
106          if (!s.trim().equals("")) {
107 <            emit (s);
112 <            packet.addParam((String)tagList.get(tagList.size()-1), s);
107 >            packet.addParam(getPath(), s);
108          }
109      }
110  
111 +
112      //===========================================================
113      // Helpers ...
114      //===========================================================
115 <
116 <    // Wrap I/O exceptions in SAX exceptions, to
117 <    // suit handler signature requirements
118 <    private void emit (String s) throws SAXException {
119 <        try {
120 <            out.write (s);
121 <            out.flush ();
122 <        } catch (IOException e) {
123 <            throw new SAXException ("I/O error", e);
115 >    
116 >    
117 >    // Return the heirarchical string to be used as a key value
118 >    // in the XMLPacket.
119 >    private String getPath () {
120 >        String path = (String)tagList.get(0);
121 >        if (tagList.size() > 0) {
122 >            for (int i = 1 ; i < tagList.size() ; i++) {
123 >                path = path + "." + (String)tagList.get(i);
124 >            }
125          }
126 +        return path;
127      }
128 <
131 <    // Start a new line
132 <    // and indent the next line appropriately
133 <    private void nl () throws SAXException {
134 <        String lineEnd =  System.getProperty("line.separator");
135 <        try {
136 <            out.write (lineEnd);
137 <            for (int i=0; i < indentLevel; i++) out.write(indentString);
138 <        } catch (IOException e) {
139 <            throw new SAXException ("I/O error", e);
140 <        }
141 <    }
128 >    
129   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines