modelverse.xml 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. <class name="Modelverse">
  2. <relationships>
  3. <association name="http_client" class="HTTPClient" min="2" max="2"/>
  4. </relationships>
  5. <method name="load_action">
  6. <parameter name="context"/>
  7. <body>
  8. action = self.actions[context].pop(0)
  9. self.parameters = action["parameters"]
  10. self.current_ID = action["ID"]
  11. </body>
  12. </method>
  13. <method name="split_response">
  14. <parameter name="response"/>
  15. <body>
  16. splitted = response.strip().split(": ", 1)
  17. if len(splitted) > 1:
  18. return splitted[1].split("\n")
  19. else:
  20. return []
  21. </body>
  22. </method>
  23. <method name="expect_response">
  24. <parameter name="expected"/>
  25. <parameter name="pop" default="False"/>
  26. <body>
  27. if self.responses and self.responses[0] == expected:
  28. if pop:
  29. del self.responses[0]
  30. return True
  31. else:
  32. return False
  33. </body>
  34. </method>
  35. <method name="expect_response_partial">
  36. <parameter name="expected"/>
  37. <parameter name="pop" default="False"/>
  38. <body>
  39. if self.responses and self.responses[0].startswith(expected):
  40. if pop:
  41. del self.responses[0]
  42. return True
  43. else:
  44. return False
  45. </body>
  46. </method>
  47. <method name="expect_action">
  48. <parameter name="context"/>
  49. <parameter name="expected"/>
  50. <body>
  51. return self.actions[context] and self.actions[context][0]["name"] == expected
  52. </body>
  53. </method>
  54. <constructor>
  55. <body>
  56. self.actions = {None: []}
  57. self.responses = []
  58. self.http_clients = []
  59. </body>
  60. </constructor>
  61. <scxml initial="init">
  62. <state id="init">
  63. <onentry>
  64. <raise scope="cd" event="create_instance">
  65. <parameter expr="'http_client'"/>
  66. <parameter expr="'HTTPClient'"/>
  67. </raise>
  68. <raise scope="cd" event="create_instance">
  69. <parameter expr="'http_client'"/>
  70. <parameter expr="'HTTPClient'"/>
  71. </raise>
  72. </onentry>
  73. <transition event="instance_created" target=".">
  74. <parameter name="instance"/>
  75. <script>
  76. self.http_clients.append(instance)
  77. </script>
  78. <raise scope="cd" event="start_instance">
  79. <parameter expr="instance"/>
  80. </raise>
  81. </transition>
  82. <transition cond="len(self.http_clients) == 2" target="../waiting"/>
  83. </state>
  84. <state id="waiting">
  85. <transition event="http_client_initialized" target="../initialized"/>
  86. </state>
  87. <parallel id="initialized">
  88. <onentry>
  89. <raise scope="output" port="ready" event="ready"/>
  90. </onentry>
  91. <state id="http_mapper" initial="init">
  92. <state id="init">
  93. <transition event="request" cond="isinstance(value, type([]))" target=".">
  94. <parameter name="value"/>
  95. <raise event="HTTP_input" target="self.http_clients[0]">
  96. <parameter expr='urllib.urlencode({"op": "set_input", "data": json.dumps(value), "taskname": self.taskname})'/>
  97. <parameter expr='None'/>
  98. </raise>
  99. </transition>
  100. <transition event="request" cond="not isinstance(value, type([]))" target=".">
  101. <parameter name="value"/>
  102. <raise event="HTTP_input" target="self.http_clients[0]">
  103. <parameter expr='urllib.urlencode({"op": "set_input", "value": json.dumps(value), "taskname": self.taskname})'/>
  104. <parameter expr='None'/>
  105. </raise>
  106. </transition>
  107. <transition event="request_raw" target=".">
  108. <parameter name="value"/>
  109. <parameter name="taskname"/>
  110. <parameter name="http_client"/>
  111. <raise event="HTTP_input" target="self.http_clients[http_client]">
  112. <parameter expr='urllib.urlencode({"op": "set_input", "value": json.dumps(value), "taskname": taskname})'/>
  113. <parameter expr='"parent"'/>
  114. </raise>
  115. </transition>
  116. <transition event="HTTP_output" target=".">
  117. <parameter name="data"/>
  118. <raise event="HTTP_input" target="self.http_clients[1]">
  119. <parameter expr='urllib.urlencode({"op": "get_output", "taskname": self.taskname})'/>
  120. <parameter expr='"parent"'/>
  121. </raise>
  122. <script>
  123. self.responses.append(json.loads(data))
  124. </script>
  125. </transition>
  126. </state>
  127. </state>
  128. <state id="behaviour" initial="wait_for_action">
  129. <state id="init" initial="connect_http_client">
  130. <onentry>
  131. <script>
  132. self.address, self.timeout = self.parameters
  133. self.address = self.address.rsplit(":", 1)
  134. self.address = (self.address[0], int(self.address[1]))
  135. self.i = 0
  136. self.taskname = str(uuid.uuid4())
  137. </script>
  138. </onentry>
  139. <state id="connect_http_client">
  140. <transition cond="self.i &lt; 2" target="../waiting_http_client">
  141. <raise scope="narrow" target="self.http_clients[self.i]" event="connect">
  142. <parameter expr="self.address"/>
  143. <parameter expr="self.timeout"/>
  144. </raise>
  145. </transition>
  146. <transition cond="self.i == 2" target="../../wait_for_action/connected">
  147. <!-- Start polling for output -->
  148. <raise event="HTTP_input" target="self.http_clients[1]">
  149. <parameter expr='urllib.urlencode({"op": "get_output", "taskname": self.taskname})'/>
  150. <parameter expr='"parent"'/>
  151. </raise>
  152. <!-- Sent out completion -->
  153. <raise event="result">
  154. <parameter expr="[]"/>
  155. </raise>
  156. </transition>
  157. </state>
  158. <state id="waiting_http_client">
  159. <transition event="http_client_ready" target="../wait_for_taskname_ack">
  160. <!-- Request the task to be created -->
  161. <raise event="request_raw">
  162. <parameter expr="self.taskname"/>
  163. <parameter expr="'task_manager'"/>
  164. <parameter expr="self.i"/>
  165. </raise>
  166. <script>
  167. self.i += 1
  168. </script>
  169. </transition>
  170. <transition event="http_client_timeout" target="../../wait_for_action/disconnected">
  171. <raise scope="broad" event="exception">
  172. <parameter expr="self.current_ID"/>
  173. <parameter expr="'Connection timeout'"/>
  174. </raise>
  175. </transition>
  176. </state>
  177. <state id="wait_for_taskname_ack">
  178. <transition cond="self.expect_response('OK', pop=True)" target="../connect_http_client"/>
  179. </state>
  180. </state>
  181. <state id="login" initial="wait_prompt_1">
  182. <state id="wait_prompt_1">
  183. <transition cond="self.expect_response('Log on as which user?', pop=True)" target="../wait_prompt_2">
  184. <raise event="request">
  185. <parameter expr="self.parameters[0]"/>
  186. </raise>
  187. </transition>
  188. </state>
  189. <state id="wait_prompt_2">
  190. <transition cond="self.expect_response('Password for existing user?', pop=True)" target="../wait_prompt_existing">
  191. <raise event="request">
  192. <parameter expr="self.parameters[1]"/>
  193. </raise>
  194. </transition>
  195. <transition cond="self.expect_response('This is a new user: please give password!', pop=True)" target="../wait_prompt_existing">
  196. <raise event="request">
  197. <parameter expr="self.parameters[1]"/>
  198. </raise>
  199. </transition>
  200. </state>
  201. <state id="wait_prompt_existing">
  202. <transition cond="self.expect_response('Welcome to the Model Management Interface v2.0!', pop=True)" target="../login_ok"/>
  203. <transition cond="self.expect_response('Wrong password!', pop=True)" target="../../wait_for_action/connected">
  204. <raise event="exception">
  205. <parameter expr="{'name': 'PermissionDenied'}"/>
  206. </raise>
  207. </transition>
  208. </state>
  209. <state id="login_ok">
  210. <transition cond="self.expect_response('Use the \'help\' command for a list of possible commands', pop=True)" target="../../wait_for_action/megamodelling">
  211. <raise event="request">
  212. <parameter expr="'quiet'"/>
  213. </raise>
  214. <raise event="result">
  215. <parameter expr="None"/>
  216. </raise>
  217. </transition>
  218. </state>
  219. </state>
  220. <state id="operations">
  221. <state id="model_list">
  222. <onentry>
  223. <raise event="request">
  224. <parameter expr="['model_list', self.parameters[0]]"/>
  225. </raise>
  226. </onentry>
  227. <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
  228. <raise event="result">
  229. <parameter expr="self.split_response(self.responses.pop(0))"/>
  230. </raise>
  231. </transition>
  232. </state>
  233. <state id="model_add" initial="send_metadata">
  234. <state id="send_metadata">
  235. <onentry>
  236. <raise event="request">
  237. <parameter expr="['model_add', self.parameters[1], self.parameters[0]]"/>
  238. </raise>
  239. </onentry>
  240. <transition cond="self.expect_response('Waiting for model constructors...')" target="../send_model"/>
  241. </state>
  242. <state id="send_model">
  243. <onentry>
  244. <raise event="request">
  245. <parameter expr="self.parameters[2]"/>
  246. </raise>
  247. </onentry>
  248. <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
  249. <raise event="result">
  250. <parameter expr="None"/>
  251. </raise>
  252. </transition>
  253. </state>
  254. </state>
  255. <state id="model_delete">
  256. <onentry>
  257. <raise event="request">
  258. <parameter expr="['model_delete', self.parameters[0]]"/>
  259. </raise>
  260. </onentry>
  261. <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
  262. <raise event="result">
  263. <parameter expr="None"/>
  264. </raise>
  265. </transition>
  266. </state>
  267. <state id="model_list_full">
  268. <onentry>
  269. <raise event="request">
  270. <parameter expr="['model_list_full', self.parameters[0]]"/>
  271. </raise>
  272. </onentry>
  273. <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
  274. <raise event="result">
  275. <parameter expr="self.split_response(self.responses.pop(0))"/>
  276. </raise>
  277. </transition>
  278. </state>
  279. <state id="verify">
  280. <onentry>
  281. <raise event="request">
  282. <parameter expr="['verify', self.parameters[0], self.parameters[1]]"/>
  283. </raise>
  284. </onentry>
  285. <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
  286. <raise event="result">
  287. <parameter expr="self.split_response(self.responses.pop(0))"/>
  288. </raise>
  289. </transition>
  290. </state>
  291. <state id="model_overwrite" initial="send_metadata">
  292. <state id="send_metadata">
  293. <onentry>
  294. <raise event="request">
  295. <parameter expr="['model_overwrite', self.parameters[1]]"/>
  296. </raise>
  297. </onentry>
  298. <transition cond="self.expect_response('Waiting for model constructors...')" target="../send_model"/>
  299. </state>
  300. <state id="send_model">
  301. <onentry>
  302. <raise event="request">
  303. <parameter expr="self.parameters[2]"/>
  304. </raise>
  305. </onentry>
  306. <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
  307. <raise event="result">
  308. <parameter expr="None"/>
  309. </raise>
  310. </transition>
  311. </state>
  312. </state>
  313. <state id="disconnect">
  314. <onentry>
  315. <raise event="request">
  316. <parameter expr="'exit'"/>
  317. </raise>
  318. </onentry>
  319. <transition cond="self.expect_response('Success')" target="../../wait_for_action/finished">
  320. <raise event="result">
  321. <parameter expr="None"/>
  322. </raise>
  323. </transition>
  324. </state>
  325. <state id="user_logout">
  326. <onentry>
  327. <raise event="request">
  328. <parameter expr="'user_logout'"/>
  329. </raise>
  330. </onentry>
  331. <transition cond="self.expect_response('Success')" target="../../wait_for_action/connected">
  332. <raise event="result">
  333. <parameter expr="None"/>
  334. </raise>
  335. </transition>
  336. </state>
  337. <state id="user_delete">
  338. <onentry>
  339. <raise event="request">
  340. <parameter expr="'self-destruct'"/>
  341. </raise>
  342. </onentry>
  343. <transition cond="self.expect_response('Success')" target="../../wait_for_action/finished">
  344. <raise event="result">
  345. <parameter expr="None"/>
  346. </raise>
  347. </transition>
  348. </state>
  349. <state id="model_render">
  350. <onentry>
  351. <raise event="request">
  352. <parameter expr="['model_render', self.parameters[0], self.parameters[1]]"/>
  353. </raise>
  354. </onentry>
  355. <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
  356. <raise event="result">
  357. <parameter expr="self.split_response(self.responses.pop(0))"/>
  358. </raise>
  359. </transition>
  360. </state>
  361. <state id="transformation_between">
  362. <onentry>
  363. <raise event="request">
  364. <parameter expr="['transformation_between', self.parameters[0], self.parameters[1]]"/>
  365. </raise>
  366. </onentry>
  367. <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
  368. <raise event="result">
  369. <parameter expr="self.split_response(self.responses.pop(0))"/>
  370. </raise>
  371. </transition>
  372. </state>
  373. <state id="transformation_add_MT" initial="send_metadata">
  374. <state id="send_metadata">
  375. <onentry>
  376. <raise event="request">
  377. <parameter expr="['transformation_add_MT', self.dict_to_list(self.parameters[0]), self.dict_to_list(self.parameters[1]), self.parameters[2]]"/>
  378. </raise>
  379. <script>
  380. self.context = str(uuid.uuid4())
  381. </script>
  382. <raise event="result">
  383. <parameter expr="self.context">
  384. </raise>
  385. </onentry>
  386. <transition target="../edit_metamodel"/>
  387. </state>
  388. <state id="edit_metamodel">
  389. <transition cond="self.expect_response('Model loaded, ready for commands!')" target="../../wait_for_action/modelling/scripted"/>
  390. <transition cond="self.expect_response('Waiting for model constructors...)" target="../send_model"/>
  391. </state>
  392. <state id="send_model">
  393. <onentry>
  394. <raise event="request">
  395. <parameter expr="self.parameters[3]"/>
  396. </raise>
  397. </onentry>
  398. <transition cond="self.expect_response('Success')" target="../../wait_for_action/history"/>
  399. </state>
  400. </state>
  401. </state>
  402. <state id="wait_for_action" initial="disconnected">
  403. <state id="disconnected">
  404. <transition cond="self.expect_action(None, 'init')" target="../../init">
  405. <script>
  406. self.load_action(None)
  407. </script>
  408. </transition>
  409. </state>
  410. <state id="connected">
  411. <transition cond="self.expect_action(None, 'login')" target="../../login">
  412. <script>
  413. self.load_action(None)
  414. </script>
  415. </transition>
  416. </state>
  417. <state id="megamodelling">
  418. <transition cond="self.expect_action(None, 'model_list')" target="../../operations/model_list">
  419. <script>
  420. self.load_action(None)
  421. </script>
  422. </transition>
  423. <transition cond="self.expect_action(None, 'model_add')" target="../../operations/model_add">
  424. <script>
  425. self.load_action(None)
  426. </script>
  427. </transition>
  428. <transition cond="self.expect_action(None, 'model_delete')" target="../../operations/model_delete">
  429. <script>
  430. self.load_action(None)
  431. </script>
  432. </transition>
  433. <transition cond="self.expect_action(None, 'model_list_full')" target="../../operations/model_list_full">
  434. <script>
  435. self.load_action(None)
  436. </script>
  437. </transition>
  438. <transition cond="self.expect_action(None, 'verify')" target="../../operations/verify">
  439. <script>
  440. self.load_action(None)
  441. </script>
  442. </transition>
  443. <transition cond="self.expect_action(None, 'model_overwrite')" target="../../operations/model_overwrite">
  444. <script>
  445. self.load_action(None)
  446. </script>
  447. </transition>
  448. <transition cond="self.expect_action(None, 'disconnect')" target="../../operations/disconnect">
  449. <script>
  450. self.load_action(None)
  451. </script>
  452. </transition>
  453. <transition cond="self.expect_action(None, 'user_logout')" target="../../operations/user_logout">
  454. <script>
  455. self.load_action(None)
  456. </script>
  457. </transition>
  458. <transition cond="self.expect_action(None, 'user_delete')" target="../../operations/user_delete">
  459. <script>
  460. self.load_action(None)
  461. </script>
  462. </transition>
  463. <transition cond="self.expect_action(None, 'model_render')" target="../../operations/model_render">
  464. <script>
  465. self.load_action(None)
  466. </script>
  467. </transition>
  468. <transition cond="self.expect_action(None, 'transformation_between')" target="../../operations/transformation_between">
  469. <script>
  470. self.load_action(None)
  471. </script>
  472. </transition>
  473. <transition cond="self.expect_action(None, 'transformation_add_MT')" target="../../operations/transformation_add_MT">
  474. <script>
  475. self.load_action(None)
  476. </script>
  477. </transition>
  478. <transition cond="self.expect_action(None, 'transformation_add_AL')" target="../../operations/transformation_add_AL">
  479. <script>
  480. self.load_action(None)
  481. </script>
  482. </transition>
  483. <transition cond="self.expect_action(None, 'transformation_add_MANUAL')" target="../../operations/transformation_add_MANUAL">
  484. <script>
  485. self.load_action(None)
  486. </script>
  487. </transition>
  488. <transition cond="self.expect_action(None, 'transformation_execute_MT')" target="../../operations/transformation_execute_MT">
  489. <script>
  490. self.load_action(None)
  491. </script>
  492. </transition>
  493. <transition cond="self.expect_action(None, 'transformation_execute_AL')" target="../../operations/transformation_execute_AL">
  494. <script>
  495. self.load_action(None)
  496. </script>
  497. </transition>
  498. <transition cond="self.expect_action(None, 'transformation_execute_MANUAL')" target="../../operations/transformation_execute_MANUAL">
  499. <script>
  500. self.load_action(None)
  501. </script>
  502. </transition>
  503. <transition cond="self.expect_action(None, 'transformation_list')" target="../../operations/transformation_list">
  504. <script>
  505. self.load_action(None)
  506. </script>
  507. </transition>
  508. <transition cond="self.expect_action(None, 'process_execute')" target="../../operations/process_execute">
  509. <script>
  510. self.load_action(None)
  511. </script>
  512. </transition>
  513. <transition cond="self.expect_action(None, 'permission_modify')" target="../../operations/permission_modify">
  514. <script>
  515. self.load_action(None)
  516. </script>
  517. </transition>
  518. <transition cond="self.expect_action(None, 'permission_owner')" target="../../operations/permission_owner">
  519. <script>
  520. self.load_action(None)
  521. </script>
  522. </transition>
  523. <transition cond="self.expect_action(None, 'permission_group')" target="../../operations/permission_group">
  524. <script>
  525. self.load_action(None)
  526. </script>
  527. </transition>
  528. <transition cond="self.expect_action(None, 'group_create')" target="../../operations/group_create">
  529. <script>
  530. self.load_action(None)
  531. </script>
  532. </transition>
  533. <transition cond="self.expect_action(None, 'group_delete')" target="../../operations/group_delete">
  534. <script>
  535. self.load_action(None)
  536. </script>
  537. </transition>
  538. <transition cond="self.expect_action(None, 'group_owner_add')" target="../../operations/group_owner_add">
  539. <script>
  540. self.load_action(None)
  541. </script>
  542. </transition>
  543. <transition cond="self.expect_action(None, 'group_owner_delete')" target="../../operations/group_owner_delete">
  544. <script>
  545. self.load_action(None)
  546. </script>
  547. </transition>
  548. <transition cond="self.expect_action(None, 'group_join')" target="../../operations/group_join">
  549. <script>
  550. self.load_action(None)
  551. </script>
  552. </transition>
  553. <transition cond="self.expect_action(None, 'group_kick')" target="../../operations/group_kick">
  554. <script>
  555. self.load_action(None)
  556. </script>
  557. </transition>
  558. <transition cond="self.expect_action(None, 'group_list')" target="../../operations/group_list">
  559. <script>
  560. self.load_action(None)
  561. </script>
  562. </transition>
  563. <transition cond="self.expect_action(None, 'admin_promote')" target="../../operations/admin_promote">
  564. <script>
  565. self.load_action(None)
  566. </script>
  567. </transition>
  568. <transition cond="self.expect_action(None, 'admin_demote')" target="../../operations/admin_demote">
  569. <script>
  570. self.load_action(None)
  571. </script>
  572. </transition>
  573. <transition cond="self.expect_action(None, 'service_register')" target="../../operations/service_register">
  574. <script>
  575. self.load_action(None)
  576. </script>
  577. </transition>
  578. <transition cond="self.expect_action(None, 'conformance_delete')" target="../../operations/conformance_delete">
  579. <script>
  580. self.load_action(None)
  581. </script>
  582. </transition>
  583. <transition cond="self.expect_action(None, 'conformance_add')" target="../../operations/conformance_add">
  584. <script>
  585. self.load_action(None)
  586. </script>
  587. </transition>
  588. <transition cond="self.expect_action(None, 'folder_create')" target="../../operations/folder_create">
  589. <script>
  590. self.load_action(None)
  591. </script>
  592. </transition>
  593. <transition cond="self.expect_action(None, 'model_types')" target="../../operations/model_types">
  594. <script>
  595. self.load_action(None)
  596. </script>
  597. </transition>
  598. </state>
  599. <state id="modelling" initial="manual">
  600. <state id="manual">
  601. <onentry>
  602. self.context = None
  603. </onentry>
  604. <transition cond="self.expect_action(self.context, 'exit')" target="../../wait_for_actions/megamodelling"/>
  605. </state>
  606. <state id="scripted">
  607. <transition cond="self.expect_action(self.context, 'exit')" target="../../operations/history"/>
  608. </state>
  609. <transition cond="self.expect_action(self.context, 'element_list')" target="../../operations/element_list">
  610. <script>
  611. self.load_action(self.context)
  612. </script>
  613. </transition>
  614. <transition cond="self.expect_action(self.context, 'types')" target="../../operations/types">
  615. <script>
  616. self.load_action(self.context)
  617. </script>
  618. </transition>
  619. <transition cond="self.expect_action(self.context, 'types_full')" target="../../operations/types_full">
  620. <script>
  621. self.load_action(self.context)
  622. </script>
  623. </transition>
  624. <transition cond="self.expect_action(self.context, 'read')" target="../../operations/read">
  625. <script>
  626. self.load_action(self.context)
  627. </script>
  628. </transition>
  629. <transition cond="self.expect_action(self.context, 'read_attrs')" target="../../operations/read_attrs">
  630. <script>
  631. self.load_action(self.context)
  632. </script>
  633. </transition>
  634. <transition cond="self.expect_action(self.context, 'instantiate')" target="../../operations/instantiate">
  635. <script>
  636. self.load_action(self.context)
  637. </script>
  638. </transition>
  639. <transition cond="self.expect_action(self.context, 'delete_element')" target="../../operations/delete_element">
  640. <script>
  641. self.load_action(self.context)
  642. </script>
  643. </transition>
  644. <transition cond="self.expect_action(self.context, 'attr_assign')" target="../../operations/attr_assign">
  645. <script>
  646. self.load_action(self.context)
  647. </script>
  648. </transition>
  649. <transition cond="self.expect_action(self.context, 'attr_assign_code')" target="../../operations/attr_assign_code">
  650. <script>
  651. self.load_action(self.context)
  652. </script>
  653. </transition>
  654. <transition cond="self.expect_action(self.context, 'attr_delete')" target="../../operations/attr_delete">
  655. <script>
  656. self.load_action(self.context)
  657. </script>
  658. </transition>
  659. <transition cond="self.expect_action(self.context, 'read_outgoing')" target="../../operations/read_outgoing">
  660. <script>
  661. self.load_action(self.context)
  662. </script>
  663. </transition>
  664. <transition cond="self.expect_action(self.context, 'read_incoming')" target="../../operations/read_incoming">
  665. <script>
  666. self.load_action(self.context)
  667. </script>
  668. </transition>
  669. <transition cond="self.expect_action(self.context, 'read_association_source')" target="../../operations/read_association_source">
  670. <script>
  671. self.load_action(self.context)
  672. </script>
  673. </transition>
  674. <transition cond="self.expect_action(self.context, 'read_association_destination')" target="../../operations/read_association_destination">
  675. <script>
  676. self.load_action(self.context)
  677. </script>
  678. </transition>
  679. <transition cond="self.expect_action(self.context, 'connections_between')" target="../../operations/connections_between">
  680. <script>
  681. self.load_action(self.context)
  682. </script>
  683. </transition>
  684. <transition cond="self.expect_action(self.context, 'define_attribute')" target="../../operations/define_attribute">
  685. <script>
  686. self.load_action(self.context)
  687. </script>
  688. </transition>
  689. <transition cond="self.expect_action(self.context, 'all_instances')" target="../../operations/all_instances">
  690. <script>
  691. self.load_action(self.context)
  692. </script>
  693. </transition>
  694. </state>
  695. <state id="finished"/>
  696. <history id="history" type="deep"/>
  697. </state>
  698. </state>
  699. <state id="queue">
  700. <state id="queue">
  701. <transition port="action_in" event="action" target=".">
  702. <parameter name="action_name"/>
  703. <parameter name="ID"/>
  704. <parameter name="context_ID"/>
  705. <parameter name="parameters"/>
  706. <script>
  707. self.actions[context_ID].append({"name": action_name, "ID": ID, "parameters": parameters})
  708. </script>
  709. </transition>
  710. <transition event="result" target=".">
  711. <parameter name="parameters"/>
  712. <raise scope="output" event="result" port="action_out">
  713. <parameter expr="self.current_ID"/>
  714. <parameter expr="parameters"/>
  715. </raise>
  716. </transition>
  717. <transition event="exception" target=".">
  718. <parameter name="parameters"/>
  719. <raise scope="output" event="exception" port="action_out">
  720. <parameter expr="self.current_ID"/>
  721. <parameter expr="parameters"/>
  722. </raise>
  723. </transition>
  724. <transition port="input_in" event="input" target=".">
  725. <parameter name="value"/>
  726. <parameter name="context_ID"/>
  727. <script>
  728. self.inputs[context_ID].append(value)
  729. </script>
  730. </transition>
  731. </state>
  732. </state>
  733. </parallel>
  734. </scxml>
  735. </class>