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());
}
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);
}
}
}
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);
}
}
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;
}
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());
}
}
Aggregations