package org.activiti.kickstart; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.test.ActivitiTestCase; import org.activiti.kickstart.diagram.ProcessDiagramGenerator; import org.activiti.kickstart.dto.KickstartTask; import org.activiti.kickstart.dto.KickstartUserTask; import org.activiti.kickstart.dto.KickstartWorkflow; import org.activiti.kickstart.service.KickstartService; import org.activiti.kickstart.service.KickstartServiceFactory; import org.activiti.kickstart.service.MarshallingServiceImpl; import org.junit.After; import org.junit.Test; public class KickstartTest extends ActivitiTestCase { @Override @After public void tearDown() throws Exception { super.tearDown(); // delete deployments List<org.activiti.engine.repository.Deployment> deployments = processEngine .getRepositoryService() .createDeploymentQuery() .list(); for (org.activiti.engine.repository.Deployment deployment : deployments) { repositoryService.deleteDeployment(deployment.getId(), true); } } @Test public void testAdhocWorkflowDiagram() throws Exception { KickstartWorkflow wf = new KickstartWorkflow(); wf.setName("Test process"); wf.setTasks(getTaskList()); assertEquals("Test process", wf.getName()); assertEquals(2, wf.getTasks().size()); ProcessDiagramGenerator diagramGenerator = new ProcessDiagramGenerator(wf, new MarshallingServiceImpl()); InputStream diagram = diagramGenerator.execute(); byte[] data = getBytesFromInputStream(diagram); assertNotNull(data); assertTrue("byte array is not empty", data.length > 0); // write diagram to file // writeToFile("test/test_process_diagram.png", data); } @Test public void testAdhocWorkflowDeployment() throws Exception { KickstartWorkflow wf = new KickstartWorkflow(); wf.setName("Test process"); wf.setTasks(getTaskList()); KickstartServiceFactory kickstartServiceFactory = new KickstartServiceFactory(); KickstartService service = kickstartServiceFactory.createActivitiStandaloneKickStartService(); service.deployWorkflow(wf, null); List<ProcessDefinition> definitions = processEngine.getRepositoryService() .createProcessDefinitionQuery() .list(); assertEquals(1, definitions.size()); assertEquals("Test process", definitions.get(0).getName()); // get process as AdhocWorkflowDto wf = service.findWorkflowById(definitions.get(0).getId()); assertEquals("Test process", wf.getName()); } private List<KickstartTask> getTaskList() { List<KickstartTask> tasks = new ArrayList<KickstartTask>(); KickstartUserTask task = new KickstartUserTask(); task.setId("T1"); task.setName("Test 1"); task.setDescription("First Task"); tasks.add(task); task = new KickstartUserTask(); task.setId("T2"); task.setName("Test 2"); task.setDescription("Second Task"); task.setStartWithPrevious(true); tasks.add(task); return tasks; } private byte[] getBytesFromInputStream(final InputStream is) throws IOException { int size = is.available(); byte[] buffer = new byte[size]; int bytesRead = is.read(buffer); if (bytesRead != size) { throw new IOException("Only " + bytesRead + " of " + size + " could be read."); } return buffer; } private void writeToFile(final String file, final byte[] data) throws IOException { File f = new File(file); FileOutputStream fout = new FileOutputStream(f); fout.write(data); fout.flush(); fout.close(); } }