// complex expression
 private Object getComplexExpressionValue(String name) {
   List<Object> values = new ArrayList<Object>();
   DRIDesignComplexExpression complexExpression = jasperScriptlet.getComplexExpression(name);
   for (DRIDesignExpression valueExpression : complexExpression.getExpressions()) {
     values.add(getValue(valueExpression.getName()));
   }
   return complexExpression.evaluate(values, this);
 }
 private DRIDesignExpression addExpression(DRIDesignExpression expression) {
   if (expression == null) {
     return null;
   }
   if (expression instanceof DRIDesignField) {
     return addField((DRIDesignField) expression);
   } else if (expression instanceof DRIDesignVariable) {
     addVariable((DRDesignVariable) expression);
   } else if (expression instanceof DRIDesignSystemExpression) {
     addSystemExpression((DRIDesignSystemExpression) expression);
   } else if (expression instanceof DRIDesignJasperExpression) {
     addJasperExpression((DRIDesignJasperExpression) expression);
   } else if (expression instanceof DRIDesignSimpleExpression) {
     addSimpleExpression((DRIDesignSimpleExpression) expression);
   } else if (expression instanceof DRIDesignComplexExpression) {
     addComplexExpression((DRIDesignComplexExpression) expression);
   } else {
     throw new DRDesignReportException(
         "Expression " + expression.getClass().getName() + " not supported");
   }
   return expression;
 }