cpee 1.5.27 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. checksums.yaml +4 -4
  2. data/{FEATURES → FEATURES.md} +7 -6
  3. data/INSTALL.md +1 -0
  4. data/{README → README.md} +3 -3
  5. data/Rakefile +1 -0
  6. data/cockpit/index.html +7 -7
  7. data/cockpit/js/details.js +13 -14
  8. data/cockpit/js/instance.js +191 -284
  9. data/cockpit/js/parameters.js +13 -3
  10. data/cockpit/js/ui.js +2 -2
  11. data/cockpit/model.html +1 -0
  12. data/cockpit/rngs/attributes.rng +1 -1
  13. data/cockpit/rngs/dataelements.rng +1 -1
  14. data/cockpit/rngs/endpoints.rng +1 -1
  15. data/cockpit/templates.legacy/Async.xml +7 -7
  16. data/cockpit/templates.legacy/BCO.xml +7 -10
  17. data/cockpit/templates.legacy/BCS.xml +7 -10
  18. data/cockpit/templates.legacy/Centurio.xml +6 -6
  19. data/cockpit/templates.legacy/Concurrent.xml +6 -6
  20. data/cockpit/templates.legacy/Coopis Testset.xml +6 -6
  21. data/cockpit/templates.legacy/Endpoints and Data Manipulation.xml +6 -6
  22. data/cockpit/templates.legacy/ICSOC Testset.xml +6 -6
  23. data/cockpit/templates.legacy/Infinity.xml +3 -3
  24. data/cockpit/templates.legacy/Lego Boxer.xml +7 -7
  25. data/cockpit/templates.legacy/Lego Conveyor.xml +7 -7
  26. data/cockpit/templates.legacy/Lego Crane.xml +7 -7
  27. data/cockpit/templates.legacy/Lego Ejector.xml +7 -7
  28. data/cockpit/templates.legacy/Lego Full.xml +7 -7
  29. data/cockpit/templates.legacy/Lego Liddy.xml +7 -7
  30. data/cockpit/templates.legacy/Lego Plate.xml +7 -7
  31. data/cockpit/templates.legacy/Lego Transporter.xml +7 -7
  32. data/cockpit/templates.legacy/Lego_Part_1.xml +7 -7
  33. data/cockpit/templates.legacy/LgLinear.xml +6 -10
  34. data/cockpit/templates.legacy/Linear.xml +7 -7
  35. data/cockpit/templates.legacy/Log.xml +7 -7
  36. data/cockpit/templates.legacy/Mangler 1.xml +6 -6
  37. data/cockpit/templates.legacy/Mangler 2.xml +6 -6
  38. data/cockpit/templates.legacy/Manuel Labels.xml +7 -7
  39. data/cockpit/templates.legacy/Promise.xml +7 -7
  40. data/cockpit/templates.legacy/SOPROMO Test Sonification.xml +6 -6
  41. data/cockpit/templates.legacy/Subprocess.xml +56 -0
  42. data/cockpit/templates.legacy/Syncing P34 1.xml +8 -11
  43. data/cockpit/templates.legacy/Syncing P34 2.xml +8 -11
  44. data/cockpit/templates.legacy/Syncing P34 3.xml +8 -11
  45. data/cockpit/templates.legacy/Syncing P34.xml +8 -11
  46. data/cockpit/templates.legacy/TEST - Bad Loop.xml +6 -6
  47. data/cockpit/templates.legacy/TEST - Wrong Positions.xml +6 -6
  48. data/cockpit/templates.legacy/Take_5.xml +48 -0
  49. data/cockpit/templates.legacy/Update.xml +7 -7
  50. data/cockpit/templates.legacy/Worklist Parallel.xml +7 -7
  51. data/cockpit/templates.legacy/Worklist Test CPEE.xml +7 -7
  52. data/cockpit/templates.legacy/Worklist Test.xml +7 -7
  53. data/cockpit/templates.legacy/Worklist Test2.xml +7 -7
  54. data/cockpit/templates.legacy/convert_cpee2.rb +15 -0
  55. data/cockpit/templates.legacy/testsets.xml +1 -1
  56. data/cockpit/templates/BPM 2020 Manual Adjust.xml +18 -71
  57. data/cockpit/templates/BPM 2020 Solution Baseline.xml +17 -71
  58. data/cockpit/templates/BPM 2020 Solution NN.xml +25 -71
  59. data/cockpit/templates/BPM 2020 Solution View.xml +15 -71
  60. data/cockpit/templates/BPM 2020.xml +17 -6
  61. data/cockpit/templates/Coopis 2010.xml +7 -7
  62. data/cockpit/templates/IUPC arXiv:1104.3609 P34 1.xml +7 -10
  63. data/cockpit/templates/IUPC arXiv:1104.3609 P34 2.xml +7 -10
  64. data/cockpit/templates/IUPC arXiv:1104.3609 P34 3.xml +7 -10
  65. data/cockpit/templates/Worklist.xml +7 -7
  66. data/cockpit/templates/convert_cpee2.rb +15 -0
  67. data/cockpit/themes/compact/rngs/alternative.rng +25 -0
  68. data/cockpit/themes/compact/rngs/call.rng +17 -17
  69. data/cockpit/themes/compact/rngs/callmanipulate.rng +26 -26
  70. data/cockpit/themes/compact/rngs/choose.rng +14 -0
  71. data/cockpit/themes/compact/rngs/critical.rng +5 -0
  72. data/cockpit/themes/compact/rngs/escape.rng +1 -0
  73. data/cockpit/themes/compact/rngs/group.rng +3 -0
  74. data/cockpit/themes/compact/rngs/loop.rng +22 -0
  75. data/cockpit/themes/compact/rngs/manipulate.rng +9 -0
  76. data/cockpit/themes/compact/rngs/otherwise.rng +22 -0
  77. data/cockpit/themes/compact/rngs/parallel.rng +21 -0
  78. data/cockpit/themes/compact/rngs/parallel_branch.rng +8 -0
  79. data/cockpit/themes/compact/rngs/scripts.rng +10 -11
  80. data/cockpit/themes/compact/rngs/stop.rng +5 -0
  81. data/cockpit/themes/compact/rngs/terminate.rng +1 -0
  82. data/cockpit/themes/convert_cpee2.rb +8 -0
  83. data/cockpit/themes/default/rngs/alternative.rng +8 -8
  84. data/cockpit/themes/default/rngs/call.rng +84 -48
  85. data/cockpit/themes/default/rngs/callmanipulate.rng +103 -64
  86. data/cockpit/themes/default/rngs/choose.rng +5 -3
  87. data/cockpit/themes/default/rngs/critical.rng +2 -2
  88. data/cockpit/themes/default/rngs/escape.rng +1 -1
  89. data/cockpit/themes/default/rngs/group.rng +3 -3
  90. data/cockpit/themes/default/rngs/loop.rng +8 -8
  91. data/cockpit/themes/default/rngs/manipulate.rng +3 -3
  92. data/cockpit/themes/default/rngs/otherwise.rng +8 -8
  93. data/cockpit/themes/default/rngs/parallel.rng +14 -6
  94. data/cockpit/themes/default/rngs/parallel_branch.rng +2 -2
  95. data/cockpit/themes/default/rngs/scripts.rng +23 -0
  96. data/cockpit/themes/default/rngs/stop.rng +2 -2
  97. data/cockpit/themes/default/rngs/terminate.rng +1 -1
  98. data/cockpit/themes/extended/rngs/alternative.rng +25 -0
  99. data/cockpit/themes/extended/rngs/call.rng +17 -17
  100. data/cockpit/themes/extended/rngs/callmanipulate.rng +26 -26
  101. data/cockpit/themes/extended/rngs/choose.rng +14 -0
  102. data/cockpit/themes/extended/rngs/critical.rng +5 -0
  103. data/cockpit/themes/extended/rngs/escape.rng +1 -0
  104. data/cockpit/themes/extended/rngs/group.rng +3 -0
  105. data/cockpit/themes/extended/rngs/loop.rng +22 -0
  106. data/cockpit/themes/extended/rngs/manipulate.rng +9 -0
  107. data/cockpit/themes/extended/rngs/otherwise.rng +22 -0
  108. data/cockpit/themes/extended/rngs/parallel.rng +21 -0
  109. data/cockpit/themes/extended/rngs/parallel_branch.rng +8 -0
  110. data/cockpit/themes/extended/rngs/scripts.rng +10 -11
  111. data/cockpit/themes/extended/rngs/stop.rng +5 -0
  112. data/cockpit/themes/extended/rngs/terminate.rng +1 -0
  113. data/cockpit/themes/extended/theme.js +7 -6
  114. data/cockpit/themes/model/rngs/alternative.rng +1 -1
  115. data/cockpit/themes/model/rngs/call.rng +16 -16
  116. data/cockpit/themes/model/rngs/callmanipulate.rng +17 -17
  117. data/cockpit/themes/model/rngs/choose.rng +1 -1
  118. data/cockpit/themes/model/rngs/critical.rng +1 -1
  119. data/cockpit/themes/model/rngs/escape.rng +1 -1
  120. data/cockpit/themes/model/rngs/group.rng +1 -1
  121. data/cockpit/themes/model/rngs/loop.rng +1 -1
  122. data/cockpit/themes/model/rngs/manipulate.rng +1 -1
  123. data/cockpit/themes/model/rngs/otherwise.rng +1 -1
  124. data/cockpit/themes/model/rngs/parallel.rng +1 -1
  125. data/cockpit/themes/model/rngs/parallel_branch.rng +1 -1
  126. data/cockpit/themes/model/rngs/scripts.rng +3 -4
  127. data/cockpit/themes/model/rngs/stop.rng +1 -1
  128. data/cockpit/themes/model/rngs/terminate.rng +1 -1
  129. data/cockpit/themes/model/theme.js +7 -6
  130. data/cockpit/themes/packed/rngs/alternative.rng +25 -0
  131. data/cockpit/themes/packed/rngs/call.rng +17 -17
  132. data/cockpit/themes/packed/rngs/callmanipulate.rng +26 -26
  133. data/cockpit/themes/packed/rngs/choose.rng +14 -0
  134. data/cockpit/themes/packed/rngs/critical.rng +5 -0
  135. data/cockpit/themes/packed/rngs/escape.rng +1 -0
  136. data/cockpit/themes/packed/rngs/group.rng +3 -0
  137. data/cockpit/themes/packed/rngs/loop.rng +22 -0
  138. data/cockpit/themes/packed/rngs/manipulate.rng +9 -0
  139. data/cockpit/themes/packed/rngs/otherwise.rng +22 -0
  140. data/cockpit/themes/packed/rngs/parallel.rng +21 -0
  141. data/cockpit/themes/packed/rngs/parallel_branch.rng +8 -0
  142. data/cockpit/themes/packed/rngs/scripts.rng +10 -11
  143. data/cockpit/themes/packed/rngs/stop.rng +5 -0
  144. data/cockpit/themes/packed/rngs/terminate.rng +1 -0
  145. data/cockpit/themes/packed/theme.js +7 -6
  146. data/cockpit/themes/preset/rngs/alternative.rng +25 -0
  147. data/cockpit/themes/preset/rngs/call.rng +17 -17
  148. data/cockpit/themes/preset/rngs/callmanipulate.rng +26 -26
  149. data/cockpit/themes/preset/rngs/choose.rng +14 -0
  150. data/cockpit/themes/preset/rngs/critical.rng +5 -0
  151. data/cockpit/themes/preset/rngs/escape.rng +1 -0
  152. data/cockpit/themes/preset/rngs/group.rng +3 -0
  153. data/cockpit/themes/preset/rngs/loop.rng +22 -0
  154. data/cockpit/themes/preset/rngs/manipulate.rng +9 -0
  155. data/cockpit/themes/preset/rngs/otherwise.rng +22 -0
  156. data/cockpit/themes/preset/rngs/parallel.rng +21 -0
  157. data/cockpit/themes/preset/rngs/parallel_branch.rng +8 -0
  158. data/cockpit/themes/preset/rngs/scripts.rng +10 -11
  159. data/cockpit/themes/preset/rngs/stop.rng +5 -0
  160. data/cockpit/themes/preset/rngs/terminate.rng +1 -0
  161. data/cockpit/themes/preset/theme.js +7 -6
  162. data/cpee.gemspec +10 -11
  163. data/{log/topics.xml → lib/callbacks.xml} +16 -6
  164. data/lib/{engine → callbacks}/callbacks.rng +2 -8
  165. data/lib/cpee.xml +10 -4
  166. data/lib/cpee/attributes_helper.rb +27 -0
  167. data/lib/cpee/controller.rb +113 -596
  168. data/lib/cpee/implementation.rb +167 -191
  169. data/lib/cpee/implementation_callbacks.rb +77 -0
  170. data/lib/cpee/implementation_notifications.rb +189 -0
  171. data/lib/cpee/implementation_properties.rb +714 -0
  172. data/lib/cpee/{callback.rb → message.rb} +20 -18
  173. data/lib/cpee/persistence.rb +135 -0
  174. data/lib/cpee/statemachine.rb +20 -0
  175. data/lib/cpee/transform.rb +95 -0
  176. data/lib/engine.xml +1 -59
  177. data/lib/properties.xml +236 -0
  178. data/lib/properties/arbitrary.rng +26 -0
  179. data/lib/properties/attributes.rng +10 -0
  180. data/lib/properties/dataelements.rng +10 -0
  181. data/lib/properties/description.rng +8 -0
  182. data/lib/properties/dsl.rng +7 -0
  183. data/lib/properties/dslx.rng +8 -0
  184. data/lib/properties/endpoints.rng +10 -0
  185. data/lib/properties/handlerwrapper.rng +9 -0
  186. data/lib/properties/position.rng +15 -0
  187. data/lib/properties/positions.rng +10 -0
  188. data/lib/properties/properties.rng +29 -0
  189. data/lib/properties/set-properties.rng +25 -0
  190. data/lib/properties/set-some-properties.rng +45 -0
  191. data/lib/properties/simple.rng +8 -0
  192. data/lib/properties/state.rng +33 -0
  193. data/lib/properties/status.rng +12 -0
  194. data/lib/properties/t_attributes.rng +7 -0
  195. data/lib/properties/t_dataelements.rng +7 -0
  196. data/lib/properties/t_endpoints.rng +7 -0
  197. data/lib/properties/t_position.rng +7 -0
  198. data/lib/properties/t_positions.rng +7 -0
  199. data/lib/properties/t_simple.rng +7 -0
  200. data/lib/properties/t_status.rng +7 -0
  201. data/lib/properties/t_transformation.rng +7 -0
  202. data/lib/properties/transformation.rng +40 -0
  203. data/server/dev.rb +1 -0
  204. data/server/handlerwrappers/default.rb +40 -38
  205. data/server/resources/backend/README.md +17 -0
  206. data/server/resources/backend/instance.rb +23 -0
  207. data/server/resources/backend/instance.template +19 -0
  208. data/server/resources/backend/opts.yaml +6 -0
  209. data/server/resources/backend/run +33 -0
  210. data/server/resources/notifications/logging/subscription.xml +19 -0
  211. data/server/resources/properties.empty +38 -0
  212. data/server/resources/properties.init +11 -11
  213. data/server/resources/states.dot +19 -0
  214. data/server/resources/states.xml +49 -0
  215. data/server/routing/end.rb +44 -0
  216. data/server/routing/forward-events.rb +59 -0
  217. data/server/routing/forward-votes.rb +108 -0
  218. data/server/routing/persist.rb +155 -0
  219. data/server/server.rb +1 -0
  220. data/tools/cpee +46 -16
  221. data/tools/instantiation/instantiation +0 -1
  222. data/tools/server/server.rb +0 -1
  223. metadata +78 -133
  224. data/INSTALL +0 -23
  225. data/cockpit/templates/convert_preset.rb +0 -32
  226. data/cockpit/templates/testsets.xml +0 -11
  227. data/cockpit/templates/transformations.xml +0 -4
  228. data/cockpit/themes/compact/rngs/alternative.rng +0 -1
  229. data/cockpit/themes/compact/rngs/choose.rng +0 -1
  230. data/cockpit/themes/compact/rngs/critical.rng +0 -1
  231. data/cockpit/themes/compact/rngs/escape.rng +0 -1
  232. data/cockpit/themes/compact/rngs/group.rng +0 -1
  233. data/cockpit/themes/compact/rngs/loop.rng +0 -1
  234. data/cockpit/themes/compact/rngs/manipulate.rng +0 -1
  235. data/cockpit/themes/compact/rngs/otherwise.rng +0 -1
  236. data/cockpit/themes/compact/rngs/parallel.rng +0 -1
  237. data/cockpit/themes/compact/rngs/parallel_branch.rng +0 -1
  238. data/cockpit/themes/compact/rngs/stop.rng +0 -1
  239. data/cockpit/themes/compact/rngs/terminate.rng +0 -1
  240. data/cockpit/themes/default/rngs/finalize.rng +0 -6
  241. data/cockpit/themes/default/rngs/update.rng +0 -6
  242. data/cockpit/themes/default/theme.js +0 -1286
  243. data/cockpit/themes/extended/rngs/alternative.rng +0 -1
  244. data/cockpit/themes/extended/rngs/choose.rng +0 -1
  245. data/cockpit/themes/extended/rngs/critical.rng +0 -1
  246. data/cockpit/themes/extended/rngs/escape.rng +0 -1
  247. data/cockpit/themes/extended/rngs/group.rng +0 -1
  248. data/cockpit/themes/extended/rngs/loop.rng +0 -1
  249. data/cockpit/themes/extended/rngs/manipulate.rng +0 -1
  250. data/cockpit/themes/extended/rngs/otherwise.rng +0 -1
  251. data/cockpit/themes/extended/rngs/parallel.rng +0 -1
  252. data/cockpit/themes/extended/rngs/parallel_branch.rng +0 -1
  253. data/cockpit/themes/extended/rngs/stop.rng +0 -1
  254. data/cockpit/themes/extended/rngs/terminate.rng +0 -1
  255. data/cockpit/themes/labels/rngs/alternative.rng +0 -25
  256. data/cockpit/themes/labels/rngs/call.rng +0 -81
  257. data/cockpit/themes/labels/rngs/callmanipulate.rng +0 -101
  258. data/cockpit/themes/labels/rngs/choose.rng +0 -12
  259. data/cockpit/themes/labels/rngs/critical.rng +0 -5
  260. data/cockpit/themes/labels/rngs/escape.rng +0 -1
  261. data/cockpit/themes/labels/rngs/finalize.rng +0 -6
  262. data/cockpit/themes/labels/rngs/group.rng +0 -3
  263. data/cockpit/themes/labels/rngs/loop.rng +0 -22
  264. data/cockpit/themes/labels/rngs/manipulate.rng +0 -9
  265. data/cockpit/themes/labels/rngs/otherwise.rng +0 -22
  266. data/cockpit/themes/labels/rngs/parallel.rng +0 -13
  267. data/cockpit/themes/labels/rngs/parallel_branch.rng +0 -8
  268. data/cockpit/themes/labels/rngs/stop.rng +0 -5
  269. data/cockpit/themes/labels/rngs/terminate.rng +0 -1
  270. data/cockpit/themes/labels/rngs/update.rng +0 -6
  271. data/cockpit/themes/labels/symbols/alternative.svg +0 -5
  272. data/cockpit/themes/labels/symbols/arrow.svg +0 -3
  273. data/cockpit/themes/labels/symbols/call.svg +0 -6
  274. data/cockpit/themes/labels/symbols/callmanipulate.svg +0 -8
  275. data/cockpit/themes/labels/symbols/choose.svg +0 -5
  276. data/cockpit/themes/labels/symbols/choose_exclusive.svg +0 -5
  277. data/cockpit/themes/labels/symbols/choose_inclusive.svg +0 -4
  278. data/cockpit/themes/labels/symbols/complex.svg +0 -8
  279. data/cockpit/themes/labels/symbols/critical.svg +0 -4
  280. data/cockpit/themes/labels/symbols/end.svg +0 -3
  281. data/cockpit/themes/labels/symbols/escape.svg +0 -5
  282. data/cockpit/themes/labels/symbols/event_end.svg +0 -3
  283. data/cockpit/themes/labels/symbols/loop.svg +0 -5
  284. data/cockpit/themes/labels/symbols/manipulate.svg +0 -4
  285. data/cockpit/themes/labels/symbols/otherwise.svg +0 -5
  286. data/cockpit/themes/labels/symbols/parallel.svg +0 -5
  287. data/cockpit/themes/labels/symbols/parallel_branch.svg +0 -5
  288. data/cockpit/themes/labels/symbols/parallel_branch_compact.svg +0 -4
  289. data/cockpit/themes/labels/symbols/parallel_branch_event.svg +0 -14
  290. data/cockpit/themes/labels/symbols/parallel_branch_normal.svg +0 -5
  291. data/cockpit/themes/labels/symbols/scripts.svg +0 -4
  292. data/cockpit/themes/labels/symbols/start.svg +0 -3
  293. data/cockpit/themes/labels/symbols/stop.svg +0 -5
  294. data/cockpit/themes/labels/symbols/terminate.svg +0 -4
  295. data/cockpit/themes/packed/rngs/alternative.rng +0 -1
  296. data/cockpit/themes/packed/rngs/choose.rng +0 -1
  297. data/cockpit/themes/packed/rngs/critical.rng +0 -1
  298. data/cockpit/themes/packed/rngs/escape.rng +0 -1
  299. data/cockpit/themes/packed/rngs/group.rng +0 -1
  300. data/cockpit/themes/packed/rngs/loop.rng +0 -1
  301. data/cockpit/themes/packed/rngs/manipulate.rng +0 -1
  302. data/cockpit/themes/packed/rngs/otherwise.rng +0 -1
  303. data/cockpit/themes/packed/rngs/parallel.rng +0 -1
  304. data/cockpit/themes/packed/rngs/parallel_branch.rng +0 -1
  305. data/cockpit/themes/packed/rngs/stop.rng +0 -1
  306. data/cockpit/themes/packed/rngs/terminate.rng +0 -1
  307. data/cockpit/themes/preset/rngs/alternative.rng +0 -1
  308. data/cockpit/themes/preset/rngs/choose.rng +0 -1
  309. data/cockpit/themes/preset/rngs/critical.rng +0 -1
  310. data/cockpit/themes/preset/rngs/escape.rng +0 -1
  311. data/cockpit/themes/preset/rngs/group.rng +0 -1
  312. data/cockpit/themes/preset/rngs/loop.rng +0 -1
  313. data/cockpit/themes/preset/rngs/manipulate.rng +0 -1
  314. data/cockpit/themes/preset/rngs/otherwise.rng +0 -1
  315. data/cockpit/themes/preset/rngs/parallel.rng +0 -1
  316. data/cockpit/themes/preset/rngs/parallel_branch.rng +0 -1
  317. data/cockpit/themes/preset/rngs/stop.rng +0 -1
  318. data/cockpit/themes/preset/rngs/terminate.rng +0 -1
  319. data/lib/cpee/empty_workflow.rb +0 -28
  320. data/lib/cpee/handler_notifications.rb +0 -47
  321. data/lib/cpee/handler_properties.rb +0 -50
  322. data/lib/cpee/instantiation.rb +0 -369
  323. data/lib/cpee/processtransformation/bpel/Repository/booking.bpel +0 -125
  324. data/lib/cpee/processtransformation/bpel/Repository/booking.wsdl +0 -72
  325. data/lib/cpee/processtransformation/bpel/Repository/booking/airline.wsdl +0 -71
  326. data/lib/cpee/processtransformation/bpel/Repository/booking/hotel.wsdl +0 -64
  327. data/lib/cpee/processtransformation/bpel/Repository/booking/report.wsdl +0 -71
  328. data/lib/cpee/processtransformation/bpel/bpel2wee.rb +0 -34
  329. data/lib/cpee/processtransformation/bpel/bpelserver.ru +0 -64
  330. data/lib/cpee/processtransformation/bpel/bpelserver.xml +0 -70
  331. data/lib/cpee/processtransformation/bpel/lib/BPEL_Transform.rb +0 -367
  332. data/lib/cpee/processtransformation/bpmn2.rb +0 -297
  333. data/lib/cpee/processtransformation/cpee.rb +0 -119
  334. data/lib/cpee/processtransformation/structures.rb +0 -465
  335. data/lib/cpee/processtransformation/target.rb +0 -50
  336. data/log/azure.rb +0 -10
  337. data/log/azure_logger.rb +0 -136
  338. data/log/chain.xml +0 -27
  339. data/log/elasticsearch.rb +0 -15
  340. data/log/elasticsearch_logging.rb +0 -377
  341. data/log/legacy/test_es.rb +0 -26
  342. data/log/legacy/test_split.rb +0 -211
  343. data/log/log.xml +0 -13
  344. data/log/non_tamp.rb +0 -156
  345. data/log/sic.rb +0 -64
  346. data/log/template.xes_xml +0 -23
  347. data/log/template.xes_yaml +0 -28
  348. data/log/trace.yaml +0 -17717
  349. data/log/trace_sic.yaml +0 -18343
  350. data/log/xes_xml.rb +0 -121
  351. data/log/xes_yaml.rb +0 -96
  352. data/server/handlerwrappers/soap.rb +0 -146
  353. data/server/resources/properties.schema.active +0 -139
  354. data/server/resources/properties.schema.finished +0 -139
  355. data/server/resources/properties.schema.inactive +0 -136
  356. data/server/transformation_dslx.xsl +0 -790
  357. data/test/callback.rb +0 -9
