Search in sources :

Example 1 with VariablePointer

use of org.apache.commons.jxpath.ri.model.VariablePointer 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 VariablePointer

use of org.apache.commons.jxpath.ri.model.VariablePointer 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)

Example 3 with VariablePointer

use of org.apache.commons.jxpath.ri.model.VariablePointer in project collect by openforis.

the class ModelRelationalExpression method getValue.

private Object getValue(Object object) {
    if (object instanceof Number || object instanceof NumericRange || object instanceof String) {
        return object;
    }
    if (object instanceof Boolean) {
        return ((Boolean) object).booleanValue() ? 0.0 : 1.0;
    } else if (object instanceof Value) {
        return AttributeValueUtils.extractMainFieldValue((Value) object, normalizeNumbers);
    }
    if (object instanceof NodePointer) {
        if (object instanceof VariablePointer && normalizeNumbers) {
            ModelNodePointer valuePointer = (ModelNodePointer) ((NodePointer) object).getValuePointer();
            valuePointer.setNormalizeNumbers(true);
        }
        return getValue(((NodePointer) object).getValue());
    }
    if (object instanceof EvalContext) {
        EvalContext ctx = (EvalContext) object;
        Pointer ptr = ctx.getSingleNodePointer();
        return ptr == null ? Double.NaN : getValue(ptr);
    }
    return null;
}
Also used : NumericRange(org.openforis.idm.model.NumericRange) VariablePointer(org.apache.commons.jxpath.ri.model.VariablePointer) Value(org.openforis.idm.model.Value) EvalContext(org.apache.commons.jxpath.ri.EvalContext) NodePointer(org.apache.commons.jxpath.ri.model.NodePointer) Pointer(org.apache.commons.jxpath.Pointer) VariablePointer(org.apache.commons.jxpath.ri.model.VariablePointer) NodePointer(org.apache.commons.jxpath.ri.model.NodePointer)

Aggregations

VariablePointer (org.apache.commons.jxpath.ri.model.VariablePointer)3 JXPathContext (org.apache.commons.jxpath.JXPathContext)2 JXPathInvalidSyntaxException (org.apache.commons.jxpath.JXPathInvalidSyntaxException)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 Pointer (org.apache.commons.jxpath.Pointer)1 EvalContext (org.apache.commons.jxpath.ri.EvalContext)1 NodePointer (org.apache.commons.jxpath.ri.model.NodePointer)1 NumericRange (org.openforis.idm.model.NumericRange)1 Value (org.openforis.idm.model.Value)1