if( predicate instanceof SimplePredicate )
{
String fieldName = ( (SimplePredicate) predicate ).getField().getValue();
String value = ( (SimplePredicate) predicate ).getValue();
SimplePredicate.Operator operator = ( (SimplePredicate) predicate ).getOperator();
DataField expectedField = modelSchema.getExpectedField( fieldName );
if( expectedField == null )
throw new IllegalStateException( "missing field declaration in dictionary for: " + fieldName );
Type expectedFieldType = expectedField.getType();
switch( operator )
{
case EQUAL:
return new EqualsToPredicate( fieldName, Coercions.coerce( value, expectedFieldType ) );
case NOT_EQUAL:
return new NotEqualsToPredicate( fieldName, Coercions.coerce( value, expectedFieldType ) );
case LESS_THAN:
return new LessThanPredicate( fieldName, (Comparable) Coercions.coerce( value, expectedFieldType ) );
case LESS_OR_EQUAL:
return new LessOrEqualThanPredicate( fieldName, (Comparable) Coercions.coerce( value, expectedFieldType ) );
case GREATER_THAN:
return new GreaterThanPredicate( fieldName, (Comparable) Coercions.coerce( value, expectedFieldType ) );
case GREATER_OR_EQUAL:
return new GreaterOrEqualThanPredicate( fieldName, (Comparable) Coercions.coerce( value, expectedFieldType ) );
case IS_MISSING:
return new IsMissingPredicate( fieldName );
case IS_NOT_MISSING:
return new IsNotMissingPredicate( fieldName );
}
}
if( predicate instanceof SimpleSetPredicate )
{
String fieldName = ( (SimpleSetPredicate) predicate ).getField().getValue();
Array valueArray = ( (SimpleSetPredicate) predicate ).getArray();
SimpleSetPredicate.BooleanOperator operator = ( (SimpleSetPredicate) predicate ).getBooleanOperator();
DataField expectedField = modelSchema.getExpectedField( fieldName );
if( expectedField == null )
throw new IllegalStateException( "missing field declaration in dictionary for: " + fieldName );
List list = PMMLUtil.parseArray( valueArray ); // performs coercions