@@ -14,27 +14,29 @@
14
14
 
15
15
  module CPEE
16
16
 
17
- class Callback
18
- def initialize(info,handler,method,event,key,protocol,*data)
19
- @info = info
20
- @event = event
21
- @key = key
22
- @data = data
23
- @handler = handler
24
- @protocol = protocol
25
- @method = method.class == Symbol ? method : :callback
26
- end
27
-
28
- attr_reader :info, :protocol, :method
17
+ module Message
29
18
 
30
- def delete_if!(event,key)
31
- @handler.send @method, :DELETE, nil, *@data if @key == key && @event == event
32
- nil
19
+ def self::send(type, event, cpee, instance, instance_uuid, instance_name, content={}, backend)
20
+ topic = ::File::dirname(event)
21
+ name = ::File::basename(event)
22
+ backend.publish(type.to_s + ':' + event,
23
+ instance.to_s + ' ' +
24
+ JSON::generate(
25
+ { 'cpee' => cpee,
26
+ 'instance-url' => File.join(cpee,instance.to_s),
27
+ 'instance-uuid' => instance_uuid,
28
+ 'instance-name' => instance_name,
29
+ 'instance' => instance,
30
+ 'topic' => topic,
31
+ 'type' => type,
32
+ 'name' => name,
33
+ 'timestamp' => Time.now.xmlschema(3),
34
+ 'content' => content
35
+ }
36
+ )
37
+ )
33
38
  end
