public Object getNode(ObjectModel objectModel) throws ExpressionException { Iterator iter = this.compiledExpression.iteratePointers(getContext(objectModel)); if (iter.hasNext()) { Pointer first = (Pointer)iter.next(); if (iter.hasNext()) { List result = new LinkedList(); result.add(first.getNode()); boolean dom = (first.getNode() instanceof Node); while (iter.hasNext()) { Object obj = ((Pointer)iter.next()).getNode(); dom = dom && (obj instanceof Node); result.add(obj); } Object[] arr; if (dom) { arr = new Node[result.size()]; } else { arr = new Object[result.size()]; } result.toArray(arr); return arr; } return first.getNode(); } return null; }
public Iterator iterate(ObjectModel objectModel) throws ExpressionException { final JXPathContext jxpathContext = getContext(objectModel); Object val = this.compiledExpression.getPointer(jxpathContext, this.expression).getNode(); // FIXME: workaround for JXPath bug if (val instanceof NativeArray) return new JSIntrospector.NativeArrayIterator((NativeArray) val); else return new Iterator() { Iterator iter = compiledExpression.iteratePointers(jxpathContext); public boolean hasNext() { return iter.hasNext(); } public Object next() { return ((Pointer)iter.next()).getNode(); } public void remove() { iter.remove(); } }; }