/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.segmentation.server.participant.common;
import net.codjo.expression.ExpressionException;
import net.codjo.expression.ExpressionManager;
import net.codjo.segmentation.server.preference.family.Row;
/**
* Evaluateur d'expression utilisant la librairie <code>codjo-expression</code>.
*/
public class ExpressionsEvaluator {
private final ExpressionManager expressionManager;
private final String[] resultColumnNames;
public ExpressionsEvaluator(ExpressionManager expressionManager, String[] resultColumnNames) {
this.resultColumnNames = resultColumnNames;
this.expressionManager = expressionManager;
}
public Row compute(Row rowToEvaluate) throws ComputeException {
expressionManager.clear();
for (int i = 0; i < rowToEvaluate.getColumnNames().length; i++) {
String colName = rowToEvaluate.getColumnNames()[i];
Object colValue = rowToEvaluate.getColumnValue(i);
expressionManager.setFieldSourceValue(colName, colValue);
}
try {
expressionManager.compute();
}
catch (ExpressionException error) {
throw new ComputeException(error, buildResultRow());
}
return buildResultRow();
}
private Row buildResultRow() {
Row result = new Row(resultColumnNames);
for (int i = 0; i < resultColumnNames.length; i++) {
Object value = expressionManager.getComputedValue(resultColumnNames[i]);
result.setColumnValue(i, value);
}
return result;
}
}