Search in sources :

Example 11 with Record

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

the class RecordUpdater method initializeEntity.

protected NodeChangeMap initializeEntity(Entity entity, boolean newEntity) {
    Record record = entity.getRecord();
    NodeChangeMap changeMap = new NodeChangeMap();
    changeMap.addEntityAddChange(entity);
    List<NodePointer> entityDescendantPointers = getDescendantNodePointers(entity);
    updateMinCount(entityDescendantPointers);
    updateMaxCount(entityDescendantPointers);
    addEmptyNodes(entity);
    applyInitialValues(entity);
    // recalculate attributes
    // TODO exclude this when exporting for backup (not for Calc)
    List<Attribute<?, ?>> calculatedAttributes = recalculateDependentCalculatedAttributes(entity);
    changeMap.addValueChanges(calculatedAttributes);
    if (validateAfterUpdate) {
        // min/max count
        entityDescendantPointers = getDescendantNodePointers(entity);
        // for root entity there is no node pointer so we iterate over its descendants
        Collection<NodePointer> minCountDependentNodes = record.determineMinCountDependentNodes(entityDescendantPointers);
        Collection<NodePointer> updatedMinCountPointers = updateMinCount(minCountDependentNodes);
        changeMap.addMinCountChanges(updatedMinCountPointers);
        Collection<NodePointer> maxCountDependentNodes = record.determineMaxCountDependentNodes(entityDescendantPointers);
        Collection<NodePointer> updatedMaxCountPointers = updateMaxCount(maxCountDependentNodes);
        changeMap.addMaxCountChanges(updatedMaxCountPointers);
        Set<NodePointer> updatedCardinalityPointers = new HashSet<NodePointer>(updatedMinCountPointers);
        updatedCardinalityPointers.addAll(updatedMaxCountPointers);
        // relevance
        Set<NodePointer> pointersToRecalculateRelevanceFor = new HashSet<NodePointer>();
        pointersToRecalculateRelevanceFor.addAll(getChildNodePointers(entity));
        pointersToRecalculateRelevanceFor.addAll(record.determineRelevanceDependentNodes(calculatedAttributes));
        if (entity.getParent() != null) {
            pointersToRecalculateRelevanceFor.addAll(record.determineRelevanceDependentNodePointers(Arrays.asList(new NodePointer(entity))));
        }
        Set<NodePointer> updatedRelevancePointers = new RelevanceUpdater(new ArrayList<NodePointer>(pointersToRecalculateRelevanceFor)).update();
        changeMap.addRelevanceChanges(updatedRelevancePointers);
        // cardinality
        Collection<NodePointer> nodePointersToCheckCardinalityFor = new HashSet<NodePointer>(entityDescendantPointers);
        if (entity.getParent() != null) {
            nodePointersToCheckCardinalityFor.add(new NodePointer(entity));
        }
        validateCardinality(record, nodePointersToCheckCardinalityFor, changeMap);
        // validate attributes
        Set<Node<?>> nodesToCheckValidationFor = new HashSet<Node<?>>();
        nodesToCheckValidationFor.add(entity);
        nodesToCheckValidationFor.addAll(pointersToNodes(updatedCardinalityPointers));
        Set<Attribute<?, ?>> attributesToValidate = record.determineValidationDependentNodes(nodesToCheckValidationFor);
        validateAttributes(record, attributesToValidate, changeMap);
    }
    return changeMap;
}
Also used : CodeAttribute(org.openforis.idm.model.CodeAttribute) Attribute(org.openforis.idm.model.Attribute) BooleanAttribute(org.openforis.idm.model.BooleanAttribute) Node(org.openforis.idm.model.Node) ArrayList(java.util.ArrayList) NodePointer(org.openforis.idm.model.NodePointer) Record(org.openforis.idm.model.Record) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Example 12 with Record

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

the class EntityProxy method isApplicable.

protected boolean isApplicable(NodeDefinition childDefinition) {
    Record record = entity.getRecord();
    ModelVersion version = record.getVersion();
    return version == null || version.isApplicable(childDefinition);
}
Also used : Record(org.openforis.idm.model.Record) ModelVersion(org.openforis.idm.metamodel.ModelVersion)

Example 13 with Record

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

the class DescendantNodeFilter method accept.

