package fr.openwide.core.jpa.querydsl; import static com.google.common.base.Preconditions.checkNotNull; import org.apache.commons.lang3.EnumUtils; import com.google.common.base.Function; import com.querydsl.core.types.Expression; import com.querydsl.core.types.dsl.Expressions; public final class SqlExpressions { private SqlExpressions() { } public static <E extends Enum<E>> Expression<E> enumFromName(final Class<E> clazz, Expression<String> expression) { return Expressions2.fromFunction(String.class, expression, clazz, new Function<String, E>() { @Override public E apply(String input) { return input != null ? EnumUtils.getEnum(clazz, input) : null; } }); } /** * Allows Hibernate to guess the parameter types, especially inside a CASE statement. */ public static <E extends Enum<E>> Expression<E> enumLiteral(E value) { checkNotNull(value); return Expressions.template(value.getDeclaringClass(), value.getDeclaringClass().getName() + "." + value.name()); } }