@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); } }
@Override public FunctionRepository include(Object instance) { for (Method method : instance.getClass().getDeclaredMethods()) { JtwigFunction annotation = method.getAnnotation(JtwigFunction.class); if (annotation != null) { this.add(annotation.name(), functionFrom(method).on(instance)); this.aliases(annotation.name(), annotation.aliases()); } } return this; }
@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 = "first") public Object first (@Parameter Map input) { if (input.isEmpty()) return null; return input.get(input.keySet().iterator().next()); } @JtwigFunction(name = "last")
@JtwigFunction(name = "abs") public Float abs (@Parameter Float input) { return Math.abs(input); } @JtwigFunction(name = "abs")
@JtwigFunction(name = "first") public Object first (@Parameter Object input) { if (input == null) return input; if (input.getClass().isArray()) { if (Array.getLength(input) == 0) return null; return Array.get(input, 0); } else return input; } @JtwigFunction(name = "last")
@JtwigFunction(name = "last") public Object last (@Parameter Object input) { if (input == null) return input; if (input.getClass().isArray()) { int length = Array.getLength(input); if (length == 0) return null; return Array.get(input, length - 1); } else return input; }
@JtwigFunction(name = "odd") public boolean odd(@Parameter int number) { return number % 2 == 1; }
@JtwigFunction(name = "lower") public String lower (@Parameter String input) { return input.toLowerCase(); }
@JtwigFunction(name = "reverse") public String reverse (@Parameter String input) { return new StringBuilder(input).reverse().toString(); }
@JtwigFunction(name = "last") public Object last (@Parameter List input) { if (input.isEmpty()) return null; return input.get(input.size() - 1); }