/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package org.activiti.designer.test;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.bpmn.diagram.ProcessDiagramGenerator;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
public class MyProcessTest extends Assert {
@Rule
public SimpleActivitiRule activitiRule = new SimpleActivitiRule();
@Test
public void startProcess() throws Exception {
final RepositoryService repositoryService = activitiRule.getRepositoryService();
final RuntimeService runtimeService = activitiRule.getRuntimeService();
final TaskService taskService = activitiRule.getTaskService();
final String resourceName = "MyProcess.bpmn20.xml";
final String login = "login";
InputStream is = getClass().getClassLoader().getResourceAsStream(resourceName);
repositoryService.createDeployment().addInputStream(resourceName, is).deploy();
assertEquals(0, runtimeService.createProcessInstanceQuery().list().size());
Map<String, Object> variableMap = new HashMap<String, Object>();
variableMap.put("description", "Запуск");
variableMap.put("employeeLogin", login);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process1", "key", variableMap);
assertEquals("key", processInstance.getBusinessKey());
assertNotNull(processInstance.getId());
assertFalse(processInstance.isEnded());
assertFalse(processInstance.isSuspended());
assertEquals(1, runtimeService.createProcessInstanceQuery().list().size());
System.out.println("attachments: "
+ taskService.getProcessInstanceAttachments(processInstance.getProcessInstanceId()));
System.out.println("comments: "
+ taskService.getProcessInstanceComments(processInstance.getProcessInstanceId()));
writePng(processInstance);
System.out.println("pid: " + processInstance.getProcessInstanceId() + " pdid: "
+ processInstance.getProcessDefinitionId());
assertEquals(1, taskService.createTaskQuery().count());
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId())
.singleResult();
System.out.println("task eid: " + task.getExecutionId());
System.out.println("task id: " + task.getId());
System.out.println("task key: " + task.getTaskDefinitionKey());
assertNull(task.getAssignee());
{
taskService.setAssignee(task.getId(), login);
Map<String, Object> formMap = new HashMap<String, Object>();
formMap.put("surnameId", "Фамилия");
taskService.complete(task.getId(), formMap);
}
assertEquals(0, taskService.createTaskQuery().count());
assertEquals(0, runtimeService.createProcessInstanceQuery().active().count());
}
private void writePng(ProcessInstance processInstance) throws FileNotFoundException, IOException {
final RepositoryServiceImpl repositoryService = (RepositoryServiceImpl) activitiRule.getRepositoryService();
final RuntimeService runtimeService = activitiRule.getRuntimeService();
// метод не из API!
ProcessDefinitionEntity def = (ProcessDefinitionEntity) repositoryService
.getDeployedProcessDefinition(processInstance.getProcessDefinitionId());
InputStream definitionImageStream = ProcessDiagramGenerator.generateDiagram(def, "png",
runtimeService.getActiveActivityIds(processInstance.getProcessInstanceId()));
FileOutputStream out = new FileOutputStream("target/x.png");
int read = 0;
byte[] bytes = new byte[1024];
while ((read = definitionImageStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
definitionImageStream.close();
out.close();
}
}