jruby_activiti 1.2.5 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
}
|