package org.jtwig.functions.impl.mixed;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.jtwig.functions.FunctionRequest;
import org.jtwig.functions.SimpleJtwigFunction;
import org.jtwig.value.WrappedCollection;
import org.jtwig.value.convert.Converter;
import java.util.ArrayList;
import java.util.Collection;
public class ReverseFunction extends SimpleJtwigFunction {
@Override
public String name() {
return "reverse";
}
@Override
public Object execute(FunctionRequest request) {
request.minimumNumberOfArguments(1).maximumNumberOfArguments(1);
Object input = request.get(0);
Converter.Result<WrappedCollection> collectionResult = request.getEnvironment()
.getValueEnvironment().getCollectionConverter()
.convert(input);
if (collectionResult.isDefined()) {
return reverse(collectionResult.get().values());
} else if (input instanceof String) {
return StringUtils.reverse((String) input);
} else {
return input;
}
}
private Collection<Object> reverse(Collection<Object> values) {
return Lists.reverse(new ArrayList<>(values));
}
}