DynamicEnumManager.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package cn.com.qmth.examcloud.commons.helpers;
  2. import java.io.File;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.apache.commons.lang3.StringUtils;
  6. import com.google.common.collect.Maps;
  7. import com.thoughtworks.xstream.XStream;
  8. import cn.com.qmth.examcloud.commons.exception.ExamCloudRuntimeException;
  9. import cn.com.qmth.examcloud.commons.util.PathUtil;
  10. /**
  11. * 动态属性管理器
  12. *
  13. * @author WANGWEI
  14. * @date 2018年8月23日
  15. * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
  16. */
  17. public class DynamicEnumManager {
  18. private List<DynamicEnum> enums;
  19. private Map<String, DynamicEnum> nameIndex;
  20. private Map<Long, DynamicEnum> idIndex;
  21. /**
  22. * 构造函数
  23. *
  24. */
  25. private DynamicEnumManager() {
  26. super();
  27. }
  28. /**
  29. * 方法注释
  30. *
  31. * @author WANGWEI
  32. * @param xmlResourcePath
  33. * @return
  34. */
  35. public static DynamicEnumManager newInstance(String xmlResourcePath) {
  36. DynamicEnumManager manager = new DynamicEnumManager();
  37. String resoucePath = PathUtil.getResoucePath(xmlResourcePath);
  38. File file = new File(resoucePath);
  39. XStream xStream = XStreamBuilder.newInstance().build();
  40. xStream.allowTypes(new Class[]{DynamicEnum.class, List.class});
  41. xStream.alias("enums", List.class);
  42. xStream.alias("enum", DynamicEnum.class);
  43. @SuppressWarnings("unchecked")
  44. List<DynamicEnum> list = (List<DynamicEnum>) xStream.fromXML(file);
  45. manager.enums = list;
  46. manager.nameIndex = Maps.newHashMap();
  47. manager.idIndex = Maps.newHashMap();
  48. for (DynamicEnum cur : manager.enums) {
  49. String valueTpye = cur.getValueType();
  50. if (StringUtils.isBlank(valueTpye)) {
  51. cur.setValueType(null);
  52. } else {
  53. try {
  54. BasicDataType dataType = BasicDataType.valueOf(valueTpye);
  55. cur.setValueType(dataType.name());
  56. } catch (Exception e) {
  57. throw new RuntimeException("valueTpye is wrong. valueTpye=" + valueTpye);
  58. }
  59. }
  60. cur.setName(cur.getName().trim());
  61. cur.setDesc(cur.getDesc().trim());
  62. manager.nameIndex.put(cur.getName(), cur);
  63. manager.idIndex.put(cur.getId(), cur);
  64. }
  65. return manager;
  66. }
  67. /**
  68. * 方法注释
  69. *
  70. * @author WANGWEI
  71. * @param name
  72. * @return
  73. */
  74. public DynamicEnum getByName(String name) {
  75. DynamicEnum dynamicEnum = nameIndex.get(name);
  76. if (null != dynamicEnum) {
  77. return dynamicEnum;
  78. }
  79. throw new ExamCloudRuntimeException("动态枚举不存在. name=" + name);
  80. }
  81. /**
  82. * 方法注释
  83. *
  84. * @author WANGWEI
  85. * @param name
  86. * @return
  87. */
  88. public Long getIdByName(String name) {
  89. DynamicEnum dynamicEnum = nameIndex.get(name);
  90. if (null != dynamicEnum) {
  91. return dynamicEnum.getId();
  92. }
  93. throw new ExamCloudRuntimeException("动态枚举不存在. name=" + name);
  94. }
  95. /**
  96. * 方法注释
  97. *
  98. * @author WANGWEI
  99. * @param id
  100. * @return
  101. */
  102. public DynamicEnum getById(Long id) {
  103. DynamicEnum dynamicEnum = idIndex.get(id);
  104. if (null != dynamicEnum) {
  105. return dynamicEnum;
  106. }
  107. throw new ExamCloudRuntimeException("动态枚举不存在. id=" + id);
  108. }
  109. /**
  110. * 方法注释
  111. *
  112. * @author WANGWEI
  113. * @param id
  114. * @return
  115. */
  116. public String getNameById(Long id) {
  117. DynamicEnum dynamicEnum = idIndex.get(id);
  118. if (null != dynamicEnum) {
  119. return dynamicEnum.getName();
  120. }
  121. throw new ExamCloudRuntimeException("动态枚举不存在. id=" + id);
  122. }
  123. }