Search in sources :

Example 1 with ModelNodePointer

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());
    }
}
Also used : JXPathInvalidSyntaxException(org.apache.commons.jxpath.JXPathInvalidSyntaxException) ModelJXPathContext(org.openforis.idm.model.expression.internal.ModelJXPathContext) JXPathContext(org.apache.commons.jxpath.JXPathContext) VariablePointer(org.apache.commons.jxpath.ri.model.VariablePointer) Node(org.openforis.idm.model.Node) ModelNodePointer(org.openforis.idm.model.expression.internal.ModelNodePointer)

Example 2 with ModelNodePointer

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());
    }
}
Also used : JXPathInvalidSyntaxException(org.apache.commons.jxpath.JXPathInvalidSyntaxException) ModelJXPathContext(org.openforis.idm.model.expression.internal.ModelJXPathContext) JXPathContext(org.apache.commons.jxpath.JXPathContext) VariablePointer(org.apache.commons.jxpath.ri.model.VariablePointer) Node(org.openforis.idm.model.Node) ModelNodePointer(org.openforis.idm.model.expression.internal.ModelNodePointer)

Aggregations

JXPathContext (org.apache.commons.jxpath.JXPathContext)2 JXPathInvalidSyntaxException (org.apache.commons.jxpath.JXPathInvalidSyntaxException)2 VariablePointer (org.apache.commons.jxpath.ri.model.VariablePointer)2 Node (org.openforis.idm.model.Node)2 ModelJXPathContext (org.openforis.idm.model.expression.internal.ModelJXPathContext)2 ModelNodePointer (org.openforis.idm.model.expression.internal.ModelNodePointer)2