use of org.openforis.idm.metamodel.AttributeDefault in project collect by openforis.
the class CalculatedAttributeTest method createTestSurvey.
/**
* Creates a test survey in which there is a bill with a list of items.
* For each item there is a price, a quantity and a total
* (calculated using the an expression or a constant).
*
* @return
*/
private Survey createTestSurvey() {
SurveyContext surveyContext = new TestSurveyContext();
Survey survey = surveyContext.createSurvey();
Schema schema = survey.getSchema();
EntityDefinition root = schema.createEntityDefinition();
root.setName("bill");
schema.addRootEntityDefinition(root);
EntityDefinition item = schema.createEntityDefinition();
item.setName("item");
root.addChildDefinition(item);
NumberAttributeDefinition qty = schema.createNumberAttributeDefinition();
qty.setType(Type.INTEGER);
qty.setName("qty");
item.addChildDefinition(qty);
NumberAttributeDefinition price = schema.createNumberAttributeDefinition();
price.setName("price");
item.addChildDefinition(price);
NumberAttributeDefinition total = schema.createNumberAttributeDefinition();
total.setName("total");
total.setCalculated(true);
total.addAttributeDefault(new AttributeDefault("qty * (price - (price * discount_percent div 100))"));
item.addChildDefinition(total);
TimeAttributeDefinition time = schema.createTimeAttributeDefinition();
time.setName("time");
time.addAttributeDefault(new AttributeDefault("idm:currentTime()"));
item.addChildDefinition(time);
TimeAttributeDefinition timeAlias = schema.createTimeAttributeDefinition();
timeAlias.setName("time_alias");
timeAlias.setCalculated(true);
timeAlias.addAttributeDefault(new AttributeDefault("time"));
item.addChildDefinition(timeAlias);
NumberAttributeDefinition discountPercent = schema.createNumberAttributeDefinition();
discountPercent.setType(Type.INTEGER);
discountPercent.setName("discount_percent");
discountPercent.setCalculated(true);
discountPercent.addAttributeDefault(new AttributeDefault("30", "qty > 50"));
discountPercent.addAttributeDefault(new AttributeDefault("20", "qty > 20"));
discountPercent.addAttributeDefault(new AttributeDefault("10", "qty > 10"));
discountPercent.addAttributeDefault(new AttributeDefault("0", "true()"));
item.addChildDefinition(discountPercent);
return survey;
}
use of org.openforis.idm.metamodel.AttributeDefault in project collect by openforis.
the class DefaultValueTest method testConditionRespected.
@Test
public void testConditionRespected() throws InvalidExpressionException {
NumericAttributeDefinition totalDefn = (NumericAttributeDefinition) schema.getDefinitionByPath("bill/item/total");
List<AttributeDefault> attributeDefaults = totalDefn.getAttributeDefaults();
Entity rootEntity = record.getRootEntity();
Entity item = addItem(rootEntity, 10, 0d);
RealAttribute total = (RealAttribute) item.getChild("total", 0);
AttributeDefault constantAttributeDefault = attributeDefaults.get(1);
RealValue calculatedTotal = constantAttributeDefault.evaluate(total);
assertEquals(new RealValue(0d, null), calculatedTotal);
}
use of org.openforis.idm.metamodel.AttributeDefault in project collect by openforis.
the class DefaultValueTest method createTestSurvey.
/**
* Creates a test survey in which there is a bill with a list of items.
* For each item there is a price, a quantity and a total
* (calculated using the an expression or a constant).
*
* @return
*/
protected Survey createTestSurvey() {
SurveyContext surveyContext = new TestSurveyContext();
Survey survey = surveyContext.createSurvey();
Schema schema = survey.getSchema();
EntityDefinition root = schema.createEntityDefinition();
root.setName("bill");
schema.addRootEntityDefinition(root);
EntityDefinition item = schema.createEntityDefinition();
item.setName("item");
root.addChildDefinition(item);
NumberAttributeDefinition qty = schema.createNumberAttributeDefinition();
qty.setType(Type.INTEGER);
qty.setName("qty");
item.addChildDefinition(qty);
NumberAttributeDefinition price = schema.createNumberAttributeDefinition();
price.setName("price");
item.addChildDefinition(price);
NumberAttributeDefinition total = schema.createNumberAttributeDefinition();
total.setName("total");
item.addChildDefinition(total);
{
AttributeDefault attributeDefault = new AttributeDefault();
attributeDefault.setExpression("qty * price");
attributeDefault.setCondition("price > 0");
total.addAttributeDefault(attributeDefault);
}
{
AttributeDefault attributeDefault = new AttributeDefault();
attributeDefault.setValue("0");
attributeDefault.setCondition("price = 0");
total.addAttributeDefault(attributeDefault);
}
return survey;
}
use of org.openforis.idm.metamodel.AttributeDefault in project collect by openforis.
the class DefaultValueTest method testNullValue.
@Test
public void testNullValue() throws InvalidExpressionException {
NumericAttributeDefinition totalDefn = (NumericAttributeDefinition) schema.getDefinitionByPath("bill/item/total");
List<AttributeDefault> attributeDefaults = totalDefn.getAttributeDefaults();
AttributeDefault exprAttributeDefault = attributeDefaults.get(0);
Entity rootEntity = record.getRootEntity();
Entity item = addItem(rootEntity, null, 5.5d);
RealAttribute total = (RealAttribute) item.getChild("total", 0);
RealValue calculatedTotal = exprAttributeDefault.evaluate(total);
assertEquals(0d, calculatedTotal.getValue(), 0);
}
use of org.openforis.idm.metamodel.AttributeDefault in project collect by openforis.
the class DefaultValueTest method testConditionNotRespected.
@Test
public void testConditionNotRespected() throws InvalidExpressionException {
NumericAttributeDefinition totalDefn = (NumericAttributeDefinition) schema.getDefinitionByPath("bill/item/total");
List<AttributeDefault> attributeDefaults = totalDefn.getAttributeDefaults();
AttributeDefault exprAttributeDefault = attributeDefaults.get(0);
Entity rootEntity = record.getRootEntity();
Entity item = addItem(rootEntity, 10, 0d);
RealAttribute total = (RealAttribute) item.getChild("total", 0);
boolean condition = exprAttributeDefault.evaluateCondition(total);
assertFalse(condition);
}
Aggregations