EventDealChain.java 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.yihu.ehr.event.chain;
  2. import com.yihu.ehr.event.model.Event;
  3. import com.yihu.ehr.event.classloader.EventClassLoader;
  4. import com.yihu.ehr.event.processor.Processor;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.config.ConfigurableBeanFactory;
  7. import org.springframework.context.annotation.Scope;
  8. import org.springframework.stereotype.Component;
  9. import java.lang.reflect.Constructor;
  10. import java.util.HashMap;
  11. import java.util.Iterator;
  12. import java.util.Map;
  13. /**
  14. * 处理链
  15. * 1. 添加处理器
  16. * 2. 将事件依次交由处理器进行相关处理
  17. * Created by progr1mmer on 2018/7/4.
  18. */
  19. @Component
  20. @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
  21. public class EventDealChain {
  22. private final Map<String, Processor> processors = new HashMap<>();
  23. @Autowired
  24. private EventClassLoader classLoader;
  25. public void addProcessor(Processor processor) {
  26. this.addProcessor(processor, true);
  27. }
  28. public void addProcessor(Processor processor, boolean active) {
  29. processor.setActive(active);
  30. this.processors.put(processor.getClass().getName(), processor);
  31. }
  32. public void addProcessor(String processor, String type) throws Exception {
  33. this.addProcessor(processor, type, true);
  34. }
  35. public void addProcessor(String processor, String type, boolean active) throws Exception {
  36. Class clazz = classLoader.loadClass(processor);
  37. Constructor constructor = clazz.getConstructor(String.class);
  38. Processor _processor = (Processor) constructor.newInstance(type);
  39. _processor.setActive(active);
  40. this.processors.put(_processor.getClass().getName(), _processor);
  41. }
  42. public void addProcessor(Class clazz, String type) throws Exception {
  43. this.addProcessor(clazz, type, true);
  44. }
  45. public void addProcessor(Class clazz, String type, boolean active) throws Exception {
  46. Constructor constructor = clazz.getConstructor(String.class);
  47. Processor processor = (Processor) constructor.newInstance(type);
  48. processor.setActive(active);
  49. this.processors.put(processor.getClass().getName(), processor);
  50. }
  51. public void removeProcessor(String processor) {
  52. this.processors.remove(processor);
  53. }
  54. public void switchProcessorStatus(String processorName, boolean status) {
  55. this.processors.get(processorName).setActive(status);
  56. }
  57. public Map<String, Processor> getProcessors() {
  58. return this.processors;
  59. }
  60. /**
  61. * 事件处理入口
  62. * @param event
  63. */
  64. public void deal(Event event) {
  65. Iterator<String> iterator = processors.keySet().iterator();
  66. while (iterator.hasNext()) {
  67. Processor processor = processors.get(iterator.next());
  68. if (event.getType().equals(processor.getType())) {
  69. processor.process(event);
  70. }
  71. }
  72. }
  73. }