package org.jboss.processFlow.rest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import org.jboss.processFlow.tasks.ITaskService;
import org.jboss.processFlow.tasks.identity.PFPUserGroupCallback;
import org.jbpm.task.Status;
import org.jbpm.task.User;
import org.jbpm.task.query.TaskSummary;
import com.google.gson.Gson;
@Stateless
@Path("/tasks")
public class TaskListFacade {
@EJB(lookup="java:global/processFlow-taskService/taskProxy!org.jboss.processFlow.tasks.ITaskService")
ITaskService taskProxy;
public TaskListFacade() { }
@GET
@Path("{idRef}/unassigned")
@Produces({"application/json"})
public Response getUnassignedTasksForIdRef(@PathParam("idRef") String idRef) {
List<TaskRef> result = new ArrayList<TaskRef>();
List<TaskSummary> tasks = null;
List<String> callerRoles = getCallerRoles(idRef);
List<Status> onlyReady = Collections.singletonList(Status.Ready);
tasks = taskProxy.getTasksAssignedAsPotentialOwnerByStatusByGroup(idRef, callerRoles, onlyReady, "en-UK", 0, 10);
User emptyUser = new User();
for (TaskSummary task: tasks) {
task.setActualOwner(emptyUser);
result.add(Transform.task(task));
}
TaskRefWrapper wrapper = new TaskRefWrapper(result);
return createJsonResponse(wrapper);
}
@GET
@Path("{idRef}")
@Produces({"application/json"})
public Response getAssignedTasksForIdRef(@PathParam("idRef") String idRef) {
List<TaskRef> result = new ArrayList<TaskRef>();
List<TaskSummary> tasks = null;
List<Status> onlyReady = Collections.singletonList(Status.Reserved);
tasks = taskProxy.getAssignedTasks(idRef, onlyReady, "en-UK");
for (TaskSummary task : tasks) {
if (task.getStatus() == Status.Reserved) {
result.add(Transform.task(task));
}
}
TaskRefWrapper wrapper = new TaskRefWrapper(result);
return createJsonResponse(wrapper);
}
@GET
@Path("{idRef}/taskcontents")
@Produces({"application/json"})
public Response getAssignedTasksForIdRefWithTaskContents(@PathParam("idRef") String idRef) {
List<TaskRef> result = new ArrayList<TaskRef>();
List<TaskSummary> tasks = null;
List<Status> onlyReady = Collections.singletonList(Status.Reserved);
tasks = taskProxy.getAssignedTasks(idRef, onlyReady, "en-UK");
for (TaskSummary task : tasks) {
if (task.getStatus() == Status.Reserved) {
TaskRef taskRef = Transform.task(task);
Map<String, Object> content = taskProxy.getTaskContent(task.getId(), true);
taskRef.setTaskContent(Transform.taskContent(content));
result.add(taskRef);
}
}
TaskRefWrapper wrapper = new TaskRefWrapper(result);
return createJsonResponse(wrapper);
}
@GET
@Path("{idRef}/unassigned/taskcontents")
@Produces({"application/json"})
public Response getUnassignedTasksForIdRefWithTaskContents(@PathParam("idRef") String idRef) {
List<TaskRef> result = new ArrayList<TaskRef>();
List<TaskSummary> tasks = null;
List<String> callerRoles = getCallerRoles(idRef);
List<Status> onlyReady = Collections.singletonList(Status.Ready);
tasks = taskProxy.getTasksAssignedAsPotentialOwnerByStatusByGroup(idRef, callerRoles, onlyReady, "en-UK", 0, 10);
User emptyUser = new User();
for (TaskSummary task: tasks) {
task.setActualOwner(emptyUser);
TaskRef taskRef = Transform.task(task);
Map<String, Object> content = taskProxy.getTaskContent(task.getId(), true);
taskRef.setTaskContent(Transform.taskContent(content));
result.add(taskRef);
}
TaskRefWrapper wrapper = new TaskRefWrapper(result);
return createJsonResponse(wrapper);
}
private List<String> getCallerRoles(String idRef) {
PFPUserGroupCallback callback = new PFPUserGroupCallback();
return callback.getGroupsForUser(idRef, null, null);
}
private Response createJsonResponse(Object wrapper) {
Gson gson = GsonFactory.createInstance();
String json = gson.toJson(wrapper);
return Response.ok(json).type("application/json").build();
}
}