import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class EnumUtils {
public static <T extends Enum> String getValueByCode(Class<T> enumType, String code) {
if(enumType.isEnum() && StringUtils.isNotEmpty(code)){
try {
Method getCodeMethod = enumType.getMethod("getCode");
Method getValueMethod = enumType.getMethod("getValue");
T[] enumList = enumType.getEnumConstants();
for(T item:enumList){
if(code.equals(String.valueOf(getCodeMethod.invoke(item)))){
return String.valueOf(getValueMethod.invoke(item));
}
}
} catch (Exception e) {
log.error(e.getMessage(),e);
}
}
return null;
}
public static <T extends Enum> T getEnumByCode(Class<T> enumType, String code) {
if(enumType.isEnum() && StringUtils.isNotEmpty(code)){
try {
Method getCodeMethod = enumType.getMethod("getCode");
T[] enumList = enumType.getEnumConstants();
for(T item:enumList){
if(code.equals(String.valueOf(getCodeMethod.invoke(item)))){
return item;
}
}
} catch (Exception e) {
log.error(e.getMessage(),e);
}
}
return null;
}
public static <T extends Enum> Map<String, String> getValueMap(Class<T> enumType) throws Exception {
if(enumType.isEnum()){
Method getCodeMethod = enumType.getMethod("getCode");
Method getValueMethod = enumType.getMethod("getValue");
T[] enumList = enumType.getEnumConstants();
Map<String, String> valueMap = new HashMap<>();
for(T item:enumList){
valueMap.put(String.valueOf(getCodeMethod.invoke(item)) , String.valueOf(getValueMethod.invoke(item)));
}
return valueMap;
}
return null;
}
public static <T extends Enum> Map<String, T> getEnumMap(Class<T> enumType) throws Exception {
if(enumType.isEnum()){
Method getCodeMethod = enumType.getMethod("getCode");
T[] enumList = enumType.getEnumConstants();
Map<String, T> enumMap = new HashMap<>();
for(T item:enumList){
String code = String.valueOf(getCodeMethod.invoke(item));
enumMap.put(code, getEnumByCode(enumType,code));
}
return enumMap;
}
return null;
}
public static <T extends Enum> String getAliasByCode(Class<T> enumType, String code) {
if(enumType.isEnum() && StringUtils.isNotEmpty(code)){
try {
Method getCodeMethod = enumType.getMethod("getCode");
Method getAliasMethod = enumType.getMethod("getAlias");
T[] enumList = enumType.getEnumConstants();
for(T item:enumList){
if(code.equals(String.valueOf(getCodeMethod.invoke(item)))){
return String.valueOf(getAliasMethod.invoke(item));
}
}
} catch (Exception e) {
log.error(e.getMessage(),e);
}
}
return null;
}
public static <T extends Enum> String getCodeByValue(Class<T> enumType, String value) {
if(enumType.isEnum() && StringUtils.isNotEmpty(value)){
try {
Method getCodeMethod = enumType.getMethod("getCode");
Method getValueMethod = enumType.getMethod("getValue");
T[] enumList = enumType.getEnumConstants();
for(T item:enumList){
if(value.equals(String.valueOf(getValueMethod.invoke(item)))){
return getCodeMethod.invoke(item).toString();
}
}
} catch (Exception e) {
log.error(e.getMessage(),e);
}
}
return null;
}
public static <T extends Enum> String getOrderNumByCode(Class<T> enumType, String code) {
if(enumType.isEnum() && StringUtils.isNotEmpty(code)){
try {
Method getCodeMethod = enumType.getMethod("getCode");
Method getAliasMethod = enumType.getMethod("getOrderNum");
T[] enumList = enumType.getEnumConstants();
for(T item:enumList){
if(code.equals(String.valueOf(getCodeMethod.invoke(item)))){
return String.valueOf(getAliasMethod.invoke(item));
}
}
} catch (Exception e) {
log.error(e.getMessage(),e);
}
}
return null;
}
}