maia/.svn/pristine/5a/5acebdd51bd93197adbaa4d5717...

125 lines
4.7 KiB
Plaintext
Executable File

package com.fp.bpmlib.task;
import java.util.Date;
import java.util.Map;
import javax.naming.InitialContext;
import org.jbpm.services.task.exception.PermissionDeniedException;
import org.jbpm.services.task.utils.OnErrorAction;
import org.jbpm.services.task.wih.AbstractHTWorkItemHandler;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.manager.RuntimeEngine;
import org.kie.api.runtime.manager.RuntimeManager;
import org.kie.api.runtime.process.WorkItem;
import org.kie.api.runtime.process.WorkItemManager;
import org.kie.api.task.model.Task;
import org.kie.internal.runtime.manager.context.ProcessInstanceIdContext;
import org.kie.internal.task.api.InternalTaskService;
import org.kie.internal.task.api.model.ContentData;
import org.kie.internal.task.exception.TaskException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fp.bpmlib.ejb.local.JbpmBeanLocal;
import com.fp.bpmlib.query.monitor.FlowActivitySave;
import com.fp.simple.dto.TaskInfo;
public class MaiaWorkItemHandler extends AbstractHTWorkItemHandler {
private static final Logger logger = LoggerFactory.getLogger(MaiaWorkItemHandler.class);
private RuntimeManager runtimeManager;
public RuntimeManager getRuntimeManager() {
return runtimeManager;
}
public void setRuntimeManager(RuntimeManager runtimeManager) {
this.runtimeManager = runtimeManager;
}
public MaiaWorkItemHandler() {
}
@SuppressWarnings("unchecked")
private void fillRuntimeManager(WorkItem workItem) {
try {
JbpmBeanLocal local = (JbpmBeanLocal) new InitialContext().lookup("java:global/maiaear-2.1/bpmlib/jbpmbean");
runtimeManager = local.getRuntimeManager();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
// JVC obtiene runtimemanager por base de conocimiento y adiciona fecha de vencimiento de la tarea.
this.fillRuntimeManager(workItem);
RuntimeEngine runtime = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(workItem.getProcessInstanceId()));
KieSession ksessionById = runtime.getKieSession();
Task task = this.createTaskBasedOnWorkItemParams(ksessionById, workItem);
ContentData content = this.createTaskContentBasedOnWorkItemParams(ksessionById, workItem);
try {
long taskId = ((InternalTaskService) runtime.getTaskService()).addTask(task, content);
if (this.isAutoClaim(workItem, task)) {
runtime.getTaskService().claim(taskId, (String) workItem.getParameter("SwimlaneActorId"));
}
// JVC crea un registro en TbpmTareas.
this.createTbpmActivities(taskId, workItem, task);
} catch (Exception e) {
if (action.equals(OnErrorAction.ABORT)) {
manager.abortWorkItem(workItem.getId());
} else if (action.equals(OnErrorAction.RETHROW)) {
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
} else {
throw new RuntimeException(e);
}
} else if (action.equals(OnErrorAction.LOG)) {
StringBuilder logMsg = new StringBuilder();
logMsg.append(new Date()).append(": Error when creating task on task server for work item id ").append(workItem.getId());
logMsg.append(". Error reported by task server: ").append(e.getMessage());
logger.error(logMsg.toString(), e);
// rethrow to cancel processing if the exception is not recoverable
if (!(e instanceof TaskException) || ((e instanceof TaskException) && !((TaskException) e).isRecoverable())) {
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
} else {
throw new RuntimeException(e);
}
}
}
}
}
@SuppressWarnings("unchecked")
private void createTbpmActivities(long idtarea, WorkItem workItem, Task task) throws Exception {
Map<String, Object> mparam = (Map<String, Object>) workItem.getParameters().get("maia");
TaskInfo taskInfo = (TaskInfo)workItem.getParameters().get("taskMetaData");
// String usuario = task.getTaskData().getActualOwner() == null ? null : task.getTaskData().getActualOwner().getId();//usuario responsable
// crea tbpmtareas con los datos de la tarea.
FlowActivitySave.crearActivity(mparam, taskInfo,idtarea,task.getTaskData().getCreatedOn());
//
}
@Override
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
RuntimeEngine runtime = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(workItem.getProcessInstanceId()));
Task task = runtime.getTaskService().getTaskByWorkItemId(workItem.getId());
if (task != null) {
try {
runtime.getTaskService().exit(task.getId(), "Administrator");
} catch (PermissionDeniedException e) {
logger.info(e.getMessage());
}
}
}
}