modelverse.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. from sccd.runtime.statecharts_core import Event
  2. import sccd.runtime.socket2event as socket2event
  3. import modelverse_SCCD
  4. controller = modelverse_SCCD.Controller()
  5. socket2event.boot_translation_service(controller)
  6. ID = 0
  7. # Exceptions
  8. class ModelverseException(Exception):
  9. pass
  10. class UnknownError(ModelverseException):
  11. pass
  12. class UnknownIdentifier(ModelverseException):
  13. pass
  14. class CompilationError(ModelverseException):
  15. pass
  16. class NoSuchAttribute(ModelverseException):
  17. pass
  18. class UnknownModel(ModelverseException):
  19. pass
  20. class ConnectionError(ModelverseException):
  21. pass
  22. class ModelExists(ModelverseException):
  23. pass
  24. class PermissionDenied(ModelverseException):
  25. pass
  26. class InvalidMode(ModelverseException):
  27. pass
  28. class InterfaceMismatch(ModelverseException):
  29. pass
  30. class UnknownMetamodellingHierarchy(ModelverseException):
  31. pass
  32. def run_controller():
  33. try:
  34. controller.start()
  35. finally:
  36. controller.stop()
  37. def _next_ID():
  38. global ID
  39. ID += 1
  40. return ID
  41. def INPUT(action, context, parameters):
  42. print("Executing " + str(action))
  43. print("Parameters: " + str(parameters))
  44. controller.addInput(Event("action", "action_in", [action, _next_ID(), context, parameters]))
  45. def OUTPUT():
  46. response = responses.fetch(-1)
  47. print("Got response with name: " + str(response.name))
  48. if response.name == "result":
  49. print("Value: " + str(response.parameters[1]))
  50. return response.parameters[1]
  51. elif response.name == "exception":
  52. print("Exception: " + str(response.parameters))
  53. if response.parameters[1] == "UnknownIdentifier":
  54. raise UnknownIdentifier()
  55. def init(address_param="127.0.0.1:8001", timeout=20.0):
  56. INPUT("init", None, [address_param, timeout])
  57. return OUTPUT()
  58. def login(username, password):
  59. INPUT("login", None, [username, password])
  60. return OUTPUT()
  61. def model_list(location):
  62. INPUT("model_list", None, [location])
  63. return OUTPUT()
  64. def model_add(model_name, metamodel_name, model_code=""):
  65. INPUT("model_add", None, [model_name, metamodel_name, model_code])
  66. return OUTPUT()
  67. def model_delete(model_name):
  68. INPUT("model_delete", None, [model_name])
  69. return OUTPUT()
  70. def model_list_full(location):
  71. INPUT("model_list_full", None, [location])
  72. return OUTPUT()
  73. def verify(model_name, metamodel_name):
  74. INPUT("verify", None, [model_name, metamodel_name])
  75. return OUTPUT()
  76. def model_overwrite(model_name, new_model, metamodel_name):
  77. INPUT("model_overwrite", None, [model_name, new_model, metamodel_name])
  78. return OUTPUT()
  79. def disconnect():
  80. INPUT("disconnect", None, [])
  81. return OUTPUT()
  82. def user_logout():
  83. INPUT("user_logout", None, [])
  84. return OUTPUT()
  85. def user_delete():
  86. INPUT("user_delete", None, [])
  87. return OUTPUT()
  88. def model_render(model_name, mapper_name):
  89. INPUT("model_render", None, [model_name, mapper_name])
  90. return OUTPUT()
  91. def transformation_between(source, target):
  92. INPUT("transformation_between", None, [source, target])
  93. return OUTPUT()
  94. def transformation_add_MT(source_metamodels, target_metamodels, operation_name, code, callback=None):
  95. INPUT("transformation_add_MT", None, [source_metamodels, target_metamodels, operation_name, code])
  96. context = OUTPUT()
  97. if callback is not None:
  98. callback(context)
  99. INPUT("exit", context, [])
  100. return OUTPUT()
  101. def transformation_add_AL(source_metamodels, target_metamodels, operation_name, code, callback=None):
  102. INPUT("transformation_add_AL", None, [source_metamodels, target_metamodels, operation_name, code])
  103. context = OUTPUT()
  104. if callback is not None:
  105. callback(context)
  106. INPUT("exit", context, [])
  107. return OUTPUT()
  108. def transformation_add_MANUAL(source_metamodels, target_metamodels, operation_name, callback=None):
  109. INPUT("transformation_add_MANUAL", None, [source_metamodels, target_metamodels, operation_name])
  110. context = OUTPUT()
  111. if callback is not None:
  112. callback(context)
  113. INPUT("exit", context, [])
  114. return OUTPUT()
  115. def transformation_execute_MT(operation_name, input_models_dict, output_models_dict):
  116. #NOTE callbacks as statechart not supported (yet?)!
  117. INPUT("transformation_execute_MT", None, [operation_name, input_models_dict, output_models_dict])
  118. return OUTPUT()
  119. def transformation_execute_AL(operation_name, input_models_dict, output_models_dict):
  120. #NOTE callbacks as statechart not supported (yet?)!
  121. INPUT("transformation_execute_AL", None, [operation_name, input_models_dict, output_models_dict])
  122. return OUTPUT()
  123. def transformation_execute_MANUAL(operation_name, input_models_dict, output_models_dict, callback=None):
  124. INPUT("transformation_execute_MANUAL", None, [operation_name, input_models_dict, output_models_dict])
  125. context = OUTPUT()
  126. if callback is not None:
  127. callback(context)
  128. INPUT("exit", context, [])
  129. return OUTPUT()
  130. def permission_modify(model_name, permissions):
  131. INPUT("permission_modify", None, [model_name, permissions])
  132. return OUTPUT()
  133. def permission_owner(model_name, permission):
  134. INPUT("permission_owner", None, [model_name, permission])
  135. return OUTPUT()
  136. def permission_group(model_name, group):
  137. INPUT("permission_group", None, [model_name, group])
  138. return OUTPUT()
  139. def group_create(group_name):
  140. INPUT("group_create", None, [group_name])
  141. return OUTPUT()
  142. def group_delete(group_name):
  143. INPUT("group_delete", None, [group_name])
  144. return OUTPUT()
  145. def group_owner_add(group_name, user_name):
  146. INPUT("group_owner_add", None, [group_name, user_name])
  147. return OUTPUT()
  148. def group_owner_delete(group_name, user_name):
  149. INPUT("group_owner_delete", None, [group_name, user_name])
  150. return OUTPUT()
  151. def group_join(group_name, user_name):
  152. INPUT("group_join", None, [group_name, user_name])
  153. return OUTPUT()
  154. def group_kick(group_name, user_name):
  155. INPUT("group_kick", None, [group_name, user_name])
  156. return OUTPUT()
  157. def group_list():
  158. INPUT("group_list", None, [])
  159. return OUTPUT()
  160. def admin_promote(user_name):
  161. INPUT("admin_promote", None, [user_name])
  162. return OUTPUT()
  163. def admin_demote(user_name):
  164. INPUT("admin_demote", None, [user_name])
  165. return OUTPUT()
  166. def conformance_delete(model_name, metamodel_name):
  167. INPUT("conformance_delete", None, [model_name, metamodel_name])
  168. return OUTPUT()
  169. def conformance_add(model_name, metamodel_name):
  170. INPUT("conformance_add", None, [model_name, metamodel_name])
  171. return OUTPUT()
  172. def folder_create(folder_name):
  173. INPUT("folder_create", None, [folder_name])
  174. return OUTPUT()
  175. def model_types(model_name):
  176. INPUT("model_types", None, [model_name])
  177. return OUTPUT()
  178. def element_list(model_name, context=None):
  179. INPUT("element_list", context, [model_name])
  180. return OUTPUT()
  181. def element_list_nice(model_name, context=None):
  182. INPUT("element_list_nice", context, [model_name])
  183. return OUTPUT()
  184. def types(model_name, context=None):
  185. INPUT("types", context, [model_name])
  186. return OUTPUT()
  187. def types_full(model_name, context=None):
  188. INPUT("types_full", context, [model_name])
  189. return OUTPUT()
  190. def read_info(model_name, ID, context=None):
  191. INPUT("read_info", context, [model_name, ID])
  192. return OUTPUT()
  193. def read_attrs(model_name, ID, context=None):
  194. INPUT("read_attrs", context, [model_name, ID])
  195. return OUTPUT()
  196. def instantiate(model_name, typename, edge=None, ID="", context=None):
  197. print("DOING INSTANTIATE")
  198. INPUT("instantiate", context, [model_name, typename, edge, ID])
  199. return OUTPUT()
  200. def delete_element(model_name, ID, context=None):
  201. INPUT("delete_element", context, [model_name, ID])
  202. return OUTPUT()
  203. def attr_assign(model_name, ID, attr, value, context=None):
  204. INPUT("attr_assign", context, [model_name, ID, attr, value])
  205. return OUTPUT()
  206. def attr_assign_code(model_name, ID, attr, code, context=None):
  207. INPUT("attr_assign_code", context, [model_name, ID, attr, code])
  208. return OUTPUT()
  209. def attr_delete(model_name, ID, attr, context=None):
  210. INPUT("attr_delete", context, [model_name, ID, attr])
  211. return OUTPUT()
  212. def read_outgoing(model_name, ID, typename, context=None):
  213. INPUT("read_outgoing", context, [model_name, ID, typename])
  214. return OUTPUT()
  215. def read_incoming(model_name, ID, typename, context=None):
  216. INPUT("read_incoming", context, [model_name, ID, typename])
  217. return OUTPUT()
  218. def read_association_source(model_name, ID, context=None):
  219. INPUT("read_association_source", context, [model_name, ID])
  220. return OUTPUT()
  221. def read_association_destination(model_name, ID, context=None):
  222. INPUT("read_association_destination", context, [model_name, ID])
  223. return OUTPUT()
  224. def connections_between(model_name, source, target, context=None):
  225. INPUT("connections_between", context, [model_name, source, target])
  226. return OUTPUT()
  227. def define_attribute(model_name, node, attr_name, attr_type, context=None):
  228. INPUT("define_attribute", context, [model_name, node, attr_name, attr_type])
  229. return OUTPUT()
  230. def all_instances(model_name, type_name, context=None):
  231. INPUT("all_instances", context, [model_name, type_name])
  232. return OUTPUT()
  233. import threading
  234. thrd = threading.Thread(target=run_controller)
  235. thrd.daemon = True
  236. thrd.start()
  237. responses = controller.addOutputListener("action_out")
  238. controller.addOutputListener("ready").fetch(-1)