cpee 1.3.102

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 (281) hide show
  1. data/AUTHORS +3 -0
  2. data/COPYING +165 -0
  3. data/FEATURES +28 -0
  4. data/INSTALL +23 -0
  5. data/README +7 -0
  6. data/Rakefile +28 -0
  7. data/cockpit/contrib/symbols.svg +224 -0
  8. data/cockpit/contrib/transformation1.xsl +264 -0
  9. data/cockpit/contrib/transformation2.xsl +10 -0
  10. data/cockpit/css/ui.css +155 -0
  11. data/cockpit/index.html +241 -0
  12. data/cockpit/js/details.js +146 -0
  13. data/cockpit/js/instance.js +927 -0
  14. data/cockpit/js/parameters.js +66 -0
  15. data/cockpit/js/ui.js +48 -0
  16. data/cockpit/js/wfadaptor.cpee.js +1082 -0
  17. data/cockpit/lib/contextmenu.css +72 -0
  18. data/cockpit/lib/contextmenu.js +63 -0
  19. data/cockpit/lib/jquery-ui.custom.min.js +259 -0
  20. data/cockpit/lib/jquery-ui.custom.min.txt +16 -0
  21. data/cockpit/lib/jquery.caret.min.js +10 -0
  22. data/cockpit/lib/jquery.min.js +4 -0
  23. data/cockpit/lib/jquery.svgdom.js +281 -0
  24. data/cockpit/lib/parsequery.js +19 -0
  25. data/cockpit/lib/printf.js +368 -0
  26. data/cockpit/lib/strftime.min.js +1 -0
  27. data/cockpit/lib/ui.css +270 -0
  28. data/cockpit/lib/ui.js +60 -0
  29. data/cockpit/lib/underscore.min.js +27 -0
  30. data/cockpit/lib/util.js +53 -0
  31. data/cockpit/lib/wfadaptor-doc/demo1.html +517 -0
  32. data/cockpit/lib/wfadaptor-doc/demo2.html +84 -0
  33. data/cockpit/lib/wfadaptor-doc/index.html +54 -0
  34. data/cockpit/lib/wfadaptor.css +217 -0
  35. data/cockpit/lib/wfadaptor.js +410 -0
  36. data/cockpit/testsets/ADVENTURE Dynamic Order.xml +353 -0
  37. data/cockpit/testsets/ADVENTURE Main Loop.xml +327 -0
  38. data/cockpit/testsets/ADVENTURE Order.xml +424 -0
  39. data/cockpit/testsets/ADVENTURE Performance Test 1.xml +311 -0
  40. data/cockpit/testsets/ADVENTURE Performance Test 2.xml +297 -0
  41. data/cockpit/testsets/Concurrent.xml +315 -0
  42. data/cockpit/testsets/Coopis Testset.xml +346 -0
  43. data/cockpit/testsets/Endpoints and Data Manipulation.xml +359 -0
  44. data/cockpit/testsets/ICSOC Testset.xml +354 -0
  45. data/cockpit/testsets/Linear.xml +328 -0
  46. data/cockpit/testsets/Mangler 1.xml +352 -0
  47. data/cockpit/testsets/Mangler 2.xml +372 -0
  48. data/cockpit/testsets/RESCUE - Book Movie - Local.xml +385 -0
  49. data/cockpit/testsets/RESCUE - Book Movie.xml +385 -0
  50. data/cockpit/testsets/RESCUE - Loop-Parallel Injection.xml +393 -0
  51. data/cockpit/testsets/SOPROMO Test Sonification.xml +356 -0
  52. data/cockpit/testsets/Syncing P34 1.xml +329 -0
  53. data/cockpit/testsets/Syncing P34 2.xml +329 -0
  54. data/cockpit/testsets/Syncing P34 3.xml +329 -0
  55. data/cockpit/testsets/Syncing P34.xml +329 -0
  56. data/cockpit/testsets/TEST - Bad Loop.xml +428 -0
  57. data/cockpit/testsets/TEST - Wrong Positions.xml +470 -0
  58. data/cockpit/testsets/index.xml +24 -0
  59. data/contrib/Screenshot at 2011-09-28 02:38:11.png +0 -0
  60. data/contrib/logo2-small.png +0 -0
  61. data/contrib/logo2.png +0 -0
  62. data/contrib/logo2.svg +7610 -0
  63. data/contrib/logo2a.png +0 -0
  64. data/contrib/logo2a.svg +367 -0
  65. data/cpee.gemspec +24 -0
  66. data/lib/cpee.xml +39 -0
  67. data/lib/cpee/callback.rb +40 -0
  68. data/lib/cpee/controller.rb +440 -0
  69. data/lib/cpee/empty_workflow.rb +24 -0
  70. data/lib/cpee/handler_notifications.rb +46 -0
  71. data/lib/cpee/handler_properties.rb +43 -0
  72. data/lib/cpee/implementation.rb +174 -0
  73. data/lib/engine.xml +85 -0
  74. data/lib/engine/callbacks.rng +41 -0
  75. data/lib/engine/instance-info.rng +41 -0
  76. data/lib/engine/instances.rng +38 -0
  77. data/server/handlerwrappers/default.rb +142 -0
  78. data/server/handlerwrappers/rescue.rb +216 -0
  79. data/server/handlerwrappers/soap.rb +152 -0
  80. data/server/instances/1/notifications/1d41ebf5e52bf039b3c3873fddb8e9bd/consumer-secret +1 -0
  81. data/server/instances/1/notifications/1d41ebf5e52bf039b3c3873fddb8e9bd/producer-secret +1 -0
  82. data/server/instances/1/notifications/1d41ebf5e52bf039b3c3873fddb8e9bd/subscription.xml +27 -0
  83. data/server/instances/1/notifications/66ad546f13c6c7c84f36215c24dd2e6e/consumer-secret +1 -0
  84. data/server/instances/1/notifications/66ad546f13c6c7c84f36215c24dd2e6e/producer-secret +1 -0
  85. data/server/instances/1/notifications/66ad546f13c6c7c84f36215c24dd2e6e/subscription.xml +27 -0
  86. data/server/instances/1/notifications/9f23b768395a19cc1dd6c2d2a243c78e/consumer-secret +1 -0
  87. data/server/instances/1/notifications/9f23b768395a19cc1dd6c2d2a243c78e/producer-secret +1 -0
  88. data/server/instances/1/notifications/9f23b768395a19cc1dd6c2d2a243c78e/subscription.xml +27 -0
  89. data/server/instances/1/notifications/fa690a88cc565dfa53b13ced355cd039/consumer-secret +1 -0
  90. data/server/instances/1/notifications/fa690a88cc565dfa53b13ced355cd039/producer-secret +1 -0
  91. data/server/instances/1/notifications/fa690a88cc565dfa53b13ced355cd039/subscription.xml +5 -0
  92. data/server/instances/1/properties.xml +522 -0
  93. data/server/instances/10/notifications/0867c4a937f882af259137e36d331261/consumer-secret +1 -0
  94. data/server/instances/10/notifications/0867c4a937f882af259137e36d331261/producer-secret +1 -0
  95. data/server/instances/10/notifications/0867c4a937f882af259137e36d331261/subscription.xml +27 -0
  96. data/server/instances/10/notifications/28acb605c56588ec8e47431c1fcf0b20/consumer-secret +1 -0
  97. data/server/instances/10/notifications/28acb605c56588ec8e47431c1fcf0b20/producer-secret +1 -0
  98. data/server/instances/10/notifications/28acb605c56588ec8e47431c1fcf0b20/subscription.xml +27 -0
  99. data/server/instances/10/notifications/31d3f699def1d1e86dc18ef421f718ad/consumer-secret +1 -0
  100. data/server/instances/10/notifications/31d3f699def1d1e86dc18ef421f718ad/producer-secret +1 -0
  101. data/server/instances/10/notifications/31d3f699def1d1e86dc18ef421f718ad/subscription.xml +27 -0
  102. data/server/instances/10/notifications/380b57220000c45342fc56a1ed8e9e3f/consumer-secret +1 -0
  103. data/server/instances/10/notifications/380b57220000c45342fc56a1ed8e9e3f/producer-secret +1 -0
  104. data/server/instances/10/notifications/380b57220000c45342fc56a1ed8e9e3f/subscription.xml +27 -0
  105. data/server/instances/10/notifications/41eeb5d90b513781fb4b440cb97ca7f1/consumer-secret +1 -0
  106. data/server/instances/10/notifications/41eeb5d90b513781fb4b440cb97ca7f1/producer-secret +1 -0
  107. data/server/instances/10/notifications/41eeb5d90b513781fb4b440cb97ca7f1/subscription.xml +27 -0
  108. data/server/instances/10/notifications/4d8c1b3a8dfdacac98144fad072c46d8/consumer-secret +1 -0
  109. data/server/instances/10/notifications/4d8c1b3a8dfdacac98144fad072c46d8/producer-secret +1 -0
  110. data/server/instances/10/notifications/4d8c1b3a8dfdacac98144fad072c46d8/subscription.xml +27 -0
  111. data/server/instances/10/notifications/4dde696cfb001e00a7efbd8e86ba227d/consumer-secret +1 -0
  112. data/server/instances/10/notifications/4dde696cfb001e00a7efbd8e86ba227d/producer-secret +1 -0
  113. data/server/instances/10/notifications/4dde696cfb001e00a7efbd8e86ba227d/subscription.xml +27 -0
  114. data/server/instances/10/notifications/4e1c0065dd95f7c175bbccb874f0baea/consumer-secret +1 -0
  115. data/server/instances/10/notifications/4e1c0065dd95f7c175bbccb874f0baea/producer-secret +1 -0
  116. data/server/instances/10/notifications/4e1c0065dd95f7c175bbccb874f0baea/subscription.xml +27 -0
  117. data/server/instances/10/notifications/6198fb7d6a8249f7820e3e57eeefa8af/consumer-secret +1 -0
  118. data/server/instances/10/notifications/6198fb7d6a8249f7820e3e57eeefa8af/producer-secret +1 -0
  119. data/server/instances/10/notifications/6198fb7d6a8249f7820e3e57eeefa8af/subscription.xml +27 -0
  120. data/server/instances/10/notifications/6aeb90da52abc150f0f0135d8ba2dbac/consumer-secret +1 -0
  121. data/server/instances/10/notifications/6aeb90da52abc150f0f0135d8ba2dbac/producer-secret +1 -0
  122. data/server/instances/10/notifications/6aeb90da52abc150f0f0135d8ba2dbac/subscription.xml +27 -0
  123. data/server/instances/10/notifications/6d77f5bac1eb9d6165394b6bfc9b492a/consumer-secret +1 -0
  124. data/server/instances/10/notifications/6d77f5bac1eb9d6165394b6bfc9b492a/producer-secret +1 -0
  125. data/server/instances/10/notifications/6d77f5bac1eb9d6165394b6bfc9b492a/subscription.xml +27 -0
  126. data/server/instances/10/notifications/7092411a6bb6822f651798fdcd3c4787/consumer-secret +1 -0
  127. data/server/instances/10/notifications/7092411a6bb6822f651798fdcd3c4787/producer-secret +1 -0
  128. data/server/instances/10/notifications/7092411a6bb6822f651798fdcd3c4787/subscription.xml +27 -0
  129. data/server/instances/10/notifications/7ab29bbad4122295c05f9e33fd1e0fc3/consumer-secret +1 -0
  130. data/server/instances/10/notifications/7ab29bbad4122295c05f9e33fd1e0fc3/producer-secret +1 -0
  131. data/server/instances/10/notifications/7ab29bbad4122295c05f9e33fd1e0fc3/subscription.xml +27 -0
  132. data/server/instances/10/notifications/7fabcecc57fe0bd27ce50bedaef47bd2/consumer-secret +1 -0
  133. data/server/instances/10/notifications/7fabcecc57fe0bd27ce50bedaef47bd2/producer-secret +1 -0
  134. data/server/instances/10/notifications/7fabcecc57fe0bd27ce50bedaef47bd2/subscription.xml +27 -0
  135. data/server/instances/10/notifications/85760dad8f7abbd73ae1dd44140dabf1/consumer-secret +1 -0
  136. data/server/instances/10/notifications/85760dad8f7abbd73ae1dd44140dabf1/producer-secret +1 -0
  137. data/server/instances/10/notifications/85760dad8f7abbd73ae1dd44140dabf1/subscription.xml +27 -0
  138. data/server/instances/10/notifications/8b9a96d109d44a1fc22858006c0f0e16/consumer-secret +1 -0
  139. data/server/instances/10/notifications/8b9a96d109d44a1fc22858006c0f0e16/producer-secret +1 -0
  140. data/server/instances/10/notifications/8b9a96d109d44a1fc22858006c0f0e16/subscription.xml +27 -0
  141. data/server/instances/10/notifications/9120a477e64d7debae2cda964a9948a0/consumer-secret +1 -0
  142. data/server/instances/10/notifications/9120a477e64d7debae2cda964a9948a0/producer-secret +1 -0
  143. data/server/instances/10/notifications/9120a477e64d7debae2cda964a9948a0/subscription.xml +27 -0
  144. data/server/instances/10/notifications/93c5a5ab72a745c0f9fffe2fe58db205/consumer-secret +1 -0
  145. data/server/instances/10/notifications/93c5a5ab72a745c0f9fffe2fe58db205/producer-secret +1 -0
  146. data/server/instances/10/notifications/93c5a5ab72a745c0f9fffe2fe58db205/subscription.xml +27 -0
  147. data/server/instances/10/notifications/a8db1498388588bddf518878263fd898/consumer-secret +1 -0
  148. data/server/instances/10/notifications/a8db1498388588bddf518878263fd898/producer-secret +1 -0
  149. data/server/instances/10/notifications/a8db1498388588bddf518878263fd898/subscription.xml +27 -0
  150. data/server/instances/10/notifications/b534f057c1c97f65e68f59427958e78d/consumer-secret +1 -0
  151. data/server/instances/10/notifications/b534f057c1c97f65e68f59427958e78d/producer-secret +1 -0
  152. data/server/instances/10/notifications/b534f057c1c97f65e68f59427958e78d/subscription.xml +27 -0
  153. data/server/instances/10/notifications/bb3d69ee3df32f3b5cb69a51d1af8ae4/consumer-secret +1 -0
  154. data/server/instances/10/notifications/bb3d69ee3df32f3b5cb69a51d1af8ae4/producer-secret +1 -0
  155. data/server/instances/10/notifications/bb3d69ee3df32f3b5cb69a51d1af8ae4/subscription.xml +27 -0
  156. data/server/instances/10/notifications/bc597391804363834987804436b8b63b/consumer-secret +1 -0
  157. data/server/instances/10/notifications/bc597391804363834987804436b8b63b/producer-secret +1 -0
  158. data/server/instances/10/notifications/bc597391804363834987804436b8b63b/subscription.xml +27 -0
  159. data/server/instances/10/notifications/bf2f6599eebcd9a08e47bdafd4a67660/consumer-secret +1 -0
  160. data/server/instances/10/notifications/bf2f6599eebcd9a08e47bdafd4a67660/producer-secret +1 -0
  161. data/server/instances/10/notifications/bf2f6599eebcd9a08e47bdafd4a67660/subscription.xml +27 -0
  162. data/server/instances/10/notifications/db9cf0ae80bd61e6124c382b992a1550/consumer-secret +1 -0
  163. data/server/instances/10/notifications/db9cf0ae80bd61e6124c382b992a1550/producer-secret +1 -0
  164. data/server/instances/10/notifications/db9cf0ae80bd61e6124c382b992a1550/subscription.xml +27 -0
  165. data/server/instances/10/notifications/e528089610c991500eb2e8b094f6f169/consumer-secret +1 -0
  166. data/server/instances/10/notifications/e528089610c991500eb2e8b094f6f169/producer-secret +1 -0
  167. data/server/instances/10/notifications/e528089610c991500eb2e8b094f6f169/subscription.xml +27 -0
  168. data/server/instances/10/notifications/e7d3ca382d26b5f5eba00c40c29827da/consumer-secret +1 -0
  169. data/server/instances/10/notifications/e7d3ca382d26b5f5eba00c40c29827da/producer-secret +1 -0
  170. data/server/instances/10/notifications/e7d3ca382d26b5f5eba00c40c29827da/subscription.xml +27 -0
  171. data/server/instances/10/notifications/ebdc914fde6fe299143ae4601c142738/consumer-secret +1 -0
  172. data/server/instances/10/notifications/ebdc914fde6fe299143ae4601c142738/producer-secret +1 -0
  173. data/server/instances/10/notifications/ebdc914fde6fe299143ae4601c142738/subscription.xml +27 -0
  174. data/server/instances/10/notifications/f26b2b9efc10b9259647cf1a2b934694/consumer-secret +1 -0
  175. data/server/instances/10/notifications/f26b2b9efc10b9259647cf1a2b934694/producer-secret +1 -0
  176. data/server/instances/10/notifications/f26b2b9efc10b9259647cf1a2b934694/subscription.xml +27 -0
  177. data/server/instances/10/notifications/f4e1d7808171fe7c5fab4a99145ea185/consumer-secret +1 -0
  178. data/server/instances/10/notifications/f4e1d7808171fe7c5fab4a99145ea185/producer-secret +1 -0
  179. data/server/instances/10/notifications/f4e1d7808171fe7c5fab4a99145ea185/subscription.xml +27 -0
  180. data/server/instances/10/notifications/f7e947a1b4b32f3dad5debd44fc3236b/consumer-secret +1 -0
  181. data/server/instances/10/notifications/f7e947a1b4b32f3dad5debd44fc3236b/producer-secret +1 -0
  182. data/server/instances/10/notifications/f7e947a1b4b32f3dad5debd44fc3236b/subscription.xml +27 -0
  183. data/server/instances/10/notifications/fbf5d0ae050a50e8a2fca6bc60f5b8d6/consumer-secret +1 -0
  184. data/server/instances/10/notifications/fbf5d0ae050a50e8a2fca6bc60f5b8d6/producer-secret +1 -0
  185. data/server/instances/10/notifications/fbf5d0ae050a50e8a2fca6bc60f5b8d6/subscription.xml +27 -0
  186. data/server/instances/10/properties.xml +388 -0
  187. data/server/instances/11/notifications/134c18da209261bc409ccd137b2e46d3/consumer-secret +1 -0
  188. data/server/instances/11/notifications/134c18da209261bc409ccd137b2e46d3/producer-secret +1 -0
  189. data/server/instances/11/notifications/134c18da209261bc409ccd137b2e46d3/subscription.xml +27 -0
  190. data/server/instances/11/notifications/48862f47f66e8229582bc91fbc38a512/consumer-secret +1 -0
  191. data/server/instances/11/notifications/48862f47f66e8229582bc91fbc38a512/producer-secret +1 -0
  192. data/server/instances/11/notifications/48862f47f66e8229582bc91fbc38a512/subscription.xml +5 -0
  193. data/server/instances/11/properties.xml +517 -0
  194. data/server/instances/2/notifications/0bbfabbebf46b850383b4e1d7bd926e3/consumer-secret +1 -0
  195. data/server/instances/2/notifications/0bbfabbebf46b850383b4e1d7bd926e3/producer-secret +1 -0
  196. data/server/instances/2/notifications/0bbfabbebf46b850383b4e1d7bd926e3/subscription.xml +27 -0
  197. data/server/instances/2/notifications/1d426895d19caa1471c713e80cc3c845/consumer-secret +1 -0
  198. data/server/instances/2/notifications/1d426895d19caa1471c713e80cc3c845/producer-secret +1 -0
  199. data/server/instances/2/notifications/1d426895d19caa1471c713e80cc3c845/subscription.xml +27 -0
  200. data/server/instances/2/notifications/292c8983aa798f0c5ced5ddc4b58abe4/consumer-secret +1 -0
  201. data/server/instances/2/notifications/292c8983aa798f0c5ced5ddc4b58abe4/producer-secret +1 -0
  202. data/server/instances/2/notifications/292c8983aa798f0c5ced5ddc4b58abe4/subscription.xml +27 -0
  203. data/server/instances/2/notifications/332c3026c8ad3075b092bd7e7a2b4f71/consumer-secret +1 -0
  204. data/server/instances/2/notifications/332c3026c8ad3075b092bd7e7a2b4f71/producer-secret +1 -0
  205. data/server/instances/2/notifications/332c3026c8ad3075b092bd7e7a2b4f71/subscription.xml +27 -0
  206. data/server/instances/2/notifications/d377446918808d23d03291fc1140883c/consumer-secret +1 -0
  207. data/server/instances/2/notifications/d377446918808d23d03291fc1140883c/producer-secret +1 -0
  208. data/server/instances/2/notifications/d377446918808d23d03291fc1140883c/subscription.xml +27 -0
  209. data/server/instances/2/notifications/d5b65c7cbff5d259e4ee8405190ec558/consumer-secret +1 -0
  210. data/server/instances/2/notifications/d5b65c7cbff5d259e4ee8405190ec558/producer-secret +1 -0
  211. data/server/instances/2/notifications/d5b65c7cbff5d259e4ee8405190ec558/subscription.xml +27 -0
  212. data/server/instances/2/notifications/d7ee4fedabb402dc43986dfa199e6768/consumer-secret +1 -0
  213. data/server/instances/2/notifications/d7ee4fedabb402dc43986dfa199e6768/producer-secret +1 -0
  214. data/server/instances/2/notifications/d7ee4fedabb402dc43986dfa199e6768/subscription.xml +5 -0
  215. data/server/instances/2/properties.xml +517 -0
  216. data/server/instances/3/notifications/27195e2503deaf25b3291394fe97985c/consumer-secret +1 -0
  217. data/server/instances/3/notifications/27195e2503deaf25b3291394fe97985c/producer-secret +1 -0
  218. data/server/instances/3/notifications/27195e2503deaf25b3291394fe97985c/subscription.xml +5 -0
  219. data/server/instances/3/notifications/6cec45935d78709a4aa6622491006f4b/consumer-secret +1 -0
  220. data/server/instances/3/notifications/6cec45935d78709a4aa6622491006f4b/producer-secret +1 -0
  221. data/server/instances/3/notifications/6cec45935d78709a4aa6622491006f4b/subscription.xml +27 -0
  222. data/server/instances/3/notifications/755542b2fb8d0c8fb9add29e012ec707/consumer-secret +1 -0
  223. data/server/instances/3/notifications/755542b2fb8d0c8fb9add29e012ec707/producer-secret +1 -0
  224. data/server/instances/3/notifications/755542b2fb8d0c8fb9add29e012ec707/subscription.xml +27 -0
  225. data/server/instances/3/properties.xml +517 -0
  226. data/server/instances/4/notifications/151e90db818eb5812905257a8eb7cea4/consumer-secret +1 -0
  227. data/server/instances/4/notifications/151e90db818eb5812905257a8eb7cea4/producer-secret +1 -0
  228. data/server/instances/4/notifications/151e90db818eb5812905257a8eb7cea4/subscription.xml +5 -0
  229. data/server/instances/4/notifications/a89df398fcc088c067c39ae3974ec57f/consumer-secret +1 -0
  230. data/server/instances/4/notifications/a89df398fcc088c067c39ae3974ec57f/producer-secret +1 -0
  231. data/server/instances/4/notifications/a89df398fcc088c067c39ae3974ec57f/subscription.xml +27 -0
  232. data/server/instances/4/properties.xml +517 -0
  233. data/server/instances/5/notifications/02ebbf888bd3efd11924f4c416d784e4/consumer-secret +1 -0
  234. data/server/instances/5/notifications/02ebbf888bd3efd11924f4c416d784e4/producer-secret +1 -0
  235. data/server/instances/5/notifications/02ebbf888bd3efd11924f4c416d784e4/subscription.xml +27 -0
  236. data/server/instances/5/notifications/0b9589d847cccf768013b6082893bce6/consumer-secret +1 -0
  237. data/server/instances/5/notifications/0b9589d847cccf768013b6082893bce6/producer-secret +1 -0
  238. data/server/instances/5/notifications/0b9589d847cccf768013b6082893bce6/subscription.xml +5 -0
  239. data/server/instances/5/properties.xml +517 -0
  240. data/server/instances/6/notifications/23da9f5c4548f384d625e6d12b3ebe2d/consumer-secret +1 -0
  241. data/server/instances/6/notifications/23da9f5c4548f384d625e6d12b3ebe2d/producer-secret +1 -0
  242. data/server/instances/6/notifications/23da9f5c4548f384d625e6d12b3ebe2d/subscription.xml +5 -0
  243. data/server/instances/6/notifications/282e7077e9c5b9972413cc92a6dcffc3/consumer-secret +1 -0
  244. data/server/instances/6/notifications/282e7077e9c5b9972413cc92a6dcffc3/producer-secret +1 -0
  245. data/server/instances/6/notifications/282e7077e9c5b9972413cc92a6dcffc3/subscription.xml +27 -0
  246. data/server/instances/6/notifications/7e57d7438db8210766eab6873124dc02/consumer-secret +1 -0
  247. data/server/instances/6/notifications/7e57d7438db8210766eab6873124dc02/producer-secret +1 -0
  248. data/server/instances/6/notifications/7e57d7438db8210766eab6873124dc02/subscription.xml +27 -0
  249. data/server/instances/6/properties.xml +517 -0
  250. data/server/instances/7/notifications/7276b795b5ed2f6638473526d9b1b1e1/consumer-secret +1 -0
  251. data/server/instances/7/notifications/7276b795b5ed2f6638473526d9b1b1e1/producer-secret +1 -0
  252. data/server/instances/7/notifications/7276b795b5ed2f6638473526d9b1b1e1/subscription.xml +27 -0
  253. data/server/instances/7/notifications/f3fbbf27fcbcc02a9f8a614326461a5c/consumer-secret +1 -0
  254. data/server/instances/7/notifications/f3fbbf27fcbcc02a9f8a614326461a5c/producer-secret +1 -0
  255. data/server/instances/7/notifications/f3fbbf27fcbcc02a9f8a614326461a5c/subscription.xml +5 -0
  256. data/server/instances/7/properties.xml +517 -0
  257. data/server/instances/8/notifications/2854ed5a8f97a33d31f908f67544ec62/consumer-secret +1 -0
  258. data/server/instances/8/notifications/2854ed5a8f97a33d31f908f67544ec62/producer-secret +1 -0
  259. data/server/instances/8/notifications/2854ed5a8f97a33d31f908f67544ec62/subscription.xml +27 -0
  260. data/server/instances/8/notifications/595259518a5cb2ce286bb39840f7a64c/consumer-secret +1 -0
  261. data/server/instances/8/notifications/595259518a5cb2ce286bb39840f7a64c/producer-secret +1 -0
  262. data/server/instances/8/notifications/595259518a5cb2ce286bb39840f7a64c/subscription.xml +5 -0
  263. data/server/instances/8/properties.xml +517 -0
  264. data/server/instances/9/notifications/54e96913d66f1dd69ec82d2b52268232/consumer-secret +1 -0
  265. data/server/instances/9/notifications/54e96913d66f1dd69ec82d2b52268232/producer-secret +1 -0
  266. data/server/instances/9/notifications/54e96913d66f1dd69ec82d2b52268232/subscription.xml +5 -0
  267. data/server/instances/9/notifications/5debc1fd138fdc80940cd5647003ed45/consumer-secret +1 -0
  268. data/server/instances/9/notifications/5debc1fd138fdc80940cd5647003ed45/producer-secret +1 -0
  269. data/server/instances/9/notifications/5debc1fd138fdc80940cd5647003ed45/subscription.xml +27 -0
  270. data/server/instances/9/properties.xml +517 -0
  271. data/server/resources/properties.init +351 -0
  272. data/server/resources/properties.schema.active +79 -0
  273. data/server/resources/properties.schema.finished +79 -0
  274. data/server/resources/properties.schema.inactive +79 -0
  275. data/server/resources/topics.xml +55 -0
  276. data/server/server.rb +25 -0
  277. data/server/todo.txt +20 -0
  278. data/test/delete.rb +27 -0
  279. data/test/load.rb +55 -0
  280. data/test/testset.xml +297 -0
  281. metadata +382 -0
