package com.mossle.bpm.cmd;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.process.ProcessDefinitionImpl;
public class JumpToTaskCmd implements Command<Object> {
private String historyTaskId;
private String executionId;
private String jumpOrigin;
public JumpToTaskCmd(String executionId, String historyTaskId) {
this(executionId, historyTaskId, "jumpToTask");
}
public JumpToTaskCmd(String executionId, String historyTaskId,
String jumpOrigin) {
this.historyTaskId = historyTaskId;
this.executionId = executionId;
this.jumpOrigin = jumpOrigin;
}
public Object execute(CommandContext commandContext) {
for (TaskEntity taskEntity : commandContext.getTaskEntityManager()
.findTasksByExecutionId(executionId)) {
taskEntity.setVariableLocal("跳转原因", jumpOrigin);
commandContext.getTaskEntityManager().deleteTask(taskEntity,
jumpOrigin, false);
}
ExecutionEntity executionEntity = commandContext
.getExecutionEntityManager().findExecutionById(executionId);
ProcessDefinitionImpl processDefinition = executionEntity
.getProcessDefinition();
HistoricTaskInstanceEntity historicTaskInstance = commandContext
.getHistoricTaskInstanceEntityManager()
.findHistoricTaskInstanceById(historyTaskId);
ActivityImpl activity = processDefinition
.findActivity(historicTaskInstance.getTaskDefinitionKey());
executionEntity.executeActivity(activity);
for (TaskEntity taskEntity : commandContext.getTaskEntityManager()
.findTasksByExecutionId(executionId)) {
taskEntity.setAssignee(historicTaskInstance.getAssignee());
}
return null;
}
}