package com.sinata.common.enums.factory;
|
|
import com.sinata.common.enums.base.enums.BaseEnum;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.core.convert.converter.Converter;
|
import org.springframework.core.convert.converter.ConverterFactory;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.StringUtils;
|
|
/**
|
* <p>
|
* 枚举转换工厂
|
* </p>
|
*
|
* @ClassName com.sinata.data.common.factory.EnumConvertFactory
|
* @Description 枚举转换工厂
|
* @Author BaiHua
|
* @Date 2019/10/18 23:21
|
*/
|
@Slf4j
|
@Component
|
public class EnumConvertFactory implements ConverterFactory<String, BaseEnum> {
|
@Override
|
public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
|
return new StringToIEum<>(targetType);
|
}
|
|
@SuppressWarnings("all")
|
private static class StringToIEum<T extends BaseEnum> implements Converter<String, T> {
|
private Class<T> targerType;
|
public StringToIEum(Class<T> targerType) {
|
this.targerType = targerType;
|
}
|
|
@Override
|
public T convert(String source) {
|
if (StringUtils.isEmpty(source)) {
|
return null;
|
}
|
return (T) EnumConvertFactory.getIEnum(this.targerType, source);
|
}
|
}
|
|
public static <T extends BaseEnum> Object getIEnum(Class<T> targerType, String source) {
|
for (T enumObj : targerType.getEnumConstants()) {
|
if (source.equals(String.valueOf(enumObj))) {
|
log.debug("{}转换{}",source,enumObj.getMark());
|
return enumObj;
|
}
|
}
|
return null;
|
}
|
}
|