@@ -0,0 +1,440 @@
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
+ require 'json'
16
+ require ::File.dirname(__FILE__) + '/handler_properties'
17
+ require ::File.dirname(__FILE__) + '/handler_notifications'
18
+ require ::File.dirname(__FILE__) + '/callback'
19
+ require ::File.dirname(__FILE__) + '/empty_workflow'
20
+
21
+ module CPEE
22
+
23
+ class ValueHelper
24
+ def self::generate(value)
25
+ if [String, Integer, Float, TrueClass, FalseClass, Date].include? value.class
26
+ value.to_s
27
+ elsif [Hash, Array].include? value.class
28
+ JSON::generate(value)
29
+ elsif value.respond_to?(:to_s)
30
+ value.to_s
31
+ end
32
+ end
33
+
34
+ def self::parse(value)
35
+ case value.downcase
36
+ when 'true'
37
+ true
38
+ when 'false'
39
+ false
40
+ when 'nil', 'null'
41
+ nil
42
+ else
43
+ begin
44
+ JSON::parse(value)
45
+ rescue
46
+ (Integer value rescue nil) || (Float value rescue nil) || value.to_s rescue nil || ''
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+
53
+ class Controller
54
+
55
+ def initialize(id,opts)
56
+ @directory = opts[:instances] + "/#{id}/"
57
+ @id = id
58
+ @events = {}
59
+ @votes = {}
60
+ @votes_results = {}
61
+ @communication = {}
62
+ @callbacks = {}
63
+ @instance = EmptyWorkflow.new(self,opts[:url])
64
+ @positions = []
65
+ @thread = nil
66
+ @mutex = Mutex.new
67
+
68
+ @properties = Riddl::Utils::Properties::Backend.new(
69
+ {
70
+ :inactive => opts[:properties_schema_inactive],
71
+ :active => opts[:properties_schema_active],
72
+ :finished => opts[:properties_schema_finished]
73
+ },
74
+ @directory + '/properties.xml',
75
+ opts[:properties_init]
76
+ )
77
+ @notifications = Riddl::Utils::Notifications::Producer::Backend.new(
78
+ opts[:topics],
79
+ @directory + '/notifications/'
80
+ )
81
+
82
+ @notifications.subscriptions.keys.each do |key|
83
+ self.unserialize_notifications!(:cre,key)
84
+ end
85
+ unless ['stopped','ready','finished'].include?(@properties.data.find("string(/p:properties/p:state)"))
86
+ @properties.modify do |doc|
87
+ doc.find("/p:properties/p:state").first.text = 'stopped'
88
+ end
89
+ end
90
+ unserialize_handlerwrapper!
91
+ unserialize_dataelements!
92
+ unserialize_endpoints!
93
+ unserialize_dsl!
94
+ unserialize_positions!
95
+ end
96
+
97
+ attr_reader :id
98
+ attr_reader :properties
99
+ attr_reader :notifications
100
+ attr_reader :callbacks
101
+ attr_reader :mutex
102
+
103
+ def start # {{{
104
+ @thread.join if !@thread.nil? && @thread.alive?
105
+ unless @positions.empty?
106
+ @instance.search(@positions)
107
+ end
108
+ @thread = @instance.start
109
+ end # }}}
110
+
111
+ def stop # {{{
112
+ t = @instance.stop
113
+ t.run
114
+ @callbacks.delete_if do |k,c|
115
+ # only remove vote_callbacks, the other stuff is removed by
116
+ # the instance stopping cleanup
117
+ if c.method == :vote_callback
118
+ c.callback(nil)
119
+ true
120
+ else
121
+ false
122
+ end
123
+ end
124
+ @thread.join if !@thread.nil? && @thread.alive?
125
+ @callback = [] # everything should be empty now
126
+ end # }}}
127
+
128
+ def serialize_dataelements! #{{{
129
+ @properties.modify do |doc|
130
+ node = doc.find("/p:properties/p:dataelements").first
131
+ node.children.delete_all!
132
+ @instance.data.each do |k,v|
133
+ node.add(k.to_s,ValueHelper::generate(v))
134
+ end
135
+ end
136
+ end #}}}
137
+ def serialize_endpoints! #{{{
138
+ @properties.modify do |doc|
139
+ node = doc.find("/p:properties/p:endpoints").first
140
+ node.children.delete_all!
141
+ @instance.endpoints.each do |k,v|
142
+ node.add(k.to_s,v)
143
+ end
144
+ end
145
+ end #}}}
146
+ def serialize_state! # {{{
147
+ @properties.activate_schema(:finished) if @instance.state == :finished
148
+ @properties.activate_schema(:inactive) if @instance.state == :stopped
149
+ @properties.activate_schema(:active) if @instance.state == :running || @instance.state == :stopping
150
+ if [:finished, :stopped].include?(@instance.state)
151
+ @properties.modify do |doc|
152
+ node = doc.find("/p:properties/p:state").first
153
+ node.text = @instance.state
154
+ end
155
+ end
156
+ end # }}}
157
+ def serialize_positions! # {{{
158
+ @properties.modify do |doc|
159
+ pos = doc.find("/p:properties/p:positions").first
160
+ pos.children.delete_all!
161
+ @positions = @instance.positions
162
+ @instance.positions.each do |p|
163
+ pos.add("#{p.position}",[p.detail,p.passthrough].compact.join(';'))
164
+ end
165
+ end
166
+ end # }}}
167
+ def serialize_status! #{{{
168
+ @properties.modify do |doc|
169
+ node = doc.find("/p:properties/p:status/p:id").first
170
+ node.text = @instance.status.id
171
+ node = doc.find("/p:properties/p:status/p:message").first
172
+ node.text = @instance.status.message
173
+ end
174
+ end #}}}
175
+
176
+ def unserialize_notifications!(op,key)# {{{
177
+ case op
178
+ when :del
179
+ @communication.delete(key)
180
+ @events.each do |eve,keys|
181
+ keys.delete_if{|k,v| key == k}
182
+ end
183
+ @votes.each do |eve,keys|
184
+ keys.delete_if do |k,v|
185
+ if key == k
186
+ @callbacks.each{|voteid,cb|cb.delete_if!(eve,k)}
187
+ true
188
+ end
189
+ end
190
+ end
191
+ when :upd
192
+ if File.exists?(@directory + 'notifications/' + key + '/subscription.xml')
193
+ url = @communication[key]
194
+ evs = []
195
+ vos = []
196
+ @events.each { |e,v| evs << e }
197
+ @votes.each { |e,v| vos << e }
198
+ @notifications.subscriptions[key].view do |doc|
199
+ turl = doc.find('string(/n:subscription/@url)')
200
+ url = turl == '' ? url : turl
201
+ @communication[key] = url
202
+ doc.find('/n:subscription/n:topic').each do |t|
203
+ t.find('n:event').each do |e|
204
+ @events["#{t.attributes['id']}/#{e}"] ||= {}
205
+ @events["#{t.attributes['id']}/#{e}"][key] = url
206
+ evs.delete("#{t.attributes['id']}/#{e}")
207
+ end
208
+ t.find('n:vote').each do |e|
209
+ @votes["#{t.attributes['id']}/#{e}"] ||= {}
210
+ @votes["#{t.attributes['id']}/#{e}"][key] = url
211
+ vos.delete("#{t.attributes['id']}/#{e}")
212
+ end
213
+ end
214
+ end
215
+ evs.each { |e| @votes[e].delete(key) }
216
+ vos.each do |e|
217
+ @callbacks.each{|voteid,cb|cb.delete_if!(e,key)}
218
+ @votes[e].delete(key)
219
+ end
220
+ end
221
+ when :cre
222
+ @notifications.subscriptions[key].view do |doc|
223
+ turl = doc.find('string(/n:subscription/@url)')
224
+ url = turl == '' ? nil : turl
225
+ @communication[key] = url
226
+ doc.find('/n:subscription/n:topic').each do |t|
227
+ t.find('n:event').each do |e|
228
+ @events["#{t.attributes['id']}/#{e}"] ||= {}
229
+ @events["#{t.attributes['id']}/#{e}"][key] = (url == "" ? nil : url)
230
+ end
231
+ t.find('n:vote').each do |e|
232
+ @votes["#{t.attributes['id']}/#{e}"] ||= {}
233
+ @votes["#{t.attributes['id']}/#{e}"][key] = url
234
+ end
235
+ end
236
+ end
237
+ end
238
+ end # }}}
239
+
240
+ def unserialize_dataelements! #{{{
241
+ @instance.data.clear
242
+ @properties.data.find("/p:properties/p:dataelements/p:*").each do |e|
243
+ @instance.data[e.qname.to_sym] = ValueHelper::parse(e.text)
244
+ end
245
+ end #}}}
246
+ def unserialize_endpoints! #{{{
247
+ @instance.endpoints.clear
248
+ @properties.data.find("/p:properties/p:endpoints/p:*").each do |e|
249
+ @instance.endpoints[e.qname.to_sym] = e.text
250
+ end
251
+ end #}}}
252
+ def unserialize_state! #{{{
253
+ state = @properties.data.find("string(/p:properties/p:state)")
254
+ if call_vote("properties/state/change", :instance => @id, :newstate => state)
255
+ case state
256
+ when 'stopping'
257
+ stop
258
+ when 'running'
259
+ start
260
+ end
261
+ else
262
+ if node = @properties.data.find("/p:properties/p:state").first
263
+ case state
264
+ when 'stopping'; node.text = 'running'
265
+ when 'running'; node.text = 'stopped'
266
+ end
267
+ end
268
+ end
269
+ end #}}}
270
+ def unserialize_handlerwrapper! #{{{
271
+ hw = nil
272
+ begin
273
+ hw = eval(@properties.data.find("string(/p:properties/p:handlerwrapper)"))
274
+ @instance.handlerwrapper = hw
275
+ rescue => e
276
+ @instance.handlerwrapper = DefaultHandlerWrapper
277
+ end
278
+ if hw != @instance.handlerwrapper
279
+ @properties.modify do |doc|
280
+ node = doc.find("/p:properties/p:handlerwrapper").first
281
+ node.text = @instance.handlerwrapper.to_s
282
+ end
283
+ end
284
+ end #}}}
285
+ def unserialize_positions! #{{{
286
+ @positions = []
287
+ @properties.data.find("/p:properties/p:positions/p:*").each do |e|
288
+ val = e.text.split(';')
289
+ @positions << ::WEEL::Position.new(e.qname.to_s.to_sym,val[0].to_sym,val[1])
290
+ end
291
+ end #}}}
292
+ def unserialize_dsl! #{{{
293
+ @instance.description = @properties.data.find("string(/p:properties/p:dsl)")
294
+ end #}}}
295
+ def unserialize_description! #{{{
296
+ dsl = nil
297
+ @properties.modify do |doc|
298
+ dsl = doc.find("/p:properties/p:dsl").first
299
+ trans = doc.find("/p:properties/p:transformation").first
300
+ desc = doc.find("/p:properties/p:description").first
301
+ if trans.nil?
302
+ dsl.text = desc.to_s
303
+ else
304
+ trans = XML::Smart::string(trans.children.empty? ? trans.to_s : trans.children.first.dump)
305
+ desc = XML::Smart::string(desc.children.empty? ? desc.to_s : desc.children.first.dump)
306
+ dsl.text = desc.transform_with(trans)
307
+ end
308
+ end
309
+ @instance.description = dsl.text
310
+ end #}}}
311
+
312
+ def notify(what,content={})# {{{
313
+ item = @events[what]
314
+ if item
315
+ item.each do |ke,ur|
316
+ Thread.new(ke,ur) do |key,url|
317
+ ev = build_notification(key,what,content,'event')
318
+ if url.class == String
319
+ client = Riddl::Client.new(url)
320
+ client.post ev.map{|k,v|Riddl::Parameter::Simple.new(k,v)} rescue nil
321
+ elsif url.class == Riddl::Utils::Notifications::Producer::WS
322
+ e = XML::Smart::string("<event/>")
323
+ ev.each do |k,v|
324
+ e.root.add(k,v)
325
+ end
326
+ url.send(e.to_s) rescue nil
327
+ end
328
+ end
329
+ end
330
+ end
331
+ end # }}}
332
+
333
+ def call_vote(what,content={})# {{{
334
+ voteid = Digest::MD5.hexdigest(Kernel::rand().to_s)
335
+ item = @votes[what]
336
+ if item && item.length > 0
337
+ continue = WEEL::Continue.new
338
+ @votes_results[voteid] = []
339
+ inum = 0
340
+ item.each do |key,url|
341
+ if url.class == String
342
+ inum += 1
343
+ elsif url.class == Riddl::Utils::Notifications::Producer::WS
344
+ inum += 1 unless url.closed?
345
+ end
346
+ end
347
+
348
+ item.each do |key,url|
349
+
350
+ Thread.new(key,url,content.dup) do |k,u,c|
351
+ callback = Digest::MD5.hexdigest(Kernel::rand().to_s)
352
+ c['callback'] = callback
353
+ notf = build_notification(k,what,c,'vote')
354
+ if u.class == String
355
+ client = Riddl::Client.new(u)
356
+ params = notf.map{|ke,va|Riddl::Parameter::Simple.new(ke,va)}
357
+ params << Riddl::Header.new("CPEE-Callback",callback)
358
+ @mutex.synchronize do
359
+ status, result, headers = client.post params
360
+ if headers["CPEE_CALLBACK"] && headers["CPEE_CALLBACK"] == 'true'
361
+ @callbacks[callback] = Callback.new("vote #{notf.find{|a,b| a == 'notification'}[1]}", self, :vote_callback, what, k, :http, continue, voteid, callback, inum)
362
+ else
363
+ vote_callback(result,continue,voteid,callback, inum)
364
+ end
365
+ end
366
+ elsif u.class == Riddl::Utils::Notifications::Producer::WS
367
+ @callbacks[callback] = Callback.new("vote #{notf.find{|a,b| a == 'notification'}[1]}", self, :vote_callback, what, k, :ws, continue, voteid, callback, inum)
368
+ e = XML::Smart::string("<vote/>")
369
+ notf.each do |ke,va|
370
+ e.root.add(ke,va)
371
+ end
372
+ u.send(e.to_s)
373
+ end
374
+ end
375
+
376
+ end
377
+ continue.wait
378
+
379
+ !@votes_results.delete(voteid).include?(false)
380
+ else
381
+ true
382
+ end
383
+ end # }}}
384
+
385
+ def vote_callback(result,continue,voteid,callback,num)# {{{
386
+ @callbacks.delete(callback)
387
+ if result == :DELETE
388
+ @votes_results[voteid] << true
389
+ else
390
+ @votes_results[voteid] << (result && result[0] && result[0].value == 'true')
391
+ end
392
+ if (num == @votes_results[voteid].length)
393
+ continue.continue
394
+ end
395
+ end # }}}
396
+
397
+ def add_ws(key,socket)# {{{
398
+ @communication[key] = socket
399
+ @events.each do |a|
400
+ if a[1].has_key?(key)
401
+ a[1][key] = socket
402
+ end
403
+ end
404
+ @votes.each do |a|
405
+ if a[1].has_key?(key)
406
+ a[1][key] = socket
407
+ end
408
+ end
409
+ end # }}}
410
+
411
+ def del_ws(key)# {{{
412
+ @communication[key] = nil
413
+ @events.each do |a|
414
+ if a[1].has_key?(key)
415
+ a[1][key] = nil
416
+ end
417
+ end
418
+ @votes.each do |a|
419
+ if a[1].has_key?(key)
420
+ a[1][key] = nil
421
+ end
422
+ end
423
+ end # }}}
424
+
425
+ private
426
+
427
+ def build_notification(key,what,content,type)# {{{
428
+ res = []
429
+ res << ['key' , key]
430
+ res << ['topic' , ::File::dirname(what)]
431
+ res << [type , ::File::basename(what)]
432
+ res << ['notification', ValueHelper::generate(content)]
433
+ res << ['uid' , Digest::MD5.hexdigest(Kernel::rand().to_s)]
434
+ res << ['fp' , Digest::MD5.hexdigest(res.join(''))]
435
+ # TODO add secret to fp
436
+ end # }}}
437
+
438
+ end
439
+
440
+ end
@@ -0,0 +1,24 @@
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
+ require 'weel'
16
+ require ::File.dirname(__FILE__) + '/../../server/handlerwrappers/default'
17
+
18
+ class EmptyWorkflow < WEEL
19
+ handlerwrapper DefaultHandlerWrapper
20
+
21
+ control flow do
22
+ # control flow will be set externally
23
+ end
24
+ end