Beispiel #1
0
 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;
  }