use of org.openforis.idm.model.expression.internal.ModelNodePointer in project collect by openforis.
the class AbstractExpression method findNode.
protected Node<?> findNode(Node<?> contextNode, Node<?> thisNode, Predicate<Node<?>> predicate) throws InvalidExpressionException {
try {
JXPathContext jxPathContext = createJXPathContext(contextNode, thisNode);
Iterator<?> pointers = compiledExpression.iteratePointers(jxPathContext);
while (pointers.hasNext()) {
Object item = pointers.next();
if (item instanceof ModelNodePointer) {
ModelNodePointer modelNodePointer = (ModelNodePointer) item;
Object ptrNode = modelNodePointer.getNode();
if (ptrNode != null && ptrNode instanceof Node) {
Node<?> node = (Node<?>) ptrNode;
if (predicate.evaluate(node)) {
return node;
}
}
} else if (item instanceof VariablePointer && ((VariablePointer) item).getName().equals(THIS)) {
if (predicate.evaluate(thisNode)) {
return thisNode;
}
}
// ignore node pointer if it's a NullPointer
}
return null;
} catch (IllegalArgumentException e) {
throw new InvalidExpressionException(e.getMessage(), this.compiledExpression.toString());
} catch (JXPathInvalidSyntaxException e) {
throw new InvalidExpressionException(e.getMessage());
}
}
use of org.openforis.idm.model.expression.internal.ModelNodePointer in project collect by openforis.
the class AbstractExpression method iterateMultiple.
protected void iterateMultiple(Node<?> contextNode, Node<?> thisNode, NodeVisitor visitor) throws InvalidExpressionException {
try {
JXPathContext jxPathContext = createJXPathContext(contextNode, thisNode);
Iterator<?> pointers = compiledExpression.iteratePointers(jxPathContext);
while (pointers.hasNext()) {
Object item = pointers.next();
if (item instanceof ModelNodePointer) {
ModelNodePointer modelNodePointer = (ModelNodePointer) item;
Object ptrNode = modelNodePointer.getNode();
if (ptrNode != null && ptrNode instanceof Node) {
Node<?> node = (Node<?>) ptrNode;
visitor.visit(node, node.getIndex());
}
} else if (item instanceof VariablePointer && ((VariablePointer) item).getName().equals(THIS)) {
visitor.visit(thisNode, thisNode.getIndex());
}
// ignore node pointer if it's a NullPointer
}
} catch (IllegalArgumentException e) {
throw new InvalidExpressionException(e.getMessage(), this.compiledExpression.toString());
} catch (JXPathInvalidSyntaxException e) {
throw new InvalidExpressionException(e.getMessage());
}
}
Aggregations