Search in sources :

Example 66 with Entity

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

the class EventProducerTest method testEntityCollectionAddedEvent.

@Test
public void testEntityCollectionAddedEvent() {
    record(rootEntityDef(entityDef("plot", entityDef("tree", attributeDef("tree_count")).multiple()).multiple()));
    assertEventTypes(updater.addEntity(record.getRootEntity(), "plot"), EntityCreatedEvent.class, EntityCollectionCreatedEvent.class);
    Entity plot = entityByPath("/root/plot[1]");
    assertEventTypes(updater.addEntity(plot, "tree"), EntityCreatedEvent.class, TextAttributeUpdatedEvent.class);
}
Also used : Entity(org.openforis.idm.model.Entity) AbstractRecordTest(org.openforis.collect.model.AbstractRecordTest) Test(org.junit.Test)

Example 67 with Entity

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

the class RecordGenerator method addSecondLevelEntities.

private void addSecondLevelEntities(CollectRecord record, RecordKey recordKey) {
    CollectSurvey survey = (CollectSurvey) record.getSurvey();
    List<AttributeDefinition> nonMeasurementKeyDefs = getNonMeasurementKeyDefs(survey);
    List<String> keyValues = recordKey.getValues(nonMeasurementKeyDefs);
    List<SamplingDesignItem> secondLevelSamplingPointItems = samplingDesignManager.loadChildItems(survey.getId(), keyValues);
    List<CodeAttributeDefinition> samplingPointDataCodeAttributeDefs = findSamplingPointCodeAttributes(survey);
    if (!secondLevelSamplingPointItems.isEmpty() && samplingPointDataCodeAttributeDefs.size() > 1) {
        int levelIndex = 1;
        for (SamplingDesignItem samplingDesignItem : secondLevelSamplingPointItems) {
            CodeAttributeDefinition levelKeyDef = samplingPointDataCodeAttributeDefs.get(levelIndex);
            EntityDefinition levelEntityDef = levelKeyDef.getParentEntityDefinition();
            Entity parentLevelEntity = record.getRootEntity();
            NodeChangeSet addEntityChangeSet = recordUpdater.addEntity(parentLevelEntity, levelEntityDef);
            Entity entity = getAddedEntity(addEntityChangeSet);
            CodeAttribute keyAttr = entity.getChild(levelKeyDef);
            recordUpdater.updateAttribute(keyAttr, new Code(samplingDesignItem.getLevelCode(levelIndex + 1)));
        }
    }
}
Also used : Entity(org.openforis.idm.model.Entity) NodeChangeSet(org.openforis.collect.model.NodeChangeSet) AttributeDefinition(org.openforis.idm.metamodel.AttributeDefinition) CodeAttributeDefinition(org.openforis.idm.metamodel.CodeAttributeDefinition) Code(org.openforis.idm.model.Code) SamplingDesignItem(org.openforis.collect.model.SamplingDesignItem) EntityDefinition(org.openforis.idm.metamodel.EntityDefinition) CodeAttributeDefinition(org.openforis.idm.metamodel.CodeAttributeDefinition) CodeAttribute(org.openforis.idm.model.CodeAttribute) CollectSurvey(org.openforis.collect.model.CollectSurvey)

Example 68 with Entity

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

the class SingleFieldAttributeColumnProvider method getParentEntity.

/**
 * Attribute definition can be inside nested single entities inside the axis.
 * This method will look for the nearest parent entity for attributes to extract value for.
 */
private Entity getParentEntity(Entity axis) {
    EntityDefinition entityDef = axis.getDefinition();
    List<EntityDefinition> ancestorEntityDefinitions = attributeDefinition.getAncestorEntityDefinitionsInReverseOrder();
    int indexOfAxis = ancestorEntityDefinitions.indexOf(entityDef);
    Entity nearestParentEntity = axis;
    if (indexOfAxis + 1 < ancestorEntityDefinitions.size()) {
        List<EntityDefinition> relativeSingleEntityDefs = ancestorEntityDefinitions.subList(indexOfAxis + 1, ancestorEntityDefinitions.size());
        for (EntityDefinition parentSingleEntityDef : relativeSingleEntityDefs) {
            nearestParentEntity = (Entity) nearestParentEntity.getChild(parentSingleEntityDef);
        }
    }
    return nearestParentEntity;
}
Also used : EntityDefinition(org.openforis.idm.metamodel.EntityDefinition) Entity(org.openforis.idm.model.Entity)

Example 69 with Entity

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

