package com.hubspot.jinjava.el.ext;
import de.odysseus.el.misc.TypeConverter;
import de.odysseus.el.tree.impl.Parser.ExtensionHandler;
import de.odysseus.el.tree.impl.Parser.ExtensionPoint;
import de.odysseus.el.tree.impl.Scanner;
import de.odysseus.el.tree.impl.Scanner.ExtensionToken;
import de.odysseus.el.tree.impl.ast.AstNode;
import de.odysseus.el.tree.impl.ast.AstUnary;
public class AbsOperator {
public static final ExtensionToken TOKEN = new Scanner.ExtensionToken("+");
public static final ExtensionHandler HANDLER = new ExtensionHandler(ExtensionPoint.UNARY) {
@Override
public AstNode createAstNode(AstNode... children) {
return new AstUnary(children[0], new AstUnary.SimpleOperator() {
@Override
protected Object apply(TypeConverter converter, Object o) {
if (o == null) {
return null;
}
if (o instanceof Float) {
return Math.abs((Float) o);
}
if (o instanceof Double) {
return Math.abs((Double) o);
}
if (o instanceof Integer) {
return Math.abs((Integer) o);
}
if (o instanceof Long) {
return Math.abs((Long) o);
}
throw new IllegalArgumentException("Unable to apply abs operator on object of type: " + o.getClass());
}
});
}
};
}