package org.bpmscript.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.bpmscript.IPagedResult;
import org.bpmscript.PagedResult;
import org.bpmscript.Query;
import org.bpmscript.jbi.tasklist.IRemoteTaskListManager;
import org.bpmscript.jbi.tasklist.ITask;
import org.bpmscript.jbi.tasklist.ITaskRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.ParameterizableViewController;
public class WorklistController extends ParameterizableViewController {
private IRemoteTaskListManager remoteTaskListManager;
private String anonymousRole = "ANONYMOUS";
private String adminRole = "ADMIN";
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String, Object> model = new HashMap<String, Object>();
IPagedResult<ITask> tasks = null;
try {
// TODO: this is a bit crap as it would be nicer to do
// it on the server side but it means distributing the
// authentication
tasks = remoteTaskListManager.getTasks(Query.ALL);
List<ITask> result = new ArrayList<ITask>();
String remoteUser = request.getRemoteUser();
for (ITask task : tasks.getResults()) {
ITaskRequest taskRequest = task.getTaskRequest();
String user = taskRequest.getUser();
String role = taskRequest.getRole();
if(request.isUserInRole(adminRole)) {
result.add(task);
} else {
if(user != null) {
if(user.equals(remoteUser)) {
result.add(task);
}
} else {
if(role != null) {
if(request.isUserInRole(role) || role.equalsIgnoreCase(anonymousRole)) {
result.add(task);
}
} else {
result.add(task);
}
}
}
}
tasks = new PagedResult<ITask>(result, false, -1);
} catch(Exception exception) {
tasks = new PagedResult<ITask>(new ArrayList<ITask>(), false, -1);
model.put("tasksUnavailable", true);
}
model.put("tasks", tasks);
return new ModelAndView(getViewName(), model);
}
public void setRemoteTaskListManager(
IRemoteTaskListManager remoteTaskListManager) {
this.remoteTaskListManager = remoteTaskListManager;
}
public void setAdminRole(String adminRole) {
this.adminRole = adminRole;
}
public void setAnonymousRole(String anonymousRole) {
this.anonymousRole = anonymousRole;
}
}
|