34
39
 
35
- def callback(result=nil,options=nil)
36
- @handler.send @method, result, options, *@data
37
- end
38
40
  end
39
41
 
40
42
  end
@@ -0,0 +1,135 @@
1
+ # This file is part of CPEE.
2
+ #
3
+ # CPEE is free software: you can redistribute it and/or modify it under the terms
4
+ # of the GNU General Public License as published by the Free Software Foundation,
5
+ # either version 3 of the License, or (at your option) any later version.
6
+ #
7
+ # CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
8
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
9
+ # PARTICULAR PURPOSE. See the GNU General Public License for more details.
10
+ #
11
+ # You should have received a copy of the GNU General Public License along with
12
+ # CPEE (file COPYING in the main directory). If not, see
13
+ # <http://www.gnu.org/licenses/>.
14
+
15
+ module CPEE
16
+
17
+ module Persistence
18
+ def self::write_instance(id,opts) #{{{
19
+ Dir.mkdir(File.join(opts[:instances],id.to_s)) rescue nil
20
+ FileUtils.copy(opts[:backend_run],File.join(opts[:instances],id.to_s))
21
+ dsl = CPEE::Persistence::extract_item(id,opts,'dsl')
22
+ hw = CPEE::Persistence::extract_item(id,opts,'handlerwrapper')
23
+ endpoints = CPEE::Persistence::extract_list(id,opts,'endpoints')
24
+ dataelements = CPEE::Persistence::extract_list(id,opts,'dataelements')
25
+ positions = CPEE::Persistence::extract_set(id,opts,'positions')
26
+ positions.map! do |k, v|
27
+ [ k, v, CPEE::Persistence::extract_item(id,opts,File.join('positions',k,'@passthrough')) ]
28
+ end
29
+ File.open(File.join(opts[:instances],id.to_s,opts[:backend_opts]),'w') do |f|
30
+ YAML::dump({
31
+ :host => opts[:host],
32
+ :url => opts[:url],
33
+ :redis_path => opts[:redis_path],
34
+ :redis_db => opts[:redis_db],
35
+ :global_handlerwrappers => opts[:global_handlerwrappers],
36
+ :handlerwrappers => opts[:handlerwrappers]
37
+ },f)
38
+ end
39
+ template = ERB.new(File.read(opts[:backend_template]), trim_mode: '-')
40
+ res = template.result_with_hash(dsl: dsl, handlerwrapper: hw, dataelements: dataelements, endpoints: endpoints, positions: positions)
41
+ File.write(File.join(opts[:instances],id.to_s,opts[:backend_instance]),res)
42
+ end #}}}
43
+
44
+ def self::set_list(id,opts,item,values,deleted=[]) #{{{
45
+ ah = AttributesHelper.new
46
+ attributes = Persistence::extract_list(id,opts,'attributes').to_h
47
+ dataelements = Persistence::extract_list(id,opts,'dataelements').to_h
48
+ endpoints = Persistence::extract_list(id,opts,'endpoints').to_h
49
+ CPEE::Message::send(
50
+ :event,
51
+ File.join(item,'change'),
52
+ opts[:url],
53
+ id,
54
+ Persistence::extract_item(id,opts,'attributes/uuid'),
55
+ Persistence::extract_item(id,opts,'attributes/info'),
56
+ {
57
+ :changed => values.keys,
58
+ :deleted => deleted,
59
+ :values => values,
60
+ :attributes => ah.translate(attributes,dataelements,endpoints),
61
+ },
62
+ opts[:redis]
63
+ )
64
+ end #}}}
65
+ def self::extract_set(id,opts,item) #{{{
66
+ opts[:redis].smembers("instance:#{id}/#{item}").map do |e|
67
+ [e,opts[:redis].get("instance:#{id}/#{item}/#{e}")]
68
+ end
69
+ end #}}}
70
+ def self::extract_list(id,opts,item) #{{{
71
+ opts[:redis].zrange("instance:#{id}/#{item}",0,-1).map do |e|
72
+ [e,opts[:redis].get("instance:#{id}/#{item}/#{e}")]
73
+ end
74
+ end #}}}
75
+
76
+ def self::set_item(id,opts,item,value) #{{{
77
+ CPEE::Message::send(
78
+ :event,
79
+ File.join(item,'change'),
80
+ opts[:url],
81
+ id,
82
+ Persistence::extract_item(id,opts,'attributes/uuid'),
83
+ Persistence::extract_item(id,opts,'attributes/info'),
84
+ value,
85
+ opts[:redis]
86
+ )
87
+ end #}}}
88
+ def self::extract_item(id,opts,item) #{{{
89
+ opts[:redis].get("instance:#{id}/#{item}")
90
+ end #}}}
91
+
92
+ def self::set_handler(id,opts,key,url,values,update=false) #{{{
93
+ exis = opts[:redis].smembers("instance:#{id}/handlers/#{key}")
94
+
95
+ if update == false && exis.length > 0
96
+ return 405
97
+ end
98
+
99
+ ah = AttributesHelper.new
100
+ attributes = Persistence::extract_list(id,opts,'attributes').to_h
101
+ dataelements = Persistence::extract_list(id,opts,'dataelements').to_h
102
+ endpoints = Persistence::extract_list(id,opts,'endpoints').to_h
103
+
104
+ deleted = exis - values
105
+
106
+ CPEE::Message::send(
107
+ :event,
108
+ 'handler/change',
109
+ opts[:url],
110
+ id,
111
+ Persistence::extract_item(id,opts,'attributes/uuid'),
112
+ Persistence::extract_item(id,opts,'attributes/info'),
113
+ {
114
+ :key => key,
115
+ :url => url,
116
+ :changed => values,
117
+ :deleted => deleted,
118
+ :attributes => ah.translate(attributes,dataelements,endpoints),
119
+ },
120
+ opts[:redis]
121
+ )
122
+
123
+ 200
124
+ end #}}}
125
+ def self::extract_handler(id,opts,key) #{{{
126
+ opts[:redis].smembers("instance:#{id}/handlers/#{key}")
127
+ end #}}}
128
+ def self::extract_handlers(id,opts) #{{{
129
+ opts[:redis].smembers("instance:#{id}/handlers").map do |e|
130
+ [e, opts[:redis].get("instance:#{id}/handlers/#{e}/url")]
131
+ end
132
+ end #}}}
133
+ end
134
+
135
+ end
@@ -0,0 +1,20 @@
1
+ module CPEE
2
+
3
+ class StateMachine
4
+ def initialize(file,readonly,&state)
5
+ @states = XML::Smart.open_unprotected(file)
6
+ @state = state
7
+ @readonly = readonly
8
+ end
9
+
10
+ def setable?(id,nval)
11
+ cval = @state.call(id)
12
+ @states.find("/states/setable/#{cval}[#{nval}]").length > 0
13
+ end
14
+
15
+ def readonly?(id)
16
+ @readonly.include? @state.call(id)
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,95 @@
1
+ def transform(descxml,tdesc,tdesctype,tdata,tdatatype,tendp,tendptype,opts)
2
+ desc = XML::Smart::string(descxml)
3
+ desc.register_namespace 'p', 'http://cpee.org/ns/description/1.0'
4
+
5
+ dslx = nil
6
+ dsl = nil
7
+ de = {}
8
+ ep = {}
9
+
10
+ if desc.root.children.empty?
11
+ tdesctype = tdatatype = tendptype = 'clean'
12
+ end
13
+
14
+ ### description transformation, including dslx to dsl
15
+ addit = if tdesctype == 'copy' || tdesc.empty?
16
+ desc
17
+ elsif tdesctype == 'rest' && !tdesc.empty?
18
+ srv = Riddl::Client.interface(tdesc,opts[:transformation_service])
19
+ status, res = srv.post [
20
+ Riddl::Parameter::Complex.new("description","text/xml",descxml),
21
+ Riddl::Parameter::Simple.new("type","description")
22
+ ]
23
+ if status >= 200 && status < 300
24
+ XML::Smart::string(res[0].value.read).root
25
+ else
26
+ raise 'Could not extract dslx'
27
+ end
28
+ elsif tdesctype == 'xslt' && !tdesc.empty?
29
+ trans = XML::Smart::open_unprotected(tdesc)
30
+ desc.transform_with(trans).root
31
+ elsif tdesctype == 'clean'
32
+ XML::Smart::open_unprotected(opts[:empty_dslx]).root
33
+ else
34
+ nil
35
+ end
36
+ unless addit.nil?
37
+ trans = XML::Smart::open_unprotected(opts[:transformation_dslx])
38
+ dslx = addit.to_s
39
+ dsl = addit.transform_with(trans).to_s
40
+ end
41
+
42
+ ### dataelements extraction
43
+ addit = if tdatatype == 'rest' && !tdata.empty?
44
+ srv = Riddl::Client.interface(tdata,@opts[:transformation_service])
45
+ status, res = srv.post [
46
+ Riddl::Parameter::Complex.new("description","text/xml",descxml),
47
+ Riddl::Parameter::Simple.new("type","dataelements")
48
+ ]
49
+ if status >= 200 && status < 300
50
+ res
51
+ else
52
+ raise 'Could not extract dataelements'
53
+ end
54
+ elsif tdatatype == 'xslt' && !tdata.empty?
55
+ trans = XML::Smart::open_unprotected(tdata)
56
+ desc.transform_with(trans)
57
+ elsif tdatatype == 'clean'
58
+ []
59
+ else
60
+ nil
61
+ end
62
+ unless addit.nil?
63
+ addit.each_slice(2).each do |k,v|
64
+ de[k.value.to_sym] = v.value
65
+ end
66
+ end
67
+
68
+ ### endpoints extraction
69
+ addit = if tendptype == 'rest' && !tdata.empty?
70
+ srv = Riddl::Client.interface(tendp,@opts[:transformation_service])
71
+ status, res = srv.post [
72
+ Riddl::Parameter::Complex.new("description","text/xml",descxml),
73
+ Riddl::Parameter::Simple.new("type","endpoints")
74
+ ]
75
+ if status >= 200 && status < 300
76
+ res
77
+ else
78
+ raise 'Could not extract endpoints'
79
+ end
80
+ elsif tendptype == 'xslt' && !tdata.empty?
81
+ trans = XML::Smart::open_unprotected(tendp.text)
82
+ desc.transform_with(trans)
83
+ elsif tendptype == 'clean'
84
+ []
85
+ else
86
+ nil
87
+ end
88
+ unless addit.nil?
89
+ addit.each_slice(2).each do |k,v|
90
+ ep[k.value.to_sym] = v.value
91
+ end
92
+ end
93
+
94
+ [dslx, dsl, de, ep]
95
+ end
@@ -30,42 +30,12 @@
30
30
  <message name="instance-new">
