cpee 1.5.27 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
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 +186 -284
  9. data/cockpit/js/parameters.js +13 -3
  10. data/cockpit/js/ui.js +2 -2
  11. data/cockpit/rngs/attributes.rng +1 -1
  12. data/cockpit/rngs/dataelements.rng +1 -1
  13. data/cockpit/rngs/endpoints.rng +1 -1
  14. data/cockpit/templates.legacy/Async.xml +7 -7
  15. data/cockpit/templates.legacy/BCO.xml +7 -10
  16. data/cockpit/templates.legacy/BCS.xml +7 -10
  17. data/cockpit/templates.legacy/Centurio.xml +6 -6
  18. data/cockpit/templates.legacy/Concurrent.xml +6 -6
  19. data/cockpit/templates.legacy/Coopis Testset.xml +6 -6
  20. data/cockpit/templates.legacy/Endpoints and Data Manipulation.xml +6 -6
  21. data/cockpit/templates.legacy/ICSOC Testset.xml +6 -6
  22. data/cockpit/templates.legacy/Infinity.xml +3 -3
  23. data/cockpit/templates.legacy/Lego Boxer.xml +7 -7
  24. data/cockpit/templates.legacy/Lego Conveyor.xml +7 -7
  25. data/cockpit/templates.legacy/Lego Crane.xml +7 -7
  26. data/cockpit/templates.legacy/Lego Ejector.xml +7 -7
  27. data/cockpit/templates.legacy/Lego Full.xml +7 -7
  28. data/cockpit/templates.legacy/Lego Liddy.xml +7 -7
  29. data/cockpit/templates.legacy/Lego Plate.xml +7 -7
  30. data/cockpit/templates.legacy/Lego Transporter.xml +7 -7
  31. data/cockpit/templates.legacy/Lego_Part_1.xml +7 -7
  32. data/cockpit/templates.legacy/LgLinear.xml +6 -10
  33. data/cockpit/templates.legacy/Linear.xml +7 -7
  34. data/cockpit/templates.legacy/Log.xml +7 -7
  35. data/cockpit/templates.legacy/Mangler 1.xml +6 -6
  36. data/cockpit/templates.legacy/Mangler 2.xml +6 -6
  37. data/cockpit/templates.legacy/Manuel Labels.xml +7 -7
  38. data/cockpit/templates.legacy/Promise.xml +7 -7
  39. data/cockpit/templates.legacy/SOPROMO Test Sonification.xml +6 -6
  40. data/cockpit/templates.legacy/Subprocess.xml +56 -0
  41. data/cockpit/templates.legacy/Syncing P34 1.xml +8 -11
  42. data/cockpit/templates.legacy/Syncing P34 2.xml +8 -11
  43. data/cockpit/templates.legacy/Syncing P34 3.xml +8 -11
  44. data/cockpit/templates.legacy/Syncing P34.xml +8 -11
  45. data/cockpit/templates.legacy/TEST - Bad Loop.xml +6 -6
  46. data/cockpit/templates.legacy/TEST - Wrong Positions.xml +6 -6
  47. data/cockpit/templates.legacy/Take_5.xml +48 -0
  48. data/cockpit/templates.legacy/Update.xml +7 -7
  49. data/cockpit/templates.legacy/Worklist Parallel.xml +7 -7
  50. data/cockpit/templates.legacy/Worklist Test CPEE.xml +7 -7
  51. data/cockpit/templates.legacy/Worklist Test.xml +7 -7
  52. data/cockpit/templates.legacy/Worklist Test2.xml +7 -7
  53. data/cockpit/templates.legacy/convert_cpee2.rb +15 -0
  54. data/cockpit/templates.legacy/testsets.xml +1 -1
  55. data/cockpit/templates/BPM 2020 Manual Adjust.xml +18 -71
  56. data/cockpit/templates/BPM 2020 Solution Baseline.xml +17 -71
  57. data/cockpit/templates/BPM 2020 Solution NN.xml +25 -71
  58. data/cockpit/templates/BPM 2020 Solution View.xml +15 -71
  59. data/cockpit/templates/BPM 2020.xml +17 -6
  60. data/cockpit/templates/Coopis 2010.xml +16 -7
  61. data/cockpit/templates/IUPC arXiv:1104.3609 P34 1.xml +8 -11
  62. data/cockpit/templates/IUPC arXiv:1104.3609 P34 2.xml +8 -11
  63. data/cockpit/templates/IUPC arXiv:1104.3609 P34 3.xml +8 -11
  64. data/cockpit/templates/Worklist.xml +7 -7
  65. data/cockpit/templates/convert_cpee2.rb +15 -0
  66. data/cockpit/themes/compact/rngs/alternative.rng +25 -0
  67. data/cockpit/themes/compact/rngs/call.rng +18 -18
  68. data/cockpit/themes/compact/rngs/callmanipulate.rng +26 -26
  69. data/cockpit/themes/compact/rngs/choose.rng +14 -0
  70. data/cockpit/themes/compact/rngs/critical.rng +5 -0
  71. data/cockpit/themes/compact/rngs/escape.rng +1 -0
  72. data/cockpit/themes/compact/rngs/group.rng +3 -0
  73. data/cockpit/themes/compact/rngs/loop.rng +22 -0
  74. data/cockpit/themes/compact/rngs/manipulate.rng +9 -0
  75. data/cockpit/themes/compact/rngs/otherwise.rng +22 -0
  76. data/cockpit/themes/compact/rngs/parallel.rng +21 -0
  77. data/cockpit/themes/compact/rngs/parallel_branch.rng +8 -0
  78. data/cockpit/themes/compact/rngs/scripts.rng +10 -11
  79. data/cockpit/themes/compact/rngs/stop.rng +5 -0
  80. data/cockpit/themes/compact/rngs/terminate.rng +1 -0
  81. data/cockpit/themes/convert_cpee2.rb +8 -0
  82. data/cockpit/themes/default/rngs/alternative.rng +8 -8
  83. data/cockpit/themes/default/rngs/call.rng +85 -49
  84. data/cockpit/themes/default/rngs/callmanipulate.rng +103 -64
  85. data/cockpit/themes/default/rngs/choose.rng +5 -3
  86. data/cockpit/themes/default/rngs/critical.rng +2 -2
  87. data/cockpit/themes/default/rngs/escape.rng +1 -1
  88. data/cockpit/themes/default/rngs/group.rng +3 -3
  89. data/cockpit/themes/default/rngs/loop.rng +8 -8
  90. data/cockpit/themes/default/rngs/manipulate.rng +3 -3
  91. data/cockpit/themes/default/rngs/otherwise.rng +8 -8
  92. data/cockpit/themes/default/rngs/parallel.rng +14 -6
  93. data/cockpit/themes/default/rngs/parallel_branch.rng +2 -2
  94. data/cockpit/themes/default/rngs/scripts.rng +23 -0
  95. data/cockpit/themes/default/rngs/stop.rng +2 -2
  96. data/cockpit/themes/default/rngs/terminate.rng +1 -1
  97. data/cockpit/themes/extended/rngs/alternative.rng +25 -0
  98. data/cockpit/themes/extended/rngs/call.rng +18 -18
  99. data/cockpit/themes/extended/rngs/callmanipulate.rng +26 -26
  100. data/cockpit/themes/extended/rngs/choose.rng +14 -0
  101. data/cockpit/themes/extended/rngs/critical.rng +5 -0
  102. data/cockpit/themes/extended/rngs/escape.rng +1 -0
  103. data/cockpit/themes/extended/rngs/group.rng +3 -0
  104. data/cockpit/themes/extended/rngs/loop.rng +22 -0
  105. data/cockpit/themes/extended/rngs/manipulate.rng +9 -0
  106. data/cockpit/themes/extended/rngs/otherwise.rng +22 -0
  107. data/cockpit/themes/extended/rngs/parallel.rng +21 -0
  108. data/cockpit/themes/extended/rngs/parallel_branch.rng +8 -0
  109. data/cockpit/themes/extended/rngs/scripts.rng +10 -11
  110. data/cockpit/themes/extended/rngs/stop.rng +5 -0
  111. data/cockpit/themes/extended/rngs/terminate.rng +1 -0
  112. data/cockpit/themes/extended/theme.js +7 -6
  113. data/cockpit/themes/model/rngs/alternative.rng +1 -1
  114. data/cockpit/themes/model/rngs/call.rng +16 -16
  115. data/cockpit/themes/model/rngs/callmanipulate.rng +17 -17
  116. data/cockpit/themes/model/rngs/choose.rng +1 -1
  117. data/cockpit/themes/model/rngs/critical.rng +1 -1
  118. data/cockpit/themes/model/rngs/escape.rng +1 -1
  119. data/cockpit/themes/model/rngs/group.rng +1 -1
  120. data/cockpit/themes/model/rngs/loop.rng +1 -1
  121. data/cockpit/themes/model/rngs/manipulate.rng +1 -1
  122. data/cockpit/themes/model/rngs/otherwise.rng +1 -1
  123. data/cockpit/themes/model/rngs/parallel.rng +1 -1
  124. data/cockpit/themes/model/rngs/parallel_branch.rng +1 -1
  125. data/cockpit/themes/model/rngs/scripts.rng +3 -4
  126. data/cockpit/themes/model/rngs/stop.rng +1 -1
  127. data/cockpit/themes/model/rngs/terminate.rng +1 -1
  128. data/cockpit/themes/model/theme.js +7 -6
  129. data/cockpit/themes/packed/rngs/alternative.rng +25 -0
  130. data/cockpit/themes/packed/rngs/call.rng +18 -18
  131. data/cockpit/themes/packed/rngs/callmanipulate.rng +26 -26
  132. data/cockpit/themes/packed/rngs/choose.rng +14 -0
  133. data/cockpit/themes/packed/rngs/critical.rng +5 -0
  134. data/cockpit/themes/packed/rngs/escape.rng +1 -0
  135. data/cockpit/themes/packed/rngs/group.rng +3 -0
  136. data/cockpit/themes/packed/rngs/loop.rng +22 -0
  137. data/cockpit/themes/packed/rngs/manipulate.rng +9 -0
  138. data/cockpit/themes/packed/rngs/otherwise.rng +22 -0
  139. data/cockpit/themes/packed/rngs/parallel.rng +21 -0
  140. data/cockpit/themes/packed/rngs/parallel_branch.rng +8 -0
  141. data/cockpit/themes/packed/rngs/scripts.rng +10 -11
  142. data/cockpit/themes/packed/rngs/stop.rng +5 -0
  143. data/cockpit/themes/packed/rngs/terminate.rng +1 -0
  144. data/cockpit/themes/packed/theme.js +7 -6
  145. data/cockpit/themes/preset/rngs/alternative.rng +25 -0
  146. data/cockpit/themes/preset/rngs/call.rng +18 -18
  147. data/cockpit/themes/preset/rngs/callmanipulate.rng +26 -26
  148. data/cockpit/themes/preset/rngs/choose.rng +14 -0
  149. data/cockpit/themes/preset/rngs/critical.rng +5 -0
  150. data/cockpit/themes/preset/rngs/escape.rng +1 -0
  151. data/cockpit/themes/preset/rngs/group.rng +3 -0
  152. data/cockpit/themes/preset/rngs/loop.rng +22 -0
  153. data/cockpit/themes/preset/rngs/manipulate.rng +9 -0
  154. data/cockpit/themes/preset/rngs/otherwise.rng +22 -0
  155. data/cockpit/themes/preset/rngs/parallel.rng +21 -0
  156. data/cockpit/themes/preset/rngs/parallel_branch.rng +8 -0
  157. data/cockpit/themes/preset/rngs/scripts.rng +10 -11
  158. data/cockpit/themes/preset/rngs/stop.rng +5 -0
  159. data/cockpit/themes/preset/rngs/terminate.rng +1 -0
  160. data/cockpit/themes/preset/theme.js +7 -6
  161. data/cpee.gemspec +9 -10
  162. data/{log/topics.xml → lib/callbacks.xml} +16 -6
  163. data/lib/{engine → callbacks}/callbacks.rng +2 -8
  164. data/lib/cpee.xml +10 -4
  165. data/lib/cpee/attributes_helper.rb +27 -0
  166. data/lib/cpee/controller.rb +113 -596
  167. data/lib/cpee/implementation.rb +152 -191
  168. data/lib/cpee/implementation_callbacks.rb +77 -0
  169. data/lib/cpee/implementation_notifications.rb +189 -0
  170. data/lib/cpee/implementation_properties.rb +707 -0
  171. data/lib/cpee/{callback.rb → message.rb} +20 -18
  172. data/lib/cpee/persistence.rb +135 -0
  173. data/lib/cpee/statemachine.rb +20 -0
  174. data/lib/cpee/transform.rb +95 -0
  175. data/lib/engine.xml +1 -59
  176. data/lib/properties.xml +236 -0
  177. data/lib/properties/arbitrary.rng +26 -0
  178. data/lib/properties/attributes.rng +10 -0
  179. data/lib/properties/dataelements.rng +10 -0
  180. data/lib/properties/description.rng +8 -0
  181. data/lib/properties/dsl.rng +7 -0
  182. data/lib/properties/dslx.rng +8 -0
  183. data/lib/properties/endpoints.rng +10 -0
  184. data/lib/properties/handlerwrapper.rng +9 -0
  185. data/lib/properties/position.rng +15 -0
  186. data/lib/properties/positions.rng +10 -0
  187. data/lib/properties/properties.rng +29 -0
  188. data/lib/properties/set-properties.rng +25 -0
  189. data/lib/properties/set-some-properties.rng +45 -0
  190. data/lib/properties/simple.rng +8 -0
  191. data/lib/properties/state.rng +33 -0
  192. data/lib/properties/status.rng +12 -0
  193. data/lib/properties/t_attributes.rng +7 -0
  194. data/lib/properties/t_dataelements.rng +7 -0
  195. data/lib/properties/t_endpoints.rng +7 -0
  196. data/lib/properties/t_position.rng +7 -0
  197. data/lib/properties/t_positions.rng +7 -0
  198. data/lib/properties/t_simple.rng +7 -0
  199. data/lib/properties/t_status.rng +7 -0
  200. data/lib/properties/t_transformation.rng +7 -0
  201. data/lib/properties/transformation.rng +40 -0
  202. data/server/dev.rb +1 -0
  203. data/server/handlerwrappers/default.rb +40 -38
  204. data/server/resources/backend/README.md +17 -0
  205. data/server/resources/backend/instance.rb +23 -0
  206. data/server/resources/backend/instance.template +19 -0
  207. data/server/resources/backend/opts.yaml +6 -0
  208. data/server/resources/backend/run +29 -0
  209. data/server/resources/notifications/logging/subscription.xml +19 -0
  210. data/server/resources/properties.empty +38 -0
  211. data/server/resources/properties.init +11 -11
  212. data/server/resources/states.dot +19 -0
  213. data/server/resources/states.xml +49 -0
  214. data/server/resources/transformation_dslx.xsl +3 -12
  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 +19 -15
  221. data/tools/instantiation/instantiation +0 -1
  222. data/tools/server/server.rb +0 -1
  223. metadata +77 -132
  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>