public static <E extends Enum<?>> E caseInsensitiveValueOf(E[] enumValues,
			String constant) {
		for (E candidate : enumValues) {
			if (candidate.toString().equalsIgnoreCase(constant)) {
				return candidate;
			}
		}
		throw new IllegalArgumentException(String.format(
				"constant [%s] does not exist in enum type %s", constant,
				enumValues.getClass().getComponentType().getName()));
	}