@Override
public Result evaluate(Map<Descriptor, ?> values) throws Exception {
org.jpmml.evaluator.Evaluator evaluator =
(org.jpmml.evaluator.Evaluator) getModelManager();
Map<FieldName, org.jpmml.evaluator.FieldValue> arguments = new LinkedHashMap<FieldName, org.jpmml.evaluator.FieldValue>();
Map<FieldName, DataField> dataFieldMap = new LinkedHashMap<FieldName, DataField>();
List<Descriptor> descriptors = getDescriptors();
for(Descriptor descriptor : descriptors){
FieldName field = FieldNameUtil.encodeDescriptor(descriptor);
DataField dataField = dataFieldMap.get(field);
if(dataField == null){
dataField = evaluator.getDataField(field);
if(dataField == null){
field = new FieldName(descriptor.getId());
dataField = evaluator.getDataField(field);
}
if(dataField == null){
throw new IllegalArgumentException();
}
dataFieldMap.put(field, dataField);
}
Object value = values.get(descriptor);
org.jpmml.evaluator.FieldValue fieldValue = EvaluatorUtil.prepare(evaluator, field, value);
arguments.put(field, fieldValue);
}
Map<FieldName, ?> result = evaluator.evaluate(arguments);
Object targetValue = result.get(evaluator.getTargetField());
return new Result(EvaluatorUtil.decode(targetValue), values);
}