@Override
 protected List<Object> getExternalCalculationConditions() {
   if (condition == null) {
     return Collections.EMPTY_LIST;
   }
   return condition.getExternalCalculationConditions();
 }
 @Override
 protected int getNumberOfExternalCalculations() {
   if (condition == null) {
     return 0;
   }
   return condition.getNumberOfExternalCalculations();
 }
 @Override
 public void replaceParameters(Map<Object, Object> params) {
   left.replaceParameters(params);
   if (condition != null) {
     condition.replaceParameters(params);
   }
   if (expression != null) {
     expression.replaceParameters(params);
   }
 }
 public String toString() {
   StringBuilder result = new StringBuilder();
   result.append(left.toString());
   result.append(" CONTAINSVALUE ");
   if (condition != null) {
     result.append("(");
     result.append(condition.toString());
     result.append(")");
   } else {
     result.append(expression.toString());
   }
   return result.toString();
 }