use of org.openforis.idm.model.Node in project collect by openforis.
the class DataCleansingChainIntegrationTest method countResults.
private int countResults(DataQuery query) {
final List<Node<?>> nodes = new ArrayList<Node<?>>();
DataQueryExecutorJob job = jobManager.createJob(DataQueryExecutorJob.class);
DataQueryExecutorJobInput dataQueryExecutorJobInput = new DataQueryExecutorJobInput(query, Step.ENTRY, new NodeProcessor() {
public void process(Node<?> node) throws Exception {
nodes.add(node);
}
});
job.setInput(dataQueryExecutorJobInput);
jobManager.start(job, false);
return nodes.size();
}
use of org.openforis.idm.model.Node in project collect by openforis.
the class QueryExecutorIntegrationTest method testSimpleQuery.
@Test
public void testSimpleQuery() {
// select region from tree where dbh > 20
DataQuery query = new DataQuery(survey);
EntityDefinition treeDef = (EntityDefinition) survey.getSchema().getDefinitionByPath("/cluster/plot/tree");
AttributeDefinition dbhDef = (AttributeDefinition) survey.getSchema().getDefinitionByPath("/cluster/plot/tree/dbh");
query.setEntityDefinition(treeDef);
query.setAttributeDefinition(dbhDef);
query.setConditions("dbh > 20");
final List<Node<?>> nodes = new ArrayList<Node<?>>();
DataQueryExecutorJob job = jobManager.createJob(DataQueryExecutorJob.class);
DataQueryExecutorJobInput input = new DataQueryExecutorJobInput(query, Step.ENTRY, new NodeProcessor() {
public void process(Node<?> node) {
nodes.add(node);
}
});
job.setInput(input);
jobManager.start(job, false);
assertFalse(nodes.isEmpty());
// first result
Node<?> node = nodes.get(0);
assertTrue(node instanceof Attribute);
CollectRecord record = (CollectRecord) node.getRecord();
assertEquals(Arrays.asList("10_117"), record.getRootEntityKeyValues());
}
use of org.openforis.idm.model.Node in project collect by openforis.
the class DataCleansingChainExectutorTask method executeStep.
private DataCleansingStepExecutionResult executeStep(CollectRecord record, DataCleansingStep step) {
DataCleansingStepExecutionResult result = null;
DataQueryEvaluator queryEvaluator = createQueryEvaluator(step.getQuery());
List<Node<?>> nodes = queryEvaluator.evaluate(record);
for (Node<?> node : nodes) {
DataCleansingStepNodeProcessorResult processResult = processNode(step, node);
if (processResult != null) {
switch(processResult) {
case ATTRIBUTE_UPDATED:
case ENTITY_DELETED:
cleansedNodes++;
result = DataCleansingStepExecutionResult.RECORD_UPDATED;
break;
case RECORD_TO_BE_DELETED:
result = DataCleansingStepExecutionResult.RECORD_TO_BE_DELETED;
break;
}
}
if (processResult == DataCleansingStepNodeProcessorResult.RECORD_TO_BE_DELETED) {
break;
}
}
return result;
}
use of org.openforis.idm.model.Node in project collect by openforis.
the class DataService method findAssignableCodeListItems.
/**
* Gets the code list items assignable to the specified attribute.
*
* @param parentEntityId
* @param attrName
* @return
*/
@Secured(USER)
public List<CodeListItemProxy> findAssignableCodeListItems(int parentEntityId, String attrName) {
CollectRecord record = getActiveRecord();
CollectSurvey survey = (CollectSurvey) record.getSurvey();
UserGroup surveyUserGroup = survey.getUserGroup();
User user = sessionManager.getLoggedUser();
final UserInGroup userInGroup = userGroupManager.findUserInGroupOrDescendants(surveyUserGroup, user);
if (userInGroup == null) {
throw new IllegalStateException(String.format("User %s not allowed to access survey %s", user.getUsername(), survey.getName()));
}
Entity parent = (Entity) record.getNodeByInternalId(parentEntityId);
CodeAttributeDefinition def = (CodeAttributeDefinition) parent.getDefinition().getChildDefinition(attrName);
List<CodeListItem> items = codeListManager.loadValidItems(parent, def);
List<CodeListItem> filteredItems = new ArrayList<CodeListItem>(items);
// filter by user group qualifier (if any)
UserGroup group = userGroupManager.loadById(userInGroup.getGroupId());
String qualifierName = group.getQualifier1Name();
String listHierarchicalLevelName = def.getList().isHierarchical() ? def.getHierarchicalLevel() : def.getListName();
if (qualifierName != null && qualifierName.equals(listHierarchicalLevelName)) {
CollectionUtils.filter(filteredItems, new Predicate<CodeListItem>() {
public boolean evaluate(CodeListItem item) {
return item.getCode().equals(group.getQualifier1Value());
}
});
}
List<CodeListItemProxy> result = CodeListItemProxy.fromList(filteredItems);
List<Node<?>> selectedCodes = parent.getChildren(attrName);
CodeListItemProxy.setSelectedItems(result, selectedCodes);
return result;
}
use of org.openforis.idm.model.Node in project collect by openforis.
the class ModelPathExpressionTest method testIteratePath2.
@Test
public void testIteratePath2() throws InvalidExpressionException {
String entityName = "plot";
Entity plot1 = EntityBuilder.addEntity(cluster, entityName);
EntityBuilder.addValue(plot1, "no", new Code("1"));
Entity plot2 = EntityBuilder.addEntity(cluster, entityName);
EntityBuilder.addValue(plot2, "no", new Code("1"));
Entity plot3 = EntityBuilder.addEntity(cluster, entityName);
EntityBuilder.addValue(plot3, "no", new Code("1"));
String expr = "plot/no";
List<Node<?>> list = iterateExpression(expr, cluster);
Assert.assertEquals(3, list.size());
}
Aggregations