the class SpeciesManager method extractQualifierValues.

protected String[] extractQualifierValues(TaxonAttribute attr) {
    TaxonAttributeDefinition defn = attr.getDefinition();
    List<String> qualifiers = defn.getQualifiers();
    String[] qualifierValues = null;
    if (qualifiers != null && !qualifiers.isEmpty()) {
        qualifierValues = new String[qualifiers.size()];
        Entity parent = attr.getParent();
        for (int i = 0; i < qualifiers.size(); i++) {
            String qualifierExpr = qualifiers.get(i);
            try {
                ModelPathExpression expression = expressionFactory.createModelPathExpression(qualifierExpr);
                CodeAttribute code = (CodeAttribute) expression.evaluate(parent, null);
                String qualifierValue = code.getValue().getCode();
                qualifierValues[i] = qualifierValue;
            } catch (Exception e) {
                if (log.isWarnEnabled()) {
                    log.warn("Error evaluating taxon qualifiers: ", e);
                }
                break;
            }
        }
    }
    return qualifierValues;
}
Also used : Entity(org.openforis.idm.model.Entity) TaxonAttributeDefinition(org.openforis.idm.metamodel.TaxonAttributeDefinition) CodeAttribute(org.openforis.idm.model.CodeAttribute) ModelPathExpression(org.openforis.idm.model.expression.ModelPathExpression)

Example 70 with Entity

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

the class RecordConverter method convertToLatestUnitStorage.

/**
 * This is a workaround: it avoids to refer to the old unit field to get data
 *
 * TODO remove this conversion or apply only for records stored using version prior to 3.0 Alpha 5
 *
 * @param survey
 * @param rootEntity
 */
protected void convertToLatestUnitStorage(CollectRecord record) {
    final CollectSurvey survey = (CollectSurvey) record.getSurvey();
    Entity rootEntity = record.getRootEntity();
    rootEntity.traverse(new NodeVisitor() {

        @Override
        public void visit(Node<? extends NodeDefinition> node, int idx) {
            if (node instanceof NumberAttribute<?, ?> || node instanceof NumericRangeAttribute<?, ?>) {
                Field<String> unitNameField;
                Field<Integer> unitField;
                if (node instanceof NumberAttribute<?, ?>) {
                    unitNameField = ((NumberAttribute<?, ?>) node).getUnitNameField();
                    unitField = ((NumberAttribute<?, ?>) node).getUnitField();
                } else {
                    unitNameField = ((NumericRangeAttribute<?, ?>) node).getUnitNameField();
                    unitField = ((NumericRangeAttribute<?, ?>) node).getUnitField();
                }
                if (unitNameField.hasData()) {
                    moveDataToNewUnitField(survey, unitNameField, unitField);
                }
            }
        }
    });
}
Also used : Entity(org.openforis.idm.model.Entity) Field(org.openforis.idm.model.Field) NumericRangeAttribute(org.openforis.idm.model.NumericRangeAttribute) NumberAttribute(org.openforis.idm.model.NumberAttribute) CollectSurvey(org.openforis.collect.model.CollectSurvey) NodeVisitor(org.openforis.idm.model.NodeVisitor)

Aggregations

Entity (org.openforis.idm.model.Entity)164 Test (org.junit.Test)88 CollectRecord (org.openforis.collect.model.CollectRecord)37 EntityDefinition (org.openforis.idm.metamodel.EntityDefinition)36 Code (org.openforis.idm.model.Code)35 RealAttribute (org.openforis.idm.model.RealAttribute)25 CollectIntegrationTest (org.openforis.collect.CollectIntegrationTest)23 NodeDefinition (org.openforis.idm.metamodel.NodeDefinition)19 Node (org.openforis.idm.model.Node)19 AbstractTest (org.openforis.idm.AbstractTest)18 Date (org.openforis.idm.model.Date)16 ArrayList (java.util.ArrayList)14 CodeAttribute (org.openforis.idm.model.CodeAttribute)14 Time (org.openforis.idm.model.Time)12 GregorianCalendar (java.util.GregorianCalendar)9 ParsingError (org.openforis.collect.io.metadata.parsing.ParsingError)9 AttributeDefinition (org.openforis.idm.metamodel.AttributeDefinition)9 TextAttribute (org.openforis.idm.model.TextAttribute)9 CodeAttributeDefinition (org.openforis.idm.metamodel.CodeAttributeDefinition)8 Attribute (org.openforis.idm.model.Attribute)8