Search in sources :

Example 1 with Node

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();
}
Also used : DataQueryExecutorJobInput(org.openforis.collect.datacleansing.DataQueryExecutorJob.DataQueryExecutorJobInput) NodeProcessor(org.openforis.collect.model.NodeProcessor) Node(org.openforis.idm.model.Node) ArrayList(java.util.ArrayList) IdmlParseException(org.openforis.idm.metamodel.xml.IdmlParseException) SurveyValidationException(org.openforis.collect.manager.exception.SurveyValidationException) SurveyImportException(org.openforis.collect.persistence.SurveyImportException)

Example 2 with Node

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());
}
Also used : DataQueryExecutorJobInput(org.openforis.collect.datacleansing.DataQueryExecutorJob.DataQueryExecutorJobInput) EntityDefinition(org.openforis.idm.metamodel.EntityDefinition) CollectRecord(org.openforis.collect.model.CollectRecord) NodeProcessor(org.openforis.collect.model.NodeProcessor) Attribute(org.openforis.idm.model.Attribute) Node(org.openforis.idm.model.Node) ArrayList(java.util.ArrayList) AttributeDefinition(org.openforis.idm.metamodel.AttributeDefinition) CollectIntegrationTest(org.openforis.collect.CollectIntegrationTest) Test(org.junit.Test)

Example 3 with Node

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;
}
Also used : Node(org.openforis.idm.model.Node) XPathDataQueryEvaluator(org.openforis.collect.datacleansing.xpath.XPathDataQueryEvaluator)

Example 4 with Node

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;
}
Also used : CollectRecord(org.openforis.collect.model.CollectRecord) Entity(org.openforis.idm.model.Entity) User(org.openforis.collect.model.User) UserInGroup(org.openforis.collect.model.UserInGroup) Node(org.openforis.idm.model.Node) ArrayList(java.util.ArrayList) UserGroup(org.openforis.collect.model.UserGroup) CodeAttributeDefinition(org.openforis.idm.metamodel.CodeAttributeDefinition) CollectSurvey(org.openforis.collect.model.CollectSurvey) CodeListItem(org.openforis.idm.metamodel.CodeListItem) CodeListItemProxy(org.openforis.collect.metamodel.proxy.CodeListItemProxy) Secured(org.springframework.security.access.annotation.Secured)

Example 5 with Node

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

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