package com.hubspot.jinjava.el.ext;
import java.util.Collection;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
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.ast.AstBinary;
import de.odysseus.el.tree.impl.ast.AstBinary.SimpleOperator;
import de.odysseus.el.tree.impl.ast.AstNode;
public class CollectionMembershipOperator extends SimpleOperator {
@Override
protected Object apply(TypeConverter converter, Object o1, Object o2) {
if (o2 == null) {
return Boolean.FALSE;
}
if (CharSequence.class.isAssignableFrom(o2.getClass())) {
return Boolean.valueOf(StringUtils.contains((CharSequence) o2, Objects.toString(o1, "")));
}
if (Collection.class.isAssignableFrom(o2.getClass())) {
return Boolean.valueOf(((Collection<?>) o2).contains(o1));
}
return Boolean.FALSE;
}
public static final CollectionMembershipOperator OP = new CollectionMembershipOperator();
public static final Scanner.ExtensionToken TOKEN = new Scanner.ExtensionToken("in");
public static final ExtensionHandler HANDLER = new ExtensionHandler(ExtensionPoint.CMP) {
@Override
public AstNode createAstNode(AstNode... children) {
return new AstBinary(children[0], children[1], OP);
}
};
}