DataTemplateManager.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. package org.ts.ddcs.datatemplate;
  2. import lombok.Data;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.ts.ddcs.common.enums.AgreementEnum;
  5. import org.ts.ddcs.itemdatatemplate.ItemTemplate;
  6. import org.dom4j.Document;
  7. import org.dom4j.DocumentException;
  8. import org.dom4j.Element;
  9. import org.dom4j.io.SAXReader;
  10. import java.io.File;
  11. import java.util.*;
  12. /**
  13. * 数据报文模板管理主模块
  14. *
  15. * @author swp
  16. */
  17. @Data
  18. @Slf4j
  19. public class DataTemplateManager {
  20. private Map<String, List<Template>> templateMap = new HashMap<>(10);
  21. private Map<String, List<ItemTemplate>> itemTemplateMap = new HashMap<>(200);
  22. /**
  23. * 初始化模板
  24. *
  25. * @param dir 模板文档目录
  26. * @param templates 模板名称
  27. */
  28. public boolean init(String dir, String templates) {
  29. try {
  30. String[] list = templates.split(",");
  31. if (list.length > 0) {
  32. for (String t : list) {
  33. if (AgreementEnum.AGREEMENT_SW.getName().equals(t)) {
  34. //加载模板配置文件
  35. String templateDoc = dir + File.separator + t.toLowerCase() + ".xml";
  36. File templateFile = new File(templateDoc);
  37. if (!templateFile.exists()) {
  38. return false;
  39. }
  40. List<Template> templateList = this.loadTemplateConfig(templateDoc);
  41. this.templateMap.put(AgreementEnum.AGREEMENT_SW.getName(), templateList);
  42. //加载编码要素配置文件
  43. String itemTemplateDoc = dir + File.separator + t.toLowerCase() + "-item.xml";
  44. File itemTemplateFile = new File(itemTemplateDoc);
  45. if (itemTemplateFile.exists()) {
  46. List<ItemTemplate> itemTemplateList = this.loadItemTemplateConfig(itemTemplateDoc);
  47. this.itemTemplateMap.put(AgreementEnum.AGREEMENT_SW.getName(), itemTemplateList);
  48. }
  49. } else if (AgreementEnum.AGREEMENT_SW_EXT.getName().equals(t)) {
  50. //加载模板配置文件
  51. String templateDoc = dir + File.separator + t.toLowerCase() + ".xml";
  52. File templateFile = new File(templateDoc);
  53. if (!templateFile.exists()) {
  54. return false;
  55. }
  56. List<Template> templateList = this.loadTemplateConfig(templateDoc);
  57. this.templateMap.put(AgreementEnum.AGREEMENT_SW_EXT.getName(), templateList);
  58. //加载编码要素配置文件
  59. String itemTemplateDoc = dir + File.separator + t.toLowerCase() + "-item.xml";
  60. File itemTemplateFile = new File(itemTemplateDoc);
  61. if (itemTemplateFile.exists()) {
  62. List<ItemTemplate> itemTemplateList = this.loadItemTemplateConfig(itemTemplateDoc);
  63. this.itemTemplateMap.put(AgreementEnum.AGREEMENT_SW_EXT.getName(), itemTemplateList);
  64. }
  65. } else if (AgreementEnum.AGREEMENT_SZY.getName().equals(t)) {
  66. //加载模板配置文件
  67. String templateDoc = dir + File.separator + t.toLowerCase() + ".xml";
  68. File templateFile = new File(templateDoc);
  69. if (!templateFile.exists()) {
  70. return false;
  71. }
  72. List<Template> templateList = this.loadTemplateConfig(templateDoc);
  73. this.templateMap.put(AgreementEnum.AGREEMENT_SZY.getName(), templateList);
  74. //加载编码要素配置文件
  75. String itemTemplateDoc = dir + File.separator + t.toLowerCase() + "-item.xml";
  76. File itemTemplateFile = new File(itemTemplateDoc);
  77. if (itemTemplateFile.exists()) {
  78. List<ItemTemplate> itemTemplateList = this.loadItemTemplateConfig(itemTemplateDoc);
  79. this.itemTemplateMap.put(AgreementEnum.AGREEMENT_SZY.getName(), itemTemplateList);
  80. }
  81. }
  82. }
  83. }
  84. return true;
  85. } catch (Exception e) {
  86. log.error("error", e);
  87. return false;
  88. }
  89. }
  90. // public boolean hasTemplate(String agreement) {
  91. // if (this.templateMap.containsKey(agreement.toUpperCase())) {
  92. // return true;
  93. // }
  94. // return false;
  95. // }
  96. /**
  97. * 加载配置文件
  98. *
  99. * @param templates
  100. * @return
  101. * @throws DocumentException
  102. */
  103. private List<Template> loadTemplateConfig(String templates) throws DocumentException {
  104. List<Template> templateList = new LinkedList<>();
  105. SAXReader reader = new SAXReader();
  106. Document document = reader.read(new File(templates));
  107. Element root = document.getRootElement();
  108. Element templateNode = root.element("Templates");
  109. List items = templateNode.elements("Item");
  110. for (Object o : items
  111. ) {
  112. Element e = (Element) o;
  113. String enable = e.element("Enable").getTextTrim();
  114. if ("1".equals(enable)) {
  115. Template template = new Template();
  116. template.setType(e.element("Type").getTextTrim());
  117. template.setStreamProcessorClass(e.element("StreamProcessor").getTextTrim());
  118. template.setProcessorName(e.element("ProcessorName").getTextTrim());
  119. template.setTemplateName(e.element("TemplateName").getTextTrim());
  120. templateList.add(template);
  121. }
  122. }
  123. return templateList;
  124. }
  125. /**
  126. * 导入编码要素配置模板
  127. *
  128. * @param templates
  129. * @return
  130. * @throws DocumentException
  131. */
  132. private List<ItemTemplate> loadItemTemplateConfig(String templates) throws DocumentException {
  133. List<ItemTemplate> templateList = new LinkedList<>();
  134. SAXReader reader = new SAXReader();
  135. Document document = reader.read(new File(templates));
  136. Element root = document.getRootElement();
  137. Element templatesNode = root.element("Templates");
  138. List items = templatesNode.elements("Item");
  139. for (Object o : items
  140. ) {
  141. Element e = (Element) o;
  142. String enable = e.element("Enable").getTextTrim();
  143. if ("1".equals(enable)) {
  144. ItemTemplate t = new ItemTemplate();
  145. String dataTemplateClass = e.element("DataTemplate").getTextTrim();
  146. t.setItemTemplateClass(dataTemplateClass);
  147. String func = e.element("Func").getTextTrim();
  148. t.setFunc(func);
  149. String desc = e.element("Desc").getTextTrim();
  150. t.setDesc(desc);
  151. String funcName = e.element("FuncName").getTextTrim();
  152. t.setFuncName(funcName);
  153. String unit = e.element("Unit").getTextTrim();
  154. t.setUnit(unit);
  155. templateList.add(t);
  156. }
  157. }
  158. return templateList;
  159. }
  160. /**
  161. * 返回指定规约的模板配置
  162. *
  163. * @param agreement
  164. * @return
  165. */
  166. public List<Template> cloneTemplateLine(String agreement) {
  167. if (this.templateMap.containsKey(agreement)) {
  168. return this.templateMap.get(agreement);
  169. }
  170. return null;
  171. }
  172. /**
  173. * 生成模板配置实例
  174. *
  175. * @param template
  176. * @return
  177. */
  178. // private Template cloneTemplate(Template template) {
  179. // Template newTemplate = new Template();
  180. // newTemplate.setTemplateName(template.getTemplateName());
  181. // newTemplate.setDataTemplateClass(template.getDataTemplateClass());
  182. // newTemplate.setStreamProcessorClass(template.getStreamProcessorClass());
  183. // newTemplate.setDataProcessorClass(template.getDataProcessorClass());
  184. // newTemplate.setFeatureWeight(template.getFeatureWeight());
  185. // if (null != template.getFeatureKey()) {
  186. // byte[] featureKey = new byte[template.getFeatureKey().length];
  187. // System.arraycopy(template.getFeatureKey(), 0, featureKey, 0, featureKey.length);
  188. // newTemplate.setFeatureKey(featureKey);
  189. // }
  190. // if (null != template.getFeatureIndex()) {
  191. // byte[] featureIndex = new byte[template.getFeatureIndex().length];
  192. // System.arraycopy(template.getFeatureIndex(), 0, featureIndex, 0, featureIndex.length);
  193. // newTemplate.setFeatureIndex(featureIndex);
  194. // }
  195. // return newTemplate;
  196. // }
  197. /**
  198. * 返回编码要素配置模板
  199. *
  200. * @param agreement
  201. * @return
  202. */
  203. public List<ItemTemplate> cloneItemTemplateLine(String agreement) {
  204. if (this.itemTemplateMap.containsKey(agreement)) {
  205. return this.itemTemplateMap.get(agreement);
  206. }
  207. return null;
  208. }
  209. /**
  210. * 生成编码要素配置模板
  211. *
  212. * @param itemTemplate
  213. * @return
  214. */
  215. // private ItemTemplate cloneItemTemplate(ItemTemplate itemTemplate) {
  216. // ItemTemplate newTemplate = new ItemTemplate();
  217. // newTemplate.setFunc(itemTemplate.getFunc());
  218. // newTemplate.setDesc(itemTemplate.getDesc());
  219. // newTemplate.setItemTemplateClass(itemTemplate.getItemTemplateClass());
  220. // return newTemplate;
  221. // }
  222. }