It doesn't convert to enum in case of "in" and "out" queries.
public BooleanExpression evaluate(EnumPath path, ComparisonNode comparisonNode) {
ComparisonOperator comparisonOperator = comparisonNode.getOperator();
List<String> args = comparisonNode.getArguments();
Function<String, Enum<?>> toEnumFunction = (String arg) -> {
Enum enumArg = EnumUtils.getEnum(path.getType(), arg.toUpperCase());
if (enumArg == null && !NULL.equalsIgnoreCase(arg)) {
throw new IllegalArgumentException("Nonexistent enum value: " + arg);
}
return enumArg;
};
List<Enum> enumArgs = args.stream().map(toEnumFunction).collect(Collectors.toList());
String firstArg = args.get(0);
Enum firstEnumArg = enumArgs.get(0);
if (EQUAL.equals(comparisonOperator)) {
return NULL.equalsIgnoreCase(firstArg) ? path.isNull() : path.eq(firstEnumArg);
} else if (NOT_EQUAL.equals(comparisonOperator)) {
return NULL.equalsIgnoreCase(firstArg) ? path.isNotNull() : path.ne(firstEnumArg);
} else if (IN.equals(comparisonOperator)) {
return path.in(enumArgs);
} else if (NOT_IN.equals(comparisonOperator)) {
return path.notIn(enumArgs);
}
throw new UnsupportedRqlOperatorException(comparisonNode, path.getClass());
}