Middleware.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package API;
  7. import common.Instruction;
  8. import common.Log;
  9. import java.util.ArrayList;
  10. import java.util.Date;
  11. import java.util.HashMap;
  12. import java.util.LinkedHashMap;
  13. /**
  14. *
  15. * @author Eugenio
  16. */
  17. public class Middleware {
  18. // Todos os processors serão armazenados aqui, e cada evendo possui uma lista de processors separada por virgula
  19. protected static LinkedHashMap<String, API.MiddlewareInterface> processors = new LinkedHashMap<>();
  20. protected static HashMap<String, HashMap<String, ArrayList<String>>> events = new HashMap<>();
  21. public static void _init() {
  22. }
  23. public static void On(String selectors, String event, API.MiddlewareInterface p) throws Exception {
  24. String id = selectors + "." + event + "." + new Date().getTime();
  25. Add(id, p);
  26. On(selectors, event, id);
  27. }
  28. public static void On(String selectors, String event, String processors) {
  29. HashMap<String, ArrayList<String>> s;
  30. ArrayList<String> processorsList = ProcToList(processors);
  31. for (String selector : selectors.split(",")) {
  32. if (!events.containsKey(selector)) {
  33. events.put(selector, new HashMap<>());
  34. }
  35. s = events.get(selector);
  36. if (!s.containsKey(event)) {
  37. s.put(event, new ArrayList<>());
  38. }
  39. s.get(event).addAll(processorsList);
  40. }
  41. }
  42. public static void Trigger(common.Code c, String selector, String event) throws Exception {
  43. // System.out.println("Try trigger:" + selector);
  44. if (events.containsKey(selector)) {
  45. HashMap<String, ArrayList<String>> t = events.get(selector);
  46. if (t.containsKey(event)) {
  47. ProcessorExecute(c, t.get(event));
  48. }
  49. }
  50. }
  51. public static void Add(String id, API.MiddlewareInterface p) throws Exception {
  52. if (processors.containsKey(id)) {
  53. Log.PrintWarning(
  54. "Code Processor",
  55. new Instruction().Set("msg", String.format("Tentativa de sobrescrita do processor %s.", id))
  56. );
  57. }
  58. processors.put(id, p);
  59. }
  60. protected static ArrayList<String> ProcToList(String events) {
  61. // System.out.println("events:" + events);
  62. ArrayList<String> r = new ArrayList<>();
  63. for (String p : events.replaceAll("\\s+", "").split(",")) {
  64. r.add(p);
  65. }
  66. return r;
  67. }
  68. public static void ProcessorExecute(common.Code c, ArrayList<String> eventList) throws Exception {
  69. for (String x : eventList) {
  70. if (x.equals("")) {
  71. continue;
  72. }
  73. if (!processors.containsKey(x)) {
  74. throw new Exception(String.format("Processador de código '%s' não definido!", x));
  75. }
  76. processors.get(x.trim()).Exec(c, processors);
  77. }
  78. }
  79. }