├── .gitignore ├── README.md ├── pom.xml └── src └── main ├── java └── me │ └── chenhai │ └── demo │ ├── SpringBootWithActivitiModelerApplication.java │ ├── activiti │ ├── modeler │ │ ├── FilterServletOutputStream.java │ │ ├── GenericResponseWrapper.java │ │ └── JsonpCallbackFilter.java │ └── rest │ │ └── editor │ │ ├── controller │ │ └── ModelController.java │ │ ├── main │ │ └── StencilsetRestResource.java │ │ └── model │ │ ├── ModelEditorJsonRestResource.java │ │ └── ModelSaveRestResource.java │ └── config │ └── SwaggerConfig.java └── resources ├── application.properties ├── processes └── SimpleUserTask.zip ├── public ├── modeler.html └── static │ ├── diagram-viewer │ ├── images │ │ ├── bg.png │ │ ├── breadcrumbs.png │ │ ├── checker-bg.png │ │ └── deployer │ │ │ ├── blue │ │ │ └── message_catch.png │ │ │ ├── business_rule.png │ │ │ ├── error_catch.png │ │ │ ├── error_throw.png │ │ │ ├── manual.png │ │ │ ├── message_catch.png │ │ │ ├── message_throw.png │ │ │ ├── receive.png │ │ │ ├── script.png │ │ │ ├── send.png │ │ │ ├── service.png │ │ │ ├── signal_catch.png │ │ │ ├── signal_throw.png │ │ │ ├── timer.png │ │ │ └── user.png │ ├── index.html │ ├── js │ │ ├── ActivitiRest.js │ │ ├── ActivityImpl.js │ │ ├── Color.js │ │ ├── LineBreakMeasurer.js │ │ ├── Polyline.js │ │ ├── ProcessDiagramCanvas.js │ │ ├── ProcessDiagramGenerator.js │ │ ├── jquery │ │ │ ├── jquery.asyncqueue.js │ │ │ ├── jquery.js │ │ │ └── jquery.progressbar.js │ │ ├── jstools.js │ │ ├── raphael.2.1.1.js │ │ ├── raphael.js │ │ ├── raphael_uncompressed.js │ │ └── textlayout.js │ └── style.css │ ├── editor-app │ ├── app-cfg.js │ ├── app.js │ ├── configuration │ │ ├── properties-assignment-controller.js │ │ ├── properties-condition-expression-controller.js │ │ ├── properties-custom-controllers.js │ │ ├── properties-default-controllers.js │ │ ├── properties-event-listeners-controller.js │ │ ├── properties-execution-listeners-controller.js │ │ ├── properties-fields-controller.js │ │ ├── properties-form-properties-controller.js │ │ ├── properties-in-parameters-controller.js │ │ ├── properties-message-definitions-controller.js │ │ ├── properties-message-scope-controller.js │ │ ├── properties-multiinstance-controller.js │ │ ├── properties-out-parameters-controller.js │ │ ├── properties-sequenceflow-order-controller.js │ │ ├── properties-signal-definitions-controller.js │ │ ├── properties-signal-scope-controller.js │ │ ├── properties-task-listeners-controller.js │ │ ├── properties.js │ │ ├── properties │ │ │ ├── assignment-display-template.html │ │ │ ├── assignment-popup.html │ │ │ ├── assignment-write-template.html │ │ │ ├── boolean-property-template.html │ │ │ ├── condition-expression-display-template.html │ │ │ ├── condition-expression-popup.html │ │ │ ├── condition-expression-write-template.html │ │ │ ├── default-value-display-template.html │ │ │ ├── event-listeners-display-template.html │ │ │ ├── event-listeners-popup.html │ │ │ ├── event-listeners-write-template.html │ │ │ ├── execution-listeners-display-template.html │ │ │ ├── execution-listeners-popup.html │ │ │ ├── execution-listeners-write-template.html │ │ │ ├── feedback-popup.html │ │ │ ├── fields-display-template.html │ │ │ ├── fields-popup.html │ │ │ ├── fields-write-template.html │ │ │ ├── form-properties-display-template.html │ │ │ ├── form-properties-popup.html │ │ │ ├── form-properties-write-template.html │ │ │ ├── in-parameters-display-template.html │ │ │ ├── in-parameters-popup.html │ │ │ ├── in-parameters-write-template.html │ │ │ ├── message-definitions-display-template.html │ │ │ ├── message-definitions-popup.html │ │ │ ├── message-definitions-write-template.html │ │ │ ├── message-property-write-template.html │ │ │ ├── multiinstance-property-write-template.html │ │ │ ├── out-parameters-display-template.html │ │ │ ├── out-parameters-popup.html │ │ │ ├── out-parameters-write-template.html │ │ │ ├── sequenceflow-order-display-template.html │ │ │ ├── sequenceflow-order-popup.html │ │ │ ├── sequenceflow-order-write-template.html │ │ │ ├── signal-definitions-display-template.html │ │ │ ├── signal-definitions-popup.html │ │ │ ├── signal-definitions-write-template.html │ │ │ ├── signal-property-write-template.html │ │ │ ├── string-property-write-mode-template.html │ │ │ ├── subprocess-reference-display-template.html │ │ │ ├── subprocess-reference-popup.html │ │ │ ├── subprocess-reference-write-template.html │ │ │ ├── task-listeners-display-template.html │ │ │ ├── task-listeners-popup.html │ │ │ ├── task-listeners-write-template.html │ │ │ ├── text-popup.html │ │ │ └── text-property-write-template.html │ │ ├── toolbar-custom-actions.js │ │ ├── toolbar-default-actions.js │ │ ├── toolbar.js │ │ └── url-config.js │ ├── css │ │ ├── style-common.css │ │ ├── style-editor.css │ │ └── style.css │ ├── editor-config.js │ ├── editor-controller.js │ ├── editor-utils.js │ ├── editor.html │ ├── editor │ │ ├── css │ │ │ └── editor.css │ │ ├── i18n │ │ │ ├── translation_de.js │ │ │ ├── translation_en_us.js │ │ │ ├── translation_signavio_de.js │ │ │ └── translation_signavio_en_us.js │ │ ├── oryx.debug.js │ │ └── oryx.js │ ├── eventbus.js │ ├── fonts │ │ ├── activiti-admin-webfont.eot │ │ ├── activiti-admin-webfont.svg │ │ ├── activiti-admin-webfont.ttf │ │ ├── activiti-admin-webfont.woff │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ ├── header-controller.js │ ├── i18n │ │ └── en.json │ ├── images │ │ ├── bpmn-error.png │ │ ├── bpmn-warning.png │ │ ├── datadefinition.png │ │ ├── delete.png │ │ ├── loading.gif │ │ ├── logo-2x.png │ │ ├── logo.png │ │ ├── nw-handle-dark.gif │ │ ├── se-handle-dark.gif │ │ ├── shapemenu_highlight.png │ │ └── wrench.png │ ├── libs │ │ ├── angular-cookies_1.2.13 │ │ │ ├── angular-cookies.min.js │ │ │ └── angular-cookies.min.js.map │ │ ├── angular-dragdrop.min-1.0.3.js │ │ ├── angular-dragdrop_1.0.7 │ │ │ └── angular-dragdrop.min.js │ │ ├── angular-mocks_1.2.13 │ │ │ └── angular-mocks.js │ │ ├── angular-resource_1.2.13 │ │ │ ├── angular-resource.js │ │ │ ├── angular-resource.min.js │ │ │ └── angular-resource.min.js.map │ │ ├── angular-route_1.2.13 │ │ │ ├── angular-route.js │ │ │ ├── angular-route.min.js │ │ │ └── angular-route.min.js.map │ │ ├── angular-sanitize_1.2.13 │ │ │ ├── angular-sanitize.js │ │ │ ├── angular-sanitize.min.js │ │ │ └── angular-sanitize.min.js.map │ │ ├── angular-scroll_0.5.7 │ │ │ └── angular-scroll.min.js │ │ ├── angular-strap_2.0.5 │ │ │ ├── angular-strap.min.js │ │ │ └── angular-strap.tpl.min.js │ │ ├── angular-translate-loader-static-files │ │ │ ├── .bower.json │ │ │ ├── angular-translate-loader-static-files.js │ │ │ └── angular-translate-loader-static-files.min.js │ │ ├── angular-translate-storage-cookie │ │ │ ├── .bower.json │ │ │ ├── angular-translate-storage-cookie.js │ │ │ └── angular-translate-storage-cookie.min.js │ │ ├── angular-translate_2.4.2 │ │ │ ├── angular-translate.js │ │ │ └── angular-translate.min.js │ │ ├── angular_1.2.13 │ │ │ ├── angular-animate.min.js │ │ │ └── angular.min.js │ │ ├── bootstrap-daterangepicker_1.3.7 │ │ │ ├── daterangepicker-bs3.css │ │ │ └── daterangepicker.js │ │ ├── bootstrap_3.1.1 │ │ │ ├── css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.css.map │ │ │ │ └── bootstrap.min.css │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ └── bootstrap.min.js │ │ ├── es5-shim-15.3.4.5 │ │ │ ├── .bower.json │ │ │ ├── .gitignore │ │ │ ├── CHANGES │ │ │ ├── CONTRIBUTORS.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── es5-sham.js │ │ │ ├── es5-sham.map │ │ │ ├── es5-sham.min.js │ │ │ ├── es5-shim.js │ │ │ ├── es5-shim.map │ │ │ ├── es5-shim.min.js │ │ │ ├── package.json │ │ │ └── tests │ │ │ │ ├── helpers │ │ │ │ ├── h-kill.js │ │ │ │ ├── h-matchers.js │ │ │ │ └── h.js │ │ │ │ ├── index.html │ │ │ │ ├── index.min.html │ │ │ │ ├── lib │ │ │ │ ├── jasmine-html.js │ │ │ │ ├── jasmine.css │ │ │ │ ├── jasmine.js │ │ │ │ ├── jasmine_favicon.png │ │ │ │ └── json2.js │ │ │ │ └── spec │ │ │ │ ├── s-array.js │ │ │ │ ├── s-date.js │ │ │ │ ├── s-function.js │ │ │ │ ├── s-number.js │ │ │ │ ├── s-object.js │ │ │ │ └── s-string.js │ │ ├── jquery-ui-1.10.3.custom.min.js │ │ ├── jquery.autogrow-textarea.js │ │ ├── jquery_1.11.0 │ │ │ ├── jquery.js │ │ │ ├── jquery.min.js │ │ │ └── jquery.min.map │ │ ├── json3_3.2.6 │ │ │ ├── LICENSE │ │ │ └── lib │ │ │ │ ├── json3.js │ │ │ │ └── json3.min.js │ │ ├── momentjs_2.5.1 │ │ │ └── momentjs.min.js │ │ ├── mousetrap-1.4.5.min.js │ │ ├── ng-grid-2.0.7-min.js │ │ ├── ng-grid-2.0.7.min.css │ │ ├── path_parser.js │ │ ├── prototype-1.5.1.js │ │ └── ui-utils.min-0.0.4.js │ ├── partials │ │ ├── root-stencil-item-template.html │ │ └── stencil-item-template.html │ ├── plugins.xml │ ├── popups │ │ ├── icon-template.html │ │ ├── save-model.html │ │ ├── select-shape.html │ │ └── unsaved-changes.html │ ├── select-shape-controller.js │ ├── stencil-controller.js │ ├── stencilsets │ │ └── bpmn2.0 │ │ │ └── icons │ │ │ ├── activity │ │ │ ├── event.subprocess.collapsed.png │ │ │ ├── event.subprocess.png │ │ │ ├── expanded.subprocess.png │ │ │ ├── list │ │ │ │ ├── type.business.rule.png │ │ │ │ ├── type.camel.png │ │ │ │ ├── type.manual.png │ │ │ │ ├── type.mule.png │ │ │ │ ├── type.receive.png │ │ │ │ ├── type.script.png │ │ │ │ ├── type.send.png │ │ │ │ ├── type.service.png │ │ │ │ ├── type.shell.png │ │ │ │ └── type.user.png │ │ │ ├── subprocess.png │ │ │ └── task.png │ │ │ ├── artifact │ │ │ └── text.annotation.png │ │ │ ├── catching │ │ │ ├── cancel.png │ │ │ ├── compensation.png │ │ │ ├── error.png │ │ │ ├── message.png │ │ │ ├── signal.png │ │ │ └── timer.png │ │ │ ├── connector │ │ │ ├── association.undirected.png │ │ │ ├── association.unidirectional.png │ │ │ ├── messageflow.png │ │ │ └── sequenceflow.png │ │ │ ├── dataobject │ │ │ └── data.store.png │ │ │ ├── diagram.png │ │ │ ├── endevent │ │ │ ├── cancel.png │ │ │ ├── error.png │ │ │ ├── none.png │ │ │ └── terminate.png │ │ │ ├── gateway │ │ │ ├── eventbased.png │ │ │ ├── exclusive.databased.png │ │ │ ├── inclusive.png │ │ │ └── parallel.png │ │ │ ├── startevent │ │ │ ├── error.png │ │ │ ├── message.png │ │ │ ├── none.png │ │ │ ├── signal.png │ │ │ └── timer.png │ │ │ ├── swimlane │ │ │ ├── lane.png │ │ │ └── pool.png │ │ │ └── throwing │ │ │ ├── none.png │ │ │ └── signal.png │ └── toolbar-controller.js │ └── modeler.html ├── stencilset.json └── stencilset.json.zh-cn /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | 4 | ### STS ### 5 | .apt_generated 6 | .classpath 7 | .factorypath 8 | .project 9 | .settings 10 | .springBeans 11 | 12 | ### IntelliJ IDEA ### 13 | .idea 14 | *.iws 15 | *.iml 16 | *.ipr 17 | 18 | ### NetBeans ### 19 | nbproject/private/ 20 | build/ 21 | nbbuild/ 22 | dist/ 23 | nbdist/ 24 | .nb-gradle/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spring boot 整合 Activiti Modeler 2 | 3 | ## 版本 4 | 5 | Spring boot : 1.5.3.RELEASE 6 | 7 | Activiti Modeler : 5.22.0 8 | 9 | ## 如何使用 10 | 1、 clone项目到本地后,直接运行SpringBootWithActivitiModelerApplication 11 | 12 | 2、 application.properties默认端口为8081,启动完成后打开: 13 | ``` 14 | http://localhost:8081/swagger-ui.html 15 | ``` 16 | 此页面由Swagger生成。 17 | 18 | 3、 在swagger页面先后调用“新建一个空模型”和“获取所有模型”,得到刚刚新建的模型的ID 19 | 20 | 4、打开Activiti modeler编辑器: 21 | 22 | ``` 23 | http://localhost:8081/static/modeler.html?modelId=1 24 | ``` 25 | 26 | 5、如果需要替换编辑器的语言,重命名交换resources目录下的stencilset.json与stencilset.json.zh-cn文件即可。 -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | me.chenhai.demo 7 | spring-boot-with-activiti-modeler 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | spring-boot-with-activiti-modeler 12 | Demo project for Spring Boot 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 1.5.3.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | 5.22.0 26 | 2.6.1 27 | 28 | 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-web 33 | 34 | 35 | org.springframework.boot 36 | spring-boot-starter-thymeleaf 37 | 38 | 39 | 40 | org.activiti 41 | activiti-spring-boot-starter-basic 42 | ${activiti.version} 43 | 44 | 45 | org.activiti 46 | activiti-spring-boot-starter-actuator 47 | ${activiti.version} 48 | 49 | 50 | org.activiti 51 | activiti-rest 52 | ${activiti.version} 53 | 54 | 55 | 56 | org.apache.xmlgraphics 57 | batik-codec 58 | 1.7 59 | 60 | 61 | org.apache.xmlgraphics 62 | batik-css 63 | 1.7 64 | 65 | 66 | org.apache.xmlgraphics 67 | batik-svg-dom 68 | 1.7 69 | 70 | 71 | org.apache.xmlgraphics 72 | batik-svggen 73 | 1.7 74 | 75 | 76 | org.activiti 77 | activiti-explorer 78 | ${activiti.version} 79 | 80 | 81 | org.activiti 82 | activiti-diagram-rest 83 | ${activiti.version} 84 | 85 | 86 | org.activiti 87 | activiti-simple-workflow 88 | ${activiti.version} 89 | 90 | 91 | org.activiti 92 | activiti-spring 93 | ${activiti.version} 94 | 95 | 96 | 97 | mysql 98 | mysql-connector-java 99 | runtime 100 | 101 | 102 | org.springframework.boot 103 | spring-boot-starter-test 104 | test 105 | 106 | 107 | 108 | 109 | io.springfox 110 | springfox-swagger2 111 | ${swagger.version} 112 | 113 | 114 | io.springfox 115 | springfox-swagger-ui 116 | ${swagger.version} 117 | 118 | 119 | 120 | 121 | 122 | 123 | org.springframework.boot 124 | spring-boot-maven-plugin 125 | 126 | 127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/SpringBootWithActivitiModelerApplication.java: -------------------------------------------------------------------------------- 1 | package me.chenhai.demo; 2 | 3 | import me.chenhai.demo.activiti.modeler.JsonpCallbackFilter; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.context.annotation.ComponentScan; 9 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 10 | 11 | @SpringBootApplication 12 | @ComponentScan({"org.activiti.rest.diagram", "me.chenhai.demo"}) 13 | @EnableAutoConfiguration(exclude = { 14 | org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class, 15 | org.activiti.spring.boot.SecurityAutoConfiguration.class, 16 | org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class 17 | }) 18 | //@EnableAsync 19 | public class SpringBootWithActivitiModelerApplication extends WebMvcConfigurerAdapter { 20 | 21 | public static void main(String[] args) { 22 | SpringApplication.run(SpringBootWithActivitiModelerApplication.class, args); 23 | } 24 | 25 | @Bean 26 | public JsonpCallbackFilter filter(){ 27 | return new JsonpCallbackFilter(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/activiti/modeler/FilterServletOutputStream.java: -------------------------------------------------------------------------------- 1 | package me.chenhai.demo.activiti.modeler; 2 | 3 | import java.io.DataOutputStream; 4 | import java.io.IOException; 5 | import java.io.OutputStream; 6 | 7 | import javax.servlet.ServletOutputStream; 8 | import javax.servlet.WriteListener; 9 | 10 | public class FilterServletOutputStream extends ServletOutputStream { 11 | 12 | private DataOutputStream stream; 13 | private WriteListener writeListener; 14 | 15 | public FilterServletOutputStream(OutputStream output) { 16 | stream = new DataOutputStream(output); 17 | } 18 | 19 | public void write(int b) throws IOException { 20 | stream.write(b); 21 | } 22 | 23 | public void write(byte[] b) throws IOException { 24 | stream.write(b); 25 | } 26 | 27 | public void write(byte[] b, int off, int len) throws IOException { 28 | stream.write(b, off, len); 29 | } 30 | 31 | @Override 32 | public void setWriteListener(WriteListener writeListener) { 33 | this.writeListener = writeListener; 34 | } 35 | 36 | @Override 37 | public boolean isReady() { 38 | return true; 39 | } 40 | } -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/activiti/modeler/GenericResponseWrapper.java: -------------------------------------------------------------------------------- 1 | package me.chenhai.demo.activiti.modeler; 2 | 3 | import java.io.ByteArrayOutputStream; 4 | import java.io.PrintWriter; 5 | 6 | import javax.servlet.ServletOutputStream; 7 | import javax.servlet.http.HttpServletResponse; 8 | import javax.servlet.http.HttpServletResponseWrapper; 9 | 10 | public class GenericResponseWrapper extends HttpServletResponseWrapper { 11 | private ByteArrayOutputStream output; 12 | private int contentLength; 13 | private String contentType; 14 | 15 | public GenericResponseWrapper(HttpServletResponse response) { 16 | super(response); 17 | output=new ByteArrayOutputStream(); 18 | } 19 | 20 | public byte[] getData() { 21 | return output.toByteArray(); 22 | } 23 | 24 | public ServletOutputStream getOutputStream() { 25 | return new FilterServletOutputStream(output); 26 | } 27 | 28 | public PrintWriter getWriter() { 29 | return new PrintWriter(getOutputStream(),true); 30 | } 31 | 32 | public void setContentLength(int length) { 33 | this.contentLength = length; 34 | super.setContentLength(length); 35 | } 36 | 37 | public int getContentLength() { 38 | return contentLength; 39 | } 40 | 41 | public void setContentType(String type) { 42 | this.contentType = type; 43 | super.setContentType(type); 44 | } 45 | 46 | public String getContentType() { 47 | return contentType; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/activiti/modeler/JsonpCallbackFilter.java: -------------------------------------------------------------------------------- 1 | package me.chenhai.demo.activiti.modeler; 2 | 3 | import java.io.ByteArrayOutputStream; 4 | import java.io.IOException; 5 | import java.io.OutputStream; 6 | import java.util.Map; 7 | 8 | import javax.servlet.Filter; 9 | import javax.servlet.FilterChain; 10 | import javax.servlet.FilterConfig; 11 | import javax.servlet.ServletException; 12 | import javax.servlet.ServletRequest; 13 | import javax.servlet.ServletResponse; 14 | import javax.servlet.http.HttpServletRequest; 15 | import javax.servlet.http.HttpServletResponse; 16 | 17 | import org.slf4j.Logger; 18 | import org.slf4j.LoggerFactory; 19 | 20 | public class JsonpCallbackFilter implements Filter { 21 | 22 | private static Logger log = LoggerFactory.getLogger(JsonpCallbackFilter.class); 23 | 24 | public void init(FilterConfig fConfig) throws ServletException {} 25 | 26 | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 27 | HttpServletRequest httpRequest = (HttpServletRequest) request; 28 | HttpServletResponse httpResponse = (HttpServletResponse) response; 29 | 30 | Map parms = httpRequest.getParameterMap(); 31 | 32 | if (parms.containsKey("callback")) { 33 | if (log.isDebugEnabled()) 34 | log.debug("Wrapping response with JSONP callback '" + parms.get("callback")[0] + "'"); 35 | 36 | OutputStream out = httpResponse.getOutputStream(); 37 | 38 | GenericResponseWrapper wrapper = new GenericResponseWrapper(httpResponse); 39 | 40 | chain.doFilter(request, wrapper); 41 | 42 | //handles the content-size truncation 43 | ByteArrayOutputStream outputStream = new ByteArrayOutputStream( ); 44 | outputStream.write(new String(parms.get("callback")[0] + "(").getBytes() ); 45 | outputStream.write(wrapper.getData()); 46 | outputStream.write(new String(");").getBytes()); 47 | byte jsonpResponse[] = outputStream.toByteArray( ); 48 | 49 | wrapper.setContentType("text/javascript;charset=UTF-8"); 50 | wrapper.setContentLength(jsonpResponse.length); 51 | 52 | out.write(jsonpResponse); 53 | 54 | out.close(); 55 | 56 | } else { 57 | chain.doFilter(request, response); 58 | } 59 | } 60 | 61 | public void destroy() {} 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/activiti/rest/editor/main/StencilsetRestResource.java: -------------------------------------------------------------------------------- 1 | /* Licensed under the Apache License, Version 2.0 (the "License"); 2 | * you may not use this file except in compliance with the License. 3 | * You may obtain a copy of the License at 4 | * 5 | * http://www.apache.org/licenses/LICENSE-2.0 6 | * 7 | * Unless required by applicable law or agreed to in writing, software 8 | * distributed under the License is distributed on an "AS IS" BASIS, 9 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | * See the License for the specific language governing permissions and 11 | * limitations under the License. 12 | */ 13 | package me.chenhai.demo.activiti.rest.editor.main; 14 | 15 | import java.io.InputStream; 16 | 17 | import org.activiti.engine.ActivitiException; 18 | import org.apache.commons.io.IOUtils; 19 | import org.springframework.web.bind.annotation.RequestMapping; 20 | import org.springframework.web.bind.annotation.RequestMethod; 21 | import org.springframework.web.bind.annotation.ResponseBody; 22 | import org.springframework.web.bind.annotation.RestController; 23 | 24 | /** 25 | * @author Tijs Rademakers 26 | */ 27 | @RestController 28 | @RequestMapping(value = "/service") 29 | public class StencilsetRestResource { 30 | 31 | @RequestMapping(value="/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8") 32 | public @ResponseBody String getStencilset() { 33 | InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json"); 34 | try { 35 | return IOUtils.toString(stencilsetStream, "utf-8"); 36 | } catch (Exception e) { 37 | throw new ActivitiException("Error while loading stencil set", e); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/activiti/rest/editor/model/ModelEditorJsonRestResource.java: -------------------------------------------------------------------------------- 1 | /* Licensed under the Apache License, Version 2.0 (the "License"); 2 | * you may not use this file except in compliance with the License. 3 | * You may obtain a copy of the License at 4 | * 5 | * http://www.apache.org/licenses/LICENSE-2.0 6 | * 7 | * Unless required by applicable law or agreed to in writing, software 8 | * distributed under the License is distributed on an "AS IS" BASIS, 9 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | * See the License for the specific language governing permissions and 11 | * limitations under the License. 12 | */ 13 | package me.chenhai.demo.activiti.rest.editor.model; 14 | 15 | import org.activiti.editor.constants.ModelDataJsonConstants; 16 | import org.activiti.engine.ActivitiException; 17 | import org.activiti.engine.RepositoryService; 18 | import org.activiti.engine.repository.Model; 19 | import org.apache.commons.lang3.StringUtils; 20 | import org.slf4j.Logger; 21 | import org.slf4j.LoggerFactory; 22 | import org.springframework.beans.factory.annotation.Autowired; 23 | import org.springframework.web.bind.annotation.PathVariable; 24 | import org.springframework.web.bind.annotation.RequestMapping; 25 | import org.springframework.web.bind.annotation.RequestMethod; 26 | import org.springframework.web.bind.annotation.RestController; 27 | 28 | import com.fasterxml.jackson.databind.ObjectMapper; 29 | import com.fasterxml.jackson.databind.node.ObjectNode; 30 | 31 | /** 32 | * @author Tijs Rademakers 33 | */ 34 | @RestController 35 | @RequestMapping(value = "/service") 36 | public class ModelEditorJsonRestResource implements ModelDataJsonConstants { 37 | 38 | protected static final Logger LOGGER = LoggerFactory.getLogger(ModelEditorJsonRestResource.class); 39 | 40 | @Autowired 41 | private RepositoryService repositoryService; 42 | 43 | @Autowired 44 | private ObjectMapper objectMapper; 45 | 46 | @RequestMapping(value="/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json") 47 | public ObjectNode getEditorJson(@PathVariable String modelId) { 48 | ObjectNode modelNode = null; 49 | 50 | Model model = repositoryService.getModel(modelId); 51 | 52 | if (model != null) { 53 | try { 54 | if (StringUtils.isNotEmpty(model.getMetaInfo())) { 55 | modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo()); 56 | } else { 57 | modelNode = objectMapper.createObjectNode(); 58 | modelNode.put(MODEL_NAME, model.getName()); 59 | } 60 | modelNode.put(MODEL_ID, model.getId()); 61 | ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree( 62 | new String(repositoryService.getModelEditorSource(model.getId()), "utf-8")); 63 | modelNode.put("model", editorJsonNode); 64 | 65 | } catch (Exception e) { 66 | LOGGER.error("Error creating model JSON", e); 67 | throw new ActivitiException("Error creating model JSON", e); 68 | } 69 | } 70 | return modelNode; 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/activiti/rest/editor/model/ModelSaveRestResource.java: -------------------------------------------------------------------------------- 1 | /* Licensed under the Apache License, Version 2.0 (the "License"); 2 | * you may not use this file except in compliance with the License. 3 | * You may obtain a copy of the License at 4 | * 5 | * http://www.apache.org/licenses/LICENSE-2.0 6 | * 7 | * Unless required by applicable law or agreed to in writing, software 8 | * distributed under the License is distributed on an "AS IS" BASIS, 9 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | * See the License for the specific language governing permissions and 11 | * limitations under the License. 12 | */ 13 | package me.chenhai.demo.activiti.rest.editor.model; 14 | 15 | import java.io.ByteArrayInputStream; 16 | import java.io.ByteArrayOutputStream; 17 | import java.io.InputStream; 18 | 19 | import org.activiti.editor.constants.ModelDataJsonConstants; 20 | import org.activiti.engine.ActivitiException; 21 | import org.activiti.engine.RepositoryService; 22 | import org.activiti.engine.repository.Model; 23 | import org.apache.batik.transcoder.TranscoderInput; 24 | import org.apache.batik.transcoder.TranscoderOutput; 25 | import org.apache.batik.transcoder.image.PNGTranscoder; 26 | import org.slf4j.Logger; 27 | import org.slf4j.LoggerFactory; 28 | import org.springframework.beans.factory.annotation.Autowired; 29 | import org.springframework.http.HttpStatus; 30 | import org.springframework.util.MultiValueMap; 31 | import org.springframework.web.bind.annotation.*; 32 | 33 | import com.fasterxml.jackson.databind.ObjectMapper; 34 | import com.fasterxml.jackson.databind.node.ObjectNode; 35 | 36 | /** 37 | * @author Tijs Rademakers 38 | */ 39 | @RestController 40 | @RequestMapping(value = "/service") 41 | public class ModelSaveRestResource implements ModelDataJsonConstants { 42 | 43 | protected static final Logger LOGGER = LoggerFactory.getLogger(ModelSaveRestResource.class); 44 | 45 | @Autowired 46 | private RepositoryService repositoryService; 47 | 48 | @Autowired 49 | private ObjectMapper objectMapper; 50 | 51 | @RequestMapping(value="/model/{modelId}/save", method = RequestMethod.PUT) 52 | @ResponseStatus(value = HttpStatus.OK) 53 | public void saveModel(@PathVariable String modelId, @RequestParam("name") String name, 54 | @RequestParam("json_xml") String json_xml, @RequestParam("svg_xml") String svg_xml, 55 | @RequestParam("description") String description) {//对接收参数进行了修改 56 | try { 57 | 58 | Model model = repositoryService.getModel(modelId); 59 | 60 | ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo()); 61 | 62 | modelJson.put(MODEL_NAME, name); 63 | modelJson.put(MODEL_DESCRIPTION, description); 64 | model.setMetaInfo(modelJson.toString()); 65 | model.setName(name); 66 | 67 | repositoryService.saveModel(model); 68 | 69 | repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes("utf-8")); 70 | 71 | InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes("utf-8")); 72 | TranscoderInput input = new TranscoderInput(svgStream); 73 | 74 | PNGTranscoder transcoder = new PNGTranscoder(); 75 | // Setup output 76 | ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 77 | TranscoderOutput output = new TranscoderOutput(outStream); 78 | 79 | // Do the transformation 80 | transcoder.transcode(input, output); 81 | final byte[] result = outStream.toByteArray(); 82 | repositoryService.addModelEditorSourceExtra(model.getId(), result); 83 | outStream.close(); 84 | 85 | 86 | } catch (Exception e) { 87 | LOGGER.error("Error saving model", e); 88 | throw new ActivitiException("Error saving model", e); 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/me/chenhai/demo/config/SwaggerConfig.java: -------------------------------------------------------------------------------- 1 | package me.chenhai.demo.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import springfox.documentation.builders.PathSelectors; 6 | import springfox.documentation.builders.RequestHandlerSelectors; 7 | import springfox.documentation.spi.DocumentationType; 8 | import springfox.documentation.spring.web.plugins.Docket; 9 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 10 | 11 | /** 12 | * Created by chenhai on 2017/10/12. 13 | */ 14 | @Configuration 15 | @EnableSwagger2 16 | public class SwaggerConfig { 17 | @Bean 18 | public Docket api() { 19 | return new Docket(DocumentationType.SWAGGER_2) 20 | .select() // 选择那些路径和api会生成document 21 | .apis(RequestHandlerSelectors.basePackage("me.chenhai.demo.activiti.rest.editor.controller")) // 对该包下的api进行监控 22 | .paths(PathSelectors.any()) // 对该包下的所有路径进行监控 23 | .build(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=activiti-with-boot 2 | server.port=8081 3 | -------------------------------------------------------------------------------- /src/main/resources/processes/SimpleUserTask.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/processes/SimpleUserTask.zip -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/bg.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/breadcrumbs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/breadcrumbs.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/checker-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/checker-bg.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/blue/message_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/blue/message_catch.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/business_rule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/business_rule.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/error_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/error_catch.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/error_throw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/error_throw.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/manual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/manual.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/message_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/message_catch.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/message_throw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/message_throw.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/receive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/receive.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/script.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/send.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/service.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/signal_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/signal_catch.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/signal_throw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/signal_throw.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/timer.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/images/deployer/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/images/deployer/user.png -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/js/ActivitiRest.js: -------------------------------------------------------------------------------- 1 | var ActivitiRest = { 2 | options: {}, 3 | getProcessDefinitionByKey: function(processDefinitionKey, callback) { 4 | var url = Lang.sub(this.options.processDefinitionByKeyUrl, {processDefinitionKey: processDefinitionKey}); 5 | 6 | $.ajax({ 7 | url: url, 8 | dataType: 'jsonp', 9 | cache: false, 10 | async: true, 11 | success: function(data, textStatus) { 12 | var processDefinition = data; 13 | if (!processDefinition) { 14 | console.error("Process definition '" + processDefinitionKey + "' not found"); 15 | } else { 16 | callback.apply({processDefinitionId: processDefinition.id}); 17 | } 18 | } 19 | }).done(function(data, textStatus) { 20 | console.log("ajax done"); 21 | }).fail(function(jqXHR, textStatus, error){ 22 | console.error('Get diagram layout['+processDefinitionKey+'] failure: ', textStatus, 'error: ', error, jqXHR); 23 | }); 24 | }, 25 | 26 | getProcessDefinition: function(processDefinitionId, callback) { 27 | var url = Lang.sub(this.options.processDefinitionUrl, {processDefinitionId: processDefinitionId}); 28 | 29 | $.ajax({ 30 | url: url, 31 | dataType: 'jsonp', 32 | cache: false, 33 | async: true, 34 | success: function(data, textStatus) { 35 | var processDefinitionDiagramLayout = data; 36 | if (!processDefinitionDiagramLayout) { 37 | console.error("Process definition diagram layout '" + processDefinitionId + "' not found"); 38 | return; 39 | } else { 40 | callback.apply({processDefinitionDiagramLayout: processDefinitionDiagramLayout}); 41 | } 42 | } 43 | }).done(function(data, textStatus) { 44 | console.log("ajax done"); 45 | }).fail(function(jqXHR, textStatus, error){ 46 | console.log('Get diagram layout['+processDefinitionId+'] failure: ', textStatus, jqXHR); 47 | }); 48 | }, 49 | 50 | getHighLights: function(processInstanceId, callback) { 51 | var url = Lang.sub(this.options.processInstanceHighLightsUrl, {processInstanceId: processInstanceId}); 52 | 53 | $.ajax({ 54 | url: url, 55 | dataType: 'jsonp', 56 | cache: false, 57 | async: true, 58 | success: function(data, textStatus) { 59 | console.log("ajax returned data"); 60 | var highLights = data; 61 | if (!highLights) { 62 | console.log("highLights not found"); 63 | return; 64 | } else { 65 | callback.apply({highLights: highLights}); 66 | } 67 | } 68 | }).done(function(data, textStatus) { 69 | console.log("ajax done"); 70 | }).fail(function(jqXHR, textStatus, error){ 71 | console.log('Get HighLights['+processInstanceId+'] failure: ', textStatus, jqXHR); 72 | }); 73 | } 74 | }; -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/js/ActivityImpl.js: -------------------------------------------------------------------------------- 1 | /** * * @author Tom Baeyens * @author (Javascript) Dmitry Farafonov */ var ActivityImpl = function(activityJson){ this.outgoingTransitions = []; this.outgoingTransitions = []; this.incomingTransitions = []; this.activityBehavior = null; this.parent = null; this.isScope = false; this.isAsync = false; this.isExclusive = false; this.x = -1; this.y = -1; this.width = -1; this.height = -1; this.properties = {}; //console.log("activityJson: ", activityJson); if (activityJson != undefined) { this.setId(activityJson.activityId); for (var propertyName in activityJson.properties) { this.setProperty(propertyName, activityJson.properties[propertyName]); } //this.setProperty("name", activityJson.activityName); //this.setProperty("type", activityJson.activityType); this.setX(activityJson.x); this.setY(activityJson.y); this.setWidth(activityJson.width); this.setHeight(activityJson.height); if (activityJson.multiInstance) this.setProperty("multiInstance", activityJson.multiInstance); if (activityJson.collapsed) { this.setProperty("collapsed", activityJson.collapsed); } if (activityJson.isInterrupting != undefined) this.setProperty("isInterrupting", activityJson.isInterrupting); } }; ActivityImpl.prototype = { outgoingTransitions: [], outgoingTransitions: [], incomingTransitions: [], activityBehavior: null, parent: null, isScope: false, isAsync: false, isExclusive: false, id: null, properties: {}, // Graphical information x: -1, y: -1, width: -1, height: -1, setId: function(id){ this.id = id; }, getId: function(){ return this.id; }, setProperty: function(name, value){ this.properties[name] = value; }, getProperty: function(name){ return this.properties[name]; }, createOutgoingTransition: function(transitionId){ }, toString: function(id) { return "Activity("+id+")"; }, getParentActivity: function(){ /* if (parent instanceof ActivityImpl) { 79 return (ActivityImpl) parent; 80 } 81 return null; */ return this.parent; }, // restricted setters /////////////////////////////////////////////////////// setOutgoingTransitions: function(outgoingTransitions){ this.outgoingTransitions = outgoingTransitions; }, setParent: function(parent){ this.parent = parent; }, setIncomingTransitions: function(incomingTransitions){ this.incomingTransitions = incomingTransitions; }, // getters and setters ////////////////////////////////////////////////////// getOutgoingTransitions: function(){ return this.outgoingTransitions; }, getActivityBehavior: function(){ return this.activityBehavior; }, setActivityBehavior: function(activityBehavior){ this.activityBehavior = activityBehavior; }, getParent: function(){ return this.parent; }, getIncomingTransitions: function(){ return this.incomingTransitions; }, isScope: function(){ return this.isScope; }, setScope: function(isScope){ this.isScope = isScope; }, getX: function(){ return this.x; }, setX: function(x){ this.x = x; }, getY: function(){ return this.y; }, setY: function(y){ this.y = y; }, getWidth: function(){ return this.width; }, setWidth: function(width){ this.width = width; }, getHeight: function(){ return this.height; }, setHeight: function(height){ this.height = height; }, isAsync: function() { return this.isAsync; }, setAsync: function(isAsync) { this.isAsync = isAsync; }, isExclusive: function() { return this.isExclusive; }, setExclusive: function(isExclusive) { this.isExclusive = isExclusive; }, vvoid: function(){} }; -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/js/Polyline.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/diagram-viewer/js/Polyline.js -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/js/jquery/jquery.asyncqueue.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the jquery plugin "asyncQueue". 3 | * 4 | * (c) Sebastien Roch 5 | * @author (parallel) Dmitry Farafonov 6 | * 7 | * For the full copyright and license information, please view the LICENSE 8 | * file that was distributed with this source code. 9 | */ 10 | (function($){ 11 | $.AsyncQueue = function() { 12 | var that = this, 13 | queue = [], 14 | completeFunc, 15 | failureFunc, 16 | paused = false, 17 | lastCallbackData, 18 | _run, 19 | _complete, 20 | inQueue = 0, 21 | defaultTimeOut = 10; 22 | 23 | _run = function() { 24 | var f = queue.shift(); 25 | 26 | if (f) { 27 | inQueue++; 28 | setTimeout(function(){ 29 | f.fn.apply(that, [that]); 30 | 31 | if (!f.isParallel) 32 | if (paused === false) { 33 | _run(); 34 | } 35 | inQueue --; 36 | if (inQueue == 0 && queue.length == 0) 37 | _complete(); 38 | }, f.timeOut); 39 | 40 | if (f.isParallel) 41 | if (paused === false) { 42 | _run(); 43 | } 44 | } 45 | }; 46 | 47 | _complete = function(){ 48 | if (completeFunc) 49 | completeFunc.apply(that, [that]); 50 | }; 51 | 52 | this.onComplete = function(func) { 53 | completeFunc = func; 54 | }; 55 | 56 | this.onFailure = function(func) { 57 | failureFunc = func; 58 | }; 59 | 60 | this.add = function(func) { 61 | // TODO: add callback for queue[i] complete 62 | 63 | var obj = arguments[0]; 64 | if (obj && Object.prototype.toString.call(obj) === "[object Array]") { 65 | var fn = arguments[1]; 66 | var timeOut = (typeof(arguments[2]) != "undefined")? arguments[2] : defaultTimeOut; 67 | if (typeof(fn) == "function") { 68 | for(var i = 0; i < obj.length; i++) { 69 | var f = function(objx){ 70 | queue.push({isParallel: true, fn: function(){fn.apply(that, [that, objx]);}, timeOut: timeOut}); 71 | }(obj[i]) 72 | } 73 | } 74 | } else { 75 | var fn = arguments[0]; 76 | var timeOut = (typeof(arguments[1]) != "undefined")? arguments[2] : defaultTimeOut; 77 | queue.push({isParallel: false, fn: func, timeOut: timeOut}); 78 | } 79 | return this; 80 | }; 81 | 82 | this.addParallel = function(func, timeOut) { 83 | // TODO: add callback for queue[i] complete 84 | 85 | queue.push({isParallel: true, fn: func, timeOut: timeOut}); 86 | return this; 87 | }; 88 | 89 | this.storeData = function(dataObject) { 90 | lastCallbackData = dataObject; 91 | return this; 92 | }; 93 | 94 | this.lastCallbackData = function () { 95 | return lastCallbackData; 96 | }; 97 | 98 | this.run = function() { 99 | paused = false; 100 | _run(); 101 | }; 102 | 103 | this.pause = function () { 104 | paused = true; 105 | return this; 106 | }; 107 | 108 | this.failure = function() { 109 | paused = true; 110 | if (failureFunc) { 111 | var args = [that]; 112 | for(i = 0; i < arguments.length; i++) { 113 | args.push(arguments[i]); 114 | } 115 | failureFunc.apply(that, args); 116 | } 117 | }; 118 | 119 | this.size = function(){ 120 | return queue.length; 121 | }; 122 | 123 | return this; 124 | } 125 | })(jQuery); 126 | -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/js/jquery/jquery.progressbar.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @ Dmitry Farafonov 3 | */ 4 | 5 | (function($){ 6 | $.ProgressBar = function(options) { 7 | this.element = $(options.boundingBox); 8 | if (options.on && options.on.complete){ 9 | this.onComplete = options.on.complete; 10 | } 11 | if (options.on && options.on.valueChange){ 12 | this.onValueChange = options.on.valueChange; 13 | } 14 | 15 | this._create(); 16 | 17 | if (options.label) 18 | this.set("label", options.label); 19 | if (options.value) 20 | this.value(options.value); 21 | if (options.max) 22 | this.set("max", options.max); 23 | }; 24 | $.ProgressBar.prototype = { 25 | options: { 26 | value: 0, 27 | max: 100 28 | }, 29 | 30 | min: 0, 31 | 32 | _create: function() { 33 | this.element 34 | .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) 35 | .attr({ 36 | role: "progressbar", 37 | "aria-valuemin": this.min, 38 | "aria-valuemax": this.options.max, 39 | "aria-valuenow": this._value() 40 | }); 41 | 42 | this.valueDiv = $( "
" ) 43 | .appendTo( this.element ); 44 | 45 | this.valueDiv = $( "
" ) 46 | .appendTo( this.element ); 47 | 48 | this.oldValue = this._value(); 49 | this._refreshValue(); 50 | }, 51 | 52 | _destroy: function() { 53 | this.element 54 | .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) 55 | .removeAttr( "role" ) 56 | .removeAttr( "aria-valuemin" ) 57 | .removeAttr( "aria-valuemax" ) 58 | .removeAttr( "aria-valuenow" ); 59 | 60 | this.valueDiv.remove(); 61 | }, 62 | 63 | value: function( newValue ) { 64 | if ( newValue === undefined ) { 65 | return this._value(); 66 | } 67 | 68 | this._setOption( "value", newValue ); 69 | return this; 70 | }, 71 | 72 | _setOption: function( key, value ) { 73 | if ( key === "value" ) { 74 | //var oldVal = this.options.value; 75 | this.options.value = value; 76 | this._refreshValue(); 77 | 78 | if (this.onValueChange) 79 | this.onValueChange.apply(this, [{oldVal: this.oldValue, newVal: value}]); 80 | 81 | if ( this._value() === this.options.max ) { 82 | //this._trigger( "complete" ); 83 | if (this.onComplete) 84 | this.onComplete.apply(this); 85 | } 86 | } else if (key === "label") { 87 | $(this.element).find(".ui-progressbar-label").html(value); 88 | } else if (key === "max") { 89 | this.options.max = value; 90 | } 91 | 92 | //this._super( key, value ); 93 | }, 94 | 95 | _value: function() { 96 | var val = this.options.value; 97 | // normalize invalid value 98 | if ( typeof val !== "number" ) { 99 | val = 0; 100 | } 101 | return Math.min( this.options.max, Math.max( this.min, val ) ); 102 | }, 103 | 104 | _percentage: function() { 105 | return 100 * this._value() / this.options.max; 106 | }, 107 | 108 | _refreshValue: function() { 109 | var value = this.value(), 110 | percentage = this._percentage(); 111 | 112 | if ( this.oldValue !== value ) { 113 | this.oldValue = value; 114 | //this._trigger( "change" ); 115 | } 116 | 117 | this.valueDiv 118 | .toggle( value > this.min ) 119 | .toggleClass( "ui-corner-right", value === this.options.max ) 120 | .width( percentage.toFixed(0) + "%" ); 121 | this.element.attr( "aria-valuenow", value ); 122 | 123 | //$(this.element).find(".ui-progressbar-label").html(value + "%"); 124 | }, 125 | 126 | set: function(key, value){ 127 | this._setOption(key, value); 128 | } 129 | }; 130 | 131 | })( jQuery ); -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/js/jstools.js: -------------------------------------------------------------------------------- 1 | if (typeof(console) == "undefined") { 2 | var console = { 3 | info: function(){}, 4 | warn: function(){}, 5 | error: function(){}, 6 | log: function(){}, 7 | time: function(){}, 8 | timeEnd: function(){} 9 | }; 10 | } 11 | 12 | if(!Array.isArray) { 13 | Array.isArray = function (vArg) { 14 | return Object.prototype.toString.call(vArg) === "[object Array]"; 15 | }; 16 | } 17 | 18 | if (!Object.isSVGElement) { 19 | Object.isSVGElement = function(vArg) { 20 | var str = Object.prototype.toString.call(vArg); 21 | return (str.indexOf("[object SVG") == 0); 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/public/static/diagram-viewer/style.css: -------------------------------------------------------------------------------- 1 | body { background: #fafafa; color: #708090; /* font: 300 100.1% "Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif; */ font-family: Verdana, sans-serif, Arial; font-size: 10px; } .wrapper{ height: 100%; position: relative; width: 100%; } /* #holder { height: 480px; width: 640px; b_ackground: #F8F8FF; -moz-border-radius: 10px; -webkit-border-radius: 10px; -webkit-box-shadow: 0 1px 3px #666; background: #DDD url(./images/bg.png); /* background: #DDD url(./images/checker-bg.png); * / b_order:0px solid #dedede; } */ div.diagramHolder { float:left; } div.diagram{ border:1px solid #dedede; margin: 5px; padding: 5px; background: #FFF; } div.diagram.hidden{ display:none; } svg { background: #DDD url(./images/bg.png); } div.diagram-info { float:left; position: relative; padding: 5px; } /* Breadcrumbs */ #diagramBreadCrumbs { margin-left: 2px; margin-right: 2px; margin-top: 10px; } #diagramBreadCrumbs ul { list-style: none; background-color: white; border: 1px solid #DEDEDE; border-color: #C0C2C5; margin: 0; margin-bottom: 10px; margin-left: 0; -webkit-padding-start: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } #diagramBreadCrumbs li { /*text-decoration: underline;*/ display: inline-block; vertical-align: middle; padding-left: .75em; padding-right: 0; cursor: pointer; } #diagramBreadCrumbs li.selected { color: #9370DB; color: #4876FF; color: #4F94CD; font-weight: bold; } #diagramBreadCrumbs li span { background: url(images/breadcrumbs.png) no-repeat 100% 50%; display: block; padding: .5em 15px .5em 0; } /* Progress bar */ .ui-progressbar { height: 25px; /*height:2em; text-align: left; overflow: hidden; */ background: white; border: 1px solid #949DAD; margin: 2px; overflow: hidden; padding: 1px; position: relative; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } .ui-progressbar .ui-progressbar-value { m_argin: -1px; height:100%; background: #D4E4FF; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } .ui-widget-header a { color: #222222/*{fcHeader}*/; } .ui-progressbar .ui-progressbar-label{ position: absolute; margin-top: 7px; border:0px solid red; width: 100%; text-align: center; } -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/app-cfg.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 'use strict'; 20 | 21 | var ACTIVITI = ACTIVITI || {}; 22 | 23 | ACTIVITI.CONFIG = { 24 | 'contextRoot' : '/service' 25 | }; 26 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties-assignment-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | /* 21 | * Assignment 22 | */ 23 | var KisBpmAssignmentCtrl = [ '$scope', '$modal', function($scope, $modal) { 24 | 25 | // Config for the modal window 26 | var opts = { 27 | template: 'editor-app/configuration/properties/assignment-popup.html?version=' + Date.now(), 28 | scope: $scope 29 | }; 30 | 31 | // Open the dialog 32 | $modal(opts); 33 | }]; 34 | 35 | var KisBpmAssignmentPopupCtrl = [ '$scope', function($scope) { 36 | 37 | // Put json representing assignment on scope 38 | if ($scope.property.value !== undefined && $scope.property.value !== null 39 | && $scope.property.value.assignment !== undefined 40 | && $scope.property.value.assignment !== null) 41 | { 42 | $scope.assignment = $scope.property.value.assignment; 43 | } else { 44 | $scope.assignment = {}; 45 | } 46 | 47 | if ($scope.assignment.candidateUsers == undefined || $scope.assignment.candidateUsers.length == 0) 48 | { 49 | $scope.assignment.candidateUsers = [{value: ''}]; 50 | } 51 | 52 | // Click handler for + button after enum value 53 | var userValueIndex = 1; 54 | $scope.addCandidateUserValue = function(index) { 55 | $scope.assignment.candidateUsers.splice(index + 1, 0, {value: 'value ' + userValueIndex++}); 56 | }; 57 | 58 | // Click handler for - button after enum value 59 | $scope.removeCandidateUserValue = function(index) { 60 | $scope.assignment.candidateUsers.splice(index, 1); 61 | }; 62 | 63 | if ($scope.assignment.candidateGroups == undefined || $scope.assignment.candidateGroups.length == 0) 64 | { 65 | $scope.assignment.candidateGroups = [{value: ''}]; 66 | } 67 | 68 | var groupValueIndex = 1; 69 | $scope.addCandidateGroupValue = function(index) { 70 | $scope.assignment.candidateGroups.splice(index + 1, 0, {value: 'value ' + groupValueIndex++}); 71 | }; 72 | 73 | // Click handler for - button after enum value 74 | $scope.removeCandidateGroupValue = function(index) { 75 | $scope.assignment.candidateGroups.splice(index, 1); 76 | }; 77 | 78 | $scope.save = function() { 79 | 80 | $scope.property.value = {}; 81 | handleAssignmentInput($scope); 82 | $scope.property.value.assignment = $scope.assignment; 83 | 84 | $scope.updatePropertyInModel($scope.property); 85 | $scope.close(); 86 | }; 87 | 88 | // Close button handler 89 | $scope.close = function() { 90 | handleAssignmentInput($scope); 91 | $scope.property.mode = 'read'; 92 | $scope.$hide(); 93 | }; 94 | 95 | var handleAssignmentInput = function($scope) { 96 | if ($scope.assignment.candidateUsers) 97 | { 98 | var emptyUsers = true; 99 | var toRemoveIndexes = []; 100 | for (var i = 0; i < $scope.assignment.candidateUsers.length; i++) 101 | { 102 | if ($scope.assignment.candidateUsers[i].value != '') 103 | { 104 | emptyUsers = false; 105 | } 106 | else 107 | { 108 | toRemoveIndexes[toRemoveIndexes.length] = i; 109 | } 110 | } 111 | 112 | for (var i = 0; i < toRemoveIndexes.length; i++) 113 | { 114 | $scope.assignment.candidateUsers.splice(toRemoveIndexes[i], 1); 115 | } 116 | 117 | if (emptyUsers) 118 | { 119 | $scope.assignment.candidateUsers = undefined; 120 | } 121 | } 122 | 123 | if ($scope.assignment.candidateGroups) 124 | { 125 | var emptyGroups = true; 126 | var toRemoveIndexes = []; 127 | for (var i = 0; i < $scope.assignment.candidateGroups.length; i++) 128 | { 129 | if ($scope.assignment.candidateGroups[i].value != '') 130 | { 131 | emptyGroups = false; 132 | } 133 | else 134 | { 135 | toRemoveIndexes[toRemoveIndexes.length] = i; 136 | } 137 | } 138 | 139 | for (var i = 0; i < toRemoveIndexes.length; i++) 140 | { 141 | $scope.assignment.candidateGroups.splice(toRemoveIndexes[i], 1); 142 | } 143 | 144 | if (emptyGroups) 145 | { 146 | $scope.assignment.candidateGroups = undefined; 147 | } 148 | } 149 | }; 150 | }]; -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties-condition-expression-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | /* 21 | * Condition expression 22 | */ 23 | 24 | var KisBpmConditionExpressionCtrl = [ '$scope', '$modal', function($scope, $modal) { 25 | 26 | // Config for the modal window 27 | var opts = { 28 | template: 'editor-app/configuration/properties/condition-expression-popup.html?version=' + Date.now(), 29 | scope: $scope 30 | }; 31 | 32 | // Open the dialog 33 | $modal(opts); 34 | }]; 35 | 36 | var KisBpmConditionExpressionPopupCtrl = [ '$scope', '$translate', '$http', function($scope, $translate, $http) { 37 | 38 | // Put json representing condition on scope 39 | if ($scope.property.value !== undefined && $scope.property.value !== null) { 40 | 41 | $scope.conditionExpression = {value: $scope.property.value}; 42 | 43 | } else { 44 | $scope.conditionExpression = {value: ''}; 45 | } 46 | 47 | $scope.save = function() { 48 | $scope.property.value = $scope.conditionExpression.value; 49 | $scope.updatePropertyInModel($scope.property); 50 | $scope.close(); 51 | }; 52 | 53 | // Close button handler 54 | $scope.close = function() { 55 | $scope.property.mode = 'read'; 56 | $scope.$hide(); 57 | }; 58 | }]; -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties-custom-controllers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties-default-controllers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | /* 21 | * String controller 22 | */ 23 | 24 | var KisBpmStringPropertyCtrl = [ '$scope', function ($scope) { 25 | 26 | $scope.shapeId = $scope.selectedShape.id; 27 | $scope.valueFlushed = false; 28 | /** Handler called when input field is blurred */ 29 | $scope.inputBlurred = function() { 30 | $scope.valueFlushed = true; 31 | if ($scope.property.value) { 32 | $scope.property.value = $scope.property.value.replace(/(<([^>]+)>)/ig,""); 33 | } 34 | $scope.updatePropertyInModel($scope.property); 35 | }; 36 | 37 | $scope.enterPressed = function(keyEvent) { 38 | if (keyEvent && keyEvent.which === 13) { 39 | keyEvent.preventDefault(); 40 | $scope.inputBlurred(); // we want to do the same as if the user would blur the input field 41 | } 42 | }; 43 | 44 | $scope.$on('$destroy', function controllerDestroyed() { 45 | if(!$scope.valueFlushed) { 46 | if ($scope.property.value) { 47 | $scope.property.value = $scope.property.value.replace(/(<([^>]+)>)/ig,""); 48 | } 49 | $scope.updatePropertyInModel($scope.property, $scope.shapeId); 50 | } 51 | }); 52 | 53 | }]; 54 | 55 | /* 56 | * Boolean controller 57 | */ 58 | 59 | var KisBpmBooleanPropertyCtrl = ['$scope', function ($scope) { 60 | 61 | $scope.changeValue = function() { 62 | if ($scope.property.key === 'oryx-defaultflow' && $scope.property.value) { 63 | var selectedShape = $scope.selectedShape; 64 | if (selectedShape) { 65 | var incomingNodes = selectedShape.getIncomingShapes(); 66 | if (incomingNodes && incomingNodes.length > 0) { 67 | // get first node, since there can be only one for a sequence flow 68 | var rootNode = incomingNodes[0]; 69 | var flows = rootNode.getOutgoingShapes(); 70 | if (flows && flows.length > 1) { 71 | // in case there are more flows, check if another flow is already defined as default 72 | for (var i = 0; i < flows.length; i++) { 73 | if (flows[i].resourceId != selectedShape.resourceId) { 74 | var defaultFlowProp = flows[i].properties['oryx-defaultflow']; 75 | if (defaultFlowProp) { 76 | flows[i].setProperty('oryx-defaultflow', false, true); 77 | } 78 | } 79 | } 80 | } 81 | } 82 | } 83 | } 84 | $scope.updatePropertyInModel($scope.property); 85 | }; 86 | 87 | }]; 88 | 89 | /* 90 | * Text controller 91 | */ 92 | 93 | var KisBpmTextPropertyCtrl = [ '$scope', '$modal', function($scope, $modal) { 94 | 95 | var opts = { 96 | template: 'editor-app/configuration/properties/text-popup.html?version=' + Date.now(), 97 | scope: $scope 98 | }; 99 | 100 | // Open the dialog 101 | $modal(opts); 102 | }]; 103 | 104 | var KisBpmTextPropertyPopupCtrl = ['$scope', function($scope) { 105 | 106 | $scope.save = function() { 107 | $scope.updatePropertyInModel($scope.property); 108 | $scope.close(); 109 | }; 110 | 111 | $scope.close = function() { 112 | $scope.property.mode = 'read'; 113 | $scope.$hide(); 114 | }; 115 | }]; -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties-message-scope-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | angular.module('activitiModeler').controller('ActivitiMessageRefCtrl', [ '$scope', function($scope) { 21 | 22 | // Find the parent shape on which the message definitions are defined 23 | var messageDefinitionsProperty = undefined; 24 | var parent = $scope.selectedShape; 25 | while (parent !== null && parent !== undefined && messageDefinitionsProperty === undefined) { 26 | if (parent.properties && parent.properties['oryx-messagedefinitions']) { 27 | messageDefinitionsProperty = parent.properties['oryx-messagedefinitions']; 28 | } else { 29 | parent = parent.parent; 30 | } 31 | } 32 | 33 | try { 34 | messageDefinitionsProperty = JSON.parse(messageDefinitionsProperty); 35 | if (typeof messageDefinitionsProperty == 'string') { 36 | messageDefinitionsProperty = JSON.parse(messageDefinitionsProperty); 37 | } 38 | } catch (err) { 39 | // Do nothing here, just to be sure we try-catch it 40 | } 41 | 42 | $scope.messageDefinitions = messageDefinitionsProperty; 43 | 44 | 45 | $scope.messageChanged = function() { 46 | $scope.updatePropertyInModel($scope.property); 47 | }; 48 | }]); -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties-multiinstance-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | /* 21 | * Execution listeners 22 | */ 23 | 24 | var KisBpmMultiInstanceCtrl = [ '$scope', function($scope) { 25 | 26 | if ($scope.property.value == undefined && $scope.property.value == null) 27 | { 28 | $scope.property.value = 'None'; 29 | } 30 | 31 | $scope.multiInstanceChanged = function() { 32 | $scope.updatePropertyInModel($scope.property); 33 | }; 34 | }]; -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties-signal-scope-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | angular.module('activitiModeler').controller('ActivitiSignalRefCtrl', [ '$scope', function($scope) { 20 | 21 | // Find the parent shape on which the signal definitions are defined 22 | var signalDefinitionsProperty = undefined; 23 | var parent = $scope.selectedShape; 24 | while (parent !== null && parent !== undefined && signalDefinitionsProperty === undefined) { 25 | if (parent.properties && parent.properties['oryx-signaldefinitions']) { 26 | signalDefinitionsProperty = parent.properties['oryx-signaldefinitions']; 27 | } else { 28 | parent = parent.parent; 29 | } 30 | } 31 | 32 | try { 33 | signalDefinitionsProperty = JSON.parse(signalDefinitionsProperty); 34 | if (typeof signalDefinitionsProperty == 'string') { 35 | signalDefinitionsProperty = JSON.parse(signalDefinitionsProperty); 36 | } 37 | } catch (err) { 38 | // Do nothing here, just to be sure we try-catch it 39 | } 40 | 41 | $scope.signalDefinitions = signalDefinitionsProperty; 42 | 43 | 44 | $scope.signalChanged = function() { 45 | $scope.updatePropertyInModel($scope.property); 46 | }; 47 | }]); -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/assignment-display-template.html: -------------------------------------------------------------------------------- 1 | {{'PROPERTY.ASSIGNMENT.ASSIGNEE_DISPLAY' | translate:property.value.assignment }} 2 | {{'PROPERTY.ASSIGNMENT.CANDIDATE_USERS_DISPLAY' | translate:property.value.assignment.candidateUsers}} 3 | {{'PROPERTY.ASSIGNMENT.CANDIDATE_GROUPS_DISPLAY' | translate:property.value.assignment.candidateGroups}} 4 | PROPERTY.ASSIGNMENT.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/assignment-popup.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/assignment-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/boolean-property-template.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
-------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/condition-expression-display-template.html: -------------------------------------------------------------------------------- 1 | {{property.value|limitTo:20}} 2 | {{'PROPERTY.SEQUENCEFLOW.CONDITION.NO-CONDITION-DISPLAY' | translate}} -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/condition-expression-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 62 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/fields-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/form-properties-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.FORMPROPERTIES.VALUE' | translate:property.value.formProperties}} 3 | PROPERTY.FORMPROPERTIES.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/form-properties-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/in-parameters-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.INPARAMETERS.VALUE' | translate:property.value.inParameters}} 3 | PROPERTY.INPARAMETERS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/in-parameters-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 54 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/in-parameters-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/message-definitions-display-template.html: -------------------------------------------------------------------------------- 1 | {{'PROPERTY.MESSAGEDEFINITIONS.DISPLAY' | translate:property.value}} 2 | PROPERTY.MESSAGEDEFINITIONS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/message-definitions-popup.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/message-definitions-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/message-property-write-template.html: -------------------------------------------------------------------------------- 1 |
2 | 4 |
-------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/multiinstance-property-write-template.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 8 |
-------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/out-parameters-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.OUTPARAMETERS.VALUE' | translate:property.value.outParameters}} 3 | PROPERTY.OUTPARAMETERS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/out-parameters-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 54 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/out-parameters-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/sequenceflow-order-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | PROPERTY.SEQUENCEFLOW.ORDER.NOT.EMPTY 3 | PROPERTY.SEQUENCEFLOW.ORDER.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/sequenceflow-order-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 48 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/sequenceflow-order-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/signal-definitions-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.SIGNALDEFINITIONS.DISPLAY' | translate:property.value}} 3 | PROPERTY.SIGNALDEFINITIONS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/signal-definitions-popup.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/signal-definitions-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/signal-property-write-template.html: -------------------------------------------------------------------------------- 1 |
2 | 4 |
-------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/string-property-write-mode-template.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 8 |
-------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/subprocess-reference-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{property.value.name}} 3 | PROPERTY.SUBPROCESSREFERENCE.EMPTY 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/subprocess-reference-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 44 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/subprocess-reference-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/task-listeners-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.TASKLISTENERS.VALUE' | translate:property.value.taskListeners}} 3 | PROPERTY.TASKLISTENERS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/task-listeners-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/configuration/properties/text-popup.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/popups/select-shape.html: -------------------------------------------------------------------------------- 1 | 2 | 21 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/popups/unsaved-changes.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.collapsed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.collapsed.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/expanded.subprocess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/expanded.subprocess.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.business.rule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.business.rule.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.camel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.camel.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.manual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.manual.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.mule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.mule.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.receive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.receive.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.script.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.send.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.service.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.shell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.shell.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.user.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/subprocess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/subprocess.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/task.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/artifact/text.annotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/artifact/text.annotation.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/cancel.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/compensation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/compensation.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/error.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/message.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/signal.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/timer.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/association.undirected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/association.undirected.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/association.unidirectional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/association.unidirectional.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/messageflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/messageflow.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/sequenceflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/sequenceflow.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/dataobject/data.store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/dataobject/data.store.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/diagram.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/cancel.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/error.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/none.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/terminate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/terminate.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/eventbased.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/eventbased.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/exclusive.databased.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/exclusive.databased.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/inclusive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/inclusive.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/parallel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/parallel.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/error.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/message.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/none.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/signal.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/timer.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/swimlane/lane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/swimlane/lane.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/swimlane/pool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/swimlane/pool.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/throwing/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/throwing/none.png -------------------------------------------------------------------------------- /src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/throwing/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secsea/spring-boot-with-activiti-modeler/1bc3e1747dfebc338c16924846aa1d7ef6abb014/src/main/resources/public/static/editor-app/stencilsets/bpmn2.0/icons/throwing/signal.png --------------------------------------------------------------------------------