private boolean evaluateCheckCondition(Attribute<?, ?> attribute, String condition) { if (StringUtils.isBlank(condition)) { return true; } else { try { Record record = attribute.getRecord(); SurveyContext recordContext = record.getSurveyContext(); ExpressionFactory expressionFactory = recordContext.getExpressionFactory(); CheckConditionExpression expression = expressionFactory.createCheckConditionExpression(condition); return expression.evaluate(attribute.getParent(), attribute); } catch (InvalidExpressionException e) { throw new IdmInterpretationError("Unable to evaluate condition " + condition, e); } } }
/** * 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); 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; }