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,84 @@
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
+ <html>
18
+ <head>
19
+ <title>WfAdaptor Demo</title>
20
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
21
+ <script type="text/javascript" src="../jquery.min.js"></script>
22
+ <script type="text/javascript" src="../jquery.svgdom.js"></script>
23
+ <script type="text/javascript" src="../underscore.min.js"></script>
24
+ <script type="text/javascript" src="../contextmenu.js"></script>
25
+ <script type="text/javascript" src="../wfadaptor.js"></script>
26
+ <script type="text/javascript" src="../../js/wfadaptor.cpee.js"></script>
27
+ <link rel="stylesheet" href="../wfadaptor.css" type="text/css"/>
28
+ <link rel="stylesheet" href="../contextmenu.css" type="text/css"/>
29
+ <script type="text/javascript">
30
+ var adaptor = null;
31
+ function click_update_graph() {
32
+ console.log("Demo: Graph Update");
33
+ var then = new Date();
34
+ adaptor.set_description($('#description').val());
35
+ $('#t_new').text((new Date()).getTime() - then.getTime() + 'ms');
36
+ }
37
+ function update_event() {
38
+ console.log("Demo: update notification");
39
+ $('#description').val(adaptor.get_description);
40
+
41
+ }
42
+ </script>
43
+ </head>
44
+ <body>
45
+ <table style="background: ThreeDShadow; width: 100%; height: 100%;" border="0">
46
+ <tr>
47
+ <td style="text-align:center; vertical-align:middle"><button type="button" onclick="click_update_graph();">Update Graph &gt;&gt;&gt; </button></td>
48
+ <td style="text-align:center; vertical-align:middle" colspan="2"><b><font size="+2">Workflow Graph</font></b></td>
49
+ </tr>
50
+ <tr height="95%">
51
+ <td width="40%" style="vertical-align:middle; text-align:center"><!-- {{{ -->
52
+ <textarea style="width:98%;height:98%" id="description">
53
+ <description xmlns="http://cpee.org/ns/description/1.0">
54
+ <call/>
55
+ <choose>
56
+ <alternative>
57
+ <call/>
58
+ </alternative>
59
+ <alternative>
60
+ <call/>
61
+ </alternative>
62
+ </choose>
63
+ </description>
64
+ </textarea>
65
+ </td><!-- }}} -->
66
+ <td style="vertical-align: top"><!-- {{{ -->
67
+ <h3>New Graph Version -> Built-Time:<span id="t_new">00</span></h3>
68
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="600" width="300" xmlns:xlink="http://www.w3.org/1999/xlink" id="drawing_area">
69
+ </svg>
70
+ </td><!-- }}} -->
71
+ </tr>
72
+ </table>
73
+ <script type="text/javascript">
74
+ var then = new Date();
75
+ adaptor = new WfAdaptor();
76
+ create_cpee_elements(adaptor);
77
+ adaptor.set_svg_container($('#drawing_area'));
78
+ adaptor.set_description($('#description').val(), true);
79
+ $('#t_new').text((new Date()).getTime() - then.getTime() + 'ms');
80
+ adaptor.notify = update_event;
81
+ //console.log(adaptor.get_description());
82
+ </script>
83
+ </body>
84
+ </html>
@@ -0,0 +1,54 @@
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
+ <html>
18
+ <head>
19
+ <title>Documentation: WfAdaptor</title>
20
+ </head>
21
+ <body>
22
+ <h1>Content</h1>
23
+ <!-- {{{ -->
24
+ <ol>
25
+ <li><a href="#classes">Classes</a>
26
+ <ol style="list-style-type: lower-alpha;">
27
+ <li><a href="#adaptor">WfAdaptor</a></li>
28
+ <li><a href="#description">WfDescription</a></li>
29
+ <li><a href="#illustrator">WfIllustrator</a></li>
30
+ </ol>
31
+ </li>
32
+ <li><a target="_blank" href="demo1.html">Demo: comprehensive description</a>
33
+ <li><a target="_blank" href="demo2.html">Demo: workflow adaption</a>
34
+ </li>
35
+ </ol>
36
+ <!-- }}} -->
37
+ <h1>Classes</h1>
38
+ <!-- {{{ -->
39
+ <a name="classes">
40
+ <!-- }}} -->
41
+ <h2>WfAdaptor</h2>
42
+ <!-- {{{ -->
43
+ <a name="adaptor">
44
+ <!-- }}} -->
45
+ <h2>WfDescription</h2>
46
+ <!-- {{{ -->
47
+ <a name="description">
48
+ <!-- }}} -->
49
+ <h2>WfIllustrator</h2>
50
+ <!-- {{{ -->
51
+ <a name="illustrator">
52
+ <!-- }}} -->
53
+ </body>
54
+ </html>
@@ -0,0 +1,217 @@
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
+ /* Browser Bug, set textarea explicitly */
18
+ svg {
19
+ fill: #DDDDDD;
20
+ fill-opacity:1;
21
+ display:inline;
22
+ margin:0;
23
+ padding:0;
24
+ }
25
+
26
+ svg rect.group {
27
+ fill: Highlight;
28
+ fill-opacity: 0.2;
29
+ }
30
+ svg .clickable { cursor: pointer; }
31
+
32
+ svg g.passive .rfill {
33
+ fill: #729fcf;
34
+ fill-opacity:1;
35
+ }
36
+ svg g.active .rfill {
37
+ fill: #ef2929;
38
+ fill-opacity:1;
39
+ }
40
+ svg g.vote .rfill {
41
+ fill: #8ae234;
42
+ fill-opacity:1;
43
+ }
44
+
45
+ svg line.ourline, svg path.ourline {
46
+ stroke-opacity:1;
47
+ stroke:#000000;
48
+ stroke-width: 2;
49
+ fill: none;
50
+ }
51
+ svg rect.block {
52
+ stroke-width: 1;
53
+ stroke-dasharray: 3,5;
54
+ stroke: #000000;
55
+ fill: none;
56
+ }
57
+ svg rect.tile {
58
+ stroke-width: 1;
59
+ stroke-dasharray: 3,5;
60
+ fill: Highlight;
61
+ fill-opacity: 0.3;
62
+ display: none;
63
+ }
64
+ svg .stand {
65
+ fill:#ffffff;
66
+ fill-opacity:1;
67
+ stroke:#000000;
68
+ stroke-width:2.06896567;
69
+ stroke-linecap:round;
70
+ stroke-linejoin:round;
71
+ stroke-miterlimit:4;
72
+ stroke-opacity:1;
73
+ stroke-dasharray:none;
74
+ }
75
+ svg .black {
76
+ fill:#000000;
77
+ fill-opacity:1;
78
+ stroke:#000000;
79
+ stroke-width:2.06896567;
80
+ stroke-linecap:round;
81
+ stroke-linejoin:round;
82
+ stroke-miterlimit:4;
83
+ stroke-opacity:1;
84
+ stroke-dasharray:none;
85
+ }
86
+
87
+ svg .unknown {
88
+ fill:#FF0000;
89
+ fill-opacity:1;
90
+ stroke:#000000;
91
+ stroke-width:2.06896567;
92
+ stroke-linecap:round;
93
+ stroke-linejoin:round;
94
+ stroke-miterlimit:4;
95
+ stroke-opacity:1;
96
+ stroke-dasharray:none;
97
+ }
98
+
99
+ svg .gen {
100
+ fill:ButtonFace;
101
+ fill-opacity:1;
102
+ stroke-opacity:0.7;
103
+ stroke:#000000;
104
+ stroke-width:2.06896567;
105
+ stroke-linecap:round;
106
+ stroke-linejoin:round;
107
+ stroke-miterlimit:4;
108
+ stroke-opacity:1;
109
+ stroke-dasharray:none;
110
+ }
111
+ svg .standwithout {
112
+ fill:#ffffff;
113
+ fill-opacity:1;
114
+ }
115
+ svg text.normal {
116
+ font-size:20px;
117
+ font-style:normal;
118
+ font-variant:normal;
119
+ font-weight:bold;
120
+ font-stretch:normal;
121
+ text-align:center;
122
+ line-height:125%;
123
+ writing-mode:lr-tb;
124
+ text-anchor:middle;
125
+ color:#000000;
126
+ fill:#000000;
127
+ fill-opacity:1;
128
+ stroke:none;
129
+ font-family:Arial;
130
+ }
131
+ svg text.inverted {
132
+ font-size:20px;
133
+ font-style:normal;
134
+ font-variant:normal;
135
+ font-weight:bold;
136
+ font-stretch:normal;
137
+ text-align:center;
138
+ line-height:125%;
139
+ writing-mode:lr-tb;
140
+ text-anchor:middle;
141
+ color:#ffffff;
142
+ fill:#ffffff;
143
+ fill-opacity:1;
144
+ stroke:none;
145
+ font-family:Arial;
146
+ }
147
+
148
+ svg text.super {
149
+ font-size:11px;
150
+ font-style:normal;
151
+ font-variant:normal;
152
+ font-weight:bold;
153
+ font-stretch:normal;
154
+ text-align:center;
155
+ line-height:100%;
156
+ writing-mode:lr-tb;
157
+ text-anchor:start;
158
+ color:#000000;
159
+ fill:#000000;
160
+ fill-opacity:1;
161
+ stroke:none;
162
+ font-family:Arial;
163
+ }
164
+ svg tspan.active {
165
+ fill:#cc0000;
166
+ display: none;
167
+ }
168
+ svg tspan.vote {
169
+ fill:#73d216;
170
+ display: none;
171
+ }
172
+ svg tspan.colon {
173
+ display: none;
174
+ }
175
+ svg tspan.necessary {
176
+ display: inline;
177
+ }
178
+
179
+ svg text.normallarge {
180
+ font-size:25px;
181
+ font-style:normal;
182
+ font-variant:normal;
183
+ font-weight:bold;
184
+ font-stretch:normal;
185
+ text-align:center;
186
+ line-height:125%;
187
+ writing-mode:lr-tb;
188
+ text-anchor:middle;
189
+ color:#000000;
190
+ fill:#000000;
191
+ fill-opacity:1;
192
+ stroke:none;
193
+ font-family:Arial;
194
+ }
195
+
196
+ svg text.small {
197
+ font-size:14px;
198
+ font-style:normal;
199
+ font-variant:normal;
200
+ font-weight:bold;
201
+ font-stretch:normal;
202
+ text-align:center;
203
+ line-height:125%;
204
+ writing-mode:lr-tb;
205
+ text-anchor:middle;
206
+ color:#000000;
207
+ fill:#000000;
208
+ fill-opacity:1;
209
+ stroke:none;
210
+ font-family:Arial;
211
+ }
212
+
213
+ #arrow {
214
+ stroke: #000000;
215
+ stroke-width: 2;
216
+ fill: #000000;
217
+ }
@@ -0,0 +1,410 @@
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
+ // TODO: changes in svg-script:
18
+ // 1) drawing frunctions
19
+ // 2) creation of svg-container (Bug: arrows on lines)
20
+ // 3) after-function to insert using namespace of description
21
+
22
+ // WfAdaptor:
23
+ // Handles interaction between Illustartor and Description
24
+ // e.g. Event fires to Adaptor to insert Element and Illustrator and Description do it
25
+ function WfAdaptor(manifesto) { // Controller {{{
26
+
27
+ // public variables {{{
28
+ this.illustrator;
29
+ this.description;
30
+ this.elements = {};
31
+ // }}}
32
+
33
+ // public variables {{{
34
+ var illustrator;
35
+ var description;
36
+ // }}}
37
+
38
+ // helper funtions
39
+ this.set_description = function(desc) { // public {{{
40
+ this.description.set_description(desc);
41
+ } // }}}
42
+ this.get_description = function() { // public {{{
43
+ return description.get_description();
44
+ } // }}}
45
+ this.notify = function() { // public {{{
46
+ } // }}}
47
+ this.set_svg_container = function (container) { // {{{
48
+ illustrator.set_container(container); // TODO: shadowing the container element
49
+ } // }}}
50
+
51
+ // initialze
52
+ this.illustrator = illustrator = new WfIllustrator(this);
53
+ this.description = description = new WfDescription(this, this.illustrator);
54
+
55
+ manifestation = new manifesto(this);
56
+ this.illustrator.noarrow = manifestation.noarrow;
57
+ for(element in manifestation.elements) {
58
+ this.illustrator.elements[element] = manifestation.elements[element].illustrator;
59
+ this.description.elements[element] = manifestation.elements[element].description;
60
+ this.elements[element] = manifestation.elements[element].adaptor;
61
+ }
62
+ } // }}}
63
+
64
+ // WfIllustrator:
65
+ // Is in charge of displaying the Graph. It is further able insert and remove elements with given ID's from the illsutration.
66
+ function WfIllustrator(wf_adaptor) { // View {{{
67
+ // Variable {{{
68
+ // public
69
+ var height = this.height = 40;
70
+ var width = this.width = 40;
71
+ var noarrow = this.noarrow = [];
72
+ var elements = this.elements = {};
73
+ var svg = this.svg = {};
74
+ this.draw = {};
75
+ // private
76
+ var adaptor = null;
77
+ // }}}
78
+ // Generic Functions {{{
79
+ this.set_container = function(con) { // {{{
80
+ svg.container = con;
81
+ svg.container.append($X('<defs xmlns="http://www.w3.org/2000/svg">' +
82
+ '<marker id="arrow" viewBox="0 0 10 10" refX="33" refY="5" orient="auto" markerUnits="strokeWidth" markerWidth="4.5" makerHeight="4.5">' +
83
+ '<path d="m 2 2 l 6 3 l -6 3 z"/>' +
84
+ '</marker>' +
85
+ '</defs>'));
86
+ svg.defs = {};
87
+ svg.defs['unknown'] = $X('<g xmlns="http://www.w3.org/2000/svg" class="unknown">' +
88
+ '<circle cx="15" cy="15" r="14" class="unkown"/>' +
89
+ '<text transform="translate(15,20)" class="normal">?</text>' +
90
+ '</g>');
91
+ for(element in elements)
92
+ if(elements[element].svg() != false) {
93
+ var sym = $X('<g xmlns="http://www.w3.org/2000/svg"/>').append(elements[element].svg().children()); // append all children to symbol
94
+ $.each(elements[element].svg().attr('class').split(/\s+/), function(index, item) { sym.addClass(item); }); // copy all classes from the root node
95
+ svg.defs[element] = sym;
96
+ }
97
+ } // }}}
98
+ var clear = this.clear = function() { // {{{
99
+ $('> :not(defs)', svg.container).each(function() {$(this).remove()});
100
+ } // }}}
101
+ this.set_svg = function(graph) { // {{{
102
+ if(graph.max.row < 1) graph.max.row = 1;
103
+ if(graph.max.col < 1) graph.max.col = 1;
104
+ svg.container.attr({'height': (graph.max.row+0.3)*height, 'width':(graph.max.col+0.65)*width});
105
+ svg.container.append(graph.svg);
106
+ } // }}}
107
+ // }}}
108
+ // Helper Functions {{{
109
+ var draw_symbol = this.draw.draw_symbol = function (sym_name, id, title, row, col, group) { // {{{
110
+ if(elements[sym_name] == undefined || elements[sym_name].svg == undefined) sym_name = 'unknown';
111
+ var g = $X('<g class="element" element-id="' + id + '" transform="translate(' + String((col*width)-((width*0.39))) + ',' + String(row*height-((height*0.74))) + ')" xmlns="http://www.w3.org/2000/svg">' +
112
+ '<text class="super" transform="translate(30,8.4)">' +
113
+ '<tspan class="active">0</tspan>' +
114
+ '<tspan class="colon">,</tspan>' +
115
+ '<tspan class="vote">0</tspan>' +
116
+ '</text>' +
117
+ '</g>');
118
+ var sym = svg.defs[sym_name].clone();
119
+ sym.prepend($X('<title xmlns="http://www.w3.org/2000/svg">' + title + '</title>'));
120
+ sym.attr('class','activities');
121
+ g.append(sym);
122
+
123
+ // Binding events for symbol
124
+ for(event_name in adaptor.elements[sym_name]) {
125
+ sym.bind(event_name, {'function_call':adaptor.elements[sym_name][event_name]}, function(e) { e.data.function_call($(this).parents(':first').attr('element-id'),e)});
126
+ if(event_name == 'mousedown') sym.bind('contextmenu', false);
127
+ }
128
+ if(group) {group.append(g);}
129
+ else {svg.container.children('g:first').append(g);}
130
+ return g;
131
+ } // }}}
132
+ var draw_border = this.draw.draw_border = function(id, p1, p2, group) { // {{{
133
+ group.prepend($X('<rect element-id="' + id + '" x="' + (p1.col-0.50)*width + '" ' +
134
+ 'y="' + (p1.row-0.80)*height + '" ' +
135
+ 'width="' + ((p2.col+1.00)-p1.col)*width + '" ' +
136
+ 'height="' + ((p2.row+1.00)-p1.row)*height +'" ' +
137
+ 'class="block" rx="15" ry="15" xmlns="http://www.w3.org/2000/svg"/>'));
138
+ } // }}}
139
+ var draw_tile = this.draw.draw_tile = function(id, p1, p2, group) { // {{{
140
+ group.prepend($X('<rect element-id="' + id + '" x="' + (p1.col-0.50)*width + '" ' +
141
+ 'y="' + (p1.row-0.80)*height + '" ' +
142
+ 'width="' + ((p2.col+1.00)-p1.col)*width + '" ' +
143
+ 'height="' + ((p2.row+1.00)-p1.row)*height +'" ' +
144
+ 'class="tile" rx="15" ry="15" xmlns="http://www.w3.org/2000/svg"/>'));
145
+ } // }}}
146
+ var draw_connection = this.draw.draw_connection = function(group, start, end, max_line, num_lines, arrow) { // {{{
147
+ if(((end['row']-start['row']) == 0) && ((end['col']-start['col']) == 0)) return;
148
+ var line;
149
+ if (arrow)
150
+ line = $X('<path xmlns="http://www.w3.org/2000/svg" class="ourline" marker-end="url(#arrow)"/>');
151
+ else
152
+ line = $X('<path xmlns="http://www.w3.org/2000/svg" class="ourline"/>');
153
+ if (end['row']-start['row'] == 0 || end['col']-start['col'] == 0) { // straight line
154
+ line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
155
+ String(end['col']*width) + "," + String(end['row']*height-15)
156
+ );
157
+ } else if (end['row']-start['row'] > 0) { // downwards
158
+ if (end['col']-start['col'] > 0) {// left - right
159
+ line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
160
+ String(start['col']*width+14) + "," + String((end['row']-1)*height) +" "+ // first turn of hotizontal-line going away from node
161
+ String(end['col']*width) + "," + String((end['row']-1)*height) +" "+
162
+ String(end['col']*width) + "," + String(end['row']*height-15)
163
+ );
164
+ } else { // right - left
165
+ line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
166
+ String(start['col']*width) + "," + String(end['row']*height-35) +" "+
167
+ String(end['col']*width+14) + "," + String(end['row']*height-35) +" "+ // last turn of horizontal-line going into the node
168
+ String(end['col']*width) + "," + String(end['row']*height-15)
169
+ );
170
+ }
171
+ } else if(end['row']-start['row'] < 0) { // upwards
172
+ if(num_lines > 1) {// ??? no idea
173
+ line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
174
+ String(start['col']*width) + "," + String((max_line-1)*height+5) +" "+
175
+ String(end['col']*width+20) + "," + String((max_line-1)*height+5) +" "+
176
+ String(end['col']*width+20) + "," + String(end['row']*height+25)+" "+
177
+ String(end['col']*width) + "," + String(end['row']*height-15)
178
+ );
179
+ } else {
180
+ line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
181
+ String(end['col']*width+20) + "," + String(start['row']*height-15) +" "+
182
+ String(end['col']*width+20) + "," + String(end['row']*height+25)+" "+
183
+ String(end['col']*width) + "," + String(end['row']*height-15)
184
+ );
185
+ }
186
+ }
187
+ // Seems to solve injection groups-line problem, but I guess it will caus problem when collapsing elements
188
+ //if(group) {group.prepend(line);}
189
+ //else
190
+ {svg.container.append(line);}
191
+ } // }}}
192
+ // }}}
193
+ // Initialize {{{
194
+ adaptor = wf_adaptor;
195
+ // }}}
196
+ } // }}}
197
+
198
+ // WfDescription:
199
+ // Manages the description. Is is further able to add/remove elements from the controlflow description.
200
+ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
201
+ // public variables
202
+ var elements = this.elements = {};
203
+ // private variables
204
+ var adaptor;
205
+ var illustrator;
206
+ var description;
207
+ var id_counter = {};
208
+ var update_illustrator = true;
209
+
210
+ // Generic Functions {{{
211
+ this.set_description = function(desc, auto_update) { // public {{{
212
+ if(auto_update != undefined) update_illustrator = auto_update;
213
+ if(typeof desc == "string") {
214
+ description = $($.parseXML(desc));
215
+ } else if(desc instanceof jQuery) {
216
+ description = desc;
217
+ } else {
218
+ alert("WfDescription: unknown description type:\nConstructor-Name: " + desc.constructor + " / TypeOf: " + (typeof desc));
219
+ description = null;
220
+ }
221
+ id_counter = {};
222
+ illustrator.clear();
223
+ var graph = parse(description.children('description').get(0), {'row':0,'col':0});
224
+ illustrator.set_svg(graph);
225
+ } // }}}
226
+ var gd = this.get_description = function() { // public {{{
227
+ var serxml = $(description.get(0).documentElement).clone(true);
228
+ serxml.removeAttr('svg-id');
229
+ $('*[svg-id]',serxml).each(function(){
230
+ $(this).removeAttr('svg-id');
231
+ });
232
+ return serxml.serializeXML();
233
+ } // }}}
234
+ this.get_node_by_svg_id = function(svg_id) { // {{{
235
+ return $('[svg-id = \'' + svg_id + '\']', description);
236
+ } // }}}
237
+ this.get_free_id = function() { // {{{
238
+ var existing = new Array();
239
+ $('*[id]', description).each(function(){existing.push($(this).attr('id'))});
240
+ var id = 1;
241
+ while ($.inArray('a' + id,existing) != -1) {
242
+ id += 1;
243
+ }
244
+ return 'a' + id;
245
+ } // }}}
246
+ var update = this.update = function(svgid) { // {{{
247
+ id_counter = {};
248
+ if(update_illustrator){
249
+ illustrator.clear();
250
+ var graph = parse(description.children('description').get(0), {'row':0,'col':0});
251
+ illustrator.set_svg(graph);
252
+ }
253
+ var newn = $('*[new=true]',description);
254
+ newn.removeAttr('new');
255
+
256
+ if (newn.attr('svg-id') != undefined)
257
+ adaptor.notify(newn.attr('svg-id'));
258
+ else if (svgid != undefined)
259
+ adaptor.notify(svgid);
260
+ else
261
+ console.info('Something went horribly wrong');
262
+ } // }}}
263
+ // }}}
264
+ // Adaption functions {{{
265
+ this.insert_after = function(new_node, target) { // {{{
266
+ var nn;
267
+ if(typeof(new_node) == 'function') {nn = new_node(target);}
268
+ else {nn = new_node;}
269
+ target.after(nn);
270
+ nn.attr('new','true');
271
+ update();
272
+ } // }}}
273
+ this.insert_first_into = function(new_node, target, selector) { // {{{
274
+ var nn;
275
+ if(typeof(new_node) == 'function') {nn = new_node(target);}
276
+ else {nn = new_node;}
277
+ target.prepend(nn);
278
+ nn.attr('new','true');
279
+ update();
280
+ } // }}}
281
+ this.insert_last_into = function(new_node, target, selector) { // {{{
282
+ var nn;
283
+ if(typeof(new_node) == 'function') {nn = new_node(target);}
284
+ else {nn = new_node;}
285
+ target.append(nn);
286
+ nn.attr('new','true');
287
+ update();
288
+ } // }}}
289
+ this.remove = function(selector, target) {//{{{
290
+ var svgid;
291
+ if(selector == undefined) {
292
+ svgid = target.attr('svg-id');
293
+ target.remove()
294
+ } else {
295
+ svgid = $(selector, target).attr('svg-id');
296
+ $(selector, target).remove();
297
+ }
298
+ update(svgid);
299
+ }
300
+ // }}}
301
+ // }}}
302
+ // Helper Functions {{{
303
+ var parse = function(root, parent_pos) { // private {{{
304
+ var pos = jQuery.extend(true, {}, parent_pos);
305
+ var max = {'row': 0,'col': 0};
306
+ var prev = [parent_pos]; // connects parent with child(s), depending on the expansion
307
+ var endnodes = [];
308
+ var root_expansion = illustrator.elements[root.tagName].expansion(root);
309
+ var block = {'max':{}}; // e.g. {'max':{'row':0,'col':0}, 'endpoints':[]};
310
+ var collapsed = false;
311
+
312
+ var group = $X('<g class="group" xmlns="http://www.w3.org/2000/svg"/>');
313
+
314
+ if(root_expansion == 'horizontal') pos.row++;
315
+ if(illustrator.elements[root.tagName].col_shift(root) == true && root_expansion != 'horizontal') pos.col++;
316
+
317
+ if(root.tagName == 'description') { // First parsing {{{
318
+ pos.row++;
319
+ max.row++;
320
+ $(root).attr('svg-id','description');
321
+ group.attr('element-id','group-description');
322
+ illustrator.draw.draw_symbol('start', 'description', 'START', pos.row, pos.col, group);
323
+ } // }}}
324
+
325
+ $(root).children().each(function() {
326
+ // Set SVG-ID {{{
327
+ if($(this).attr('id') == undefined) {
328
+ if(id_counter[this.tagName] == undefined) id_counter[this.tagName] = -1;
329
+ $(this).attr('svg-id', this.tagName + '_' + (++id_counter[this.tagName]));
330
+ $(this).attr('svg-label', '');
331
+ } else {
332
+ $(this).attr('svg-id', $(this).attr('id'));
333
+ if ($(this).children('parameters').length > 0) {
334
+ $(this).attr('svg-label', $('label',$(this).children('parameters')).text());
335
+ } else {
336
+ $(this).attr('svg-label', '');
337
+ }
338
+ } // }}}
339
+ // Calculate next position {{{
340
+ if($(this).attr('collapsed') == undefined || $(this).attr('collapsed') == 'false') { collapsed = false; }
341
+ else { collapsed = true; }
342
+ if(root_expansion == 'vertical') pos.row++;
343
+ if(root_expansion == 'horizontal') pos.col++;
344
+ if(illustrator.elements[this.tagName] != undefined && illustrator.elements[this.tagName].type == 'complex' && !collapsed) {
345
+ if(illustrator.elements[this.tagName] != undefined && !illustrator.elements[this.tagName].svg()) pos.row--;
346
+ // TODO: Remaining problem is the order insode the svg. Thats why the connection is above the icon
347
+ block = parse(this, jQuery.extend(true, {}, pos));
348
+ group.append(block.svg);
349
+ block.svg.attr('id', 'group-' + $(this).attr('svg-id'));
350
+ if(illustrator.elements[this.tagName].endnodes == 'aggregate') endnodes = []; // resets endpoints e.g. potential preceding primitive
351
+ } else {
352
+ if(illustrator.elements[this.tagName] != undefined && illustrator.elements[this.tagName].type == 'primitive' && illustrator.elements[this.tagName].svg()) { // This enables "invisble" elements, by returning false in the SVG function (e.g. constraints)
353
+ block.max.row = pos.row;
354
+ block.max.col = pos.col;
355
+ block.endnodes = (!collapsed ? [pos] : [jQuery.extend(true, {}, pos)]);
356
+ block.svg = group;
357
+ }
358
+ }
359
+ // }}}
360
+ // Draw symbol {{{
361
+ var sym_name = '';
362
+ if(!illustrator.elements[this.tagName]) {sym_name = 'unknown';}
363
+ else if(typeof illustrator.elements[this.tagName].resolve_symbol == 'function') {sym_name = illustrator.elements[this.tagName].resolve_symbol(this);}
364
+ else if(typeof illustrator.elements[this.tagName].resolve_symbol == 'string') {sym_name = illustrator.elements[this.tagName].resolve_symbol;}
365
+ else {sym_name = this.tagName;}
366
+ if((illustrator.elements[this.tagName] && illustrator.elements[this.tagName].svg()) || sym_name == 'unknown') {
367
+ illustrator.draw.draw_symbol(sym_name, $(this).attr('svg-id'), $(this).attr('svg-label'), pos.row, pos.col, block.svg).addClass(illustrator.elements[this.tagName] ? illustrator.elements[this.tagName].type : 'primitive unknown');
368
+ } else { console.log("no icon "+ this.tagName);}
369
+ if(illustrator.elements[this.tagName] && illustrator.elements[this.tagName].border) illustrator.draw.draw_border($(this).attr('svg-id'), pos, block.max, block.svg);
370
+ if(illustrator.elements[this.tagName] && illustrator.elements[this.tagName].type == 'complex') illustrator.draw.draw_tile($(this).attr('svg-id'), pos, block.max, block.svg);
371
+ // }}}
372
+ // Calculate Connection {{{
373
+ if(illustrator.elements[this.tagName] != undefined && illustrator.elements[this.tagName].closeblock) { // Close Block if element e.g. loop
374
+ for(node in block.endnodes) illustrator.draw.draw_connection(group, block.endnodes[node], pos, block.max.row+1, block.endnodes.length, true);
375
+ }
376
+ if(illustrator.elements[this.tagName] != undefined && illustrator.elements[this.tagName].endnodes != 'this') {
377
+ for(i in block.endnodes) endnodes.push(block.endnodes[i]); // collects all endpoints from different childs e.g. alternatives from choose
378
+ } else { endnodes = [jQuery.extend(true, {}, pos)]; } // sets this element as only endpoint (aggreagte)
379
+ if(prev[0].row == 0 || prev[0].col == 0) { // this enforces the connection from description to the first element
380
+ illustrator.draw.draw_connection(group, { row: 1, col: 1 }, pos, null, null, true);
381
+ } else {
382
+ if ($.inArray(this.tagName,noarrow) == -1)
383
+ for(node in prev) illustrator.draw.draw_connection(group, prev[node], pos, null, null, true);
384
+ else
385
+ for(node in prev) illustrator.draw.draw_connection(group, prev[node], pos, null, null, false);
386
+ }
387
+ // }}}
388
+ // Prepare next iteration {{{
389
+ if(root_expansion == 'vertical') { prev = jQuery.extend(true, {}, endnodes); pos.row = block.max.row;} // covers e.g. input's for alternative, parallel_branch, ... everything with horizontal expansion
390
+ if(root_expansion == 'horizontal') pos.col = block.max.col;
391
+ if(max.row < block.max.row) max.row = block.max.row;
392
+ if(max.col < block.max.col) max.col = block.max.col;
393
+ // }}}
394
+ });
395
+
396
+ if($(root).children().length == 0) { // empty complex found
397
+ endnodes = [parent_pos];
398
+ max.row = parent_pos.row;
399
+ max.col = parent_pos.col;
400
+ }
401
+ if(illustrator.elements[root.tagName].endnodes == 'this' && illustrator.elements[root.tagName].closeblock == false) {endnodes = [prev];} // closeblock == false, allows loop to close himselfe
402
+ return {'endnodes': endnodes, 'max':max, 'svg':group};
403
+ } // }}}
404
+ // }}}
405
+
406
+ // Initialze {{{
407
+ adaptor = wf_adaptor;
408
+ illustrator = wf_illustrator;
409
+ // }}}
410
+ } // }}}