@JtwigFunction(name = "last") public Object last (@Parameter Map input) { if (input.isEmpty()) return null; Iterator iterator = input.keySet().iterator(); Object key = iterator.next(); while (iterator.hasNext()) key = iterator.next(); return input.get(key); } }
@JtwigFunction(name = "concat", aliases = { "concatenate" }) public String concatenate (@Parameter String... pieces) { StringBuilder builder = new StringBuilder(); for (String piece : pieces) { if (piece != null) builder.append(piece); } return builder.toString(); }
@JtwigFunction(name = "sort") public List sort (@Parameter List input) { Collections.sort(input); return input; }
@JtwigFunction(name = "abs") public Double abs (@Parameter Double input) { return Math.abs(input); } @JtwigFunction(name = "abs")
@JtwigFunction(name = "length") public int length (@Parameter Object input) { if (input instanceof String) return ((String) input).length(); else return 1; }
@JtwigFunction(name = "toInt") public Integer toInt (@Parameter Object input) { if (input instanceof Number) return ((Number) input).intValue(); return Integer.parseInt(input.toString()); } }
@JtwigFunction(name = "length") public int length (@Parameter Iterable input) { Iterator iterator = input.iterator(); int count = 0; while (iterator.hasNext()) { iterator.next(); count++; } return count; }
@JtwigFunction(name = "abs") public Long abs (@Parameter Long input) { return Math.abs(input); } @JtwigFunction(name = "abs")
@JtwigFunction(name = "abs") public Integer abs (@Parameter Integer input) { return Math.abs(input); } @JtwigFunction(name = "round")
@JtwigFunction(name = "iterable") public boolean iterable(@Parameter Object input) { return input instanceof Iterable || input.getClass().isArray() || input instanceof Map; }
@JtwigFunction(name = "url_encode") public String urlEncode (@Parameter String input) throws UnsupportedEncodingException { return URLEncoder.encode(input, Charset.defaultCharset().displayName()); } @JtwigFunction(name = "url_encode")
@JtwigFunction(name = "replace") public String replace (@Parameter String input, @Parameter Map<String, Object> replacements) { for (String key : replacements.keySet()) { if (replacements.containsKey(key)) { input = input.replace(key, replacements.get(key).toString()); } } return input; }
@JtwigFunction(name = "date") public String format (@Parameter Date input, @Parameter String format) { DateFormat dateFormat = new SimpleDateFormat(format); return dateFormat.format(input); }
@JtwigFunction(name = "default") public Object defaultFunction (@Parameter Object input, @Parameter Object defaultValue) { if (input == null || input.equals(UNDEFINED)) return defaultValue; else return input; }
@JtwigFunction(name = "round") public int round (@Parameter Double input, @Parameter String strategy) { switch (RoundStrategy.valueOf(strategy.toUpperCase())) { case CEIL: return (int) Math.ceil(input); case FLOOR: return (int) Math.floor(input); default: return (int) Math.round(input); } } @JtwigFunction(name = "round")
@JtwigFunction(name = "date") public String format (@Parameter Date input) { return format(input, "yyyy-MM-dd HH:mm:ss"); } }
@JtwigFunction(name = "max") public Object max (@Parameter Object ... values) { Object result = values[0]; values = ArrayUtils.remove(values, 0); for(Object value : values) { int cmp = compare(result, value); if(cmp < 0) { result = value; } } return result; }
@JtwigFunction(name = "range") public List<Integer> range (@Parameter int start, @Parameter int end) throws FunctionException { return range(start, end, 1); } }
@JtwigFunction(name = "empty") public boolean isEmpty(@Parameter Object input) { return AnyOf.<Object>anyOf( nullValue(Object.class), emptyCollection(), emptyMap(), notHasNext(), zeroValue() ).matches(input); }
@JtwigFunction(name = "merge") public Object merge (@Parameter Object first, @Parameter Object... rest) { if (first instanceof Iterable) return mergeList(first, rest); else if (first instanceof Map) return mergeMap(first, rest); else // is array (precondition) return mergeArray(first, rest); }