package cn.com.qmth.examcloud.commons.helpers; import java.io.File; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Maps; import com.thoughtworks.xstream.XStream; import cn.com.qmth.examcloud.commons.exception.ExamCloudRuntimeException; import cn.com.qmth.examcloud.commons.util.PathUtil; /** * 动态属性管理器 * * @author WANGWEI * @date 2018年8月23日 * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved. */ public class DynamicEnumManager { private List enums; private Map nameIndex; private Map idIndex; /** * 构造函数 * */ private DynamicEnumManager() { super(); } /** * 方法注释 * * @author WANGWEI * @param xmlResourcePath * @return */ public static DynamicEnumManager newInstance(String xmlResourcePath) { DynamicEnumManager manager = new DynamicEnumManager(); String resoucePath = PathUtil.getResoucePath(xmlResourcePath); File file = new File(resoucePath); XStream xStream = XStreamBuilder.newInstance().build(); xStream.allowTypes(new Class[]{DynamicEnum.class, List.class}); xStream.alias("enums", List.class); xStream.alias("enum", DynamicEnum.class); @SuppressWarnings("unchecked") List list = (List) xStream.fromXML(file); manager.enums = list; manager.nameIndex = Maps.newHashMap(); manager.idIndex = Maps.newHashMap(); for (DynamicEnum cur : manager.enums) { String valueTpye = cur.getValueType(); if (StringUtils.isBlank(valueTpye)) { cur.setValueType(null); } else { try { BasicDataType dataType = BasicDataType.valueOf(valueTpye); cur.setValueType(dataType.name()); } catch (Exception e) { throw new RuntimeException("valueTpye is wrong. valueTpye=" + valueTpye); } } cur.setName(cur.getName().trim()); cur.setDesc(cur.getDesc().trim()); manager.nameIndex.put(cur.getName(), cur); manager.idIndex.put(cur.getId(), cur); } return manager; } /** * 方法注释 * * @author WANGWEI * @param name * @return */ public DynamicEnum getByName(String name) { DynamicEnum dynamicEnum = nameIndex.get(name); if (null != dynamicEnum) { return dynamicEnum; } throw new ExamCloudRuntimeException("动态枚举不存在. name=" + name); } /** * 方法注释 * * @author WANGWEI * @param name * @return */ public Long getIdByName(String name) { DynamicEnum dynamicEnum = nameIndex.get(name); if (null != dynamicEnum) { return dynamicEnum.getId(); } throw new ExamCloudRuntimeException("动态枚举不存在. name=" + name); } /** * 方法注释 * * @author WANGWEI * @param id * @return */ public DynamicEnum getById(Long id) { DynamicEnum dynamicEnum = idIndex.get(id); if (null != dynamicEnum) { return dynamicEnum; } throw new ExamCloudRuntimeException("动态枚举不存在. id=" + id); } /** * 方法注释 * * @author WANGWEI * @param id * @return */ public String getNameById(Long id) { DynamicEnum dynamicEnum = idIndex.get(id); if (null != dynamicEnum) { return dynamicEnum.getName(); } throw new ExamCloudRuntimeException("动态枚举不存在. id=" + id); } }