Search in sources :

Example 11 with Node

use of org.openforis.idm.model.Node in project collect by openforis.

the class AbsoluteModelPathExpressionTest method testIteratePath2.

@Test
public void testIteratePath2() throws InvalidExpressionException {
    Entity plot1 = EntityBuilder.addEntity(cluster, "plot");
    EntityBuilder.addValue(plot1, "no", new Code("1"));
    Entity plot2 = EntityBuilder.addEntity(cluster, "plot");
    EntityBuilder.addValue(plot2, "no", new Code("1"));
    Entity plot3 = EntityBuilder.addEntity(cluster, "plot");
    EntityBuilder.addValue(plot3, "no", new Code("1"));
    List<Node<?>> list = iterateExpression("/cluster/plot/no", record);
    Assert.assertEquals(3, list.size());
}
Also used : Entity(org.openforis.idm.model.Entity) Node(org.openforis.idm.model.Node) Code(org.openforis.idm.model.Code) AbstractTest(org.openforis.idm.AbstractTest) Test(org.junit.Test)

Example 12 with Node

use of org.openforis.idm.model.Node in project collect by openforis.

the class GeoDataController method processNodes.

private void processNodes(CollectSurvey survey, Integer recordOffset, Integer maxNumberOfRecords, int attributeId, NodeProcessor nodeProcessor) throws Exception {
    NodeDefinition nodeDef = survey.getSchema().getDefinitionById(attributeId);
    RecordFilter filter = new RecordFilter(survey);
    filter.setOffset(recordOffset);
    filter.setMaxNumberOfRecords(maxNumberOfRecords);
    List<CollectRecordSummary> summaries = recordManager.loadSummaries(filter);
    for (CollectRecordSummary summary : summaries) {
        CollectRecord record = recordManager.load(survey, summary.getId(), summary.getStep(), false);
        List<Node<?>> nodes = record.findNodesByPath(nodeDef.getPath());
        for (Node<?> node : nodes) {
            nodeProcessor.process(node);
        }
    }
}
Also used : CollectRecord(org.openforis.collect.model.CollectRecord) CollectRecordSummary(org.openforis.collect.model.CollectRecordSummary) Node(org.openforis.idm.model.Node) NodeDefinition(org.openforis.idm.metamodel.NodeDefinition) RecordFilter(org.openforis.collect.model.RecordFilter)

Example 13 with Node

use of org.openforis.idm.model.Node in project collect by openforis.

the class UniquenessCheck method evaluate.

@Override
public ValidationResultFlag evaluate(final Attribute<?, ?> attribute) {
    try {
        SurveyContext recordContext = attribute.getRecord().getSurveyContext();
        ExpressionEvaluator expressionEvaluator = recordContext.getExpressionEvaluator();
        Node<?> duplicateNode = expressionEvaluator.findNode(attribute.getParent(), attribute, expression, new Predicate<Node<?>>() {

            public boolean evaluate(Node<?> node) {
                if (node instanceof Attribute && node != attribute) {
                    Value value = ((Attribute<?, ?>) node).getValue();
                    if (value != null && value.equals(attribute.getValue())) {
                        return true;
                    }
                }
                return false;
            }
        });
        boolean unique = duplicateNode == null;
        return ValidationResultFlag.valueOf(unique, this.getFlag());
    } catch (InvalidExpressionException e) {
        throw new IdmInterpretationError("Error evaluating uniqueness check", e);
    }
}
Also used : IdmInterpretationError(org.openforis.idm.metamodel.IdmInterpretationError) Attribute(org.openforis.idm.model.Attribute) InvalidExpressionException(org.openforis.idm.model.expression.InvalidExpressionException) Node(org.openforis.idm.model.Node) Value(org.openforis.idm.model.Value) ExpressionEvaluator(org.openforis.idm.model.expression.ExpressionEvaluator) SurveyContext(org.openforis.idm.metamodel.SurveyContext)

Example 14 with Node

use of org.openforis.idm.model.Node in project collect by openforis.

the class AbstractExpression method evaluateMultiple.

/**
 * Returns a list of Node that matches the expression
 *
 * @throws InvalidExpressionException
 */
public List<Node<?>> evaluateMultiple(Node<?> contextNode, final Node<?> thisNode) throws InvalidExpressionException {
    final List<Node<?>> list = new ArrayList<Node<?>>();
    iterateMultiple(contextNode, thisNode, new NodeVisitor() {

        public void visit(Node<?> item, int index) {
            list.add(item);
        }
    });
    return list;
}
Also used : Node(org.openforis.idm.model.Node) ArrayList(java.util.ArrayList) NodeVisitor(org.openforis.idm.model.NodeVisitor)

Example 15 with Node

use of org.openforis.idm.model.Node 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)

Aggregations

Node (org.openforis.idm.model.Node)37 Entity (org.openforis.idm.model.Entity)19 Test (org.junit.Test)13 ArrayList (java.util.ArrayList)11 AbstractTest (org.openforis.idm.AbstractTest)11 NodeDefinition (org.openforis.idm.metamodel.NodeDefinition)8 CollectRecord (org.openforis.collect.model.CollectRecord)6 RealAttribute (org.openforis.idm.model.RealAttribute)6 Attribute (org.openforis.idm.model.Attribute)5 CodeAttribute (org.openforis.idm.model.CodeAttribute)5 Code (org.openforis.idm.model.Code)4 Record (org.openforis.idm.model.Record)4 HashSet (java.util.HashSet)3 LinkedHashSet (java.util.LinkedHashSet)3 XPathDataQueryEvaluator (org.openforis.collect.datacleansing.xpath.XPathDataQueryEvaluator)3 CollectRecordSummary (org.openforis.collect.model.CollectRecordSummary)3 CollectSurvey (org.openforis.collect.model.CollectSurvey)3 RecordFilter (org.openforis.collect.model.RecordFilter)3 AttributeDefinition (org.openforis.idm.metamodel.AttributeDefinition)3 EntityDefinition (org.openforis.idm.metamodel.EntityDefinition)3