31
31
  <parameter name="info" type="string"/>
32
32
  </message>
33
- <message name="instance-new-xml">
34
- <parameter name="xml" mimetype="application/xml"/>
35
- </message>
36
33
 
37
34
  <message name="instance-info">
38
35
  <parameter name="info" mimetype="text/xml" handler="http://riddl.org/ns/handlers/relaxng">
39
36
  <xi:include href="engine/instance-info.rng"/>
40
37
  </parameter>
41
38
  </message>
42
- <message name="callbacks">
43
- <parameter name="info" mimetype="text/xml" handler="http://riddl.org/ns/handlers/relaxng">
44
- <xi:include href="engine/callbacks.rng"/>
45
- </parameter>
46
- </message>
47
- <message name="xsl">
48
- <parameter name="xsl" mimetype="application/xml"/>
49
- </message>
50
-
51
- <message name="cmdin">
52
- <parameter name="cmd" type="string"/>
53
- </message>
54
- <message name="cmdout">
55
- <parameter name="res" mimetype="text/plain"/>
56
- </message>
57
- <message name="cmdui">
58
- <parameter name="res" mimetype="text/html"/>
59
- </message>
60
-
61
- <message name="message">
62
- <parameter name="type" type="integer"/>
63
- <parameter name="message" type="string"/>
64
- <optional>
65
- <parameter name="details" mimetype="text/xml"/>
66
- <parameter name="details" mimetype="text/yaml"/>
67
- </optional>
68
- </message>
69
39
 
