modelverse.py 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  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. elif response.parameters[1] == "UnknownMetamodellingHierarchy":
  56. raise UnknownMetamodellingHierarchy()
  57. def init(address_param="127.0.0.1:8001", timeout=20.0):
  58. INPUT("init", None, [address_param, timeout])
  59. return OUTPUT()
  60. def login(username, password):
  61. INPUT("login", None, [username, password])
  62. return OUTPUT()
  63. def model_list(location):
  64. INPUT("model_list", None, [location])
  65. return OUTPUT()
  66. def model_add(model_name, metamodel_name, model_code=""):
  67. INPUT("model_add", None, [model_name, metamodel_name, model_code])
  68. return OUTPUT()
  69. def model_delete(model_name):
  70. INPUT("model_delete", None, [model_name])
  71. return OUTPUT()
  72. def model_list_full(location):
  73. INPUT("model_list_full", None, [location])
  74. return OUTPUT()
  75. def verify(model_name, metamodel_name):
  76. INPUT("verify", None, [model_name, metamodel_name])
  77. return OUTPUT()
  78. def model_overwrite(model_name, new_model):
  79. INPUT("model_overwrite", None, [model_name, new_model])
  80. return OUTPUT()
  81. def disconnect():
  82. INPUT("disconnect", None, [])
  83. return OUTPUT()
  84. def user_logout():
  85. INPUT("user_logout", None, [])
  86. return OUTPUT()
  87. def user_delete():
  88. INPUT("user_delete", None, [])
  89. return OUTPUT()
  90. def model_render(model_name, mapper_name):
  91. INPUT("model_render", None, [model_name, mapper_name])
  92. return OUTPUT()
  93. def transformation_between(source, target):
  94. INPUT("transformation_between", None, [source, target])
  95. return OUTPUT()
  96. def transformation_add_MT(source_metamodels, target_metamodels, operation_name, code, callback=None):
  97. INPUT("transformation_add_MT", None, [source_metamodels, target_metamodels, operation_name, code])
  98. context = OUTPUT()
  99. if callback is not None:
  100. callback(context)
  101. INPUT("exit", context, [])
  102. return OUTPUT()
  103. def transformation_add_AL(source_metamodels, target_metamodels, operation_name, code, callback=None):
  104. INPUT("transformation_add_AL", None, [source_metamodels, target_metamodels, operation_name, code])
  105. context = OUTPUT()
  106. if callback is not None:
  107. callback(context)
  108. INPUT("exit", context, [])
  109. return OUTPUT()
  110. def transformation_add_MANUAL(source_metamodels, target_metamodels, operation_name, callback=None):
  111. INPUT("transformation_add_MANUAL", None, [source_metamodels, target_metamodels, operation_name])
  112. context = OUTPUT()
  113. if callback is not None:
  114. callback(context)
  115. INPUT("exit", context, [])
  116. return OUTPUT()
  117. def transformation_execute_MT(operation_name, input_models_dict, output_models_dict):
  118. #NOTE callbacks as statechart not supported (yet?)!
  119. INPUT("transformation_execute_MT", None, [operation_name, input_models_dict, output_models_dict])
  120. return OUTPUT()
  121. def transformation_execute_AL(operation_name, input_models_dict, output_models_dict):
  122. #NOTE callbacks as statechart not supported (yet?)!
  123. INPUT("transformation_execute_AL", None, [operation_name, input_models_dict, output_models_dict])
  124. return OUTPUT()
  125. def transformation_execute_MANUAL(operation_name, input_models_dict, output_models_dict, callback=None):
  126. INPUT("transformation_execute_MANUAL", None, [operation_name, input_models_dict, output_models_dict])
  127. context = OUTPUT()
  128. if callback is not None:
  129. callback(context)
  130. INPUT("exit", context, [])
  131. return OUTPUT()
  132. def permission_modify(model_name, permissions):
  133. INPUT("permission_modify", None, [model_name, permissions])
  134. return OUTPUT()
  135. def permission_owner(model_name, permission):
  136. INPUT("permission_owner", None, [model_name, permission])
  137. return OUTPUT()
  138. def permission_group(model_name, group):
  139. INPUT("permission_group", None, [model_name, group])
  140. return OUTPUT()
  141. def group_create(group_name):
  142. INPUT("group_create", None, [group_name])
  143. return OUTPUT()
  144. def group_delete(group_name):
  145. INPUT("group_delete", None, [group_name])
  146. return OUTPUT()
  147. def group_owner_add(group_name, user_name):
  148. INPUT("group_owner_add", None, [group_name, user_name])
  149. return OUTPUT()
  150. def group_owner_delete(group_name, user_name):
  151. INPUT("group_owner_delete", None, [group_name, user_name])
  152. return OUTPUT()
  153. def group_join(group_name, user_name):
  154. INPUT("group_join", None, [group_name, user_name])
  155. return OUTPUT()
  156. def group_kick(group_name, user_name):
  157. INPUT("group_kick", None, [group_name, user_name])
  158. return OUTPUT()
  159. def group_list():
  160. INPUT("group_list", None, [])
  161. return OUTPUT()
  162. def admin_promote(user_name):
  163. INPUT("admin_promote", None, [user_name])
  164. return OUTPUT()
  165. def admin_demote(user_name):
  166. INPUT("admin_demote", None, [user_name])
  167. return OUTPUT()
  168. def conformance_delete(model_name, metamodel_name):
  169. INPUT("conformance_delete", None, [model_name, metamodel_name])
  170. return OUTPUT()
  171. def conformance_add(model_name, metamodel_name):
  172. INPUT("conformance_add", None, [model_name, metamodel_name])
  173. return OUTPUT()
  174. def folder_create(folder_name):
  175. INPUT("folder_create", None, [folder_name])
  176. return OUTPUT()
  177. def model_types(model_name):
  178. INPUT("model_types", None, [model_name])
  179. return OUTPUT()
  180. def alter_context(model_name, metamodel_name):
  181. INPUT("alter_context", None, [model_name, metamodel_name])
  182. return OUTPUT()
  183. def element_list(model_name, context=None):
  184. INPUT("element_list", context, [model_name])
  185. return OUTPUT()
  186. def element_list_nice(model_name, context=None):
  187. INPUT("element_list_nice", context, [model_name])
  188. return OUTPUT()
  189. def types(model_name, context=None):
  190. INPUT("types", context, [model_name])
  191. return OUTPUT()
  192. def types_full(model_name, context=None):
  193. INPUT("types_full", context, [model_name])
  194. return OUTPUT()
  195. def read_info(model_name, ID, context=None):
  196. INPUT("read_info", context, [model_name, ID])
  197. return OUTPUT()
  198. def read_attrs(model_name, ID, context=None):
  199. INPUT("read_attrs", context, [model_name, ID])
  200. return OUTPUT()
  201. def instantiate(model_name, typename, edge=None, ID="", context=None):
  202. print("DOING INSTANTIATE")
  203. INPUT("instantiate", context, [model_name, typename, edge, ID])
  204. return OUTPUT()
  205. def delete_element(model_name, ID, context=None):
  206. INPUT("delete_element", context, [model_name, ID])
  207. return OUTPUT()
  208. def attr_assign(model_name, ID, attr, value, context=None):
  209. INPUT("attr_assign", context, [model_name, ID, attr, value])
  210. return OUTPUT()
  211. def attr_assign_code(model_name, ID, attr, code, context=None):
  212. INPUT("attr_assign_code", context, [model_name, ID, attr, code])
  213. return OUTPUT()
  214. def attr_delete(model_name, ID, attr, context=None):
  215. INPUT("attr_delete", context, [model_name, ID, attr])
  216. return OUTPUT()
  217. def read_outgoing(model_name, ID, typename, context=None):
  218. INPUT("read_outgoing", context, [model_name, ID, typename])
  219. return OUTPUT()
  220. def read_incoming(model_name, ID, typename, context=None):
  221. INPUT("read_incoming", context, [model_name, ID, typename])
  222. return OUTPUT()
  223. def read_association_source(model_name, ID, context=None):
  224. INPUT("read_association_source", context, [model_name, ID])
  225. return OUTPUT()
  226. def read_association_destination(model_name, ID, context=None):
  227. INPUT("read_association_destination", context, [model_name, ID])
  228. return OUTPUT()
  229. def connections_between(model_name, source, target, context=None):
  230. INPUT("connections_between", context, [model_name, source, target])
  231. return OUTPUT()
  232. def define_attribute(model_name, node, attr_name, attr_type, context=None):
  233. INPUT("define_attribute", context, [model_name, node, attr_name, attr_type])
  234. return OUTPUT()
  235. def all_instances(model_name, type_name, context=None):
  236. INPUT("all_instances", context, [model_name, type_name])
  237. return OUTPUT()
  238. import threading
  239. thrd = threading.Thread(target=run_controller)
  240. thrd.daemon = True
  241. thrd.start()
  242. responses = controller.addOutputListener("action_out")
  243. controller.addOutputListener("ready").fetch(-1)