/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.services.task.wih; import java.util.HashMap; import java.util.Map; import org.jbpm.services.task.utils.ContentMarshallerHelper; import org.kie.api.runtime.KieSession; import org.kie.api.task.TaskEvent; import org.kie.api.task.TaskLifeCycleEventListener; import org.kie.api.task.TaskService; import org.kie.api.task.model.Content; import org.kie.api.task.model.Status; import org.kie.api.task.model.Task; public class NonManagedTaskEventListener implements TaskLifeCycleEventListener { private KieSession ksession; private TaskService taskService; public NonManagedTaskEventListener(KieSession ksession, TaskService taskService) { this.ksession = ksession; this.taskService = taskService; } public void processTaskState(Task task) { long workItemId = task.getTaskData().getWorkItemId(); if (task.getTaskData().getStatus() == Status.Completed) { String userId = task.getTaskData().getActualOwner().getId(); Map<String, Object> results = new HashMap<String, Object>(); long contentId = task.getTaskData().getOutputContentId(); if (contentId != -1) { Content content = taskService.getContentById(contentId); Object result = ContentMarshallerHelper.unmarshall(content.getContent(), ksession.getEnvironment(), ksession.getClass().getClassLoader()); results.put("Result", result); if (result instanceof Map) { Map<?, ?> map = (Map<?, ?>) result; for (Map.Entry<?, ?> entry : map.entrySet()) { if (entry.getKey() instanceof String) { results.put((String) entry.getKey(), entry.getValue()); } } } results.put("ActorId", userId); ksession.getWorkItemManager().completeWorkItem(task.getTaskData().getWorkItemId(), results); } else { results.put("ActorId", userId); ksession.getWorkItemManager().completeWorkItem(workItemId, results); } } else { ksession.getWorkItemManager().abortWorkItem(workItemId); } } @Override public void beforeTaskActivatedEvent(TaskEvent event) { } @Override public void beforeTaskClaimedEvent(TaskEvent event) { } @Override public void beforeTaskSkippedEvent(TaskEvent event) { } @Override public void beforeTaskStartedEvent(TaskEvent event) { } @Override public void beforeTaskStoppedEvent(TaskEvent event) { } @Override public void beforeTaskCompletedEvent(TaskEvent event) { } @Override public void beforeTaskFailedEvent(TaskEvent event) { } @Override public void beforeTaskAddedEvent(TaskEvent event) { } @Override public void beforeTaskExitedEvent(TaskEvent event) { } @Override public void beforeTaskReleasedEvent(TaskEvent event) { } @Override public void beforeTaskResumedEvent(TaskEvent event) { } @Override public void beforeTaskSuspendedEvent(TaskEvent event) { } @Override public void beforeTaskForwardedEvent(TaskEvent event) { } @Override public void beforeTaskDelegatedEvent(TaskEvent event) { } @Override public void afterTaskActivatedEvent(TaskEvent event) { } @Override public void afterTaskClaimedEvent(TaskEvent event) { } @Override public void afterTaskSkippedEvent(TaskEvent event) { Task task = event.getTask(); long processInstanceId = task.getTaskData().getProcessInstanceId(); if (processInstanceId <= 0) { return; } processTaskState(task); } @Override public void afterTaskStartedEvent(TaskEvent event) { } @Override public void afterTaskStoppedEvent(TaskEvent event) { } @Override public void afterTaskCompletedEvent(TaskEvent event) { Task task = event.getTask(); long processInstanceId = task.getTaskData().getProcessInstanceId(); if (processInstanceId <= 0) { return; } processTaskState(task); } @Override public void afterTaskFailedEvent(TaskEvent event) { Task task = event.getTask(); long processInstanceId = task.getTaskData().getProcessInstanceId(); if (processInstanceId <= 0) { return; } processTaskState(task); } @Override public void afterTaskAddedEvent(TaskEvent event) { } @Override public void afterTaskExitedEvent(TaskEvent event) { } @Override public void afterTaskReleasedEvent(TaskEvent event) { } @Override public void afterTaskResumedEvent(TaskEvent event) { } @Override public void afterTaskSuspendedEvent(TaskEvent event) { } @Override public void afterTaskForwardedEvent(TaskEvent event) { } @Override public void afterTaskDelegatedEvent(TaskEvent event) { } @Override public void beforeTaskNominatedEvent(TaskEvent event) { } @Override public void afterTaskNominatedEvent(TaskEvent event) { } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((ksession == null) ? 0 : ksession.hashCode()); result = prime * result + ((taskService == null) ? 0 : taskService.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; NonManagedTaskEventListener other = (NonManagedTaskEventListener) obj; if (ksession == null) { if (other.ksession != null) return false; } else if (!ksession.equals(other.ksession)) return false; if (taskService == null) { if (other.taskService != null) return false; } else if (!taskService.equals(other.taskService)) return false; return true; } }