cpee 1.3.102
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +3 -0
- data/COPYING +165 -0
- data/FEATURES +28 -0
- data/INSTALL +23 -0
- data/README +7 -0
- data/Rakefile +28 -0
- data/cockpit/contrib/symbols.svg +224 -0
- data/cockpit/contrib/transformation1.xsl +264 -0
- data/cockpit/contrib/transformation2.xsl +10 -0
- data/cockpit/css/ui.css +155 -0
- data/cockpit/index.html +241 -0
- data/cockpit/js/details.js +146 -0
- data/cockpit/js/instance.js +927 -0
- data/cockpit/js/parameters.js +66 -0
- data/cockpit/js/ui.js +48 -0
- data/cockpit/js/wfadaptor.cpee.js +1082 -0
- data/cockpit/lib/contextmenu.css +72 -0
- data/cockpit/lib/contextmenu.js +63 -0
- data/cockpit/lib/jquery-ui.custom.min.js +259 -0
- data/cockpit/lib/jquery-ui.custom.min.txt +16 -0
- data/cockpit/lib/jquery.caret.min.js +10 -0
- data/cockpit/lib/jquery.min.js +4 -0
- data/cockpit/lib/jquery.svgdom.js +281 -0
- data/cockpit/lib/parsequery.js +19 -0
- data/cockpit/lib/printf.js +368 -0
- data/cockpit/lib/strftime.min.js +1 -0
- data/cockpit/lib/ui.css +270 -0
- data/cockpit/lib/ui.js +60 -0
- data/cockpit/lib/underscore.min.js +27 -0
- data/cockpit/lib/util.js +53 -0
- data/cockpit/lib/wfadaptor-doc/demo1.html +517 -0
- data/cockpit/lib/wfadaptor-doc/demo2.html +84 -0
- data/cockpit/lib/wfadaptor-doc/index.html +54 -0
- data/cockpit/lib/wfadaptor.css +217 -0
- data/cockpit/lib/wfadaptor.js +410 -0
- data/cockpit/testsets/ADVENTURE Dynamic Order.xml +353 -0
- data/cockpit/testsets/ADVENTURE Main Loop.xml +327 -0
- data/cockpit/testsets/ADVENTURE Order.xml +424 -0
- data/cockpit/testsets/ADVENTURE Performance Test 1.xml +311 -0
- data/cockpit/testsets/ADVENTURE Performance Test 2.xml +297 -0
- data/cockpit/testsets/Concurrent.xml +315 -0
- data/cockpit/testsets/Coopis Testset.xml +346 -0
- data/cockpit/testsets/Endpoints and Data Manipulation.xml +359 -0
- data/cockpit/testsets/ICSOC Testset.xml +354 -0
- data/cockpit/testsets/Linear.xml +328 -0
- data/cockpit/testsets/Mangler 1.xml +352 -0
- data/cockpit/testsets/Mangler 2.xml +372 -0
- data/cockpit/testsets/RESCUE - Book Movie - Local.xml +385 -0
- data/cockpit/testsets/RESCUE - Book Movie.xml +385 -0
- data/cockpit/testsets/RESCUE - Loop-Parallel Injection.xml +393 -0
- data/cockpit/testsets/SOPROMO Test Sonification.xml +356 -0
- data/cockpit/testsets/Syncing P34 1.xml +329 -0
- data/cockpit/testsets/Syncing P34 2.xml +329 -0
- data/cockpit/testsets/Syncing P34 3.xml +329 -0
- data/cockpit/testsets/Syncing P34.xml +329 -0
- data/cockpit/testsets/TEST - Bad Loop.xml +428 -0
- data/cockpit/testsets/TEST - Wrong Positions.xml +470 -0
- data/cockpit/testsets/index.xml +24 -0
- data/contrib/Screenshot at 2011-09-28 02:38:11.png +0 -0
- data/contrib/logo2-small.png +0 -0
- data/contrib/logo2.png +0 -0
- data/contrib/logo2.svg +7610 -0
- data/contrib/logo2a.png +0 -0
- data/contrib/logo2a.svg +367 -0
- data/cpee.gemspec +24 -0
- data/lib/cpee.xml +39 -0
- data/lib/cpee/callback.rb +40 -0
- data/lib/cpee/controller.rb +440 -0
- data/lib/cpee/empty_workflow.rb +24 -0
- data/lib/cpee/handler_notifications.rb +46 -0
- data/lib/cpee/handler_properties.rb +43 -0
- data/lib/cpee/implementation.rb +174 -0
- data/lib/engine.xml +85 -0
- data/lib/engine/callbacks.rng +41 -0
- data/lib/engine/instance-info.rng +41 -0
- data/lib/engine/instances.rng +38 -0
- data/server/handlerwrappers/default.rb +142 -0
- data/server/handlerwrappers/rescue.rb +216 -0
- data/server/handlerwrappers/soap.rb +152 -0
- data/server/instances/1/notifications/1d41ebf5e52bf039b3c3873fddb8e9bd/consumer-secret +1 -0
- data/server/instances/1/notifications/1d41ebf5e52bf039b3c3873fddb8e9bd/producer-secret +1 -0
- data/server/instances/1/notifications/1d41ebf5e52bf039b3c3873fddb8e9bd/subscription.xml +27 -0
- data/server/instances/1/notifications/66ad546f13c6c7c84f36215c24dd2e6e/consumer-secret +1 -0
- data/server/instances/1/notifications/66ad546f13c6c7c84f36215c24dd2e6e/producer-secret +1 -0
- data/server/instances/1/notifications/66ad546f13c6c7c84f36215c24dd2e6e/subscription.xml +27 -0
- data/server/instances/1/notifications/9f23b768395a19cc1dd6c2d2a243c78e/consumer-secret +1 -0
- data/server/instances/1/notifications/9f23b768395a19cc1dd6c2d2a243c78e/producer-secret +1 -0
- data/server/instances/1/notifications/9f23b768395a19cc1dd6c2d2a243c78e/subscription.xml +27 -0
- data/server/instances/1/notifications/fa690a88cc565dfa53b13ced355cd039/consumer-secret +1 -0
- data/server/instances/1/notifications/fa690a88cc565dfa53b13ced355cd039/producer-secret +1 -0
- data/server/instances/1/notifications/fa690a88cc565dfa53b13ced355cd039/subscription.xml +5 -0
- data/server/instances/1/properties.xml +522 -0
- data/server/instances/10/notifications/0867c4a937f882af259137e36d331261/consumer-secret +1 -0
- data/server/instances/10/notifications/0867c4a937f882af259137e36d331261/producer-secret +1 -0
- data/server/instances/10/notifications/0867c4a937f882af259137e36d331261/subscription.xml +27 -0
- data/server/instances/10/notifications/28acb605c56588ec8e47431c1fcf0b20/consumer-secret +1 -0
- data/server/instances/10/notifications/28acb605c56588ec8e47431c1fcf0b20/producer-secret +1 -0
- data/server/instances/10/notifications/28acb605c56588ec8e47431c1fcf0b20/subscription.xml +27 -0
- data/server/instances/10/notifications/31d3f699def1d1e86dc18ef421f718ad/consumer-secret +1 -0
- data/server/instances/10/notifications/31d3f699def1d1e86dc18ef421f718ad/producer-secret +1 -0
- data/server/instances/10/notifications/31d3f699def1d1e86dc18ef421f718ad/subscription.xml +27 -0
- data/server/instances/10/notifications/380b57220000c45342fc56a1ed8e9e3f/consumer-secret +1 -0
- data/server/instances/10/notifications/380b57220000c45342fc56a1ed8e9e3f/producer-secret +1 -0
- data/server/instances/10/notifications/380b57220000c45342fc56a1ed8e9e3f/subscription.xml +27 -0
- data/server/instances/10/notifications/41eeb5d90b513781fb4b440cb97ca7f1/consumer-secret +1 -0
- data/server/instances/10/notifications/41eeb5d90b513781fb4b440cb97ca7f1/producer-secret +1 -0
- data/server/instances/10/notifications/41eeb5d90b513781fb4b440cb97ca7f1/subscription.xml +27 -0
- data/server/instances/10/notifications/4d8c1b3a8dfdacac98144fad072c46d8/consumer-secret +1 -0
- data/server/instances/10/notifications/4d8c1b3a8dfdacac98144fad072c46d8/producer-secret +1 -0
- data/server/instances/10/notifications/4d8c1b3a8dfdacac98144fad072c46d8/subscription.xml +27 -0
- data/server/instances/10/notifications/4dde696cfb001e00a7efbd8e86ba227d/consumer-secret +1 -0
- data/server/instances/10/notifications/4dde696cfb001e00a7efbd8e86ba227d/producer-secret +1 -0
- data/server/instances/10/notifications/4dde696cfb001e00a7efbd8e86ba227d/subscription.xml +27 -0
- data/server/instances/10/notifications/4e1c0065dd95f7c175bbccb874f0baea/consumer-secret +1 -0
- data/server/instances/10/notifications/4e1c0065dd95f7c175bbccb874f0baea/producer-secret +1 -0
- data/server/instances/10/notifications/4e1c0065dd95f7c175bbccb874f0baea/subscription.xml +27 -0
- data/server/instances/10/notifications/6198fb7d6a8249f7820e3e57eeefa8af/consumer-secret +1 -0
- data/server/instances/10/notifications/6198fb7d6a8249f7820e3e57eeefa8af/producer-secret +1 -0
- data/server/instances/10/notifications/6198fb7d6a8249f7820e3e57eeefa8af/subscription.xml +27 -0
- data/server/instances/10/notifications/6aeb90da52abc150f0f0135d8ba2dbac/consumer-secret +1 -0
- data/server/instances/10/notifications/6aeb90da52abc150f0f0135d8ba2dbac/producer-secret +1 -0
- data/server/instances/10/notifications/6aeb90da52abc150f0f0135d8ba2dbac/subscription.xml +27 -0
- data/server/instances/10/notifications/6d77f5bac1eb9d6165394b6bfc9b492a/consumer-secret +1 -0
- data/server/instances/10/notifications/6d77f5bac1eb9d6165394b6bfc9b492a/producer-secret +1 -0
- data/server/instances/10/notifications/6d77f5bac1eb9d6165394b6bfc9b492a/subscription.xml +27 -0
- data/server/instances/10/notifications/7092411a6bb6822f651798fdcd3c4787/consumer-secret +1 -0
- data/server/instances/10/notifications/7092411a6bb6822f651798fdcd3c4787/producer-secret +1 -0
- data/server/instances/10/notifications/7092411a6bb6822f651798fdcd3c4787/subscription.xml +27 -0
- data/server/instances/10/notifications/7ab29bbad4122295c05f9e33fd1e0fc3/consumer-secret +1 -0
- data/server/instances/10/notifications/7ab29bbad4122295c05f9e33fd1e0fc3/producer-secret +1 -0
- data/server/instances/10/notifications/7ab29bbad4122295c05f9e33fd1e0fc3/subscription.xml +27 -0
- data/server/instances/10/notifications/7fabcecc57fe0bd27ce50bedaef47bd2/consumer-secret +1 -0
- data/server/instances/10/notifications/7fabcecc57fe0bd27ce50bedaef47bd2/producer-secret +1 -0
- data/server/instances/10/notifications/7fabcecc57fe0bd27ce50bedaef47bd2/subscription.xml +27 -0
- data/server/instances/10/notifications/85760dad8f7abbd73ae1dd44140dabf1/consumer-secret +1 -0
- data/server/instances/10/notifications/85760dad8f7abbd73ae1dd44140dabf1/producer-secret +1 -0
- data/server/instances/10/notifications/85760dad8f7abbd73ae1dd44140dabf1/subscription.xml +27 -0
- data/server/instances/10/notifications/8b9a96d109d44a1fc22858006c0f0e16/consumer-secret +1 -0
- data/server/instances/10/notifications/8b9a96d109d44a1fc22858006c0f0e16/producer-secret +1 -0
- data/server/instances/10/notifications/8b9a96d109d44a1fc22858006c0f0e16/subscription.xml +27 -0
- data/server/instances/10/notifications/9120a477e64d7debae2cda964a9948a0/consumer-secret +1 -0
- data/server/instances/10/notifications/9120a477e64d7debae2cda964a9948a0/producer-secret +1 -0
- data/server/instances/10/notifications/9120a477e64d7debae2cda964a9948a0/subscription.xml +27 -0
- data/server/instances/10/notifications/93c5a5ab72a745c0f9fffe2fe58db205/consumer-secret +1 -0
- data/server/instances/10/notifications/93c5a5ab72a745c0f9fffe2fe58db205/producer-secret +1 -0
- data/server/instances/10/notifications/93c5a5ab72a745c0f9fffe2fe58db205/subscription.xml +27 -0
- data/server/instances/10/notifications/a8db1498388588bddf518878263fd898/consumer-secret +1 -0
- data/server/instances/10/notifications/a8db1498388588bddf518878263fd898/producer-secret +1 -0
- data/server/instances/10/notifications/a8db1498388588bddf518878263fd898/subscription.xml +27 -0
- data/server/instances/10/notifications/b534f057c1c97f65e68f59427958e78d/consumer-secret +1 -0
- data/server/instances/10/notifications/b534f057c1c97f65e68f59427958e78d/producer-secret +1 -0
- data/server/instances/10/notifications/b534f057c1c97f65e68f59427958e78d/subscription.xml +27 -0
- data/server/instances/10/notifications/bb3d69ee3df32f3b5cb69a51d1af8ae4/consumer-secret +1 -0
- data/server/instances/10/notifications/bb3d69ee3df32f3b5cb69a51d1af8ae4/producer-secret +1 -0
- data/server/instances/10/notifications/bb3d69ee3df32f3b5cb69a51d1af8ae4/subscription.xml +27 -0
- data/server/instances/10/notifications/bc597391804363834987804436b8b63b/consumer-secret +1 -0
- data/server/instances/10/notifications/bc597391804363834987804436b8b63b/producer-secret +1 -0
- data/server/instances/10/notifications/bc597391804363834987804436b8b63b/subscription.xml +27 -0
- data/server/instances/10/notifications/bf2f6599eebcd9a08e47bdafd4a67660/consumer-secret +1 -0
- data/server/instances/10/notifications/bf2f6599eebcd9a08e47bdafd4a67660/producer-secret +1 -0
- data/server/instances/10/notifications/bf2f6599eebcd9a08e47bdafd4a67660/subscription.xml +27 -0
- data/server/instances/10/notifications/db9cf0ae80bd61e6124c382b992a1550/consumer-secret +1 -0
- data/server/instances/10/notifications/db9cf0ae80bd61e6124c382b992a1550/producer-secret +1 -0
- data/server/instances/10/notifications/db9cf0ae80bd61e6124c382b992a1550/subscription.xml +27 -0
- data/server/instances/10/notifications/e528089610c991500eb2e8b094f6f169/consumer-secret +1 -0
- data/server/instances/10/notifications/e528089610c991500eb2e8b094f6f169/producer-secret +1 -0
- data/server/instances/10/notifications/e528089610c991500eb2e8b094f6f169/subscription.xml +27 -0
- data/server/instances/10/notifications/e7d3ca382d26b5f5eba00c40c29827da/consumer-secret +1 -0
- data/server/instances/10/notifications/e7d3ca382d26b5f5eba00c40c29827da/producer-secret +1 -0
- data/server/instances/10/notifications/e7d3ca382d26b5f5eba00c40c29827da/subscription.xml +27 -0
- data/server/instances/10/notifications/ebdc914fde6fe299143ae4601c142738/consumer-secret +1 -0
- data/server/instances/10/notifications/ebdc914fde6fe299143ae4601c142738/producer-secret +1 -0
- data/server/instances/10/notifications/ebdc914fde6fe299143ae4601c142738/subscription.xml +27 -0
- data/server/instances/10/notifications/f26b2b9efc10b9259647cf1a2b934694/consumer-secret +1 -0
- data/server/instances/10/notifications/f26b2b9efc10b9259647cf1a2b934694/producer-secret +1 -0
- data/server/instances/10/notifications/f26b2b9efc10b9259647cf1a2b934694/subscription.xml +27 -0
- data/server/instances/10/notifications/f4e1d7808171fe7c5fab4a99145ea185/consumer-secret +1 -0
- data/server/instances/10/notifications/f4e1d7808171fe7c5fab4a99145ea185/producer-secret +1 -0
- data/server/instances/10/notifications/f4e1d7808171fe7c5fab4a99145ea185/subscription.xml +27 -0
- data/server/instances/10/notifications/f7e947a1b4b32f3dad5debd44fc3236b/consumer-secret +1 -0
- data/server/instances/10/notifications/f7e947a1b4b32f3dad5debd44fc3236b/producer-secret +1 -0
- data/server/instances/10/notifications/f7e947a1b4b32f3dad5debd44fc3236b/subscription.xml +27 -0
- data/server/instances/10/notifications/fbf5d0ae050a50e8a2fca6bc60f5b8d6/consumer-secret +1 -0
- data/server/instances/10/notifications/fbf5d0ae050a50e8a2fca6bc60f5b8d6/producer-secret +1 -0
- data/server/instances/10/notifications/fbf5d0ae050a50e8a2fca6bc60f5b8d6/subscription.xml +27 -0
- data/server/instances/10/properties.xml +388 -0
- data/server/instances/11/notifications/134c18da209261bc409ccd137b2e46d3/consumer-secret +1 -0
- data/server/instances/11/notifications/134c18da209261bc409ccd137b2e46d3/producer-secret +1 -0
- data/server/instances/11/notifications/134c18da209261bc409ccd137b2e46d3/subscription.xml +27 -0
- data/server/instances/11/notifications/48862f47f66e8229582bc91fbc38a512/consumer-secret +1 -0
- data/server/instances/11/notifications/48862f47f66e8229582bc91fbc38a512/producer-secret +1 -0
- data/server/instances/11/notifications/48862f47f66e8229582bc91fbc38a512/subscription.xml +5 -0
- data/server/instances/11/properties.xml +517 -0
- data/server/instances/2/notifications/0bbfabbebf46b850383b4e1d7bd926e3/consumer-secret +1 -0
- data/server/instances/2/notifications/0bbfabbebf46b850383b4e1d7bd926e3/producer-secret +1 -0
- data/server/instances/2/notifications/0bbfabbebf46b850383b4e1d7bd926e3/subscription.xml +27 -0
- data/server/instances/2/notifications/1d426895d19caa1471c713e80cc3c845/consumer-secret +1 -0
- data/server/instances/2/notifications/1d426895d19caa1471c713e80cc3c845/producer-secret +1 -0
- data/server/instances/2/notifications/1d426895d19caa1471c713e80cc3c845/subscription.xml +27 -0
- data/server/instances/2/notifications/292c8983aa798f0c5ced5ddc4b58abe4/consumer-secret +1 -0
- data/server/instances/2/notifications/292c8983aa798f0c5ced5ddc4b58abe4/producer-secret +1 -0
- data/server/instances/2/notifications/292c8983aa798f0c5ced5ddc4b58abe4/subscription.xml +27 -0
- data/server/instances/2/notifications/332c3026c8ad3075b092bd7e7a2b4f71/consumer-secret +1 -0
- data/server/instances/2/notifications/332c3026c8ad3075b092bd7e7a2b4f71/producer-secret +1 -0
- data/server/instances/2/notifications/332c3026c8ad3075b092bd7e7a2b4f71/subscription.xml +27 -0
- data/server/instances/2/notifications/d377446918808d23d03291fc1140883c/consumer-secret +1 -0
- data/server/instances/2/notifications/d377446918808d23d03291fc1140883c/producer-secret +1 -0
- data/server/instances/2/notifications/d377446918808d23d03291fc1140883c/subscription.xml +27 -0
- data/server/instances/2/notifications/d5b65c7cbff5d259e4ee8405190ec558/consumer-secret +1 -0
- data/server/instances/2/notifications/d5b65c7cbff5d259e4ee8405190ec558/producer-secret +1 -0
- data/server/instances/2/notifications/d5b65c7cbff5d259e4ee8405190ec558/subscription.xml +27 -0
- data/server/instances/2/notifications/d7ee4fedabb402dc43986dfa199e6768/consumer-secret +1 -0
- data/server/instances/2/notifications/d7ee4fedabb402dc43986dfa199e6768/producer-secret +1 -0
- data/server/instances/2/notifications/d7ee4fedabb402dc43986dfa199e6768/subscription.xml +5 -0
- data/server/instances/2/properties.xml +517 -0
- data/server/instances/3/notifications/27195e2503deaf25b3291394fe97985c/consumer-secret +1 -0
- data/server/instances/3/notifications/27195e2503deaf25b3291394fe97985c/producer-secret +1 -0
- data/server/instances/3/notifications/27195e2503deaf25b3291394fe97985c/subscription.xml +5 -0
- data/server/instances/3/notifications/6cec45935d78709a4aa6622491006f4b/consumer-secret +1 -0
- data/server/instances/3/notifications/6cec45935d78709a4aa6622491006f4b/producer-secret +1 -0
- data/server/instances/3/notifications/6cec45935d78709a4aa6622491006f4b/subscription.xml +27 -0
- data/server/instances/3/notifications/755542b2fb8d0c8fb9add29e012ec707/consumer-secret +1 -0
- data/server/instances/3/notifications/755542b2fb8d0c8fb9add29e012ec707/producer-secret +1 -0
- data/server/instances/3/notifications/755542b2fb8d0c8fb9add29e012ec707/subscription.xml +27 -0
- data/server/instances/3/properties.xml +517 -0
- data/server/instances/4/notifications/151e90db818eb5812905257a8eb7cea4/consumer-secret +1 -0
- data/server/instances/4/notifications/151e90db818eb5812905257a8eb7cea4/producer-secret +1 -0
- data/server/instances/4/notifications/151e90db818eb5812905257a8eb7cea4/subscription.xml +5 -0
- data/server/instances/4/notifications/a89df398fcc088c067c39ae3974ec57f/consumer-secret +1 -0
- data/server/instances/4/notifications/a89df398fcc088c067c39ae3974ec57f/producer-secret +1 -0
- data/server/instances/4/notifications/a89df398fcc088c067c39ae3974ec57f/subscription.xml +27 -0
- data/server/instances/4/properties.xml +517 -0
- data/server/instances/5/notifications/02ebbf888bd3efd11924f4c416d784e4/consumer-secret +1 -0
- data/server/instances/5/notifications/02ebbf888bd3efd11924f4c416d784e4/producer-secret +1 -0
- data/server/instances/5/notifications/02ebbf888bd3efd11924f4c416d784e4/subscription.xml +27 -0
- data/server/instances/5/notifications/0b9589d847cccf768013b6082893bce6/consumer-secret +1 -0
- data/server/instances/5/notifications/0b9589d847cccf768013b6082893bce6/producer-secret +1 -0
- data/server/instances/5/notifications/0b9589d847cccf768013b6082893bce6/subscription.xml +5 -0
- data/server/instances/5/properties.xml +517 -0
- data/server/instances/6/notifications/23da9f5c4548f384d625e6d12b3ebe2d/consumer-secret +1 -0
- data/server/instances/6/notifications/23da9f5c4548f384d625e6d12b3ebe2d/producer-secret +1 -0
- data/server/instances/6/notifications/23da9f5c4548f384d625e6d12b3ebe2d/subscription.xml +5 -0
- data/server/instances/6/notifications/282e7077e9c5b9972413cc92a6dcffc3/consumer-secret +1 -0
- data/server/instances/6/notifications/282e7077e9c5b9972413cc92a6dcffc3/producer-secret +1 -0
- data/server/instances/6/notifications/282e7077e9c5b9972413cc92a6dcffc3/subscription.xml +27 -0
- data/server/instances/6/notifications/7e57d7438db8210766eab6873124dc02/consumer-secret +1 -0
- data/server/instances/6/notifications/7e57d7438db8210766eab6873124dc02/producer-secret +1 -0
- data/server/instances/6/notifications/7e57d7438db8210766eab6873124dc02/subscription.xml +27 -0
- data/server/instances/6/properties.xml +517 -0
- data/server/instances/7/notifications/7276b795b5ed2f6638473526d9b1b1e1/consumer-secret +1 -0
- data/server/instances/7/notifications/7276b795b5ed2f6638473526d9b1b1e1/producer-secret +1 -0
- data/server/instances/7/notifications/7276b795b5ed2f6638473526d9b1b1e1/subscription.xml +27 -0
- data/server/instances/7/notifications/f3fbbf27fcbcc02a9f8a614326461a5c/consumer-secret +1 -0
- data/server/instances/7/notifications/f3fbbf27fcbcc02a9f8a614326461a5c/producer-secret +1 -0
- data/server/instances/7/notifications/f3fbbf27fcbcc02a9f8a614326461a5c/subscription.xml +5 -0
- data/server/instances/7/properties.xml +517 -0
- data/server/instances/8/notifications/2854ed5a8f97a33d31f908f67544ec62/consumer-secret +1 -0
- data/server/instances/8/notifications/2854ed5a8f97a33d31f908f67544ec62/producer-secret +1 -0
- data/server/instances/8/notifications/2854ed5a8f97a33d31f908f67544ec62/subscription.xml +27 -0
- data/server/instances/8/notifications/595259518a5cb2ce286bb39840f7a64c/consumer-secret +1 -0
- data/server/instances/8/notifications/595259518a5cb2ce286bb39840f7a64c/producer-secret +1 -0
- data/server/instances/8/notifications/595259518a5cb2ce286bb39840f7a64c/subscription.xml +5 -0
- data/server/instances/8/properties.xml +517 -0
- data/server/instances/9/notifications/54e96913d66f1dd69ec82d2b52268232/consumer-secret +1 -0
- data/server/instances/9/notifications/54e96913d66f1dd69ec82d2b52268232/producer-secret +1 -0
- data/server/instances/9/notifications/54e96913d66f1dd69ec82d2b52268232/subscription.xml +5 -0
- data/server/instances/9/notifications/5debc1fd138fdc80940cd5647003ed45/consumer-secret +1 -0
- data/server/instances/9/notifications/5debc1fd138fdc80940cd5647003ed45/producer-secret +1 -0
- data/server/instances/9/notifications/5debc1fd138fdc80940cd5647003ed45/subscription.xml +27 -0
- data/server/instances/9/properties.xml +517 -0
- data/server/resources/properties.init +351 -0
- data/server/resources/properties.schema.active +79 -0
- data/server/resources/properties.schema.finished +79 -0
- data/server/resources/properties.schema.inactive +79 -0
- data/server/resources/topics.xml +55 -0
- data/server/server.rb +25 -0
- data/server/todo.txt +20 -0
- data/test/delete.rb +27 -0
- data/test/load.rb +55 -0
- data/test/testset.xml +297 -0
- 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
|