From 95ea2d54eeae9343ea33777b9d54a9ebb24d0537 Mon Sep 17 00:00:00 2001 From: Josh Long Date: Sat, 4 Sep 2010 18:53:18 -0700 Subject: [PATCH] adding a lot of simple examples of the activiti gateway support. --- .../integration/activiti/CustomerService.java | 37 +++++++++ .../activiti/signup/CheckForm.java | 25 ++++++ .../activiti/signup/SendEmail.java | 17 ++++ .../activiti/signup/SignupClient.java | 81 +++++++++++++++++++ .../activiti/SignupTest-context.xml | 50 ++++++++++++ .../integration/activiti/SimpleContext.xml | 28 +++++++ .../resources/processes/signup.bpmn20.xml | 74 +++++++++++++++++ 7 files changed, 312 insertions(+) create mode 100644 spring-integration-activiti/src/test/java/org/springframework/integration/activiti/CustomerService.java create mode 100644 spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/CheckForm.java create mode 100644 spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SendEmail.java create mode 100644 spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SignupClient.java create mode 100644 spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SignupTest-context.xml create mode 100644 spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SimpleContext.xml create mode 100644 spring-integration-activiti/src/test/resources/processes/signup.bpmn20.xml diff --git a/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/CustomerService.java b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/CustomerService.java new file mode 100644 index 0000000000..f698ddd6e5 --- /dev/null +++ b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/CustomerService.java @@ -0,0 +1,37 @@ +package org.springframework.integration.activiti; + +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + +import javax.sql.DataSource; +import java.util.HashMap; +import java.util.Map; + + +/** + * Simple bean that you want to use from Activiti. + * You've configured it all from Spring and don't want to + * have to rencode all the configuration inside of Activiti + */ +public class CustomerService { + + private DataSource dataSource ; + private SimpleJdbcTemplate jdbcTemplate; + + public void setDataSource(DataSource dataSource) { + this.dataSource = dataSource; + this.jdbcTemplate = new SimpleJdbcTemplate ( dataSource); + } + + public void createCustomer( String firstName, String lastName , String email ){ + Map parms = new HashMap() ; + parms.put( "fn", firstName ) ; + parms.put( "ln", lastName); + parms.put( "email", email ); + + this.jdbcTemplate.update( + "INSERT INTO CUSTOMER( FIRST_NAME, LAST_NAME, EMAIL) VALUES(:fn,:ln,:email)" , + parms ); + } +} + + diff --git a/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/CheckForm.java b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/CheckForm.java new file mode 100644 index 0000000000..55c0482a75 --- /dev/null +++ b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/CheckForm.java @@ -0,0 +1,25 @@ + package org.springframework.integration.activiti.signup; + + import org.activiti.engine.impl.bpmn.BpmnActivityBehavior; + import org.activiti.pvm.activity.ActivityBehavior; + import org.activiti.pvm.activity.ActivityExecution; + import org.springframework.stereotype.Component; + + @Component + public class CheckForm extends BpmnActivityBehavior implements ActivityBehavior { + + public void execute(ActivityExecution activityExecution) throws Exception { + System.out.println( getClass()+" : checking form: "); + + boolean formOK = Math.random() > .7 ; + + activityExecution.setVariable( "formOK", formOK); + System.out.println( getClass()+" : form OK? " + formOK); + + + performDefaultOutgoingBehavior( activityExecution ); + + } + } + + diff --git a/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SendEmail.java b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SendEmail.java new file mode 100644 index 0000000000..30ecc648cd --- /dev/null +++ b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SendEmail.java @@ -0,0 +1,17 @@ +package org.springframework.integration.activiti.signup; + +import org.activiti.engine.impl.bpmn.BpmnActivityBehavior; +import org.activiti.pvm.activity.ActivityBehavior; +import org.activiti.pvm.activity.ActivityExecution; +import org.springframework.stereotype.Component; + + +@Component +public class SendEmail extends BpmnActivityBehavior implements ActivityBehavior { + + public void execute(ActivityExecution activityExecution) throws Exception { + System.out.println( getClass() + ": sending email ") ; + + this.performDefaultOutgoingBehavior( activityExecution); + } +} diff --git a/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SignupClient.java b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SignupClient.java new file mode 100644 index 0000000000..34371826a6 --- /dev/null +++ b/spring-integration-activiti/src/test/java/org/springframework/integration/activiti/signup/SignupClient.java @@ -0,0 +1,81 @@ +package org.springframework.integration.activiti.signup; + +import org.activiti.engine.ProcessEngine; +import org.activiti.engine.RepositoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.task.Task; + +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + + +@Component +public class SignupClient { + private TaskService taskService; + private RuntimeService runtimeService; + private RepositoryService repositoryService; + + @Resource + private ProcessEngine processEngine; + + @PostConstruct + public void start() throws Exception { + this.taskService = this.processEngine.getTaskService(); + this.repositoryService = this.processEngine.getRepositoryService(); + this.runtimeService = this.processEngine.getRuntimeService(); + + repositoryService.createDeployment().addClasspathResource("processes/signup.bpmn20.xml").deploy(); + } + + private List tasksForUser(String user, String name) + throws Exception { + return taskService.createTaskQuery().name(name).assignee(user).list(); + } + + private boolean handleWorkForUser(String user, String taskName) + throws Exception { + + boolean workToBeDone = false; + for (Task t : tasksForUser(user, taskName)) { + workToBeDone = true ; + System.out.println("starting " + t.getId() + " : " + t.getName()); + taskService.complete(t.getId()); + System.out.println("completed " + t.getId() + " : " + t.getName()); + } + return workToBeDone ; + } + + public void startSignupProcess(long customerId) throws Exception { + Map parms = new HashMap(); + parms.put("customerId", customerId); + + runtimeService.startProcessInstanceByKey("signup", parms); + } + + public static void main(String[] args) throws Throwable { + ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("/org/springframework/integration/activiti/SignupTest-context.xml"); + classPathXmlApplicationContext.start(); + + SignupClient signupClient = classPathXmlApplicationContext.getBean(SignupClient.class); + signupClient.startSignupProcess(System.currentTimeMillis()); + signupClient.handleWorkForUser("customer", "sign-up"); + + while(signupClient.handleWorkForUser( "customer", "fix-errors")) + ; + + signupClient.handleWorkForUser("customer", "confirm-email"); + + + + + } +} diff --git a/spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SignupTest-context.xml b/spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SignupTest-context.xml new file mode 100644 index 0000000000..fc93be5a26 --- /dev/null +++ b/spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SignupTest-context.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SimpleContext.xml b/spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SimpleContext.xml new file mode 100644 index 0000000000..fe817bb77e --- /dev/null +++ b/spring-integration-activiti/src/test/resources/org/springframework/integration/activiti/SimpleContext.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + diff --git a/spring-integration-activiti/src/test/resources/processes/signup.bpmn20.xml b/spring-integration-activiti/src/test/resources/processes/signup.bpmn20.xml new file mode 100644 index 0000000000..ed059e5078 --- /dev/null +++ b/spring-integration-activiti/src/test/resources/processes/signup.bpmn20.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + the potential customer must fill out the form online first + + + + customer + + + + + + + + + + + + + + ${formOK == true} + + + + ${formOK == false} + + + + + the potential customer must fill out the form online first + + + + customer + + + + + + + + + + + + + confirm the user's email + + + + customer + + + + + + + + +