package org.jtwig.functions.impl.math;
import org.jtwig.functions.FunctionRequest;
import org.jtwig.functions.SimpleJtwigFunction;
import org.jtwig.util.FunctionValueUtils;
import java.math.BigDecimal;
public class RoundFunction extends SimpleJtwigFunction {
@Override
public String name() {
return "round";
}
@Override
public Object execute(FunctionRequest request) {
request.maximumNumberOfArguments(2).minimumNumberOfArguments(1);
if (request.getNumberOfArguments() == 2) {
String strategy = getString(request, 1);
switch (RoundStrategy.valueOf(strategy.toUpperCase())) {
case CEIL:
return round(request, BigDecimal.ROUND_CEILING);
case FLOOR:
return round(request, BigDecimal.ROUND_FLOOR);
default:
return round(request, BigDecimal.ROUND_HALF_DOWN);
}
}
return round(request, BigDecimal.ROUND_HALF_DOWN);
}
private String getString(FunctionRequest request, int index) {
return request.getEnvironment().getValueEnvironment().getStringConverter().convert(request.get(index));
}
private Object round(FunctionRequest request, int mode) {
BigDecimal conversionResult = FunctionValueUtils.getNumber(request, 0);
return conversionResult.setScale(0, mode);
}
public enum RoundStrategy {
COMMON,
CEIL,
FLOOR
}
}