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.
Files changed (317) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.ruby-version +1 -1
  4. data/CHANGELOG +6 -0
  5. data/Jarfile +5 -0
  6. data/Jarfile.lock +52 -13
  7. data/README.md +21 -9
  8. data/java/build.md +3 -0
  9. data/java/mapping.md +20 -0
  10. data/java/pom.xml +30 -0
  11. data/java/src/main/java/jrubyactiviti/Modeler.java +95 -0
  12. data/java/src/main/java/jrubyactiviti/ProcessDiagram.java +491 -0
  13. data/java/src/main/java/jrubyactiviti/ProcessInstanceHighlights.java +237 -0
  14. data/java/src/main/java/jrubyactiviti/StencilsetResource.java +16 -0
  15. data/java/src/main/resources/stencilset.json +1339 -0
  16. data/jruby_activiti.gemspec +3 -2
  17. data/lib/generators/jruby_activiti/install_generator.rb +4 -0
  18. data/lib/jar/jrubyactiviti-2.0.jar +0 -0
  19. data/lib/jruby_activiti/version.rb +1 -1
  20. data/lib/jruby_activiti/web.rb +81 -0
  21. data/lib/jruby_activiti.rb +28 -20
  22. data/test/{base_test.rb → activiti_test.rb} +1 -3
  23. data/test/instance_hights_test.rb +18 -0
  24. data/test/modeler_test.rb +35 -0
  25. data/test/process_diagram_test.rb +33 -0
  26. data/test/resources/model_init_editor_source.json +1 -0
  27. data/test/resources/model_json_xml.json +278 -0
  28. data/test/resources/model_svg_xml.xml +66 -0
  29. data/test/stencilset_test.rb +7 -0
  30. data/test/test_helper.rb +2 -0
  31. data/web/public/diagram-viewer/images/bg.png +0 -0
  32. data/web/public/diagram-viewer/images/breadcrumbs.png +0 -0
  33. data/web/public/diagram-viewer/images/checker-bg.png +0 -0
  34. data/web/public/diagram-viewer/images/deployer/blue/message_catch.png +0 -0
  35. data/web/public/diagram-viewer/images/deployer/business_rule.png +0 -0
  36. data/web/public/diagram-viewer/images/deployer/error_catch.png +0 -0
  37. data/web/public/diagram-viewer/images/deployer/error_throw.png +0 -0
  38. data/web/public/diagram-viewer/images/deployer/manual.png +0 -0
  39. data/web/public/diagram-viewer/images/deployer/message_catch.png +0 -0
  40. data/web/public/diagram-viewer/images/deployer/message_throw.png +0 -0
  41. data/web/public/diagram-viewer/images/deployer/receive.png +0 -0
  42. data/web/public/diagram-viewer/images/deployer/script.png +0 -0
  43. data/web/public/diagram-viewer/images/deployer/send.png +0 -0
  44. data/web/public/diagram-viewer/images/deployer/service.png +0 -0
  45. data/web/public/diagram-viewer/images/deployer/signal_catch.png +0 -0
  46. data/web/public/diagram-viewer/images/deployer/signal_throw.png +0 -0
  47. data/web/public/diagram-viewer/images/deployer/timer.png +0 -0
  48. data/web/public/diagram-viewer/images/deployer/user.png +0 -0
  49. data/web/public/diagram-viewer/index.html +130 -0
  50. data/web/public/diagram-viewer/js/ActivitiRest.js +74 -0
  51. data/web/public/diagram-viewer/js/ActivityImpl.js +1 -0
  52. data/web/public/diagram-viewer/js/Color.js +603 -0
  53. data/web/public/diagram-viewer/js/LineBreakMeasurer.js +270 -0
  54. data/web/public/diagram-viewer/js/Polyline.js +387 -0
  55. data/web/public/diagram-viewer/js/ProcessDiagramCanvas.js +2172 -0
  56. data/web/public/diagram-viewer/js/ProcessDiagramGenerator.js +1087 -0
  57. data/web/public/diagram-viewer/js/jquery/jquery.asyncqueue.js +125 -0
  58. data/web/public/diagram-viewer/js/jquery/jquery.js +9266 -0
  59. data/web/public/diagram-viewer/js/jquery/jquery.progressbar.js +131 -0
  60. data/web/public/diagram-viewer/js/jstools.js +23 -0
  61. data/web/public/diagram-viewer/js/raphael.2.1.1.js +10 -0
  62. data/web/public/diagram-viewer/js/raphael.js +10 -0
  63. data/web/public/diagram-viewer/js/raphael_uncompressed.js +5815 -0
  64. data/web/public/diagram-viewer/js/textlayout.js +441 -0
  65. data/web/public/diagram-viewer/style.css +1 -0
  66. data/web/public/editor-app/app-cfg.js +25 -0
  67. data/web/public/editor-app/app.js +432 -0
  68. data/web/public/editor-app/configuration/properties/assignment-display-template.html +4 -0
  69. data/web/public/editor-app/configuration/properties/assignment-popup.html +44 -0
  70. data/web/public/editor-app/configuration/properties/assignment-write-template.html +4 -0
  71. data/web/public/editor-app/configuration/properties/boolean-property-template.html +4 -0
  72. data/web/public/editor-app/configuration/properties/condition-expression-display-template.html +2 -0
  73. data/web/public/editor-app/configuration/properties/condition-expression-popup.html +29 -0
  74. data/web/public/editor-app/configuration/properties/condition-expression-write-template.html +4 -0
  75. data/web/public/editor-app/configuration/properties/default-value-display-template.html +4 -0
  76. data/web/public/editor-app/configuration/properties/event-listeners-display-template.html +3 -0
  77. data/web/public/editor-app/configuration/properties/event-listeners-popup.html +115 -0
  78. data/web/public/editor-app/configuration/properties/event-listeners-write-template.html +4 -0
  79. data/web/public/editor-app/configuration/properties/execution-listeners-display-template.html +3 -0
  80. data/web/public/editor-app/configuration/properties/execution-listeners-popup.html +101 -0
  81. data/web/public/editor-app/configuration/properties/execution-listeners-write-template.html +4 -0
  82. data/web/public/editor-app/configuration/properties/feedback-popup.html +17 -0
  83. data/web/public/editor-app/configuration/properties/fields-display-template.html +3 -0
  84. data/web/public/editor-app/configuration/properties/fields-popup.html +61 -0
  85. data/web/public/editor-app/configuration/properties/fields-write-template.html +4 -0
  86. data/web/public/editor-app/configuration/properties/form-properties-display-template.html +3 -0
  87. data/web/public/editor-app/configuration/properties/form-properties-popup.html +93 -0
  88. data/web/public/editor-app/configuration/properties/form-properties-write-template.html +4 -0
  89. data/web/public/editor-app/configuration/properties/in-parameters-display-template.html +3 -0
  90. data/web/public/editor-app/configuration/properties/in-parameters-popup.html +53 -0
  91. data/web/public/editor-app/configuration/properties/in-parameters-write-template.html +4 -0
  92. data/web/public/editor-app/configuration/properties/message-definitions-display-template.html +2 -0
  93. data/web/public/editor-app/configuration/properties/message-definitions-popup.html +50 -0
  94. data/web/public/editor-app/configuration/properties/message-definitions-write-template.html +3 -0
  95. data/web/public/editor-app/configuration/properties/message-property-write-template.html +4 -0
  96. data/web/public/editor-app/configuration/properties/multiinstance-property-write-template.html +8 -0
  97. data/web/public/editor-app/configuration/properties/out-parameters-display-template.html +3 -0
  98. data/web/public/editor-app/configuration/properties/out-parameters-popup.html +53 -0
  99. data/web/public/editor-app/configuration/properties/out-parameters-write-template.html +4 -0
  100. data/web/public/editor-app/configuration/properties/sequenceflow-order-display-template.html +3 -0
  101. data/web/public/editor-app/configuration/properties/sequenceflow-order-popup.html +47 -0
  102. data/web/public/editor-app/configuration/properties/sequenceflow-order-write-template.html +4 -0
  103. data/web/public/editor-app/configuration/properties/signal-definitions-display-template.html +3 -0
  104. data/web/public/editor-app/configuration/properties/signal-definitions-popup.html +58 -0
  105. data/web/public/editor-app/configuration/properties/signal-definitions-write-template.html +4 -0
  106. data/web/public/editor-app/configuration/properties/signal-property-write-template.html +4 -0
  107. data/web/public/editor-app/configuration/properties/string-property-write-mode-template.html +8 -0
  108. data/web/public/editor-app/configuration/properties/subprocess-reference-display-template.html +3 -0
  109. data/web/public/editor-app/configuration/properties/subprocess-reference-popup.html +43 -0
  110. data/web/public/editor-app/configuration/properties/subprocess-reference-write-template.html +4 -0
  111. data/web/public/editor-app/configuration/properties/task-listeners-display-template.html +3 -0
  112. data/web/public/editor-app/configuration/properties/task-listeners-popup.html +102 -0
  113. data/web/public/editor-app/configuration/properties/task-listeners-write-template.html +4 -0
  114. data/web/public/editor-app/configuration/properties/text-popup.html +17 -0
  115. data/web/public/editor-app/configuration/properties/text-property-write-template.html +4 -0
  116. data/web/public/editor-app/configuration/properties-assignment-controller.js +150 -0
  117. data/web/public/editor-app/configuration/properties-condition-expression-controller.js +58 -0
  118. data/web/public/editor-app/configuration/properties-custom-controllers.js +18 -0
  119. data/web/public/editor-app/configuration/properties-default-controllers.js +115 -0
  120. data/web/public/editor-app/configuration/properties-event-listeners-controller.js +266 -0
  121. data/web/public/editor-app/configuration/properties-execution-listeners-controller.js +326 -0
  122. data/web/public/editor-app/configuration/properties-fields-controller.js +192 -0
  123. data/web/public/editor-app/configuration/properties-form-properties-controller.js +192 -0
  124. data/web/public/editor-app/configuration/properties-in-parameters-controller.js +158 -0
  125. data/web/public/editor-app/configuration/properties-message-definitions-controller.js +137 -0
  126. data/web/public/editor-app/configuration/properties-message-scope-controller.js +48 -0
  127. data/web/public/editor-app/configuration/properties-multiinstance-controller.js +34 -0
  128. data/web/public/editor-app/configuration/properties-out-parameters-controller.js +158 -0
  129. data/web/public/editor-app/configuration/properties-sequenceflow-order-controller.js +130 -0
  130. data/web/public/editor-app/configuration/properties-signal-definitions-controller.js +136 -0
  131. data/web/public/editor-app/configuration/properties-signal-scope-controller.js +47 -0
  132. data/web/public/editor-app/configuration/properties-task-listeners-controller.js +325 -0
  133. data/web/public/editor-app/configuration/properties.js +99 -0
  134. data/web/public/editor-app/configuration/toolbar-custom-actions.js +18 -0
  135. data/web/public/editor-app/configuration/toolbar-default-actions.js +429 -0
  136. data/web/public/editor-app/configuration/toolbar.js +175 -0
  137. data/web/public/editor-app/configuration/url-config.js +34 -0
  138. data/web/public/editor-app/css/style-common.css +1518 -0
  139. data/web/public/editor-app/css/style-editor.css +639 -0
  140. data/web/public/editor-app/css/style.css +471 -0
  141. data/web/public/editor-app/editor/css/editor.css +202 -0
  142. data/web/public/editor-app/editor/i18n/translation_de.js +383 -0
  143. data/web/public/editor-app/editor/i18n/translation_en_us.js +423 -0
  144. data/web/public/editor-app/editor/i18n/translation_signavio_de.js +106 -0
  145. data/web/public/editor-app/editor/i18n/translation_signavio_en_us.js +108 -0
  146. data/web/public/editor-app/editor/oryx.debug.js +24510 -0
  147. data/web/public/editor-app/editor/oryx.js +30 -0
  148. data/web/public/editor-app/editor-config.js +32 -0
  149. data/web/public/editor-app/editor-controller.js +65 -0
  150. data/web/public/editor-app/editor-utils.js +135 -0
  151. data/web/public/editor-app/editor.html +136 -0
  152. data/web/public/editor-app/eventbus.js +133 -0
  153. data/web/public/editor-app/fonts/activiti-admin-webfont.eot +0 -0
  154. data/web/public/editor-app/fonts/activiti-admin-webfont.svg +43 -0
  155. data/web/public/editor-app/fonts/activiti-admin-webfont.ttf +0 -0
  156. data/web/public/editor-app/fonts/activiti-admin-webfont.woff +0 -0
  157. data/web/public/editor-app/fonts/glyphicons-halflings-regular.eot +0 -0
  158. data/web/public/editor-app/fonts/glyphicons-halflings-regular.svg +229 -0
  159. data/web/public/editor-app/fonts/glyphicons-halflings-regular.ttf +0 -0
  160. data/web/public/editor-app/fonts/glyphicons-halflings-regular.woff +0 -0
  161. data/web/public/editor-app/header-controller.js +31 -0
  162. data/web/public/editor-app/i18n/en.json +286 -0
  163. data/web/public/editor-app/images/bpmn-error.png +0 -0
  164. data/web/public/editor-app/images/bpmn-warning.png +0 -0
  165. data/web/public/editor-app/images/datadefinition.png +0 -0
  166. data/web/public/editor-app/images/delete.png +0 -0
  167. data/web/public/editor-app/images/loading.gif +0 -0
  168. data/web/public/editor-app/images/logo-2x.png +0 -0
  169. data/web/public/editor-app/images/logo.png +0 -0
  170. data/web/public/editor-app/images/nw-handle-dark.gif +0 -0
  171. data/web/public/editor-app/images/se-handle-dark.gif +0 -0
  172. data/web/public/editor-app/images/shapemenu_highlight.png +0 -0
  173. data/web/public/editor-app/images/wrench.png +0 -0
  174. data/web/public/editor-app/libs/angular-cookies_1.2.13/angular-cookies.min.js +8 -0
  175. data/web/public/editor-app/libs/angular-cookies_1.2.13/angular-cookies.min.js.map +8 -0
  176. data/web/public/editor-app/libs/angular-dragdrop.min-1.0.3.js +9 -0
  177. data/web/public/editor-app/libs/angular-dragdrop_1.0.7/angular-dragdrop.min.js +29 -0
  178. data/web/public/editor-app/libs/angular-mocks_1.2.13/angular-mocks.js +2136 -0
  179. data/web/public/editor-app/libs/angular-resource_1.2.13/angular-resource.js +596 -0
  180. data/web/public/editor-app/libs/angular-resource_1.2.13/angular-resource.min.js +13 -0
  181. data/web/public/editor-app/libs/angular-resource_1.2.13/angular-resource.min.js.map +8 -0
  182. data/web/public/editor-app/libs/angular-route_1.2.13/angular-route.js +921 -0
  183. data/web/public/editor-app/libs/angular-route_1.2.13/angular-route.min.js +14 -0
  184. data/web/public/editor-app/libs/angular-route_1.2.13/angular-route.min.js.map +8 -0
  185. data/web/public/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.js +625 -0
  186. data/web/public/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.min.js +14 -0
  187. data/web/public/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.min.js.map +8 -0
  188. data/web/public/editor-app/libs/angular-scroll_0.5.7/angular-scroll.min.js +1 -0
  189. data/web/public/editor-app/libs/angular-strap_2.0.5/angular-strap.min.js +9 -0
  190. data/web/public/editor-app/libs/angular-strap_2.0.5/angular-strap.tpl.min.js +8 -0
  191. data/web/public/editor-app/libs/angular-translate-loader-static-files/.bower.json +19 -0
  192. data/web/public/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.js +31 -0
  193. data/web/public/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js +6 -0
  194. data/web/public/editor-app/libs/angular-translate-storage-cookie/.bower.json +20 -0
  195. data/web/public/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js +19 -0
  196. data/web/public/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js +6 -0
  197. data/web/public/editor-app/libs/angular-translate_2.4.2/angular-translate.js +960 -0
  198. data/web/public/editor-app/libs/angular-translate_2.4.2/angular-translate.min.js +6 -0
  199. data/web/public/editor-app/libs/angular_1.2.13/angular-animate.min.js +27 -0
  200. data/web/public/editor-app/libs/angular_1.2.13/angular.min.js +204 -0
  201. data/web/public/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker-bs3.css +267 -0
  202. data/web/public/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker.js +1026 -0
  203. data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css +347 -0
  204. data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css.map +1 -0
  205. data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.min.css +7 -0
  206. data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css +5785 -0
  207. data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css.map +1 -0
  208. data/web/public/editor-app/libs/bootstrap_3.1.1/css/bootstrap.min.css +7 -0
  209. data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.eot +0 -0
  210. data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.svg +229 -0
  211. data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.ttf +0 -0
  212. data/web/public/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.woff +0 -0
  213. data/web/public/editor-app/libs/bootstrap_3.1.1/js/bootstrap.js +1951 -0
  214. data/web/public/editor-app/libs/bootstrap_3.1.1/js/bootstrap.min.js +6 -0
  215. data/web/public/editor-app/libs/es5-shim-15.3.4.5/.bower.json +14 -0
  216. data/web/public/editor-app/libs/es5-shim-15.3.4.5/.gitignore +2 -0
  217. data/web/public/editor-app/libs/es5-shim-15.3.4.5/CHANGES +93 -0
  218. data/web/public/editor-app/libs/es5-shim-15.3.4.5/CONTRIBUTORS.md +25 -0
  219. data/web/public/editor-app/libs/es5-shim-15.3.4.5/LICENSE +19 -0
  220. data/web/public/editor-app/libs/es5-shim-15.3.4.5/README.md +161 -0
  221. data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-sham.js +444 -0
  222. data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-sham.map +1 -0
  223. data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-sham.min.js +4 -0
  224. data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-shim.js +1314 -0
  225. data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-shim.map +1 -0
  226. data/web/public/editor-app/libs/es5-shim-15.3.4.5/es5-shim.min.js +4 -0
  227. data/web/public/editor-app/libs/es5-shim-15.3.4.5/package.json +34 -0
  228. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h-kill.js +64 -0
  229. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h-matchers.js +34 -0
  230. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h.js +3 -0
  231. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/index.html +64 -0
  232. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/index.min.html +63 -0
  233. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine-html.js +190 -0
  234. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine.css +166 -0
  235. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine.js +2477 -0
  236. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine_favicon.png +0 -0
  237. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/lib/json2.js +478 -0
  238. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-array.js +1223 -0
  239. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-date.js +152 -0
  240. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-function.js +147 -0
  241. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-number.js +14 -0
  242. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-object.js +181 -0
  243. data/web/public/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-string.js +204 -0
  244. data/web/public/editor-app/libs/jquery-ui-1.10.3.custom.min.js +6 -0
  245. data/web/public/editor-app/libs/jquery.autogrow-textarea.js +61 -0
  246. data/web/public/editor-app/libs/jquery_1.11.0/jquery.js +9789 -0
  247. data/web/public/editor-app/libs/jquery_1.11.0/jquery.min.js +4 -0
  248. data/web/public/editor-app/libs/jquery_1.11.0/jquery.min.map +1 -0
  249. data/web/public/editor-app/libs/json3_3.2.6/LICENSE +20 -0
  250. data/web/public/editor-app/libs/json3_3.2.6/lib/json3.js +861 -0
  251. data/web/public/editor-app/libs/json3_3.2.6/lib/json3.min.js +18 -0
  252. data/web/public/editor-app/libs/momentjs_2.5.1/momentjs.min.js +6 -0
  253. data/web/public/editor-app/libs/mousetrap-1.4.5.min.js +9 -0
  254. data/web/public/editor-app/libs/ng-grid-2.0.7-min.js +2 -0
  255. data/web/public/editor-app/libs/ng-grid-2.0.7.min.css +1 -0
  256. data/web/public/editor-app/libs/path_parser.js +30 -0
  257. data/web/public/editor-app/libs/prototype-1.5.1.js +3272 -0
  258. data/web/public/editor-app/libs/ui-utils.min-0.0.4.js +7 -0
  259. data/web/public/editor-app/partials/root-stencil-item-template.html +11 -0
  260. data/web/public/editor-app/partials/stencil-item-template.html +27 -0
  261. data/web/public/editor-app/plugins.xml +58 -0
  262. data/web/public/editor-app/popups/icon-template.html +3 -0
  263. data/web/public/editor-app/popups/save-model.html +41 -0
  264. data/web/public/editor-app/popups/select-shape.html +20 -0
  265. data/web/public/editor-app/popups/unsaved-changes.html +22 -0
  266. data/web/public/editor-app/select-shape-controller.js +314 -0
  267. data/web/public/editor-app/stencil-controller.js +1421 -0
  268. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.collapsed.png +0 -0
  269. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.png +0 -0
  270. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/expanded.subprocess.png +0 -0
  271. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.business.rule.png +0 -0
  272. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.camel.png +0 -0
  273. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.manual.png +0 -0
  274. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.mule.png +0 -0
  275. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.receive.png +0 -0
  276. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.script.png +0 -0
  277. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.send.png +0 -0
  278. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.service.png +0 -0
  279. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.shell.png +0 -0
  280. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.user.png +0 -0
  281. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/subprocess.png +0 -0
  282. data/web/public/editor-app/stencilsets/bpmn2.0/icons/activity/task.png +0 -0
  283. data/web/public/editor-app/stencilsets/bpmn2.0/icons/artifact/text.annotation.png +0 -0
  284. data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/cancel.png +0 -0
  285. data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/compensation.png +0 -0
  286. data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/error.png +0 -0
  287. data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/message.png +0 -0
  288. data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/signal.png +0 -0
  289. data/web/public/editor-app/stencilsets/bpmn2.0/icons/catching/timer.png +0 -0
  290. data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/association.undirected.png +0 -0
  291. data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/association.unidirectional.png +0 -0
  292. data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/messageflow.png +0 -0
  293. data/web/public/editor-app/stencilsets/bpmn2.0/icons/connector/sequenceflow.png +0 -0
  294. data/web/public/editor-app/stencilsets/bpmn2.0/icons/dataobject/data.store.png +0 -0
  295. data/web/public/editor-app/stencilsets/bpmn2.0/icons/diagram.png +0 -0
  296. data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/cancel.png +0 -0
  297. data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/error.png +0 -0
  298. data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/none.png +0 -0
  299. data/web/public/editor-app/stencilsets/bpmn2.0/icons/endevent/terminate.png +0 -0
  300. data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/eventbased.png +0 -0
  301. data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/exclusive.databased.png +0 -0
  302. data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/inclusive.png +0 -0
  303. data/web/public/editor-app/stencilsets/bpmn2.0/icons/gateway/parallel.png +0 -0
  304. data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/error.png +0 -0
  305. data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/message.png +0 -0
  306. data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/none.png +0 -0
  307. data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/signal.png +0 -0
  308. data/web/public/editor-app/stencilsets/bpmn2.0/icons/startevent/timer.png +0 -0
  309. data/web/public/editor-app/stencilsets/bpmn2.0/icons/swimlane/lane.png +0 -0
  310. data/web/public/editor-app/stencilsets/bpmn2.0/icons/swimlane/pool.png +0 -0
  311. data/web/public/editor-app/stencilsets/bpmn2.0/icons/throwing/none.png +0 -0
  312. data/web/public/editor-app/stencilsets/bpmn2.0/icons/throwing/signal.png +0 -0
  313. data/web/public/editor-app/toolbar-controller.js +162 -0
  314. data/web/public/modeler.html +140 -0
  315. data/web/views/models/index.erb +32 -0
  316. data/web/views/models/new.erb +15 -0
  317. 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
+ }