Search in sources :

Example 6 with Value

use of org.openforis.idm.model.Value 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 7 with Value

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

the class ModelRelationalExpression method getValue.

private Object getValue(Object object) {
    if (object instanceof Number || object instanceof NumericRange || object instanceof String) {
        return object;
    }
    if (object instanceof Boolean) {
        return ((Boolean) object).booleanValue() ? 0.0 : 1.0;
    } else if (object instanceof Value) {
        return AttributeValueUtils.extractMainFieldValue((Value) object, normalizeNumbers);
    }
    if (object instanceof NodePointer) {
        if (object instanceof VariablePointer && normalizeNumbers) {
            ModelNodePointer valuePointer = (ModelNodePointer) ((NodePointer) object).getValuePointer();
            valuePointer.setNormalizeNumbers(true);
        }
        return getValue(((NodePointer) object).getValue());
    }
    if (object instanceof EvalContext) {
        EvalContext ctx = (EvalContext) object;
        Pointer ptr = ctx.getSingleNodePointer();
        return ptr == null ? Double.NaN : getValue(ptr);
    }
    return null;
}
Also used : NumericRange(org.openforis.idm.model.NumericRange) VariablePointer(org.apache.commons.jxpath.ri.model.VariablePointer) Value(org.openforis.idm.model.Value) EvalContext(org.apache.commons.jxpath.ri.EvalContext) NodePointer(org.apache.commons.jxpath.ri.model.NodePointer) Pointer(org.apache.commons.jxpath.Pointer) VariablePointer(org.apache.commons.jxpath.ri.model.VariablePointer) NodePointer(org.apache.commons.jxpath.ri.model.NodePointer)

Example 8 with Value

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

the class RecordGenerator method setRecordKeyValues.

private void setRecordKeyValues(CollectRecord record, RecordKey recordKey) {
    CollectSurvey survey = (CollectSurvey) record.getSurvey();
    List<AttributeDefinition> keyAttributeDefs = survey.getSchema().getFirstRootEntityDefinition().getKeyAttributeDefinitions();
    for (AttributeDefinition keyAttrDef : keyAttributeDefs) {
        String keyPart = recordKey.getValue(keyAttrDef.getPath());
        Attribute<?, Value> keyAttribute = record.findNodeByPath(keyAttrDef.getPath());
        Value value = keyAttrDef.createValue(keyPart);
        recordUpdater.updateAttribute(keyAttribute, value);
    }
}
Also used : Value(org.openforis.idm.model.Value) AttributeDefinition(org.openforis.idm.metamodel.AttributeDefinition) CodeAttributeDefinition(org.openforis.idm.metamodel.CodeAttributeDefinition) CollectSurvey(org.openforis.collect.model.CollectSurvey)

Example 9 with Value

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

the class RecordManager method addQualifierValues.

private void addQualifierValues(CollectRecord record, User user) {
    if (userGroupManager == null) {
        return;
    }
    NodeChangeMap changeSet = new NodeChangeMap();
    CollectSurvey survey = (CollectSurvey) record.getSurvey();
    UserGroup surveyUserGrup = survey.getUserGroup();
    UserInGroup userInGroup = userGroupManager.findUserInGroupOrDescendants(surveyUserGrup, user);
    if (userInGroup == null) {
        throw new IllegalArgumentException(String.format("User %s is not allowed to create records for survey %s", user.getUsername(), survey.getName()));
    }
    UserGroup group = userGroupManager.loadById(userInGroup.getGroupId());
    Map<String, String> qualifiersByName = group.getQualifiersByName();
    for (Entry<String, String> qualifier : qualifiersByName.entrySet()) {
        String attributePath = record.getRootEntity().getName() + "/" + qualifier.getKey();
        Attribute<?, Value> attribute = record.findNodeByPath(attributePath);
        Value qualifierValue = attribute.getDefinition().createValue(qualifier.getValue());
        NodeChangeSet changes = updater.updateAttribute(attribute, qualifierValue);
        changeSet.addMergeChanges(changes);
    }
}
Also used : NodeChangeSet(org.openforis.collect.model.NodeChangeSet) UserInGroup(org.openforis.collect.model.UserInGroup) Value(org.openforis.idm.model.Value) NodeChangeMap(org.openforis.collect.model.NodeChangeMap) CollectSurvey(org.openforis.collect.model.CollectSurvey) UserGroup(org.openforis.collect.model.UserGroup)

Example 10 with Value

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

the class RecordUpdater method applyInitialValue.

private Value applyInitialValue(Attribute<?, ?> attr) {
    Value value = null;
    if (!attr.getDefinition().isCalculated()) {
        if (attr.isEmpty() && isDefaultValueToBeApplied(attr)) {
            value = performDefaultValueApply(attr);
        }
        if (attr instanceof BooleanAttribute && ((BooleanAttributeDefinition) attr.getDefinition()).isAffirmativeOnly() && attr.isEmpty()) {
            BooleanAttribute boolAttr = (BooleanAttribute) attr;
            value = new BooleanValue(false);
            boolAttr.setValue((BooleanValue) value);
            boolAttr.updateSummaryInfo();
        }
    }
    return value;
}
Also used : BooleanAttribute(org.openforis.idm.model.BooleanAttribute) BooleanValue(org.openforis.idm.model.BooleanValue) Value(org.openforis.idm.model.Value) BooleanValue(org.openforis.idm.model.BooleanValue) BooleanAttributeDefinition(org.openforis.idm.metamodel.BooleanAttributeDefinition)

Aggregations

Value (org.openforis.idm.model.Value)26 AttributeDefinition (org.openforis.idm.metamodel.AttributeDefinition)9 EntityDefinition (org.openforis.idm.metamodel.EntityDefinition)8 AbstractValue (org.openforis.idm.model.AbstractValue)6 Attribute (org.openforis.idm.model.Attribute)6 BooleanValue (org.openforis.idm.model.BooleanValue)6 ArrayList (java.util.ArrayList)5 Entity (org.openforis.idm.model.Entity)5 NodeChangeSet (org.openforis.collect.model.NodeChangeSet)4 CodeAttributeDefinition (org.openforis.idm.metamodel.CodeAttributeDefinition)4 BooleanAttribute (org.openforis.idm.model.BooleanAttribute)4 EventProducer (org.openforis.collect.event.EventProducer)3 RecordEvent (org.openforis.collect.event.RecordEvent)3 CollectRecord (org.openforis.collect.model.CollectRecord)3 CollectSurvey (org.openforis.collect.model.CollectSurvey)3 CodeAttribute (org.openforis.idm.model.CodeAttribute)3 EntityKeysIdentifier (org.openforis.collect.io.data.DataLine.EntityKeysIdentifier)2 EntityPositionIdentifier (org.openforis.collect.io.data.DataLine.EntityPositionIdentifier)2 CollectRecordSummary (org.openforis.collect.model.CollectRecordSummary)2 BooleanAttributeDefinition (org.openforis.idm.metamodel.BooleanAttributeDefinition)2