public Node getSingleNodeValue() { switch (type) { case XPathResult.FIRST_ORDERED_NODE_TYPE: case XPathResult.ORDERED_NODE_ITERATOR_TYPE: case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: Collection ns = (Collection) value; if (ns.isEmpty ()) { return null; } else { return (Node) ns.iterator ().next (); } } throw new XPathException (XPathException.TYPE_ERR, value.toString ()); }
public Node snapshotItem(int index) { switch (type) { case XPathResult.FIRST_ORDERED_NODE_TYPE: case XPathResult.ORDERED_NODE_ITERATOR_TYPE: case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: Collection ns = (Collection) value; Node[] nodes = new Node[ns.size ()]; ns.toArray (nodes); return nodes[index]; } throw new XPathException (XPathException.TYPE_ERR, value.toString ()); }
private String typeName (short type) { switch (type) { case XPathResult.BOOLEAN_TYPE: return "BOOLEAN_TYPE"; case XPathResult.NUMBER_TYPE: return "NUMBER_TYPE"; case XPathResult.STRING_TYPE: return "STRING_TYPE"; case XPathResult.FIRST_ORDERED_NODE_TYPE: return "FIRST_ORDERED_NODE_TYPE"; case XPathResult.ORDERED_NODE_ITERATOR_TYPE: return "ORDERED_NODE_ITERATOR_TYPE"; case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: return "ORDERED_NODE_SNAPSHOT_TYPE"; case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: return "UNORDERED_NODE_ITERATOR_TYPE"; case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: return "UNORDERED_NODE_SNAPSHOT_TYPE"; default: return "(unknown)"; } }
DomXPathResult (Object value, short requestedType) { this.value = value; if (value instanceof Boolean) { type = XPathResult.BOOLEAN_TYPE; } else if (value instanceof Double) { type = XPathResult.NUMBER_TYPE; } else if (value instanceof String) { type = XPathResult.STRING_TYPE; } else if (value instanceof Collection) { Collection ns = (Collection) value; switch (requestedType) { case XPathResult.ANY_TYPE: case XPathResult.ANY_UNORDERED_NODE_TYPE: type = (ns.size () == 1) ? XPathResult.FIRST_ORDERED_NODE_TYPE : XPathResult.ORDERED_NODE_ITERATOR_TYPE; break; default: type = requestedType; } iterator = ns.iterator (); } else { throw new IllegalArgumentException (); } }
public boolean getBooleanValue() { if (type == XPathResult.BOOLEAN_TYPE) { return ((Boolean) value).booleanValue (); } throw new XPathException (XPathException.TYPE_ERR, value.toString ()); }
public double getNumberValue() { if (type == XPathResult.NUMBER_TYPE) { return ((Double) value).doubleValue (); } throw new XPathException (XPathException.TYPE_ERR, value.toString ()); }
public int getSnapshotLength() { switch (type) { case XPathResult.FIRST_ORDERED_NODE_TYPE: case XPathResult.ORDERED_NODE_ITERATOR_TYPE: case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: return ((Collection) value).size (); } throw new XPathException (XPathException.TYPE_ERR, value.toString ()); }
public String getStringValue() { if (type == XPathResult.STRING_TYPE) { return (String) value; } throw new XPathException (XPathException.TYPE_ERR, value.toString ()); }
public Object evaluate(Node contextNode, short type, Object result) throws XPathException, DOMException { try { QName typeName = null; switch (type) { case XPathResult.BOOLEAN_TYPE: typeName = XPathConstants.BOOLEAN; break; case XPathResult.NUMBER_TYPE: typeName = XPathConstants.NUMBER; break; case XPathResult.STRING_TYPE: typeName = XPathConstants.STRING; break; case XPathResult.ANY_UNORDERED_NODE_TYPE: case XPathResult.FIRST_ORDERED_NODE_TYPE: typeName = XPathConstants.NODE; break; case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: case XPathResult.ORDERED_NODE_ITERATOR_TYPE: case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: typeName = XPathConstants.NODESET; break; default: throw new XPathException(XPathException.TYPE_ERR, null); } Object val = expression.evaluate(contextNode, typeName); switch (type) { case XPathResult.ORDERED_NODE_ITERATOR_TYPE: case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: // Sort the nodes List ns = new ArrayList((Collection) val); Collections.sort(ns, new DocumentOrderComparator()); val = ns; } return new DomXPathResult(val, type); } catch (javax.xml.xpath.XPathException e) { throw new XPathException(XPathException.TYPE_ERR, e.getMessage()); } }