PM_to_SCCD.mvc 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. Composite schedule {
  5. {Contains} Failure failure {}
  6. {Contains} Success success {}
  7. {Contains} Atomic create_orchestrator {
  8. LHS {
  9. Pre_SCCD/Diagram pre_diagram_0 {
  10. label = "0"
  11. }
  12. }
  13. RHS {
  14. Post_SCCD/Diagram post_diagram_0 {
  15. label = "0"
  16. }
  17. Post_SCCD/Class post_class_1 {
  18. label = "1"
  19. value_name = $
  20. String function value(model : Element, name : String, mapping : Element):
  21. return "Orchestrator"!
  22. $
  23. value_constructor_body = $
  24. String function value(model : Element, name : String, mapping : Element):
  25. return "self.queue=[], self.finish={}, self.token={}, self.data={}, self.decision_consumes={}, self.assn_names={}"!
  26. $
  27. value_default = $
  28. Boolean function value(model : Element, name : String, mapping : Element):
  29. return True!
  30. $
  31. }
  32. Post_SCCD/diagram_classes (post_diagram_0, post_class_1) {
  33. label = "2"
  34. }
  35. Post_SCCD/CompositeState post_cs_3 {
  36. label = "3"
  37. value_name = $
  38. String function value(model : Element, name : String, mapping : Element):
  39. return "Root"!
  40. $
  41. }
  42. Post_SCCD/behaviour (post_class_1, post_cs_3) {
  43. label = "4"
  44. }
  45. Post_SCCD/BasicState post_bs_5 {
  46. label = "5"
  47. value_name = $
  48. String function value(model : Element, name : String, mapping : Element):
  49. return "Init"!
  50. $
  51. value_isInitial = $
  52. Boolean function value(model : Element, name : String, mapping : Element):
  53. return True!
  54. $
  55. }
  56. Post_SCCD/composite_children (post_cs_3, post_bs_5) {
  57. label = "6"
  58. }
  59. Post_SCCD/ParallelState post_ps_7 {
  60. label = "7"
  61. value_name = $
  62. String function value(model : Element, name : String, mapping : Element):
  63. return "Running"!
  64. $
  65. }
  66. Post_SCCD/transition (post_bs_5, post_ps_7) {
  67. label = "8"
  68. }
  69. Post_SCCD/CompositeState post_cs_9 {
  70. label = "9"
  71. value_name = $
  72. String function value(model : Element, name : String, mapping : Element):
  73. return "Queue_spawn"!
  74. $
  75. }
  76. Post_SCCD/CompositeState post_cs_10 {
  77. label = "10"
  78. value_name = $
  79. String function value(model : Element, name : String, mapping : Element):
  80. return "Spawning"!
  81. $
  82. }
  83. Post_SCCD/parallel_children (post_ps_7, post_cs_9) {
  84. label = "11"
  85. }
  86. Post_SCCD/parallel_children (post_ps_7, post_cs_10) {
  87. label = "12"
  88. }
  89. Post_SCCD/composite_children (post_cs_3, post_ps_7) {
  90. label = "13"
  91. }
  92. Post_SCCD/BasicState post_bs_14 {
  93. label = "14"
  94. value_name = $
  95. String function value(model : Element, name : String, mapping : Element):
  96. return "Waiting"!
  97. $
  98. value_isInitial = $
  99. Boolean function value(model : Element, name : String, mapping : Element):
  100. return True!
  101. $
  102. }
  103. Post_SCCD/transition post_trans_15(post_bs_14, post_bs_14) {
  104. label = "15"
  105. value_event = $
  106. String function value(model : Element, name : String, mapping : Element):
  107. return "spawn_exec"!
  108. $
  109. value_script = $
  110. String function value(model : Element, name : String, mapping : Element):
  111. return "self.queue.append(exec_name)"!
  112. $
  113. }
  114. Post_SCCD/FormalParameter post_fp_16 {
  115. label = "16"
  116. value_name = $
  117. String function value(model : Element, name : String, mapping : Element):
  118. return "exec_name"!
  119. $
  120. }
  121. Post_SCCD/transition_parameters (post_trans_15, post_fp_16) {
  122. label = "17"
  123. value_order = $
  124. Integer function value(model : Element, name : String, mapping : Element):
  125. return 0!
  126. $
  127. }
  128. Post_SCCD/composite_children (post_cs_9, post_bs_14) {
  129. label = "18"
  130. }
  131. Post_SCCD/BasicState post_bs_19 {
  132. label = "19"
  133. value_name = $
  134. String function value(model : Element, name : String, mapping : Element):
  135. return "Waiting"!
  136. $
  137. value_isInitial = $
  138. Boolean function value(model : Element, name : String, mapping : Element):
  139. return True!
  140. $
  141. }
  142. Post_SCCD/BasicState post_bs_20 {
  143. label = "20"
  144. value_name = $
  145. String function value(model : Element, name : String, mapping : Element):
  146. return "Creating"!
  147. $
  148. }
  149. Post_SCCD/composite_children (post_cs_10, post_bs_19) {
  150. label = "21"
  151. }
  152. Post_SCCD/composite_children (post_cs_10, post_bs_20) {
  153. label = "22"
  154. }
  155. Post_SCCD/transition post_trans_23 (post_bs_19, post_bs_20) {
  156. label = "23"
  157. value_cond = $
  158. String function value(model : Element, name : String, mapping : Element):
  159. return "not self.queue"!
  160. $
  161. }
  162. Post_SCCD/Raise post_re_24 {
  163. label = "24"
  164. value_event = $
  165. String function value(model : Element, name : String, mapping : Element):
  166. return "create_instance"!
  167. $
  168. value_scope = $
  169. String function value(model : Element, name : String, mapping : Element):
  170. return "CD"!
  171. $
  172. }
  173. Post_SCCD/ActualParameter post_ap_25 {
  174. label = "25"
  175. value_exp = $
  176. String function value(model : Element, name : String, mapping : Element):
  177. return "'children'"!
  178. $
  179. }
  180. Post_SCCD/ActualParameter post_ap_26 {
  181. label = "26"
  182. value_exp = $
  183. String function value(model : Element, name : String, mapping : Element):
  184. return "'Activity'"!
  185. $
  186. }
  187. Post_SCCD/raise_parameters (post_re_24, post_ap_25) {
  188. label = "27"
  189. value_order = $
  190. Integer function value(model : Element, name : String, mapping : Element):
  191. return 0!
  192. $
  193. }
  194. Post_SCCD/raise_parameters (post_re_24, post_ap_26) {
  195. label = "28"
  196. value_order = $
  197. Integer function value(model : Element, name : String, mapping : Element):
  198. return 1!
  199. $
  200. }
  201. Post_SCCD/transition_raises (post_trans_23, post_re_24) {
  202. label = "29"
  203. }
  204. Post_SCCD/transition post_trans_30 (post_bs_20, post_bs_19) {
  205. label = "30"
  206. value_event = $
  207. String function value(model : Element, name : String, mapping : Element):
  208. return "instance_created"!
  209. $
  210. value_script = $
  211. String function value(model : Element, name : String, mapping : Element):
  212. return "self.assn_names[self.queue.pop(0)] = association_name"!
  213. $
  214. }
  215. Post_SCCD/FormalParameter post_fp_31 {
  216. label = "31"
  217. value_name = $
  218. String function value(model : Element, name : String, mapping : Element):
  219. return "association_name"!
  220. $
  221. }
  222. Post_SCCD/transition_parameters (post_trans_30, post_fp_31) {
  223. label = "32"
  224. value_order = $
  225. Integer function value(model : Element, name : String, mapping : Element):
  226. return 0!
  227. $
  228. }
  229. Post_SCCD/BasicState post_bs_33 {
  230. label = "33"
  231. value_name = $
  232. String function value(model : Element, name : String, mapping : Element):
  233. return "End"!
  234. $
  235. }
  236. Post_SCCD/composite_children (post_cs_3, post_bs_33) {
  237. label = "34"
  238. }
  239. Post_SCCD/transition post_trans_35 (post_ps_7, post_bs_33) {
  240. label = "35"
  241. value_event = $
  242. String function value(model : Element, name : String, mapping : Element):
  243. return "process_done"!
  244. $
  245. }
  246. }
  247. }
  248. {Contains} ForAll create_class_association {
  249. LHS {
  250. Pre_SCCD/Class {
  251. label = "0"
  252. constraint_name = $
  253. Boolean function constraint(value : String):
  254. return (value != "Orchestrator")!
  255. $
  256. }
  257. Pre_SCCD/Class {
  258. label = "1"
  259. constraint_name = $
  260. Boolean function constraint(value : String):
  261. return (value == "Orchestrator")!
  262. $
  263. }
  264. }
  265. RHS {
  266. Post_SCCD/Class post_exec_class_0{
  267. label = "0"
  268. }
  269. Post_SCCD/Class post_orchestrator_class_1{
  270. label = "1"
  271. }
  272. Post_SCCD/association (post_orchestrator_class_1, post_exec_class_0){
  273. label = "3"
  274. value_name = $
  275. String function value(model : Element, name : String, mapping : Element):
  276. return "children"!
  277. $
  278. }
  279. }
  280. }
  281. {Contains} ForAll initialize {
  282. LHS {
  283. Pre_PM/Activity {
  284. label = "0"
  285. }
  286. Pre_SCCD/BasicState {
  287. label = "1"
  288. constraint_name = $
  289. Boolean function constraint(value : String):
  290. return (value == "Init")!
  291. $
  292. }
  293. constraint = $
  294. Boolean function constraint (model : Element, mapping : Element):
  295. Element comp_children
  296. String parent
  297. Element class_beh
  298. String class
  299. comp_children = allIncomingAssociationInstances(model, mapping["1"], "composite_children")
  300. if list_len(comp_children) >0:
  301. parent = readAssociationSource(model, set_pop(comp_children))
  302. class_beh = allIncomingAssociationInstances(model, parent, "behaviour")
  303. if list_len(class_beh) >0:
  304. class = readAssociationSource(model, set_pop(class_beh))
  305. if (value_eq(read_attribute(model, class, "name"), "Orchestrator")):
  306. return True!
  307. else:
  308. return False!
  309. else:
  310. return False!
  311. else:
  312. return False!
  313. $
  314. }
  315. RHS {
  316. Post_PM/Activity post_activity_0{
  317. label = "0"
  318. }
  319. Post_SCCD/BasicState post_init_bs_1{
  320. label = "1"
  321. value_onEntryScript = $
  322. String function value(model : Element, name : String, mapping : Element):
  323. String type
  324. String joined_str
  325. Element outgoing_assns
  326. String edge
  327. String activity
  328. type = read_type(model, mapping["0"])
  329. if (type == "Start"):
  330. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  331. return string_join(joined_str, "]= True")!
  332. elif (type == "Decision"):
  333. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  334. joined_str = string_join(joined_str, "]= False , self.decision_consumes[")
  335. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  336. return string_join(joined_str, "]= None")!
  337. elif bool_or(type == "Join", type == "Finish"):
  338. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  339. return string_join(joined_str, "]= False")!
  340. elif (type == "Exec"):
  341. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  342. joined_str = string_join(joined_str, "]= False , self.finish[")
  343. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  344. return string_join(joined_str, "]= False")!
  345. elif (type == "Fork"):
  346. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  347. joined_str = string_join(joined_str, "]= False ,self.finish[")
  348. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  349. joined_str = string_join(joined_str, "]= {")
  350. outgoing_assns = allOutgoingAssociationInstances(model, mapping["0"], "Next")
  351. while (read_nr_out(outgoing_assns) > 0):
  352. edge = set_pop(outgoing_assns)
  353. activity = readAssociationDestination(model, edge)
  354. joined_str = string_join(joined_str,read_attribute(model, activity, "id"))
  355. joined_str = string_join(joined_str, ": False ")
  356. if (read_nr_out(outgoing_assns) == 0):
  357. joined_str = string_join(joined_str, "}")
  358. else:
  359. joined_str = string_join(joined_str, ",")
  360. return joined_str!
  361. $
  362. }
  363. }
  364. }
  365. {Contains} ForAll map_exec {
  366. LHS {
  367. Pre_PM/Activity pre_exec_0 {
  368. label = "0"
  369. }
  370. Pre_PM/Exec pre_exec_1 {
  371. label = "1"
  372. }
  373. Pre_PM/Next pre_next_2 (pre_exec_0, pre_exec_1) {
  374. label = "2"
  375. }
  376. Pre_SCCD/ParallelState pre_ps_3 {
  377. label = "3"
  378. constraint_name = $
  379. Boolean function constraint(value : String):
  380. return (value == "Running")!
  381. $
  382. }
  383. constraint = $
  384. Boolean function constraint (model : Element, mapping : Element):
  385. Element children
  386. String parent
  387. Element class_beh
  388. String class
  389. children = allIncomingAssociationInstances(model, mapping["3"], "composite_children")
  390. if list_len(children) >0:
  391. parent = readAssociationSource(model, set_pop(children))
  392. class_beh = allIncomingAssociationInstances(model, parent, "behaviour")
  393. if list_len(class_beh) >0:
  394. class = readAssociationSource(model, set_pop(class_beh))
  395. if (value_eq(read_attribute(model, class, "name"), "Orchestrator")):
  396. return True!
  397. else:
  398. return False!
  399. else:
  400. return False!
  401. else:
  402. return False!
  403. $
  404. }
  405. RHS {
  406. Post_PM/Activity post_exec_0 {
  407. label = "0"
  408. }
  409. Post_PM/Exec post_exec_1 {
  410. label = "1"
  411. }
  412. Post_PM/Next post_flow_2 (post_exec_0, post_exec_1) {
  413. label = "2"
  414. }
  415. Post_SCCD/ParallelState post_ps_3 {
  416. label = "3"
  417. }
  418. Post_SCCD/CompositeState post_cs_4 {
  419. label = "4"
  420. value_name = $
  421. String function value(model : Element, name : String, mapping : Element):
  422. return name!
  423. $
  424. }
  425. Post_SCCD/parallel_children post_ps_5 (post_ps_3, post_cs_4) {
  426. label = "5"
  427. }
  428. Post_SCCD/BasicState post_bs_6 {
  429. label = "6"
  430. value_name = $
  431. String function value(model : Element, name : String, mapping : Element):
  432. return "Waiting"!
  433. $
  434. value_isInitial = $
  435. Boolean function value(model : Element, name : String, mapping : Element):
  436. return True!
  437. $
  438. }
  439. Post_SCCD/BasicState post_bs_7 {
  440. label = "7"
  441. value_name = $
  442. String function value(model : Element, name : String, mapping : Element):
  443. return "Running"!
  444. $
  445. }
  446. Post_SCCD/composite_children post_cc_8 (post_cs_4, post_bs_6) {
  447. label = "8"
  448. }
  449. Post_SCCD/composite_children post_cc_9 (post_cs_4, post_bs_7) {
  450. label = "9"
  451. }
  452. Post_SCCD/transition post_trans_10 (post_bs_6, post_bs_7) {
  453. label = "10"
  454. value_cond = $
  455. String function value(model : Element, name : String, mapping : Element):
  456. String type
  457. String joined_str
  458. type = read_type(model, mapping["0"])
  459. if bool_or(type == "Join", type == "Start"):
  460. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  461. return string_join(joined_str, "]")!
  462. elif (type == "Decision"):
  463. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  464. joined_str = string_join(joined_str, "] and self.decision_consumes[")
  465. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  466. joined_str = string_join(joined_str, "]==")
  467. return string_join(joined_str, read_attribute(model, mapping["2"], "value"))!
  468. elif (type == "Exec"):
  469. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  470. joined_str = string_join(joined_str, "] and self.finish[")
  471. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  472. return string_join(joined_str, "]")!
  473. elif (type == "Fork"):
  474. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  475. joined_str = string_join(joined_str, "] and self.finish[")
  476. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  477. joined_str = string_join(joined_str, "][")
  478. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  479. return string_join(joined_str, "]==False")!
  480. $
  481. value_script = $
  482. String function value(model : Element, name : String, mapping : Element):
  483. String type
  484. String joined_str
  485. type = read_type(model, mapping["0"])
  486. if bool_or(bool_or(type == "Join", type == "Start"), type == "Decision"):
  487. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  488. joined_str = string_join(joined_str, "]= False, self.token[")
  489. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  490. return string_join(joined_str, "]= True")!
  491. elif (type == "Fork"):
  492. joined_str = string_join("self.token[", read_attribute(model, mapping["1"], "id"))
  493. return string_join(joined_str, "] = True")!
  494. elif (type == "Exec"):
  495. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  496. joined_str = string_join(joined_str, "] = False, self.finish[")
  497. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  498. joined_str = string_join(joined_str, "] = False, self.token[")
  499. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  500. return string_join(joined_str, "]=True")!
  501. $
  502. }
  503. Post_SCCD/Raise post_re_11 {
  504. label = "11"
  505. value_event = $
  506. String function value(model : Element, name : String, mapping : Element):
  507. return "spawn_exec"!
  508. $
  509. value_scope = $
  510. String function value(model : Element, name : String, mapping : Element):
  511. return "local"!
  512. $
  513. }
  514. Post_SCCD/ActualParameter post_rap_25 {
  515. label = "12"
  516. value_exp = $
  517. String function value(model : Element, name : String, mapping : Element):
  518. return read_attribute(model, mapping["1"], "name")!
  519. $
  520. }
  521. Post_SCCD/raise_parameters (post_re_11, post_rap_25) {
  522. label = "13"
  523. value_order = $
  524. Integer function value(model : Element, name : String, mapping : Element):
  525. return 0!
  526. $
  527. }
  528. Post_SCCD/transition_raises (post_trans_10, post_re_11) {
  529. label = "14"
  530. }
  531. Post_SCCD/transition post_etrans_15 (post_bs_7, post_bs_6) {
  532. label = "15"
  533. value_event = $
  534. String function value(model : Element, name : String, mapping : Element):
  535. return "terminated"!
  536. $
  537. value_cond = $
  538. String function value(model : Element, name : String, mapping : Element):
  539. String joined_str
  540. joined_str = string_join(read_attribute(model, mapping["1"], "name"), "==")
  541. return string_join(joined_str, "exec_name")!
  542. $
  543. value_script = $
  544. String function value(model : Element, name : String, mapping : Element):
  545. String type
  546. String joined_str
  547. type = read_type(model, mapping["0"])
  548. if (type == "Fork"):
  549. joined_str = string_join("self.finish[", read_attribute(model, mapping["1"], "id"))
  550. joined_str = string_join(joined_str, "] =True, self.finish[")
  551. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  552. joined_str = string_join(joined_str, "][")
  553. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  554. return string_join(joined_str, "]=True")!
  555. else:
  556. joined_str = string_join("self.finish[", read_attribute(model, mapping["1"], "id"))
  557. return string_join(joined_str, "]=True")!
  558. $
  559. }
  560. Post_SCCD/FormalParameter post_efp_16 {
  561. label = "16"
  562. value_name = $
  563. String function value(model : Element, name : String, mapping : Element):
  564. return "exec_name"!
  565. $
  566. }
  567. Post_SCCD/transition_parameters (post_etrans_15, post_efp_16) {
  568. label = "17"
  569. value_order = $
  570. Integer function value(model : Element, name : String, mapping : Element):
  571. return 0!
  572. $
  573. }
  574. Post_Activity2State_link (post_exec_0, post_cs_4){
  575. label = "18"
  576. }
  577. }
  578. }
  579. {Contains} ForAll data_produces {
  580. LHS {
  581. Pre_PM/Exec pre_exec_data_0 {
  582. label = "0"
  583. }
  584. Pre_PM/Data pre_data_1 {
  585. label = "1"
  586. }
  587. Pre_PM/Produces pre_pro_2 (pre_exec_data_0, pre_data_1) {
  588. label = "2"
  589. }
  590. Pre_SCCD/CompositeState pre_co_3 {
  591. label = "3"
  592. }
  593. Pre_Activity2State_link (pre_exec_data_0, pre_co_3){
  594. label = "4"
  595. }
  596. Pre_SCCD/BasicState pre_bs_5 {
  597. label = "5"
  598. }
  599. Pre_SCCD/composite_children (pre_co_3, pre_bs_5) {
  600. label = "6"
  601. }
  602. }
  603. RHS {
  604. Post_PM/Exec post_exec_data_0 {
  605. label = "0"
  606. }
  607. Post_PM/Data post_data_1 {
  608. label = "1"
  609. }
  610. Post_PM/Produces post_pro_2 (post_exec_data_0, post_data_1) {
  611. label = "2"
  612. }
  613. Post_SCCD/CompositeState post_co_3 {
  614. label = "3"
  615. }
  616. Post_Activity2State_link (post_exec_data_0, post_co_3){
  617. label = "4"
  618. }
  619. Post_SCCD/BasicState post_pbs_5 {
  620. label = "5"
  621. }
  622. Post_SCCD/composite_children (post_co_3, post_pbs_5) {
  623. label = "6"
  624. }
  625. Post_SCCD/transition post_trans_7 (post_pbs_5, post_pbs_5) {
  626. label = "7"
  627. value_event = $
  628. String function value(model : Element, name : String, mapping : Element):
  629. return "save"!
  630. $
  631. value_cond = $
  632. String function value(model : Element, name : String, mapping : Element):
  633. return string_join(read_attribute(model, mapping["0"], "name"), "== exec_name")!
  634. $
  635. value_script = $
  636. String function value(model : Element, name : String, mapping : Element):
  637. return "'self.data['+ data_name +']= get_full_model('+ data_name +')'"!
  638. $
  639. }
  640. Post_SCCD/FormalParameter post_fp_8 {
  641. label = "8"
  642. value_name = $
  643. String function value(model : Element, name : String, mapping : Element):
  644. return "data_name"!
  645. $
  646. }
  647. Post_SCCD/FormalParameter post_fp_9 {
  648. label = "9"
  649. value_name = $
  650. String function value(model : Element, name : String, mapping : Element):
  651. return "exec_name"!
  652. $
  653. }
  654. Post_SCCD/transition_parameters (post_trans_7, post_fp_8) {
  655. label = "10"
  656. value_order = $
  657. Integer function value(model : Element, name : String, mapping : Element):
  658. return 0!
  659. $
  660. }
  661. Post_SCCD/transition_parameters (post_trans_7, post_fp_9) {
  662. label = "11"
  663. value_order = $
  664. Integer function value(model : Element, name : String, mapping : Element):
  665. return 1!
  666. $
  667. }
  668. }
  669. }
  670. {Contains} ForAll data_consumes {
  671. LHS {
  672. Pre_PM/Exec pre_exec_consumes_0 {
  673. label = "0"
  674. }
  675. Pre_PM/Data pre_data_consumes_1 {
  676. label = "1"
  677. }
  678. Pre_PM/Consumes pre_con_2 (pre_exec_consumes_0, pre_data_consumes_1) {
  679. label = "2"
  680. }
  681. Pre_SCCD/CompositeState pre_cs_3 {
  682. label = "3"
  683. }
  684. Pre_Activity2State_link (pre_exec_consumes_0, pre_cs_3){
  685. label = "4"
  686. }
  687. Pre_SCCD/BasicState pre_consumes_bs_5 {
  688. label = "5"
  689. }
  690. Pre_SCCD/composite_children (pre_cs_3, pre_consumes_bs_5) {
  691. label = "6"
  692. }
  693. }
  694. RHS {
  695. Post_PM/Exec post_exec_consumes_0 {
  696. label = "0"
  697. }
  698. Post_PM/Data post_data_consumes_1 {
  699. label = "1"
  700. }
  701. Post_PM/Consumes post_con_2 (post_exec_consumes_0, post_data_consumes_1) {
  702. label = "2"
  703. }
  704. Post_SCCD/CompositeState post_ccs_3 {
  705. label = "3"
  706. }
  707. Post_Activity2State_link (post_exec_consumes_0, post_ccs_3){
  708. label = "4"
  709. }
  710. Post_SCCD/BasicState post_bs_consumes_5 {
  711. label = "5"
  712. }
  713. Post_SCCD/composite_children (post_ccs_3, post_bs_consumes_5) {
  714. label = "6"
  715. }
  716. Post_SCCD/transition post_trans_consumes_7 (post_bs_consumes_5, post_bs_consumes_5) {
  717. label = "7"
  718. value_event = $
  719. String function value(model : Element, name : String, mapping : Element):
  720. return "load"!
  721. $
  722. value_cond = $
  723. String function value(model : Element, name : String, mapping : Element):
  724. return string_join(read_attribute(model, mapping["0"], "name"), "== exec_name")!
  725. $
  726. }
  727. Post_SCCD/FormalParameter post_trans_fp_8 {
  728. label = "8"
  729. value_name = $
  730. String function value(model : Element, name : String, mapping : Element):
  731. return "data_name"!
  732. $
  733. }
  734. Post_SCCD/FormalParameter post_trans_fp_9 {
  735. label = "9"
  736. value_name = $
  737. String function value(model : Element, name : String, mapping : Element):
  738. return "exec_name"!
  739. $
  740. }
  741. Post_SCCD/transition_parameters (post_trans_consumes_7, post_trans_fp_8) {
  742. label = "10"
  743. value_order = $
  744. Integer function value(model : Element, name : String, mapping : Element):
  745. return 0!
  746. $
  747. }
  748. Post_SCCD/transition_parameters (post_trans_consumes_7, post_trans_fp_9) {
  749. label = "11"
  750. value_order = $
  751. Integer function value(model : Element, name : String, mapping : Element):
  752. return 1!
  753. $
  754. }
  755. Post_SCCD/Raise post_re_12 {
  756. label = "12"
  757. value_event = $
  758. String function value(model : Element, name : String, mapping : Element):
  759. return "load"!
  760. $
  761. value_scope = $
  762. String function value(model : Element, name : String, mapping : Element):
  763. return "narrow"!
  764. $
  765. value_target = $
  766. String function value(model : Element, name : String, mapping : Element):
  767. String joined_str
  768. joined_str = string_join("self.assn_names[", read_attribute(model, mapping["0"], "name"))
  769. return string_join(joined_str, "]")!
  770. $
  771. }
  772. Post_SCCD/ActualParameter post_ap_13 {
  773. label = "13"
  774. value_exp = $
  775. String function value(model : Element, name : String, mapping : Element):
  776. return "self.data[data_name]"!
  777. $
  778. }
  779. Post_SCCD/raise_parameters (post_re_12, post_ap_13) {
  780. label = "14"
  781. value_order = $
  782. Integer function value(model : Element, name : String, mapping : Element):
  783. return 0!
  784. $
  785. }
  786. Post_SCCD/transition_raises (post_trans_consumes_7, post_re_12){
  787. label = "15"
  788. }
  789. }
  790. }
  791. {Contains} ForAll map_decision {
  792. LHS {
  793. Pre_PM/Activity pre_0 {
  794. label = "0"
  795. }
  796. Pre_PM/Decision pre_1 {
  797. label = "1"
  798. }
  799. Pre_PM/Next (pre_0, pre_1) {
  800. label = "2"
  801. }
  802. Pre_PM/Data pre_3 {
  803. label = "3"
  804. }
  805. Pre_PM/Consumes (pre_1, pre_3) {
  806. label = "4"
  807. }
  808. Pre_SCCD/ParallelState pre_5 {
  809. label = "5"
  810. constraint_name = $
  811. Boolean function constraint(value : String):
  812. return (value == "Running")!
  813. $
  814. }
  815. constraint = $
  816. Boolean function constraint (model : Element, mapping : Element):
  817. Element children
  818. String parent
  819. Element class_beh
  820. String class
  821. children = allIncomingAssociationInstances(model, mapping["5"], "composite_children")
  822. if list_len(children) >0:
  823. parent = readAssociationSource(model, set_pop(children))
  824. class_beh = allIncomingAssociationInstances(model, parent, "behaviour")
  825. if list_len(class_beh) >0:
  826. class = readAssociationSource(model, set_pop(class_beh))
  827. if (value_eq(read_attribute(model, class, "name"), "Orchestrator")):
  828. return True!
  829. else:
  830. return False!
  831. else:
  832. return False!
  833. else:
  834. return False!
  835. $
  836. }
  837. RHS {
  838. Post_PM/Activity post_0 {
  839. label = "0"
  840. }
  841. Post_PM/Decision post_1 {
  842. label = "1"
  843. }
  844. Post_PM/Next (post_0, post_1) {
  845. label = "2"
  846. }
  847. Post_PM/Data post_3 {
  848. label = "3"
  849. }
  850. Post_PM/Consumes (post_1, post_3) {
  851. label = "4"
  852. }
  853. Post_SCCD/ParallelState post_5 {
  854. label = "5"
  855. }
  856. Post_SCCD/CompositeState post_6 {
  857. label = "6"
  858. value_name = $
  859. String function value(model : Element, name : String, mapping : Element):
  860. return name!
  861. $
  862. }
  863. Post_SCCD/parallel_children (post_5, post_6) {
  864. label = "7"
  865. }
  866. Post_SCCD/BasicState post_8 {
  867. label = "8"
  868. value_name = $
  869. String function value(model : Element, name : String, mapping : Element):
  870. return "Waiting"!
  871. $
  872. value_isInitial = $
  873. Boolean function value(model : Element, name : String, mapping : Element):
  874. return True!
  875. $
  876. }
  877. Post_SCCD/composite_children (post_6, post_8) {
  878. label = "9"
  879. }
  880. Post_SCCD/transition post_10(post_8, post_8) {
  881. label = "10"
  882. value_cond = $
  883. String function value(model : Element, name : String, mapping : Element):
  884. String type
  885. String joined_str
  886. type = read_type(model, mapping["0"])
  887. if bool_or(type == "Join", type == "Start"):
  888. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  889. return string_join(joined_str, "]")!
  890. elif (type == "Decision"):
  891. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  892. joined_str = string_join(joined_str, "] and self.decision_consumes[")
  893. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  894. joined_str = string_join(joined_str, "]==")
  895. return string_join(joined_str, read_attribute(model, mapping["2"], "value"))!
  896. elif (type == "Exec"):
  897. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  898. joined_str = string_join(joined_str, "] and self.finish[")
  899. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  900. return string_join(joined_str, "]")!
  901. elif (type == "Fork"):
  902. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  903. joined_str = string_join(joined_str, "] and self.finish[")
  904. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  905. joined_str = string_join(joined_str, "][")
  906. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  907. return string_join(joined_str, "]==False")!
  908. $
  909. value_script = $
  910. String function value(model : Element, name : String, mapping : Element):
  911. String type
  912. String joined_str
  913. type = read_type(model, mapping["0"])
  914. if bool_or(bool_or(type == "Join", type == "Start"), type == "Decision"):
  915. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  916. joined_str = string_join(joined_str, "]= False, self.token[")
  917. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  918. joined_str = string_join(joined_str, "]= True, self.data_consumes[")
  919. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  920. joined_str = string_join(joined_str, "]= self.data[")
  921. joined_str = string_join(joined_str, read_attribute(model, mapping["3"], "name"))
  922. return string_join(joined_str, "]")!
  923. elif (type == "Fork"):
  924. joined_str = string_join("self.token[", read_attribute(model, mapping["1"], "id"))
  925. joined_str = string_join(joined_str, "] = True , self.finish[")
  926. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  927. joined_str = string_join("][", read_attribute(model, mapping["1"], "id"))
  928. joined_str = string_join(joined_str, "]=True, self.data_consumes[")
  929. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  930. joined_str = string_join(joined_str, "]= self.data[")
  931. joined_str = string_join(joined_str, read_attribute(model, mapping["3"], "name"))
  932. return string_join(joined_str, "]")!
  933. elif (type == "Exec"):
  934. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  935. joined_str = string_join(joined_str, "] = False, self.finish[")
  936. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  937. joined_str = string_join(joined_str, "] = False, self.token[")
  938. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  939. joined_str = string_join(joined_str, "]=True, self.data_consumes[")
  940. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  941. joined_str = string_join(joined_str, "]= self.data[")
  942. joined_str = string_join(joined_str, read_attribute(model, mapping["3"], "name"))
  943. return string_join(joined_str, "]")!
  944. $
  945. }
  946. Post_Activity2State_link (post_1, post_6){
  947. label = "11"
  948. }
  949. }
  950. }
  951. {Contains} ForAll map_fork {
  952. LHS {
  953. Pre_PM/Activity pre_f_0 {
  954. label = "0"
  955. }
  956. Pre_PM/Fork pre_f_1 {
  957. label = "1"
  958. }
  959. Pre_PM/Next (pre_f_0, pre_f_1) {
  960. label = "2"
  961. }
  962. Pre_SCCD/ParallelState pre_f_3 {
  963. label = "3"
  964. constraint_name = $
  965. Boolean function constraint(value : String):
  966. return (value == "Running")!
  967. $
  968. }
  969. constraint = $
  970. Boolean function constraint (model : Element, mapping : Element):
  971. Element children
  972. String parent
  973. Element class_beh
  974. String class
  975. children = allIncomingAssociationInstances(model, mapping["3"], "composite_children")
  976. if list_len(children) >0:
  977. parent = readAssociationSource(model, set_pop(children))
  978. class_beh = allIncomingAssociationInstances(model, parent, "behaviour")
  979. if list_len(class_beh) >0:
  980. class = readAssociationSource(model, set_pop(class_beh))
  981. if (value_eq(read_attribute(model, class, "name"), "Orchestrator")):
  982. return True!
  983. else:
  984. return False!
  985. else:
  986. return False!
  987. else:
  988. return False!
  989. $
  990. }
  991. RHS {
  992. Post_PM/Activity post_f_0 {
  993. label = "0"
  994. }
  995. Post_PM/Fork post_f_1 {
  996. label = "1"
  997. }
  998. Post_PM/Next (post_f_0, post_f_1) {
  999. label = "2"
  1000. }
  1001. Post_SCCD/ParallelState post_f_3 {
  1002. label = "3"
  1003. }
  1004. Post_SCCD/CompositeState post_f_6 {
  1005. label = "6"
  1006. value_name = $
  1007. String function value(model : Element, name : String, mapping : Element):
  1008. return name!
  1009. $
  1010. }
  1011. Post_SCCD/parallel_children (post_f_3, post_f_6) {
  1012. label = "7"
  1013. }
  1014. Post_SCCD/BasicState post_f_8 {
  1015. label = "8"
  1016. value_name = $
  1017. String function value(model : Element, name : String, mapping : Element):
  1018. return "Waiting"!
  1019. $
  1020. value_isInitial = $
  1021. Boolean function value(model : Element, name : String, mapping : Element):
  1022. return True!
  1023. $
  1024. }
  1025. Post_SCCD/BasicState post_f_9 {
  1026. label = "9"
  1027. value_name = $
  1028. String function value(model : Element, name : String, mapping : Element):
  1029. return "Running"!
  1030. $
  1031. }
  1032. Post_SCCD/composite_children (post_f_6, post_f_8) {
  1033. label = "10"
  1034. }
  1035. Post_SCCD/composite_children (post_f_6, post_f_9) {
  1036. label = "11"
  1037. }
  1038. Post_SCCD/transition post_f_12(post_f_8, post_f_9) {
  1039. label = "12"
  1040. value_cond = $
  1041. String function value(model : Element, name : String, mapping : Element):
  1042. String type
  1043. String joined_str
  1044. type = read_type(model, mapping["0"])
  1045. if bool_or(type == "Join", type == "Start"):
  1046. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1047. joined_str = string_join(joined_str, "] and self.token[")
  1048. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  1049. return string_join(joined_str, "]==False")!
  1050. elif (type == "Decision"):
  1051. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1052. joined_str = string_join(joined_str, "] and self.decision_consumes[")
  1053. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  1054. joined_str = string_join(joined_str, "]==")
  1055. joined_str = string_join(joined_str, read_attribute(model, mapping["2"], "value"))
  1056. joined_str = string_join(joined_str, " and self.token[")
  1057. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  1058. return string_join(joined_str, "]==False")!
  1059. elif (type == "Exec"):
  1060. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1061. joined_str = string_join(joined_str, "] and self.finish[")
  1062. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  1063. joined_str = string_join(joined_str, " and self.token[")
  1064. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  1065. return string_join(joined_str, "]==False")!
  1066. $
  1067. value_script = $
  1068. String function value(model : Element, name : String, mapping : Element):
  1069. String type
  1070. String joined_str
  1071. type = read_type(model, mapping["0"])
  1072. if bool_or(bool_or(type == "Join", type == "Start"), type == "Decision"):
  1073. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1074. joined_str = string_join(joined_str, "]= False, self.token[")
  1075. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  1076. return string_join(joined_str, "]= True")!
  1077. elif (type == "Exec"):
  1078. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1079. joined_str = string_join(joined_str, "] = False, self.finish[")
  1080. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  1081. joined_str = string_join(joined_str, "] = False, self.token[")
  1082. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  1083. return string_join(joined_str, "]=True")!
  1084. $
  1085. }
  1086. Post_SCCD/transition post_f_13(post_f_9, post_f_8) {
  1087. label = "13"
  1088. value_cond = $
  1089. String function value(model : Element, name : String, mapping : Element):
  1090. String joined_str
  1091. Element outgoing_assns
  1092. String edge
  1093. String activity
  1094. outgoing_assns = allOutgoingAssociationInstances(model, mapping["0"], "Next")
  1095. while (read_nr_out(outgoing_assns) > 0):
  1096. edge = set_pop(outgoing_assns)
  1097. activity = readAssociationDestination(model, edge)
  1098. joined_str = string_join("self.finish[", read_attribute(model, mapping["1"], "id"))
  1099. joined_str = string_join(joined_str, "][")
  1100. joined_str = string_join(joined_str,read_attribute(model, activity, "id"))
  1101. joined_str = string_join(joined_str, "] ")
  1102. if (read_nr_out(outgoing_assns) != 0):
  1103. joined_str = string_join(joined_str, " and ")
  1104. return joined_str!
  1105. $
  1106. value_script = $
  1107. String function value(model : Element, name : String, mapping : Element):
  1108. String joined_str
  1109. Element outgoing_assns
  1110. String edge
  1111. String activity
  1112. joined_str = string_join("self.token[", read_attribute(model, mapping["1"], "id"))
  1113. joined_str = string_join(joined_str, "]= False ,")
  1114. outgoing_assns = allOutgoingAssociationInstances(model, mapping["0"], "Next")
  1115. while (read_nr_out(outgoing_assns) > 0):
  1116. edge = set_pop(outgoing_assns)
  1117. activity = readAssociationDestination(model, edge)
  1118. joined_str = string_join("self.finish[", read_attribute(model, mapping["1"], "id"))
  1119. joined_str = string_join(joined_str, "][")
  1120. joined_str = string_join(joined_str,read_attribute(model, activity, "id"))
  1121. joined_str = string_join(joined_str, "]= False ")
  1122. if (read_nr_out(outgoing_assns) != 0):
  1123. joined_str = string_join(joined_str, ", ")
  1124. return joined_str!
  1125. $
  1126. }
  1127. Post_Activity2State_link (post_f_1, post_f_6){
  1128. label = "14"
  1129. }
  1130. }
  1131. }
  1132. {Contains} ForAll map_join {
  1133. LHS {
  1134. Pre_PM/Join pre_j_0 {
  1135. label = "0"
  1136. }
  1137. Pre_SCCD/ParallelState pre_j_1 {
  1138. label = "1"
  1139. constraint_name = $
  1140. Boolean function constraint(value : String):
  1141. return (value == "Running")!
  1142. $
  1143. }
  1144. constraint = $
  1145. Boolean function constraint (model : Element, mapping : Element):
  1146. Element children
  1147. String parent
  1148. Element class_beh
  1149. String class
  1150. children = allIncomingAssociationInstances(model, mapping["1"], "composite_children")
  1151. if list_len(children) >0:
  1152. parent = readAssociationSource(model, set_pop(children))
  1153. class_beh = allIncomingAssociationInstances(model, parent, "behaviour")
  1154. if list_len(class_beh) >0:
  1155. class = readAssociationSource(model, set_pop(class_beh))
  1156. if (value_eq(read_attribute(model, class, "name"), "Orchestrator")):
  1157. return True!
  1158. else:
  1159. return False!
  1160. else:
  1161. return False!
  1162. else:
  1163. return False!
  1164. $
  1165. }
  1166. RHS {
  1167. Post_PM/Join post_j_0 {
  1168. label = "0"
  1169. }
  1170. Post_SCCD/ParallelState post_j_1 {
  1171. label = "1"
  1172. }
  1173. Post_SCCD/CompositeState post_j_6 {
  1174. label = "6"
  1175. value_name = $
  1176. String function value(model : Element, name : String, mapping : Element):
  1177. return name!
  1178. $
  1179. }
  1180. Post_SCCD/parallel_children (post_j_1, post_j_6) {
  1181. label = "7"
  1182. }
  1183. Post_SCCD/BasicState post_j_8 {
  1184. label = "8"
  1185. value_name = $
  1186. String function value(model : Element, name : String, mapping : Element):
  1187. return "Waiting"!
  1188. $
  1189. value_isInitial = $
  1190. Boolean function value(model : Element, name : String, mapping : Element):
  1191. return True!
  1192. $
  1193. }
  1194. Post_SCCD/composite_children (post_j_6, post_j_8) {
  1195. label = "9"
  1196. }
  1197. Post_SCCD/transition post_j_10(post_j_8, post_j_8) {
  1198. label = "10"
  1199. value_cond = $
  1200. String function value(model : Element, name : String, mapping : Element):
  1201. String joined_str
  1202. Element outgoing_assns
  1203. String edge
  1204. String type
  1205. String activity
  1206. outgoing_assns = allIncomingAssociationInstances(model, mapping["0"], "Next")
  1207. while (read_nr_out(outgoing_assns) > 0):
  1208. edge = set_pop(outgoing_assns)
  1209. activity = readAssociationSource(model, edge)
  1210. type = read_type(model, activity)
  1211. if (type == "Exec"):
  1212. joined_str = string_join("self.finish[", read_attribute(model, activity, "id"))
  1213. joined_str = string_join(joined_str, "] and self.token[")
  1214. joined_str = string_join(joined_str,read_attribute(model, activity, "id"))
  1215. joined_str = string_join(joined_str, "]")
  1216. if (read_nr_out(outgoing_assns) != 0):
  1217. joined_str = string_join(joined_str, " and ")
  1218. elif (type == "Decision"):
  1219. joined_str = string_join("self.token[", read_attribute(model, activity, "id"))
  1220. joined_str = string_join(joined_str, "] and self.decision_consumes[")
  1221. joined_str = string_join(joined_str,read_attribute(model, activity, "id"))
  1222. joined_str = string_join(joined_str, "]==")
  1223. joined_str = string_join(joined_str,read_attribute(model, edge, "value"))
  1224. if (read_nr_out(outgoing_assns) != 0):
  1225. joined_str = string_join(joined_str, " and ")
  1226. return joined_str!
  1227. $
  1228. value_script = $
  1229. String function value(model : Element, name : String, mapping : Element):
  1230. String joined_str
  1231. Element outgoing_assns
  1232. String edge
  1233. String type
  1234. String activity
  1235. outgoing_assns = allIncomingAssociationInstances(model, mapping["0"], "Next")
  1236. while (read_nr_out(outgoing_assns) > 0):
  1237. edge = set_pop(outgoing_assns)
  1238. activity = readAssociationSource(model, edge)
  1239. type = read_type(model, activity)
  1240. if (type == "Exec"):
  1241. joined_str = string_join("self.token[", read_attribute(model, activity, "id"))
  1242. joined_str = string_join(joined_str, "]= False, self.token[")
  1243. joined_str = string_join(joined_str,read_attribute(model, mapping["0"], "id"))
  1244. joined_str = string_join(joined_str, "]=True, self.finish[")
  1245. joined_str = string_join(joined_str,read_attribute(model, activity, "id"))
  1246. joined_str = string_join(joined_str, "]=False")
  1247. elif (type == "Decision"):
  1248. joined_str = string_join("self.token[", read_attribute(model, activity, "id"))
  1249. joined_str = string_join(joined_str, "]= False, self.token[")
  1250. joined_str = string_join(joined_str,read_attribute(model, mapping["0"], "id"))
  1251. joined_str = string_join(joined_str, "]=True")
  1252. if (read_nr_out(outgoing_assns) != 0):
  1253. joined_str = string_join(joined_str, " , ")
  1254. return joined_str!
  1255. $
  1256. }
  1257. Post_Activity2State_link (post_j_0, post_j_6){
  1258. label = "14"
  1259. }
  1260. }
  1261. }
  1262. {Contains} ForAll map_finish {
  1263. LHS {
  1264. Pre_PM/Activity pre_e_0 {
  1265. label = "0"
  1266. }
  1267. Pre_PM/Finish pre_e_1 {
  1268. label = "1"
  1269. }
  1270. Pre_SCCD/ParallelState pre_e_2 {
  1271. label = "2"
  1272. constraint_name = $
  1273. Boolean function constraint(value : String):
  1274. return (value == "Running")!
  1275. $
  1276. }
  1277. Pre_PM/Next (pre_e_0, pre_e_1){
  1278. label = "11"
  1279. }
  1280. constraint = $
  1281. Boolean function constraint (model : Element, mapping : Element):
  1282. Element children
  1283. String parent
  1284. Element class_beh
  1285. String class
  1286. children = allIncomingAssociationInstances(model, mapping["2"], "composite_children")
  1287. if list_len(children) >0:
  1288. parent = readAssociationSource(model, set_pop(children))
  1289. class_beh = allIncomingAssociationInstances(model, parent, "behaviour")
  1290. if list_len(class_beh) >0:
  1291. class = readAssociationSource(model, set_pop(class_beh))
  1292. if (value_eq(read_attribute(model, class, "name"), "Orchestrator")):
  1293. return True!
  1294. else:
  1295. return False!
  1296. else:
  1297. return False!
  1298. else:
  1299. return False!
  1300. $
  1301. }
  1302. RHS {
  1303. Post_PM/Activity post_e_0 {
  1304. label = "0"
  1305. }
  1306. Post_PM/Finish post_e_1 {
  1307. label = "1"
  1308. }
  1309. Post_PM/Next (post_e_0, post_e_1){
  1310. label = "11"
  1311. }
  1312. Post_SCCD/ParallelState post_e_2 {
  1313. label = "2"
  1314. }
  1315. Post_SCCD/CompositeState post_e_3 {
  1316. label = "3"
  1317. value_name = $
  1318. String function value(model : Element, name : String, mapping : Element):
  1319. return name!
  1320. $
  1321. }
  1322. Post_SCCD/parallel_children (post_e_2, post_e_3) {
  1323. label = "4"
  1324. }
  1325. Post_SCCD/BasicState post_e_5 {
  1326. label = "5"
  1327. value_name = $
  1328. String function value(model : Element, name : String, mapping : Element):
  1329. return "Waiting"!
  1330. $
  1331. value_isInitial = $
  1332. Boolean function value(model : Element, name : String, mapping : Element):
  1333. return True!
  1334. $
  1335. }
  1336. Post_SCCD/composite_children (post_e_3, post_e_5) {
  1337. label = "6"
  1338. }
  1339. Post_SCCD/transition post_e_7(post_e_5, post_e_5) {
  1340. label = "7"
  1341. value_cond = $
  1342. String function value(model : Element, name : String, mapping : Element):
  1343. String joined_str
  1344. String type
  1345. type = read_type(model, mapping["0"])
  1346. if (type == "Join"):
  1347. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1348. return string_join(joined_str, "]")!
  1349. elif (type == "Decision"):
  1350. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1351. joined_str = string_join(joined_str, "] and self.decision_consumes[")
  1352. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  1353. joined_str = string_join(joined_str, "]==")
  1354. return string_join(joined_str, read_attribute(model, mapping["11"], "value"))!
  1355. elif (type == "Exec"):
  1356. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1357. joined_str = string_join(joined_str, "] and self.finish[")
  1358. joined_str = string_join(joined_str, read_attribute(model, mapping["0"], "id"))
  1359. return string_join(joined_str, "]")!
  1360. $
  1361. value_script = $
  1362. String function value(model : Element, name : String, mapping : Element):
  1363. String joined_str
  1364. joined_str = string_join("self.token[", read_attribute(model, mapping["0"], "id"))
  1365. joined_str = string_join(joined_str, "] = False , self.token[")
  1366. joined_str = string_join(joined_str, read_attribute(model, mapping["1"], "id"))
  1367. return string_join(joined_str, "] = True")!
  1368. $
  1369. }
  1370. Post_SCCD/Raise post_e_8 {
  1371. label = "8"
  1372. value_event = $
  1373. String function value(model : Element, name : String, mapping : Element):
  1374. return "process_done"!
  1375. $
  1376. value_scope = $
  1377. String function value(model : Element, name : String, mapping : Element):
  1378. return "local"!
  1379. $
  1380. }
  1381. Post_SCCD/transition_raises (post_e_7, post_e_8) {
  1382. label = "9"
  1383. }
  1384. Post_Activity2State_link (post_e_1, post_e_3){
  1385. label = "10"
  1386. }
  1387. }
  1388. }
  1389. }
  1390. Initial (schedule, create_orchestrator) {}
  1391. OnSuccess (create_orchestrator, create_class_association) {}
  1392. OnSuccess (create_class_association, initialize) {}
  1393. OnSuccess (initialize, map_exec) {}
  1394. OnSuccess (map_exec, data_produces) {}
  1395. OnSuccess (data_produces, data_consumes) {}
  1396. OnSuccess (data_consumes, map_decision) {}
  1397. OnSuccess (map_decision, map_fork) {}
  1398. OnSuccess (map_fork, map_join) {}
  1399. OnSuccess (map_join, map_finish) {}
  1400. OnFailure (create_orchestrator, create_class_association) {}
  1401. OnFailure (create_class_association, initialize) {}
  1402. OnFailure (initialize, map_exec) {}
  1403. OnFailure (map_exec, data_produces) {}
  1404. OnFailure (data_produces, data_consumes) {}
  1405. OnFailure (data_consumes, map_decision) {}
  1406. OnFailure (map_decision, map_fork) {}
  1407. OnFailure (map_fork, map_join) {}
  1408. OnFailure (map_join, map_finish) {}