/* * 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. */ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.jbpm.services.task.impl; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import org.jbpm.services.task.utils.ClassUtil; import org.kie.api.task.model.Content; import org.kie.api.task.model.Status; import org.kie.api.task.model.Task; import org.kie.api.task.model.TaskSummary; import org.kie.internal.task.api.TaskAdminService; import org.kie.internal.task.api.TaskPersistenceContext; import org.kie.internal.task.api.model.InternalTask; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * */ public class TaskAdminServiceImpl implements TaskAdminService { private static final Logger logger = LoggerFactory.getLogger(TaskAdminServiceImpl.class); private TaskPersistenceContext persistenceContext; public TaskAdminServiceImpl() { } public TaskAdminServiceImpl(TaskPersistenceContext persistenceContext) { this.persistenceContext = persistenceContext; } public void setPersistenceContext(TaskPersistenceContext persistenceContext) { this.persistenceContext = persistenceContext; } public List<TaskSummary> getActiveTasks() { HashMap<String, Object> params = persistenceContext.addParametersToMap( "status", Arrays.asList(Status.InProgress)); return persistenceContext.queryWithParametersInTransaction("TasksByStatus", params, ClassUtil.<List<TaskSummary>>castClass(List.class)); } public List<TaskSummary> getActiveTasks(Date since) { HashMap<String, Object> params = persistenceContext.addParametersToMap( "status", Arrays.asList(Status.InProgress), "since", since); return persistenceContext.queryWithParametersInTransaction("TasksByStatusSince", params, ClassUtil.<List<TaskSummary>>castClass(List.class)); } public List<TaskSummary> getCompletedTasks() { HashMap<String, Object> params = persistenceContext.addParametersToMap( "status", Arrays.asList(Status.Completed)); return persistenceContext.queryWithParametersInTransaction("TasksByStatus", params, ClassUtil.<List<TaskSummary>>castClass(List.class)); } public List<TaskSummary> getCompletedTasks(Date since) { HashMap<String, Object> params = persistenceContext.addParametersToMap( "status", Arrays.asList(Status.Completed), "since", since); return persistenceContext.queryWithParametersInTransaction("TasksByStatusSince", params, ClassUtil.<List<TaskSummary>>castClass(List.class)); } public List<TaskSummary> getCompletedTasksByProcessId(Long processId) { HashMap<String, Object> params = persistenceContext.addParametersToMap( "status", Arrays.asList(Status.Completed), "processInstanceId", processId); return persistenceContext.queryWithParametersInTransaction("TasksByStatusByProcessId", params, ClassUtil.<List<TaskSummary>>castClass(List.class)); } public int archiveTasks(List<TaskSummary> tasks) { int archivedTasks = 0; for (TaskSummary sum : tasks) { long taskId = sum.getId(); Task task = persistenceContext.findTask(taskId); if (task != null) { ((InternalTask) task).setArchived(true); persistenceContext.updateTask(task); archivedTasks++; } } return archivedTasks; } public List<TaskSummary> getArchivedTasks() { HashMap<String, Object> params = new HashMap<String, Object>(); return persistenceContext.queryWithParametersInTransaction("ArchivedTasks", params, ClassUtil.<List<TaskSummary>>castClass(List.class)); } public int removeTasks(List<TaskSummary> tasks) { int removedTasks = 0; for (TaskSummary sum : tasks) { long taskId = sum.getId(); // Only remove archived tasks Task task = persistenceContext.findTask(taskId); if (task != null) { Content content = persistenceContext.findContent(task.getTaskData().getDocumentContentId()); Content outputContent = persistenceContext.findContent(task.getTaskData().getOutputContentId()); if (((InternalTask) task).isArchived()) { persistenceContext.remove(task); if (content != null) { persistenceContext.remove(content); } if (outputContent != null) { persistenceContext.remove(outputContent); } removedTasks++; } else { logger.warn(" The Task cannot be removed if it wasn't archived first !!"); } } } return removedTasks; } public int removeAllTasks() { List<Task> tasks = persistenceContext.queryInTransaction("GetAllTasks", ClassUtil.<List<Task>>castClass(List.class)); int count = 0; for (Task t : tasks) { persistenceContext.removeTask(t); count++; } return count; } }