00001 package clientswing.comunicationsystem;
00002
00003
00004
00005 import java.io.*;
00006
00007 import clientswing.model.*;
00008 import javax.xml.parsers.*;
00009 import org.w3c.dom.*;
00010 import org.w3c.dom.Element;
00011 import org.xml.sax.*;
00012
00013
00017 public class XMLParser {
00018
00019 XResponseRowSet xresponse;
00020 private Document doc;
00021 private DocumentBuilderFactory factory;
00022 private DocumentBuilder builder;
00023 private InputSource source;
00024
00025
00026 public XMLParser() {
00027 }
00028
00029 private void init() throws ParserConfigurationException {
00030 factory = DocumentBuilderFactory.newInstance();
00031 factory.setNamespaceAware(true);
00032 factory.setValidating(false);
00033 builder = factory.newDocumentBuilder();
00034
00035
00036 }
00037
00040 public XResponse parse(String xml)
00041 throws ParserConfigurationException, IOException, SAXException {
00042 xresponse = new XResponseRowSet();
00043 Document doc;
00044 System.out.print("XML Ricevuto:" + xml);
00045 init();
00046 doc = builder.parse( new InputSource( new StringReader(xml)));
00047
00048 System.out.print("Parsed.. doc:" + doc);
00049
00050 if (doc.getDocumentElement().getFirstChild().getNodeName()!="message" ){
00051
00052 return buildRowSet(doc);
00053 }
00054 else
00055
00056 return buildMessage(doc);
00057
00058
00059 }
00066 private XResponseRowSet buildRowSet(Document doc){
00067 XResponseRowSet rowSet = new XResponseRowSet();
00068
00069 Element root = doc.getDocumentElement();
00070 int i,j,k;
00071
00072 System.out.println("Doc:" + doc);
00073 System.out.println("root: " + root);
00074
00075
00076 Node rowSetNode = findRowsetNode( root);
00077
00078 System.out.println("RowSet: " + rowSetNode);
00079
00080 if (rowSetNode == null) return null;
00081
00082 NodeList rows = rowSetNode.getChildNodes();
00083
00084 System.out.print("Number of rows: " + rows.getLength());
00085
00086 for (i=0;i< rows.getLength();i++){
00087 if (!rows.item(i).getNodeName().equals("#text"))
00088 rowSet.addRow(readRow(rows.item(i) ) );
00089 }
00090
00091 return rowSet;
00092 }
00093
00095 private Node findRowsetNode(Node n){
00096 Node child;
00097 for (int i=0;i<n.getChildNodes().getLength();i++){
00098 child = n.getChildNodes().item(i);
00099 if (child.getNodeName().equals("rowset")) return child;
00100 }
00101
00102 return null;
00103 }
00107 private Row readRow(Node row){
00108 Row r = new Row();
00109 int i;
00110
00111 System.out.println("Reading row:" + row);
00112 NodeList columns = row.getChildNodes();
00113
00114 for (i = 0; i < columns.getLength(); i++) {
00115 if (!columns.item(i).getNodeName().equals("#text"))
00116 r.addColumn(readColumn(row.getChildNodes().item(i)));
00117 }
00118
00119 return r;
00120 }
00124 private Column readColumn(Node column){
00125 Column c = new Column("noName");
00126 int i;
00127
00128 System.out.println("Reading column" + column);
00129
00130 for (i = 0; i < column.getChildNodes().getLength(); i++) {
00131 Node curr = column.getChildNodes().item(i);
00132 System.out.println("Found: " + curr.getNodeName() + " Value: " + curr.getNodeValue());
00133 if (curr.getNodeName().equalsIgnoreCase("name")) {
00134 c.setName(curr.getFirstChild().getNodeValue());
00135 System.out.println("Setting name to " + curr.getFirstChild().getNodeValue());
00136 }
00137 else {
00138 if (curr.getNodeName().equalsIgnoreCase("value")) {
00139 c.setValue(curr.getFirstChild().getNodeValue());
00140 System.out.println("Setting value to " + curr.getFirstChild().getNodeValue());
00141 }
00142
00143 }
00144 }
00145
00146 return c;
00147 }
00148
00149
00151 private XResponseMessage buildMessage(Document doc){
00152
00153 Element root = doc.getDocumentElement();
00154 System.out.println("Doc:" + doc);
00155 System.out.println("root: " + root);
00156 String typeMessage = root.getFirstChild().getAttributes().getNamedItem("result").getNodeValue();
00157 String message = root.getFirstChild().getFirstChild().getNodeValue();
00158 System.out.println("Message: " + message);
00159 System.out.println("TypeMessage: " + typeMessage);
00160
00161 XResponseMessage mesText = new XResponseMessage(typeMessage,message);
00162
00163 return mesText;
00164
00165 }
00166
00167 }