123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- 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<DynamicEnum> enums;
- private Map<String, DynamicEnum> nameIndex;
- private Map<Long, DynamicEnum> 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<DynamicEnum> list = (List<DynamicEnum>) 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);
- }
- }
|