jruby_activiti 1.2.5 → 2.0.0
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.ruby-version +1 -1
- data/CHANGELOG +6 -0
- data/Jarfile +5 -0
- data/Jarfile.lock +52 -13
- data/README.md +21 -9
- data/java/build.md +3 -0
- data/java/mapping.md +20 -0
- data/java/pom.xml +30 -0
- data/java/src/main/java/jrubyactiviti/Modeler.java +95 -0
- data/java/src/main/java/jrubyactiviti/ProcessDiagram.java +491 -0
- data/java/src/main/java/jrubyactiviti/ProcessInstanceHighlights.java +237 -0
- data/java/src/main/java/jrubyactiviti/StencilsetResource.java +16 -0
- data/java/src/main/resources/stencilset.json +1339 -0
- data/jruby_activiti.gemspec +3 -2
- data/lib/generators/jruby_activiti/install_generator.rb +4 -0
- data/lib/jar/jrubyactiviti-2.0.jar +0 -0
- data/lib/jruby_activiti/version.rb +1 -1
- data/lib/jruby_activiti/web.rb +81 -0
- data/lib/jruby_activiti.rb +28 -20
- data/test/{base_test.rb → activiti_test.rb} +1 -3
- data/test/instance_hights_test.rb +18 -0
- data/test/modeler_test.rb +35 -0
- data/test/process_diagram_test.rb +33 -0
- data/test/resources/model_init_editor_source.json +1 -0
- data/test/resources/model_json_xml.json +278 -0
- data/test/resources/model_svg_xml.xml +66 -0
- data/test/stencilset_test.rb +7 -0
- data/test/test_helper.rb +2 -0
- data/web/public/diagram-viewer/images/bg.png +0 -0
- data/web/public/diagram-viewer/images/breadcrumbs.png +0 -0
- data/web/public/diagram-viewer/images/checker-bg.png +0 -0
- data/web/public/diagram-viewer/images/deployer/blue/message_catch.png +0 -0
- data/web/public/diagram-viewer/images/deployer/business_rule.png +0 -0
- data/web/public/diagram-viewer/images/deployer/error_catch.png +0 -0
- data/web/public/diagram-viewer/images/deployer/error_throw.png +0 -0
- data/web/public/diagram-viewer/images/deployer/manual.png +0 -0
- data/web/public/diagram-viewer/images/deployer/message_catch.png +0 -0
- data/web/public/diagram-viewer/images/deployer/message_throw.png +0 -0
- data/web/public/diagram-viewer/images/deployer/receive.png +0 -0
- data/web/public/diagram-viewer/images/deployer/script.png +0 -0
- data/web/public/diagram-viewer/images/deployer/send.png +0 -0
- data/web/public/diagram-viewer/images/deployer/service.png +0 -0
- data/web/public/diagram-viewer/images/deployer/signal_catch.png +0 -0
- data/web/public/diagram-viewer/images/deployer/signal_throw.png +0 -0
- data/web/public/diagram-viewer/images/deployer/timer.png +0 -0
- data/web/public/diagram-viewer/images/deployer/user.png +0 -0
- data/web/public/diagram-viewer/index.html +130 -0
- data/web/public/diagram-viewer/js/ActivitiRest.js +74 -0
- data/web/public/diagram-viewer/js/ActivityImpl.js +1 -0
- data/web/public/diagram-viewer/js/Color.js +603 -0
- data/web/public/diagram-viewer/js/LineBreakMeasurer.js +270 -0
- data/web/public/diagram-viewer/js/Polyline.js +387 -0
- data/web/public/diagram-viewer/js/ProcessDiagramCanvas.js +2172 -0
- data/web/public/diagram-viewer/js/ProcessDiagramGenerator.js +1087 -0
- data/web/public/diagram-viewer/js/jquery/jquery.asyncqueue.js +125 -0
- data/web/public/diagram-viewer/js/jquery/jquery.js +9266 -0
- data/web/public/diagram-viewer/js/jquery/jquery.progressbar.js +131 -0
- data/web/public/diagram-viewer/js/jstools.js +23 -0
- data/web/public/diagram-viewer/js/raphael.2.1.1.js +10 -0
- data/web/public/diagram-viewer/js/raphael.js +10 -0
- data/web/public/diagram-viewer/js/raphael_uncompressed.js +5815 -0
- data/web/public/diagram-viewer/js/textlayout.js +441 -0
- data/web/public/diagram-viewer/style.css +1 -0
- data/web/public/editor-app/app-cfg.js +25 -0
- data/web/public/editor-app/app.js +432 -0
- data/web/public/editor-app/configuration/properties/assignment-display-template.html +4 -0
- data/web/public/editor-app/configuration/properties/assignment-popup.html +44 -0
- data/web/public/editor-app/configuration/properties/assignment-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/boolean-property-template.html +4 -0
- data/web/public/editor-app/configuration/properties/condition-expression-display-template.html +2 -0
- data/web/public/editor-app/configuration/properties/condition-expression-popup.html +29 -0
- data/web/public/editor-app/configuration/properties/condition-expression-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/default-value-display-template.html +4 -0
- data/web/public/editor-app/configuration/properties/event-listeners-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/event-listeners-popup.html +115 -0
- data/web/public/editor-app/configuration/properties/event-listeners-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/execution-listeners-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/execution-listeners-popup.html +101 -0
- data/web/public/editor-app/configuration/properties/execution-listeners-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/feedback-popup.html +17 -0
- data/web/public/editor-app/configuration/properties/fields-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/fields-popup.html +61 -0
- data/web/public/editor-app/configuration/properties/fields-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/form-properties-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/form-properties-popup.html +93 -0
- data/web/public/editor-app/configuration/properties/form-properties-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/in-parameters-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/in-parameters-popup.html +53 -0
- data/web/public/editor-app/configuration/properties/in-parameters-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/message-definitions-display-template.html +2 -0
- data/web/public/editor-app/configuration/properties/message-definitions-popup.html +50 -0
- data/web/public/editor-app/configuration/properties/message-definitions-write-template.html +3 -0
- data/web/public/editor-app/configuration/properties/message-property-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/multiinstance-property-write-template.html +8 -0
- data/web/public/editor-app/configuration/properties/out-parameters-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/out-parameters-popup.html +53 -0
- data/web/public/editor-app/configuration/properties/out-parameters-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/sequenceflow-order-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/sequenceflow-order-popup.html +47 -0
- data/web/public/editor-app/configuration/properties/sequenceflow-order-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/signal-definitions-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/signal-definitions-popup.html +58 -0
- data/web/public/editor-app/configuration/properties/signal-definitions-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/signal-property-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/string-property-write-mode-template.html +8 -0
- data/web/public/editor-app/configuration/properties/subprocess-reference-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/subprocess-reference-popup.html +43 -0
- data/web/public/editor-app/configuration/properties/subprocess-reference-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/task-listeners-display-template.html +3 -0
- data/web/public/editor-app/configuration/properties/task-listeners-popup.html +102 -0
- data/web/public/editor-app/configuration/properties/task-listeners-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties/text-popup.html +17 -0
- data/web/public/editor-app/configuration/properties/text-property-write-template.html +4 -0
- data/web/public/editor-app/configuration/properties-assignment-controller.js +150 -0
- data/web/public/editor-app/configuration/properties-condition-expression-controller.js +58 -0
- data/web/public/editor-app/configuration/properties-custom-controllers.js +18 -0
- data/web/public/editor-app/configuration/properties-default-controllers.js +115 -0
- data/web/public/editor-app/configuration/properties-event-listeners-controller.js +266 -0
- data/web/public/editor-app/configuration/properties-execution-listeners-controller.js +326 -0
- data/web/public/editor-app/configuration/properties-fields-controller.js +192 -0
- data/web/public/editor-app/configuration/properties-form-properties-controller.js +192 -0
- data/web/public/editor-app/configuration/properties-in-parameters-controller.js +158 -0
- data/web/public/editor-app/configuration/properties-message-definitions-controller.js +137 -0
- data/web/public/editor-app/configuration/properties-message-scope-controller.js +48 -0
- data/web/public/editor-app/configuration/properties-multiinstance-controller.js +34 -0
- data/web/public/editor-app/configuration/properties-out-parameters-controller.js +158 -0
- data/web/public/editor-app/configuration/properties-sequenceflow-order-controller.js +130 -0
- data/web/public/editor-app/configuration/properties-signal-definitions-controller.js +136 -0
- data/web/public/editor-app/configuration/properties-signal-scope-controller.js +47 -0
- data/web/public/editor-app/configuration/properties-task-listeners-controller.js +325 -0
- data/web/public/editor-app/configuration/properties.js +99 -0
- data/web/public/editor-app/configuration/toolbar-custom-actions.js +18 -0
- data/web/public/editor-app/configuration/toolbar-default-actions.js +429 -0
- data/web/public/editor-app/configuration/toolbar.js +175 -0
- data/web/public/editor-app/configuration/url-config.js +34 -0
- data/web/public/editor-app/css/style-common.css +1518 -0
- data/web/public/editor-app/css/style-editor.css +639 -0
- data/web/public/editor-app/css/style.css +471 -0
- data/web/public/editor-app/editor/css/editor.css +202 -0
- data/web/public/editor-app/editor/i18n/translation_de.js +383 -0
- data/web/public/editor-app/editor/i18n/translation_en_us.js +423 -0
- data/web/public/editor-app/editor/i18n/translation_signavio_de.js +106 -0
- data/web/public/editor-app/editor/i18n/translation_signavio_en_us.js +108 -0
- data/web/public/editor-app/editor/oryx.debug.js +24510 -0
- data/web/public/editor-app/editor/oryx.js +30 -0
- data/web/public/editor-app/editor-config.js +32 -0
- data/web/public/editor-app/editor-controller.js +65 -0
- data/web/public/editor-app/editor-utils.js +135 -0
- data/web/public/editor-app/editor.html +136 -0
- data/web/public/editor-app/eventbus.js +133 -0
- data/web/public/editor-app/fonts/activiti-admin-webfont.eot +0 -0
- data/web/public/editor-app/fonts/activiti-admin-webfont.svg +43 -0
- data/web/public/editor-app/fonts/activiti-admin-webfont.ttf +0 -0
- data/web/public/editor-app/fonts/activiti-admin-webfont.woff +0 -0
- data/web/public/editor-app/fonts/glyphicons-halflings-regular.eot +0 -0
- data/web/public/editor-app/fonts/glyphicons-halflings-regular.svg +229 -0
- data/web/public/editor-app/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/web/public/editor-app/fonts/glyphicons-halflings-regular.woff +0 -0
- data/web/public/editor-app/header-controller.js +31 -0
- data/web/public/editor-app/i18n/en.json +286 -0
- data/web/public/editor-app/images/bpmn-error.png +0 -0
- data/web/public/editor-app/images/bpmn-warning.png +0 -0
- data/web/public/editor-app/images/datadefinition.png +0 -0
- data/web/public/editor-app/images/delete.png +0 -0
- data/web/public/editor-app/images/loading.gif +0 -0
- data/web/public/editor-app/images/logo-2x.png +0 -0
- data/web/public/editor-app/images/logo.png +0 -0
- data/web/public/editor-app/images/nw-handle-dark.gif +0 -0
- data/web/public/editor-app/images/se-handle-dark.gif +0 -0
- data/web/public/editor-app/images/shapemenu_highlight.png +0 -0
- data/web/public/editor-app/images/wrench.png +0 -0
- data/web/public/editor-app/libs/angular-cookies_1.2.13/angular-cookies.min.js +8 -0
- data/web/public/editor-app/libs/angular-cookies_1.2.13/angular-cookies.min.js.map +8 -0
- data/web/public/editor-app/libs/angular-dragdrop.min-1.0.3.js +9 -0
- data/web/public/editor-app/libs/angular-dragdrop_1.0.7/angular-dragdrop.min.js +29 -0
- data/web/public/editor-app/libs/angular-mocks_1.2.13/angular-mocks.js +2136 -0
- data/web/public/editor-app/libs/angular-resource_1.2.13/angular-resource.js +596 -0
- data/web/public/editor-app/libs/angular-resource_1.2.13/angular-resource.min.js +13 -0
- data/web/public/editor-app/libs/angular-resource_1.2.13/angular-resource.min.js.map +8 -0
- data/web/public/editor-app/libs/angular-route_1.2.13/angular-route.js +921 -0
- data/web/public/editor-app/libs/angular-route_1.2.13/angular-route.min.js +14 -0
- data/web/public/editor-app/libs/angular-route_1.2.13/angular-route.min.js.map +8 -0
- data/web/public/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.js +625 -0
- data/web/public/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.min.js +14 -0
- data/web/public/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.min.js.map +8 -0
- data/web/public/editor-app/libs/angular-scroll_0.5.7/angular-scroll.min.js +1 -0
- data/web/public/editor-app/libs/angular-strap_2.0.5/angular-strap.min.js +9 -0
- data/web/public/editor-app/libs/angular-strap_2.0.5/angular-strap.tpl.min.js +8 -0
- data/web/public/editor-app/libs/angular-translate-loader-static-files/.bower.json +19 -0
- data/web/public/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.js +31 -0
- data/web/public/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js +6 -0
- data/web/public/editor-app/libs/angular-translate-storage-cookie/.bower.json +20 -0
- data/web/public/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js +19 -0
- data/web/public/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js +6 -0
- data/web/public/editor-app/libs/angular-translate_2.4.2/angular-translate.js +960 -0
- data/web/public/editor-app/libs/angular-translate_2.4.2/angular-translate.min.js +6 -0
- data/web/public/editor-app/libs/angular_1.2.13/angular-animate.min.js +27 -0
- data/web/public/editor-app/libs/angular_1.2.13/angular.min.js +204 -0
- data/web/public/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker-bs3.css +267 -0
- data/web/public/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker.js +1026 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css +347 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css.map +1 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.min.css +7 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css +5785 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css.map +1 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap.min.css +7 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.eot +0 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.svg +229 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.woff +0 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/js/bootstrap.js +1951 -0
- data/web/public/editor-app/libs/bootstrap_3.1.1/js/bootstrap.min.js +6 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/.bower.json +14 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/.gitignore +2 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/CHANGES +93 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/CONTRIBUTORS.md +25 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/LICENSE +19 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/README.md +161 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-sham.js +444 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-sham.map +1 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-sham.min.js +4 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-shim.js +1314 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-shim.map +1 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-shim.min.js +4 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/package.json +34 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h-kill.js +64 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h-matchers.js +34 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h.js +3 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/index.html +64 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/index.min.html +63 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine-html.js +190 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine.css +166 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine.js +2477 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine_favicon.png +0 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/json2.js +478 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-array.js +1223 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-date.js +152 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-function.js +147 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-number.js +14 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-object.js +181 -0
- data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-string.js +204 -0
- data/web/public/editor-app/libs/jquery-ui-1.10.3.custom.min.js +6 -0
- data/web/public/editor-app/libs/jquery.autogrow-textarea.js +61 -0
- data/web/public/editor-app/libs/jquery_1.11.0/jquery.js +9789 -0
- data/web/public/editor-app/libs/jquery_1.11.0/jquery.min.js +4 -0
- data/web/public/editor-app/libs/jquery_1.11.0/jquery.min.map +1 -0
- data/web/public/editor-app/libs/json3_3.2.6/LICENSE +20 -0
- data/web/public/editor-app/libs/json3_3.2.6/lib/json3.js +861 -0
- data/web/public/editor-app/libs/json3_3.2.6/lib/json3.min.js +18 -0
- data/web/public/editor-app/libs/momentjs_2.5.1/momentjs.min.js +6 -0
- data/web/public/editor-app/libs/mousetrap-1.4.5.min.js +9 -0
- data/web/public/editor-app/libs/ng-grid-2.0.7-min.js +2 -0
- data/web/public/editor-app/libs/ng-grid-2.0.7.min.css +1 -0
- data/web/public/editor-app/libs/path_parser.js +30 -0
- data/web/public/editor-app/libs/prototype-1.5.1.js +3272 -0
- data/web/public/editor-app/libs/ui-utils.min-0.0.4.js +7 -0
- data/web/public/editor-app/partials/root-stencil-item-template.html +11 -0
- data/web/public/editor-app/partials/stencil-item-template.html +27 -0
- data/web/public/editor-app/plugins.xml +58 -0
- data/web/public/editor-app/popups/icon-template.html +3 -0
- data/web/public/editor-app/popups/save-model.html +41 -0
- data/web/public/editor-app/popups/select-shape.html +20 -0
- data/web/public/editor-app/popups/unsaved-changes.html +22 -0
- data/web/public/editor-app/select-shape-controller.js +314 -0
- data/web/public/editor-app/stencil-controller.js +1421 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.collapsed.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/expanded.subprocess.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.business.rule.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.camel.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.manual.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.mule.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.receive.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.script.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.send.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.service.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.shell.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.user.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/subprocess.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/task.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/artifact/text.annotation.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/cancel.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/compensation.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/error.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/message.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/signal.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/timer.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/association.undirected.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/association.unidirectional.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/messageflow.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/sequenceflow.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/dataobject/data.store.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/diagram.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/cancel.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/error.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/none.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/terminate.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/eventbased.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/exclusive.databased.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/inclusive.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/parallel.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/error.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/message.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/none.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/signal.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/timer.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/swimlane/lane.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/swimlane/pool.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/throwing/none.png +0 -0
- data/web/public/editor-app/stencilsets/bpmn2.0/icons/throwing/signal.png +0 -0
- data/web/public/editor-app/toolbar-controller.js +162 -0
- data/web/public/modeler.html +140 -0
- data/web/views/models/index.erb +32 -0
- data/web/views/models/new.erb +15 -0
- metadata +334 -10
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
package jrubyactiviti;
|
|
2
|
+
|
|
3
|
+
import java.util.ArrayList;
|
|
4
|
+
import java.util.Collections;
|
|
5
|
+
import java.util.HashMap;
|
|
6
|
+
import java.util.List;
|
|
7
|
+
import java.util.Map;
|
|
8
|
+
|
|
9
|
+
import org.activiti.engine.ActivitiException;
|
|
10
|
+
import org.activiti.engine.ActivitiObjectNotFoundException;
|
|
11
|
+
import org.activiti.engine.HistoryService;
|
|
12
|
+
import org.activiti.engine.RepositoryService;
|
|
13
|
+
import org.activiti.engine.RuntimeService;
|
|
14
|
+
import org.activiti.engine.history.HistoricActivityInstance;
|
|
15
|
+
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
|
|
16
|
+
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
|
|
17
|
+
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
|
|
18
|
+
import org.activiti.engine.impl.bpmn.parser.ErrorEventDefinition;
|
|
19
|
+
import org.activiti.engine.impl.bpmn.parser.EventSubscriptionDeclaration;
|
|
20
|
+
import org.activiti.engine.impl.jobexecutor.TimerDeclarationImpl;
|
|
21
|
+
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
|
|
22
|
+
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
|
23
|
+
import org.activiti.engine.impl.pvm.PvmTransition;
|
|
24
|
+
import org.activiti.engine.impl.pvm.delegate.ActivityBehavior;
|
|
25
|
+
import org.activiti.engine.impl.pvm.process.ActivityImpl;
|
|
26
|
+
import org.activiti.engine.impl.pvm.process.Lane;
|
|
27
|
+
import org.activiti.engine.impl.pvm.process.LaneSet;
|
|
28
|
+
import org.activiti.engine.impl.pvm.process.ParticipantProcess;
|
|
29
|
+
import org.activiti.engine.impl.pvm.process.TransitionImpl;
|
|
30
|
+
import org.activiti.engine.repository.ProcessDefinition;
|
|
31
|
+
import org.activiti.engine.runtime.Execution;
|
|
32
|
+
import org.activiti.engine.runtime.ProcessInstance;
|
|
33
|
+
import org.apache.commons.lang3.StringUtils;
|
|
34
|
+
|
|
35
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
|
36
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
37
|
+
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
38
|
+
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
39
|
+
|
|
40
|
+
public class ProcessDiagram {
|
|
41
|
+
|
|
42
|
+
private RuntimeService runtimeService;
|
|
43
|
+
private RepositoryService repositoryService;
|
|
44
|
+
private HistoryService historyService;
|
|
45
|
+
|
|
46
|
+
public ProcessDiagram(RuntimeService runtimeService, RepositoryService repositoryService, HistoryService historyService){
|
|
47
|
+
this.runtimeService = runtimeService;
|
|
48
|
+
this.repositoryService = repositoryService;
|
|
49
|
+
this.historyService = historyService;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public ObjectNode getDiagramNode(String processInstanceId, String processDefinitionId) {
|
|
53
|
+
|
|
54
|
+
List<String> highLightedFlows = Collections.<String> emptyList();
|
|
55
|
+
List<String> highLightedActivities = Collections.<String> emptyList();
|
|
56
|
+
|
|
57
|
+
Map<String, ObjectNode> subProcessInstanceMap = new HashMap<String, ObjectNode>();
|
|
58
|
+
|
|
59
|
+
ProcessInstance processInstance = null;
|
|
60
|
+
if (processInstanceId != null) {
|
|
61
|
+
processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
|
62
|
+
if (processInstance == null) {
|
|
63
|
+
throw new ActivitiObjectNotFoundException("Process instance could not be found");
|
|
64
|
+
}
|
|
65
|
+
processDefinitionId = processInstance.getProcessDefinitionId();
|
|
66
|
+
|
|
67
|
+
List<ProcessInstance> subProcessInstances = runtimeService
|
|
68
|
+
.createProcessInstanceQuery()
|
|
69
|
+
.superProcessInstanceId(processInstanceId).list();
|
|
70
|
+
|
|
71
|
+
for (ProcessInstance subProcessInstance : subProcessInstances) {
|
|
72
|
+
String subDefId = subProcessInstance.getProcessDefinitionId();
|
|
73
|
+
|
|
74
|
+
String superExecutionId = ((ExecutionEntity) subProcessInstance)
|
|
75
|
+
.getSuperExecutionId();
|
|
76
|
+
ProcessDefinitionEntity subDef = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(subDefId);
|
|
77
|
+
|
|
78
|
+
ObjectNode processInstanceJSON = new ObjectMapper().createObjectNode();
|
|
79
|
+
processInstanceJSON.put("processInstanceId", subProcessInstance.getId());
|
|
80
|
+
processInstanceJSON.put("superExecutionId", superExecutionId);
|
|
81
|
+
processInstanceJSON.put("processDefinitionId", subDef.getId());
|
|
82
|
+
processInstanceJSON.put("processDefinitionKey", subDef.getKey());
|
|
83
|
+
processInstanceJSON.put("processDefinitionName", subDef.getName());
|
|
84
|
+
|
|
85
|
+
subProcessInstanceMap.put(superExecutionId, processInstanceJSON);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (processDefinitionId == null) {
|
|
90
|
+
throw new ActivitiObjectNotFoundException("No process definition id provided");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
|
|
94
|
+
|
|
95
|
+
if (processDefinition == null) {
|
|
96
|
+
throw new ActivitiException("Process definition " + processDefinitionId + " could not be found");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
ObjectNode responseJSON = new ObjectMapper().createObjectNode();
|
|
100
|
+
|
|
101
|
+
// Process definition
|
|
102
|
+
JsonNode pdrJSON = getProcessDefinitionResponse(processDefinition);
|
|
103
|
+
|
|
104
|
+
if (pdrJSON != null) {
|
|
105
|
+
responseJSON.put("processDefinition", pdrJSON);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Highlighted activities
|
|
109
|
+
if (processInstance != null) {
|
|
110
|
+
ArrayNode activityArray = new ObjectMapper().createArrayNode();
|
|
111
|
+
ArrayNode flowsArray = new ObjectMapper().createArrayNode();
|
|
112
|
+
|
|
113
|
+
highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId);
|
|
114
|
+
highLightedFlows = getHighLightedFlows(processInstanceId, processDefinition);
|
|
115
|
+
|
|
116
|
+
for (String activityName : highLightedActivities) {
|
|
117
|
+
activityArray.add(activityName);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
for (String flow : highLightedFlows)
|
|
121
|
+
flowsArray.add(flow);
|
|
122
|
+
|
|
123
|
+
responseJSON.put("highLightedActivities", activityArray);
|
|
124
|
+
responseJSON.put("highLightedFlows", flowsArray);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Pool shape, if process is participant in collaboration
|
|
128
|
+
if (processDefinition.getParticipantProcess() != null) {
|
|
129
|
+
ParticipantProcess pProc = processDefinition.getParticipantProcess();
|
|
130
|
+
|
|
131
|
+
ObjectNode participantProcessJSON = new ObjectMapper().createObjectNode();
|
|
132
|
+
participantProcessJSON.put("id", pProc.getId());
|
|
133
|
+
if (StringUtils.isNotEmpty(pProc.getName())) {
|
|
134
|
+
participantProcessJSON.put("name", pProc.getName());
|
|
135
|
+
} else {
|
|
136
|
+
participantProcessJSON.put("name", "");
|
|
137
|
+
}
|
|
138
|
+
participantProcessJSON.put("x", pProc.getX());
|
|
139
|
+
participantProcessJSON.put("y", pProc.getY());
|
|
140
|
+
participantProcessJSON.put("width", pProc.getWidth());
|
|
141
|
+
participantProcessJSON.put("height", pProc.getHeight());
|
|
142
|
+
|
|
143
|
+
responseJSON.put("participantProcess", participantProcessJSON);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Draw lanes
|
|
147
|
+
|
|
148
|
+
if (processDefinition.getLaneSets() != null && !processDefinition.getLaneSets().isEmpty()) {
|
|
149
|
+
ArrayNode laneSetArray = new ObjectMapper().createArrayNode();
|
|
150
|
+
for (LaneSet laneSet : processDefinition.getLaneSets()) {
|
|
151
|
+
ArrayNode laneArray = new ObjectMapper().createArrayNode();
|
|
152
|
+
if (laneSet.getLanes() != null && !laneSet.getLanes().isEmpty()) {
|
|
153
|
+
for (Lane lane : laneSet.getLanes()) {
|
|
154
|
+
ObjectNode laneJSON = new ObjectMapper().createObjectNode();
|
|
155
|
+
laneJSON.put("id", lane.getId());
|
|
156
|
+
if (StringUtils.isNotEmpty(lane.getName())) {
|
|
157
|
+
laneJSON.put("name", lane.getName());
|
|
158
|
+
} else {
|
|
159
|
+
laneJSON.put("name", "");
|
|
160
|
+
}
|
|
161
|
+
laneJSON.put("x", lane.getX());
|
|
162
|
+
laneJSON.put("y", lane.getY());
|
|
163
|
+
laneJSON.put("width", lane.getWidth());
|
|
164
|
+
laneJSON.put("height", lane.getHeight());
|
|
165
|
+
|
|
166
|
+
List<String> flowNodeIds = lane.getFlowNodeIds();
|
|
167
|
+
ArrayNode flowNodeIdsArray = new ObjectMapper().createArrayNode();
|
|
168
|
+
for (String flowNodeId : flowNodeIds) {
|
|
169
|
+
flowNodeIdsArray.add(flowNodeId);
|
|
170
|
+
}
|
|
171
|
+
laneJSON.put("flowNodeIds", flowNodeIdsArray);
|
|
172
|
+
|
|
173
|
+
laneArray.add(laneJSON);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
ObjectNode laneSetJSON = new ObjectMapper().createObjectNode();
|
|
177
|
+
laneSetJSON.put("id", laneSet.getId());
|
|
178
|
+
if (StringUtils.isNotEmpty(laneSet.getName())) {
|
|
179
|
+
laneSetJSON.put("name", laneSet.getName());
|
|
180
|
+
} else {
|
|
181
|
+
laneSetJSON.put("name", "");
|
|
182
|
+
}
|
|
183
|
+
laneSetJSON.put("lanes", laneArray);
|
|
184
|
+
|
|
185
|
+
laneSetArray.add(laneSetJSON);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (laneSetArray.size() > 0)
|
|
189
|
+
responseJSON.put("laneSets", laneSetArray);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
ArrayNode sequenceFlowArray = new ObjectMapper().createArrayNode();
|
|
193
|
+
ArrayNode activityArray = new ObjectMapper().createArrayNode();
|
|
194
|
+
|
|
195
|
+
// Activities and their sequence-flows
|
|
196
|
+
|
|
197
|
+
for (ActivityImpl activity : processDefinition.getActivities()) {
|
|
198
|
+
getActivity(processInstanceId, activity, activityArray, sequenceFlowArray,
|
|
199
|
+
processInstance, highLightedFlows, subProcessInstanceMap);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
responseJSON.put("activities", activityArray);
|
|
203
|
+
responseJSON.put("sequenceFlows", sequenceFlowArray);
|
|
204
|
+
|
|
205
|
+
return responseJSON;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
private List<String> getHighLightedFlows(String processInstanceId, ProcessDefinitionEntity processDefinition) {
|
|
209
|
+
|
|
210
|
+
List<String> highLightedFlows = new ArrayList<String>();
|
|
211
|
+
List<HistoricActivityInstance> historicActivityInstances = historyService
|
|
212
|
+
.createHistoricActivityInstanceQuery()
|
|
213
|
+
.processInstanceId(processInstanceId)
|
|
214
|
+
.orderByHistoricActivityInstanceStartTime().asc().list();
|
|
215
|
+
|
|
216
|
+
List<String> historicActivityInstanceList = new ArrayList<String>();
|
|
217
|
+
for (HistoricActivityInstance hai : historicActivityInstances) {
|
|
218
|
+
historicActivityInstanceList.add(hai.getActivityId());
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// add current activities to list
|
|
222
|
+
List<String> highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId);
|
|
223
|
+
historicActivityInstanceList.addAll(highLightedActivities);
|
|
224
|
+
|
|
225
|
+
// activities and their sequence-flows
|
|
226
|
+
for (ActivityImpl activity : processDefinition.getActivities()) {
|
|
227
|
+
int index = historicActivityInstanceList.indexOf(activity.getId());
|
|
228
|
+
|
|
229
|
+
if (index >= 0 && index + 1 < historicActivityInstanceList.size()) {
|
|
230
|
+
List<PvmTransition> pvmTransitionList = activity
|
|
231
|
+
.getOutgoingTransitions();
|
|
232
|
+
for (PvmTransition pvmTransition : pvmTransitionList) {
|
|
233
|
+
String destinationFlowId = pvmTransition.getDestination().getId();
|
|
234
|
+
if (destinationFlowId.equals(historicActivityInstanceList.get(index + 1))) {
|
|
235
|
+
highLightedFlows.add(pvmTransition.getId());
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return highLightedFlows;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private void getActivity(String processInstanceId, ActivityImpl activity, ArrayNode activityArray,
|
|
244
|
+
ArrayNode sequenceFlowArray, ProcessInstance processInstance, List<String> highLightedFlows,
|
|
245
|
+
Map<String, ObjectNode> subProcessInstanceMap) {
|
|
246
|
+
|
|
247
|
+
ObjectNode activityJSON = new ObjectMapper().createObjectNode();
|
|
248
|
+
|
|
249
|
+
// Gather info on the multi instance marker
|
|
250
|
+
String multiInstance = (String) activity.getProperty("multiInstance");
|
|
251
|
+
if (multiInstance != null) {
|
|
252
|
+
if (!"sequential".equals(multiInstance)) {
|
|
253
|
+
multiInstance = "parallel";
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
ActivityBehavior activityBehavior = activity.getActivityBehavior();
|
|
258
|
+
// Gather info on the collapsed marker
|
|
259
|
+
Boolean collapsed = (activityBehavior instanceof CallActivityBehavior);
|
|
260
|
+
Boolean expanded = (Boolean) activity.getProperty(BpmnParse.PROPERTYNAME_ISEXPANDED);
|
|
261
|
+
if (expanded != null) {
|
|
262
|
+
collapsed = !expanded;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
Boolean isInterrupting = null;
|
|
266
|
+
if (activityBehavior instanceof BoundaryEventActivityBehavior) {
|
|
267
|
+
isInterrupting = ((BoundaryEventActivityBehavior) activityBehavior).isInterrupting();
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Outgoing transitions of activity
|
|
271
|
+
for (PvmTransition sequenceFlow : activity.getOutgoingTransitions()) {
|
|
272
|
+
String flowName = (String) sequenceFlow.getProperty("name");
|
|
273
|
+
boolean isHighLighted = (highLightedFlows.contains(sequenceFlow.getId()));
|
|
274
|
+
boolean isConditional = sequenceFlow.getProperty(BpmnParse.PROPERTYNAME_CONDITION) != null &&
|
|
275
|
+
!((String) activity.getProperty("type")).toLowerCase().contains("gateway");
|
|
276
|
+
boolean isDefault = sequenceFlow.getId().equals(activity.getProperty("default"))
|
|
277
|
+
&& ((String) activity.getProperty("type")).toLowerCase().contains("gateway");
|
|
278
|
+
|
|
279
|
+
List<Integer> waypoints = ((TransitionImpl) sequenceFlow).getWaypoints();
|
|
280
|
+
ArrayNode xPointArray = new ObjectMapper().createArrayNode();
|
|
281
|
+
ArrayNode yPointArray = new ObjectMapper().createArrayNode();
|
|
282
|
+
for (int i = 0; i < waypoints.size(); i += 2) { // waypoints.size()
|
|
283
|
+
// minimally 4: x1, y1,
|
|
284
|
+
// x2, y2
|
|
285
|
+
xPointArray.add(waypoints.get(i));
|
|
286
|
+
yPointArray.add(waypoints.get(i + 1));
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
ObjectNode flowJSON = new ObjectMapper().createObjectNode();
|
|
290
|
+
flowJSON.put("id", sequenceFlow.getId());
|
|
291
|
+
flowJSON.put("name", flowName);
|
|
292
|
+
flowJSON.put("flow", "(" + sequenceFlow.getSource().getId() + ")--"
|
|
293
|
+
+ sequenceFlow.getId() + "-->("
|
|
294
|
+
+ sequenceFlow.getDestination().getId() + ")");
|
|
295
|
+
|
|
296
|
+
if (isConditional)
|
|
297
|
+
flowJSON.put("isConditional", isConditional);
|
|
298
|
+
if (isDefault)
|
|
299
|
+
flowJSON.put("isDefault", isDefault);
|
|
300
|
+
if (isHighLighted)
|
|
301
|
+
flowJSON.put("isHighLighted", isHighLighted);
|
|
302
|
+
|
|
303
|
+
flowJSON.put("xPointArray", xPointArray);
|
|
304
|
+
flowJSON.put("yPointArray", yPointArray);
|
|
305
|
+
|
|
306
|
+
sequenceFlowArray.add(flowJSON);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Nested activities (boundary events)
|
|
310
|
+
ArrayNode nestedActivityArray = new ObjectMapper().createArrayNode();
|
|
311
|
+
for (ActivityImpl nestedActivity : activity.getActivities()) {
|
|
312
|
+
nestedActivityArray.add(nestedActivity.getId());
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
Map<String, Object> properties = activity.getProperties();
|
|
316
|
+
ObjectNode propertiesJSON = new ObjectMapper().createObjectNode();
|
|
317
|
+
for (String key : properties.keySet()) {
|
|
318
|
+
Object prop = properties.get(key);
|
|
319
|
+
if (prop instanceof String)
|
|
320
|
+
propertiesJSON.put(key, (String) properties.get(key));
|
|
321
|
+
else if (prop instanceof Integer)
|
|
322
|
+
propertiesJSON.put(key, (Integer) properties.get(key));
|
|
323
|
+
else if (prop instanceof Boolean)
|
|
324
|
+
propertiesJSON.put(key, (Boolean) properties.get(key));
|
|
325
|
+
else if ("initial".equals(key)) {
|
|
326
|
+
ActivityImpl act = (ActivityImpl) properties.get(key);
|
|
327
|
+
propertiesJSON.put(key, act.getId());
|
|
328
|
+
} else if ("timerDeclarations".equals(key)) {
|
|
329
|
+
ArrayList<TimerDeclarationImpl> timerDeclarations = (ArrayList<TimerDeclarationImpl>) properties.get(key);
|
|
330
|
+
ArrayNode timerDeclarationArray = new ObjectMapper().createArrayNode();
|
|
331
|
+
|
|
332
|
+
if (timerDeclarations != null)
|
|
333
|
+
for (TimerDeclarationImpl timerDeclaration : timerDeclarations) {
|
|
334
|
+
ObjectNode timerDeclarationJSON = new ObjectMapper().createObjectNode();
|
|
335
|
+
|
|
336
|
+
timerDeclarationJSON.put("isExclusive", timerDeclaration.isExclusive());
|
|
337
|
+
if (timerDeclaration.getRepeat() != null)
|
|
338
|
+
timerDeclarationJSON.put("repeat", timerDeclaration.getRepeat());
|
|
339
|
+
|
|
340
|
+
timerDeclarationJSON.put("retries", String.valueOf(timerDeclaration.getRetries()));
|
|
341
|
+
timerDeclarationJSON.put("type", timerDeclaration.getJobHandlerType());
|
|
342
|
+
timerDeclarationJSON.put("configuration", timerDeclaration.getJobHandlerConfiguration());
|
|
343
|
+
//timerDeclarationJSON.put("expression", timerDeclaration.getDescription());
|
|
344
|
+
|
|
345
|
+
timerDeclarationArray.add(timerDeclarationJSON);
|
|
346
|
+
}
|
|
347
|
+
if (timerDeclarationArray.size() > 0)
|
|
348
|
+
propertiesJSON.put(key, timerDeclarationArray);
|
|
349
|
+
// TODO: implement getting description
|
|
350
|
+
} else if ("eventDefinitions".equals(key)) {
|
|
351
|
+
ArrayList<EventSubscriptionDeclaration> eventDefinitions = (ArrayList<EventSubscriptionDeclaration>) properties.get(key);
|
|
352
|
+
ArrayNode eventDefinitionsArray = new ObjectMapper().createArrayNode();
|
|
353
|
+
|
|
354
|
+
if (eventDefinitions != null) {
|
|
355
|
+
for (EventSubscriptionDeclaration eventDefinition : eventDefinitions) {
|
|
356
|
+
ObjectNode eventDefinitionJSON = new ObjectMapper().createObjectNode();
|
|
357
|
+
|
|
358
|
+
if (eventDefinition.getActivityId() != null)
|
|
359
|
+
eventDefinitionJSON.put("activityId",eventDefinition.getActivityId());
|
|
360
|
+
|
|
361
|
+
eventDefinitionJSON.put("eventName", eventDefinition.getEventName());
|
|
362
|
+
eventDefinitionJSON.put("eventType", eventDefinition.getEventType());
|
|
363
|
+
eventDefinitionJSON.put("isAsync", eventDefinition.isAsync());
|
|
364
|
+
eventDefinitionJSON.put("isStartEvent", eventDefinition.isStartEvent());
|
|
365
|
+
eventDefinitionsArray.add(eventDefinitionJSON);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (eventDefinitionsArray.size() > 0)
|
|
370
|
+
propertiesJSON.put(key, eventDefinitionsArray);
|
|
371
|
+
|
|
372
|
+
// TODO: implement it
|
|
373
|
+
} else if ("errorEventDefinitions".equals(key)) {
|
|
374
|
+
ArrayList<ErrorEventDefinition> errorEventDefinitions = (ArrayList<ErrorEventDefinition>) properties.get(key);
|
|
375
|
+
ArrayNode errorEventDefinitionsArray = new ObjectMapper().createArrayNode();
|
|
376
|
+
|
|
377
|
+
if (errorEventDefinitions != null) {
|
|
378
|
+
for (ErrorEventDefinition errorEventDefinition : errorEventDefinitions) {
|
|
379
|
+
ObjectNode errorEventDefinitionJSON = new ObjectMapper().createObjectNode();
|
|
380
|
+
|
|
381
|
+
if (errorEventDefinition.getErrorCode() != null)
|
|
382
|
+
errorEventDefinitionJSON.put("errorCode", errorEventDefinition.getErrorCode());
|
|
383
|
+
else
|
|
384
|
+
errorEventDefinitionJSON.putNull("errorCode");
|
|
385
|
+
|
|
386
|
+
errorEventDefinitionJSON.put("handlerActivityId",
|
|
387
|
+
errorEventDefinition.getHandlerActivityId());
|
|
388
|
+
|
|
389
|
+
errorEventDefinitionsArray.add(errorEventDefinitionJSON);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
if (errorEventDefinitionsArray.size() > 0)
|
|
394
|
+
propertiesJSON.put(key, errorEventDefinitionsArray);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
if ("callActivity".equals(properties.get("type"))) {
|
|
400
|
+
CallActivityBehavior callActivityBehavior = null;
|
|
401
|
+
|
|
402
|
+
if (activityBehavior instanceof CallActivityBehavior) {
|
|
403
|
+
callActivityBehavior = (CallActivityBehavior) activityBehavior;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
if (callActivityBehavior != null) {
|
|
407
|
+
propertiesJSON.put("processDefinitonKey", callActivityBehavior.getProcessDefinitonKey());
|
|
408
|
+
|
|
409
|
+
// get processDefinitonId from execution or get last processDefinitonId
|
|
410
|
+
// by key
|
|
411
|
+
ArrayNode processInstanceArray = new ObjectMapper().createArrayNode();
|
|
412
|
+
if (processInstance != null) {
|
|
413
|
+
List<Execution> executionList = runtimeService.createExecutionQuery()
|
|
414
|
+
.processInstanceId(processInstanceId)
|
|
415
|
+
.activityId(activity.getId()).list();
|
|
416
|
+
if (!executionList.isEmpty()) {
|
|
417
|
+
for (Execution execution : executionList) {
|
|
418
|
+
ObjectNode processInstanceJSON = subProcessInstanceMap.get(execution.getId());
|
|
419
|
+
processInstanceArray.add(processInstanceJSON);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// If active activities nas no instance of this callActivity then add
|
|
425
|
+
// last definition
|
|
426
|
+
if (processInstanceArray.size() == 0 && StringUtils.isNotEmpty(callActivityBehavior.getProcessDefinitonKey())) {
|
|
427
|
+
// Get last definition by key
|
|
428
|
+
ProcessDefinition lastProcessDefinition = repositoryService
|
|
429
|
+
.createProcessDefinitionQuery()
|
|
430
|
+
.processDefinitionKey(callActivityBehavior.getProcessDefinitonKey())
|
|
431
|
+
.latestVersion().singleResult();
|
|
432
|
+
|
|
433
|
+
// TODO: unuseful fields there are processDefinitionName, processDefinitionKey
|
|
434
|
+
if (lastProcessDefinition != null) {
|
|
435
|
+
ObjectNode processInstanceJSON = new ObjectMapper().createObjectNode();
|
|
436
|
+
processInstanceJSON.put("processDefinitionId", lastProcessDefinition.getId());
|
|
437
|
+
processInstanceJSON.put("processDefinitionKey", lastProcessDefinition.getKey());
|
|
438
|
+
processInstanceJSON.put("processDefinitionName", lastProcessDefinition.getName());
|
|
439
|
+
processInstanceArray.add(processInstanceJSON);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
if (processInstanceArray.size() > 0) {
|
|
444
|
+
propertiesJSON.put("processDefinitons", processInstanceArray);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
activityJSON.put("activityId", activity.getId());
|
|
450
|
+
activityJSON.put("properties", propertiesJSON);
|
|
451
|
+
if (multiInstance != null)
|
|
452
|
+
activityJSON.put("multiInstance", multiInstance);
|
|
453
|
+
if (collapsed)
|
|
454
|
+
activityJSON.put("collapsed", collapsed);
|
|
455
|
+
if (nestedActivityArray.size() > 0)
|
|
456
|
+
activityJSON.put("nestedActivities", nestedActivityArray);
|
|
457
|
+
if (isInterrupting != null)
|
|
458
|
+
activityJSON.put("isInterrupting", isInterrupting);
|
|
459
|
+
|
|
460
|
+
activityJSON.put("x", activity.getX());
|
|
461
|
+
activityJSON.put("y", activity.getY());
|
|
462
|
+
activityJSON.put("width", activity.getWidth());
|
|
463
|
+
activityJSON.put("height", activity.getHeight());
|
|
464
|
+
|
|
465
|
+
activityArray.add(activityJSON);
|
|
466
|
+
|
|
467
|
+
// Nested activities (boundary events)
|
|
468
|
+
for (ActivityImpl nestedActivity : activity.getActivities()) {
|
|
469
|
+
getActivity(processInstanceId, nestedActivity, activityArray, sequenceFlowArray,
|
|
470
|
+
processInstance, highLightedFlows, subProcessInstanceMap);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
private JsonNode getProcessDefinitionResponse(ProcessDefinitionEntity processDefinition) {
|
|
475
|
+
ObjectMapper mapper = new ObjectMapper();
|
|
476
|
+
ObjectNode pdrJSON = mapper.createObjectNode();
|
|
477
|
+
pdrJSON.put("id", processDefinition.getId());
|
|
478
|
+
pdrJSON.put("name", processDefinition.getName());
|
|
479
|
+
pdrJSON.put("key", processDefinition.getKey());
|
|
480
|
+
pdrJSON.put("version", processDefinition.getVersion());
|
|
481
|
+
pdrJSON.put("deploymentId", processDefinition.getDeploymentId());
|
|
482
|
+
pdrJSON.put("isGraphicNotationDefined", isGraphicNotationDefined(processDefinition));
|
|
483
|
+
return pdrJSON;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
private boolean isGraphicNotationDefined(ProcessDefinitionEntity processDefinition) {
|
|
487
|
+
return ((ProcessDefinitionEntity) repositoryService
|
|
488
|
+
.getProcessDefinition(processDefinition.getId()))
|
|
489
|
+
.isGraphicalNotationDefined();
|
|
490
|
+
}
|
|
491
|
+
}
|