package org.jtwig.render.expression.calculator.enumerated; import com.google.common.base.Optional; import org.jtwig.render.RenderRequest; import org.jtwig.value.convert.Converter; import java.util.ArrayList; import java.util.List; public class CharDescendingOrderEnumerationListStrategy implements EnumerationListStrategy { @Override public Optional<List<Object>> enumerate(RenderRequest request, Object left, Object right) { Converter.Result<Character> leftChar = request.getEnvironment().getValueEnvironment().getCharConverter().convert(left); Converter.Result<Character> rightChar = request.getEnvironment().getValueEnvironment().getCharConverter().convert(right); if (leftChar.isDefined() && rightChar.isDefined()) { Character start = leftChar.get(); Character end = rightChar.get(); if (start >= end) { List<Object> result = new ArrayList<>(); while (start > end) { result.add(start); start--; } result.add(start); return Optional.of(result); } } return Optional.absent(); } }