package org.jtwig.functions.impl.logical;
import org.jtwig.functions.FunctionRequest;
import org.jtwig.functions.SimpleJtwigFunction;
import org.jtwig.value.WrappedCollection;
import org.jtwig.value.convert.Converter;
import java.math.BigDecimal;
public class EmptyFunction extends SimpleJtwigFunction {
private final DefinedFunction definedFunction = new DefinedFunction();
@Override
public String name() {
return "empty";
}
@Override
public Object execute(FunctionRequest request) {
return request.get(0) == null ||
!definedFunction.execute(request) ||
isEmptyIterable(request) ||
isZero(request)
;
}
private boolean isZero(FunctionRequest request) {
Converter<BigDecimal> numberConverter = request.getEnvironment().getValueEnvironment().getNumberConverter();
Converter.Result<BigDecimal> decimalResult = numberConverter.convert(request.get(0));
return decimalResult.isDefined() && BigDecimal.ZERO.equals(decimalResult.get());
}
private boolean isEmptyIterable(FunctionRequest request) {
Converter.Result<WrappedCollection> result = request.getEnvironment().getValueEnvironment().getCollectionConverter().convert(request.get(0));
return result.isDefined() && result.get().size() == 0;
}
}