1 23 24 package org.dbforms.event.datalist.dao; 25 26 import org.apache.commons.logging.Log; 27 import org.apache.commons.logging.LogFactory; 28 29 import org.dbforms.config.FieldTypes; 30 31 import org.dbforms.dom.DOMFactory; 32 33 import org.dbforms.util.TimeUtil; 34 import org.dbforms.util.Util; 35 36 import org.w3c.dom.Element ; 37 import org.w3c.dom.Node ; 38 import org.w3c.dom.xpath.XPathEvaluator; 39 import org.w3c.dom.xpath.XPathNSResolver; 40 import org.w3c.dom.xpath.XPathResult; 41 42 43 44 50 public class XMLDataResult { 51 private static Log logCat = LogFactory.getLog(XMLDataResult.class); 52 private Element root; 53 private XPathEvaluator evaluator; 54 private XPathNSResolver resolver; 55 private XPathResult data; 56 private boolean changed = false; 57 58 64 public XMLDataResult(Element root, 65 String qry) { 66 this.root = root; 67 this.evaluator = DOMFactory.instance() 68 .newXPathEvaluator(); 69 resolver = evaluator.createNSResolver(root); 70 71 data = (XPathResult) evaluator.evaluate(qry, this.root, resolver, 73 XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 74 null); 75 } 76 77 86 public void setItemValue(int i, 87 String expression, 88 int objectType, 89 Object value) { 90 } 91 92 93 103 public Object getItemValue(int i, 104 String expression, 105 int objectType) { 106 Object result = null; 107 108 try { 109 Node n = item(i); 110 111 if (n != null) { 112 XPathResult pdata = (XPathResult) evaluator.evaluate(expression, n, 113 resolver, 114 XPathResult.FIRST_ORDERED_NODE_TYPE, 115 null); 116 117 if (pdata != null) { 118 n = pdata.getSingleNodeValue(); 119 120 if (n != null) { 121 switch (objectType) { 122 case FieldTypes.CHAR: 123 result = toString(n); 124 125 break; 126 127 case FieldTypes.FLOAT: 128 case FieldTypes.NUMERIC: 129 result = new Double (toString(n)); 130 131 break; 132 133 case FieldTypes.INTEGER: 134 result = new Integer (toString(n)); 135 136 break; 137 138 case FieldTypes.DATE: 139 case FieldTypes.TIMESTAMP: 140 case FieldTypes.TIME: 141 result = TimeUtil.parseISO8601Date(toString(n)); 142 143 break; 144 145 default: 146 result = toString(n); 147 148 break; 149 } 150 } 151 } 152 } 153 } catch (Exception e) { 154 logCat.error("getItemValue", e); 155 } 156 157 return result; 158 } 159 160 161 166 public Element getRoot() { 167 return root; 168 } 169 170 171 176 public boolean hasChanged() { 177 return changed; 178 } 179 180 181 188 public Node item(int index) { 189 Node res = null; 190 191 if (index < data.getSnapshotLength()) { 192 res = data.snapshotItem(index); 193 } 194 195 return res; 196 } 197 198 199 204 public int size() { 205 int res = data.getSnapshotLength(); 206 207 return res; 208 } 209 210 211 private String toString(Node element) { 212 String result = null; 213 214 if (element != null) { 215 if (element.getNodeType() == Node.TEXT_NODE) { 216 result = element.getNodeValue(); 217 } else { 218 for (Node tx = element.getFirstChild(); tx != null; 219 tx = tx.getNextSibling()) { 220 result = toString(tx); 221 222 if (!Util.isNull(result)) { 223 break; 224 } 225 } 226 } 227 } 228 229 return result; 230 } 231 } 232 | Popular Tags |