package org.jtwig.functions.impl.list; 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.Collections; import java.util.List; public class SortFunction extends SimpleJtwigFunction { @Override public String name() { return "sort"; } @Override public Object execute(FunctionRequest request) { request.maximumNumberOfArguments(1).minimumNumberOfArguments(1); Converter<WrappedCollection> collectionConverter = request.getEnvironment().getValueEnvironment().getCollectionConverter(); Object object = request.get(0); List<Object> result = new ArrayList<>(collectionConverter.convert(object) .or(WrappedCollection.singleton(object)) .values()); if (result.isEmpty() || result.size() == 1) { return result; } else { if (result.get(0) instanceof Comparable) { Collections.sort((List) result); } else { throw request.exception(String.format("Sort function only works over collections of items, where items implement the %s interface", Comparable.class)); } } return result; } }