@Override
public boolean accept(Node<?> node) {
    NodeDefinition nodeDef = node.getDefinition();
    if (!(nodeDef instanceof EntityDefinition) || !descendantAttributeDefinition.isDescendantOf((EntityDefinition) nodeDef)) {
        return false;
    }
    Record record = node.getRecord();
    SurveyContext surveyContext = record.getSurveyContext();
    ExpressionEvaluator expressionEvaluator = surveyContext.getExpressionEvaluator();
    List<Node<?>> attributes = record.findNodesByPath(descendantAttributeDefinition.getPath());
    for (Node<?> attribute : attributes) {
        try {
            Entity parentEntity = attribute.getParent();
            if (parentEntity == node && expressionEvaluator.evaluateBoolean(parentEntity, attribute, descendantAttributeCondition)) {
                return true;
            }
        } catch (InvalidExpressionException e) {
            throw new RuntimeException(e);
        }
    }
    return false;
}
Also used : EntityDefinition(org.openforis.idm.metamodel.EntityDefinition) Entity(org.openforis.idm.model.Entity) InvalidExpressionException(org.openforis.idm.model.expression.InvalidExpressionException) Node(org.openforis.idm.model.Node) NodeDefinition(org.openforis.idm.metamodel.NodeDefinition) Record(org.openforis.idm.model.Record) ExpressionEvaluator(org.openforis.idm.model.expression.ExpressionEvaluator) SurveyContext(org.openforis.idm.metamodel.SurveyContext)

Example 14 with Record

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

the class Check method getExpressionEvaluator.

private ExpressionEvaluator getExpressionEvaluator(Attribute<?, ?> context) {
    Record record = context.getRecord();
    SurveyContext surveyContext = record.getSurveyContext();
    ExpressionEvaluator evaluator = surveyContext.getExpressionEvaluator();
    return evaluator;
}
Also used : Record(org.openforis.idm.model.Record) ExpressionEvaluator(org.openforis.idm.model.expression.ExpressionEvaluator) SurveyContext(org.openforis.idm.metamodel.SurveyContext)

Example 15 with Record

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

the class ComparisonCheck method evaluate.

@Override
public ValidationResultFlag evaluate(Attribute<?, ?> node) {
    Record record = node.getRecord();
    SurveyContext recordContext = record.getSurveyContext();
    ExpressionEvaluator expressionEvaluator = recordContext.getExpressionEvaluator();
    String expr = getExpression();
    try {
        boolean valid = expressionEvaluator.evaluateBoolean(node.getParent(), node, expr, true);
        return ValidationResultFlag.valueOf(valid, this.getFlag());
    } catch (InvalidExpressionException e) {
        throw new IdmInterpretationError("Error evaluating comparison check", e);
    }
}
Also used : IdmInterpretationError(org.openforis.idm.metamodel.IdmInterpretationError) InvalidExpressionException(org.openforis.idm.model.expression.InvalidExpressionException) Record(org.openforis.idm.model.Record) ExpressionEvaluator(org.openforis.idm.model.expression.ExpressionEvaluator) SurveyContext(org.openforis.idm.metamodel.SurveyContext)

Aggregations

Record (org.openforis.idm.model.Record)22 ModelVersion (org.openforis.idm.metamodel.ModelVersion)9 CodeAttribute (org.openforis.idm.model.CodeAttribute)7 ArrayList (java.util.ArrayList)5 CodeList (org.openforis.idm.metamodel.CodeList)5 CodeListItem (org.openforis.idm.metamodel.CodeListItem)5 EntityDefinition (org.openforis.idm.metamodel.EntityDefinition)5 Entity (org.openforis.idm.model.Entity)5 CodeAttributeDefinition (org.openforis.idm.metamodel.CodeAttributeDefinition)4 ExternalCodeListItem (org.openforis.idm.metamodel.ExternalCodeListItem)4 PersistedCodeListItem (org.openforis.idm.metamodel.PersistedCodeListItem)4 SurveyContext (org.openforis.idm.metamodel.SurveyContext)4 Attribute (org.openforis.idm.model.Attribute)4 BooleanAttribute (org.openforis.idm.model.BooleanAttribute)4 Node (org.openforis.idm.model.Node)4 HashSet (java.util.HashSet)3 LinkedHashSet (java.util.LinkedHashSet)3 CollectRecord (org.openforis.collect.model.CollectRecord)3 AttributeDefinition (org.openforis.idm.metamodel.AttributeDefinition)3 NodeDefinition (org.openforis.idm.metamodel.NodeDefinition)3