cpee 1.3.102

Sign up to get free protection for your applications and to get access to all the features.
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