package com.mossle.bpm.support; import com.mossle.spi.humantask.CounterSignDTO; import com.mossle.spi.humantask.FormDTO; import com.mossle.spi.humantask.TaskDefinitionDTO; import org.activiti.bpmn.model.UserTask; public class TaskDefinitionBuilder { private TaskDefinitionDTO taskDefinition = new TaskDefinitionDTO(); private UserTask userTask; private String processDefinitionId; public TaskDefinitionBuilder setUserTask(UserTask userTask) { this.userTask = userTask; return this; } public TaskDefinitionBuilder setProcessDefinitionId( String processDefinitionId) { this.processDefinitionId = processDefinitionId; return this; } public TaskDefinitionDTO build() { this.initInfo(); this.initParticipants(); this.initForm(); this.initCounterSign(); return taskDefinition; } public void initInfo() { taskDefinition.setCode(userTask.getId()); taskDefinition.setName(userTask.getName()); taskDefinition.setProcessDefinitionId(processDefinitionId); } public void initParticipants() { taskDefinition.setAssignee(userTask.getAssignee()); for (String candidateUser : userTask.getCandidateUsers()) { taskDefinition.addCandidateUser(candidateUser); } for (String candidateGroup : userTask.getCandidateGroups()) { taskDefinition.addCandidateGroup(candidateGroup); } } public void initForm() { String formKey = userTask.getFormKey(); if (formKey == null) { return; } FormDTO form = new FormDTO(); if (formKey.startsWith("external:")) { form.setType("external"); } else { form.setType("internal"); } form.setKey(formKey); taskDefinition.setForm(form); } public void initCounterSign() { if (userTask.getLoopCharacteristics() == null) { return; } CounterSignDTO counterSign = new CounterSignDTO(); counterSign.setStrategy("percent"); counterSign.setRate(100); if (userTask.getLoopCharacteristics().isSequential()) { counterSign.setType("sequential"); } else { counterSign.setType("parallel"); } taskDefinition.setCounterSign(counterSign); } }