package com.constellio.model.utils;
import java.util.ArrayList;
import java.util.List;
import com.constellio.data.utils.ImpossibleRuntimeException;
import com.constellio.model.entities.EnumWithSmallCode;
public class EnumWithSmallCodeUtils {
public static String toSmallCode(Enum<?> enumValue) {
return toSmallCode((EnumWithSmallCode) enumValue);
}
public static String toSmallCode(EnumWithSmallCode enumValue) {
return enumValue == null ? null : enumValue.getCode();
}
@SuppressWarnings("unchecked")
public static Enum<?> toEnum(Class<? extends Enum<?>> enumClass, String code) {
if (code == null) {
return null;
}
return (Enum<?>) toEnumWithSmallCode((Class<? extends EnumWithSmallCode>) enumClass, code);
}
public static EnumWithSmallCode toEnumWithSmallCode(Class<? extends EnumWithSmallCode> enumClass, String code) {
if (code == null) {
return null;
}
List<EnumWithSmallCode> enumConstants = toEnumWithSmallCodeConstants(enumClass);
for (EnumWithSmallCode enumConstant : enumConstants) {
String anEnumValueCode = enumConstant.getCode();
if (anEnumValueCode.equals(code)) {
return enumConstant;
}
}
throw new ImpossibleRuntimeException("No such enum value with code '" + code + "' in enum '" + enumClass + "'");
}
public static List<String> toSmallCodeList(List<Enum<?>> enumValues) {
List<String> codes = new ArrayList<>();
for (Enum<?> enumValue : enumValues) {
codes.add(toSmallCode(enumValue));
}
return codes;
}
public static List<String> toSmallCodeList(Class<? extends Enum<?>> enumClass) {
List<String> codes = new ArrayList<>();
List<EnumWithSmallCode> enumValues = toEnumWithSmallCodeConstants((Class) enumClass);
for (EnumWithSmallCode enumValue : enumValues) {
codes.add(toSmallCode(enumValue));
}
return codes;
}
public static List<Enum<?>> toEnumList(Class<? extends Enum<?>> enumClass, List<String> codes) {
List<Enum<?>> enumValues = new ArrayList<>();
for (String code : codes) {
enumValues.add(toEnum(enumClass, code));
}
return enumValues;
}
public static List<EnumWithSmallCode> toEnumWithSmallCodeConstants(
Class<? extends EnumWithSmallCode> enumWithSmallCodeClass) {
if (!enumWithSmallCodeClass.isEnum()) {
throw new IllegalArgumentException(enumWithSmallCodeClass.getName() + " is not an enum");
} else if (!EnumWithSmallCode.class.isAssignableFrom(enumWithSmallCodeClass)) {
throw new IllegalArgumentException(
enumWithSmallCodeClass.getName() + " does not implement " + EnumWithSmallCode.class.getName());
}
List<EnumWithSmallCode> enumConstants = new ArrayList<EnumWithSmallCode>();
for (Object enumConstant : enumWithSmallCodeClass.getEnumConstants()) {
if (enumConstant instanceof EnumWithSmallCode) {
EnumWithSmallCode enumWithSmallCode = (EnumWithSmallCode) enumConstant;
enumConstants.add(enumWithSmallCode);
}
}
return enumConstants;
}
}