local_mvs.xml 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <class name="LocalMvS">
  2. <relationships>
  3. <association name="parent" class="MvKController" min="1" max="1"/>
  4. </relationships>
  5. <constructor>
  6. <parameter name="params"/>
  7. <body>
  8. <![CDATA[
  9. self.queue = []
  10. self.destinations = []
  11. import sys
  12. sys.path.append("../../state")
  13. from modelverse_state.main import ModelverseState
  14. self.mvs = ModelverseState("../../bootstrap/bootstrap.m.gz")
  15. self.mvs_operations = {
  16. "CN": self.mvs.create_node,
  17. "CE": self.mvs.create_edge,
  18. "CNV": self.mvs.create_nodevalue,
  19. "CD": self.mvs.create_dict,
  20. "RV": self.mvs.read_value,
  21. "RO": self.mvs.read_outgoing,
  22. "RI": self.mvs.read_incoming,
  23. "RE": self.mvs.read_edge,
  24. "RD": self.mvs.read_dict,
  25. "RDN": self.mvs.read_dict_node,
  26. "RDNE": self.mvs.read_dict_node_edge,
  27. "RDE": self.mvs.read_dict_edge,
  28. "RRD": self.mvs.read_reverse_dict,
  29. "RR": self.mvs.read_root,
  30. "RDK": self.mvs.read_dict_keys,
  31. "DE": self.mvs.delete_edge,
  32. "DN": self.mvs.delete_node,
  33. "DUMP": self.mvs.dump_modelverse,
  34. }
  35. ]]>
  36. </body>
  37. </constructor>
  38. <method name="process_message">
  39. <parameter name="operation_name"/>
  40. <parameter name="parameters"/>
  41. <body>
  42. <![CDATA[
  43. op = self.mvs_operations[operation_name]
  44. return op(*parameters)
  45. ]]>
  46. </body>
  47. </method>
  48. <scxml initial="init">
  49. <state id="init">
  50. <transition target="../running">
  51. <raise event="http_client_ready" scope="narrow" target="'parent'"/>
  52. </transition>
  53. </state>
  54. <state id="running">
  55. <transition event="HTTP_input" target=".">
  56. <parameter name="data"/>
  57. <parameter name="destination"/>
  58. <script>
  59. decoded_data = json.loads(data.split("=",1)[1])
  60. result = []
  61. for command, params in decoded_data:
  62. result.append(self.process_message(command, params))
  63. data = {"data": json.dumps(result)}
  64. </script>
  65. <raise event="HTTP_output" scope="narrow" target="destination">
  66. <parameter expr="data"/>
  67. </raise>
  68. </transition>
  69. </state>
  70. </scxml>
  71. </class>