70
40
  <resource>
71
41
  <doc:documentation>b</doc:documentation>
@@ -73,37 +43,9 @@
73
43
  <doc:documentation>a</doc:documentation>
74
44
  </get>
75
45
  <post in="instance-new" out="instance-id"/>
76
- <post in="instance-new-xml" out="instance-id"/>
77
- <resource>
46
+ <resource relative="\d+">
78
47
  <get in="*" out="instance-info"/>
79
48
  <delete in="*"/>
80
- <resource relative="console">
81
- <get out="cmdui"/>
82
- <get in="cmdin" out="cmdout"/>
83
- </resource>
84
- <resource relative="callbacks">
85
- <doc:documentation>xb</doc:documentation>
86
- <get in="*" out="callbacks"/>
87
- <resource>
88
- <put in="*"/>
89
- </resource>
90
- </resource>
91
- <resource relative="notifications">
92
- <doc:documentation>xr</doc:documentation>
93
- <resource relative="subscriptions">
94
- <resource>
95
- <resource relative="debug">
96
- <put in="message"/>
97
- </resource>
98
- <resource relative="error">
99
- <put in="message"/>
100
- </resource>
101
- <resource relative="info">
102
- <put in="message"/>
103
- </resource>
104
- </resource>
105
- </resource>
106
- </resource>
107
49
  </resource>
108
50
  </resource>
109
51
  </description>
@@ -0,0 +1,236 @@
1
+ <!--
2
+ This file is part of CPEE.
3
+
4
+ CPEE is free software: you can redistribute it and/or modify it under the terms
5
+ of the GNU General Public License as published by the Free Software Foundation,
6
+ either version 3 of the License, or (at your option) any later version.
7
+
8
+ CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
9
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
10
+ PARTICULAR PURPOSE. See the GNU General Public License for more details.
11
+
12
+ You should have received a copy of the GNU General Public License along with
13
+ CPEE (file COPYING in the main directory). If not, see
14
+ <http://www.gnu.org/licenses/>.
15
+ -->
16
+
17
+ <description datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns="http://riddl.org/ns/description/1.0" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:doc="http://cpee.org/ns/documentation">
18
+ <message name="properties"> <!--{{{-->
19
+ <parameter name="properties" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
20
+ <xi:include href="properties/properties.rng"/>
21
+ </parameter>
22
+ </message> <!--}}}-->
23
+ <message name="set-some-properties"> <!--{{{-->
24
+ <parameter name="properties" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
25
+ <xi:include href="properties/set-some-properties.rng"/>
26
+ </parameter>
27
+ </message> <!--}}}-->
28
+
29
+ <message name="machine"> <!--{{{-->
30
+ <parameter name="machine" type="string"/>
31
+ </message> <!--}}}-->
32
+ <message name="diagram"> <!--{{{-->
33
+ <parameter name="diagram" mimetype="*/xml"/>
34
+ </message> <!--}}}-->
35
+ <message name="state"> <!--{{{-->
36
+ <parameter name="value" type="string">
37
+ <choice>
38
+ <value>ready</value>
39
+ <value>running</value>
40
+ <value>simulating</value>
41
+ <value>replaying</value>
42
+ <value>stopping</value>
43
+ <value>stopped</value>
44
+ <value>abandoned</value>
45
+ <value>finished</value>
46
+ </choice>
47
+ </parameter>
48
+ </message> <!--}}}-->
49
+
50
+ <message name="changed"> <!--{{{-->
51
+ <parameter name="state" type="dateTime"/>
52
+ </message> <!--}}}-->
53
+
54
+ <message name="status"> <!--{{{-->
55
+ <parameter name="status" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
56
+ <xi:include href="properties/t_status.rng"/>
57
+ </parameter>
58
+ </message> <!--}}}-->
59
+ <message name="integer"> <!--{{{-->
60
+ <parameter name="value" type="integer"/>
61
+ </message> <!--}}}-->
62
+ <message name="string"> <!--{{{-->
63
+ <parameter name="value" type="string"/>
64
+ </message> <!--}}}-->
65
+
66
+ <message name="handlerwrapper"> <!--{{{-->
67
+ <parameter name="value" type="string">
68
+ <param name="pattern">[A-Z][a-zA-Z]*</param>
69
+ </parameter>
70
+ </message> <!--}}}-->
71
+
72
+ <message name="id"> <!--{{{-->
73
+ <parameter name="value" type="string"/>
74
+ </message> <!--}}}-->
75
+
76
+ <message name="position"> <!--{{{-->
77
+ <parameter name="position" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
78
+ <xi:include href="properties/t_position.rng"/>
79
+ </parameter>
80
+ </message> <!--}}}-->
81
+ <message name="positions"> <!--{{{-->
82
+ <parameter name="positions" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
83
+ <xi:include href="properties/t_positions.rng"/>
84
+ </parameter>
85
+ </message> <!--}}}-->
86
+ <message name="detail"> <!--{{{-->
87
+ <parameter name="detail" type="string">
88
+ <choice>
89
+ <value>at</value>
90
+ <value>after</value>
91
+ <value>before</value>
92
+ </choice>
93
+ </parameter>
94
+ </message> <!--}}}-->
95
+
96
+ <message name="dataelement"> <!--{{{-->
97
+ <parameter name="dataelement" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
98
+ <xi:include href="properties/t_simple.rng"/>
99
+ </parameter>
100
+ </message> <!--}}}-->
101
+ <message name="dataelements"> <!--{{{-->
102
+ <parameter name="dataelements" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
103
+ <xi:include href="properties/t_dataelements.rng"/>
104
+ </parameter>
105
+ </message> <!--}}}-->
106
+
107
+ <message name="endpoint"> <!--{{{-->
108
+ <parameter name="endpoint" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
109
+ <xi:include href="properties/t_simple.rng"/>
110
+ </parameter>
111
+ </message> <!--}}}-->
112
+ <message name="endpoints"> <!--{{{-->
113
+ <parameter name="endpoints" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
114
+ <xi:include href="properties/t_endpoints.rng"/>
115
+ </parameter>
116
+ </message> <!--}}}-->
117
+
118
+ <message name="attribute"> <!--{{{-->
119
+ <parameter name="attribute" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
120
+ <xi:include href="properties/t_simple.rng"/>
121
+ </parameter>
122
+ </message> <!--}}}-->
123
+ <message name="attributes"> <!--{{{-->
124
+ <parameter name="attributes" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
125
+ <xi:include href="properties/t_attributes.rng"/>
126
+ </parameter>
127
+ </message> <!--}}}-->
128
+
129
+ <message name="dsl"> <!--{{{-->
130
+ <parameter name="dsl" mimetype="text/plain"/>
131
+ </message> <!--}}}-->
132
+ <message name="dslx"> <!--{{{-->
133
+ <parameter name="dslx" mimetype="*/xml"/>
134
+ </message> <!--}}}-->
135
+ <message name="description"> <!--{{{-->
136
+ <parameter name="description" mimetype="*/xml"/>
137
+ </message> <!--}}}-->
138
+
139
+ <message name="transformation"> <!--{{{-->
140
+ <parameter name="transformation" mimetype="*/xml" handler="http://riddl.org/ns/handlers/relaxng">
141
+ <xi:include href="properties/t_transformation.rng"/>
142
+ </parameter>
143
+ </message> <!--}}}-->
144
+
145
+ <resource>
146
+ <get out="properties"/>
147
+ <put in="set-some-properties"/>
148
+ <patch in="set-some-properties"/>
149
+
150
+ <resource relative="state"> <!--{{{-->
151
+ <get in="machine" out="diagram"/>
152
+ <get out="state"/>
153
+ <put in="state"/>
154
+ <resource relative="@changed">
155
+ <get out="changed"/>
156
+ </resource>
157
+ </resource> <!--}}}-->
158
+ <resource relative="status"> <!--{{{-->
159
+ <get out="status"/>
160
+ <put in="status"/>
161
+ <resource relative="id">
162
+ <get out="integer"/>
163
+ </resource>
164
+ <resource relative="message">
165
+ <get out="string"/>
166
+ </resource>
167
+ </resource> <!--}}}-->
168
+ <resource relative="handlerwrapper"> <!--{{{-->
169
+ <put in="handlerwrapper"/>
170
+ <get out="handlerwrapper"/>
171
+ </resource> <!--}}}-->
172
+ <resource relative="positions"> <!--{{{-->
173
+ <get out="positions"/>
174
+ <post in="position" out="id"/>
175
+ <patch in="positions"/>
176
+ <put in="positions"/>
177
+ <resource>
178
+ <get out="detail"/>
179
+ <put in="detail"/>
180
+ <delete/>
181
+ <resource relative="@passthrough">
182
+ <get out="string"/>
183
+ </resource>
184
+ </resource>
185
+ </resource> <!--}}}-->
186
+ <resource relative="dataelements"> <!--{{{-->
187
+ <get out="dataelements"/>
188
+ <post in="dataelement" out="id"/>
189
+ <patch in="dataelements"/>
190
+ <put in="dataelements"/>
191
+ <resource>
192
+ <get out="string"/>
193
+ <put in="string"/>
194
+ <delete/>
195
+ </resource>
196
+ </resource> <!--}}}-->
197
+ <resource relative="endpoints"> <!--{{{-->
198
+ <get out="endpoints"/>
199
+ <post in="endpoint" out="id"/>
200
+ <patch in="endpoints"/>
201
+ <put in="endpoints"/>
202
+ <resource>
203
+ <get out="string"/>
204
+ <put in="string"/>
205
+ <delete/>
206
+ </resource>
207
+ </resource> <!--}}}-->
208
+ <resource relative="attributes"> <!--{{{-->
209
+ <get out="attributes"/>
210
+ <post in="attribute" out="id"/>
211
+ <patch in="attributes"/>
212
+ <put in="attributes"/>
213
+ <resource>
214
+ <get out="string"/>
215
+ <put in="string"/>
216
+ <delete/>
217
+ </resource>
218
+ </resource> <!--}}}-->
219
+
220
+ <resource relative="dsl"> <!--{{{-->
221
+ <get out="dsl"/>
222
+ </resource> <!--}}}-->
223
+ <resource relative="dslx"> <!--{{{-->
224
+ <get out="dslx"/>
225
+ </resource> <!--}}}-->
226
+ <resource relative="description"> <!--{{{-->
227
+ <get out="description"/>
228
+ <put in="description"/>
229
+ </resource> <!--}}}-->
230
+
231
+ <resource relative="transformation"> <!--{{{-->
232
+ <get out="transformation"/>
233
+ <put in="transformation"/>
234
+ </resource> <!--}}}-->
235
+ </resource>
236
+ </description>