01: package org.bpmscript.web;
02:
03: import java.util.ArrayList;
04: import java.util.HashMap;
05: import java.util.List;
06: import java.util.Map;
07:
08: import javax.servlet.http.HttpServletRequest;
09: import javax.servlet.http.HttpServletResponse;
10:
11: import org.bpmscript.IPagedResult;
12: import org.bpmscript.PagedResult;
13: import org.bpmscript.Query;
14: import org.bpmscript.jbi.tasklist.IRemoteTaskListManager;
15: import org.bpmscript.jbi.tasklist.ITask;
16: import org.bpmscript.jbi.tasklist.ITaskRequest;
17: import org.springframework.web.servlet.ModelAndView;
18: import org.springframework.web.servlet.mvc.ParameterizableViewController;
19:
20: public class WorklistController extends ParameterizableViewController {
21:
22: private IRemoteTaskListManager remoteTaskListManager;
23: private String anonymousRole = "ANONYMOUS";
24: private String adminRole = "ADMIN";
25:
26: @Override
27: protected ModelAndView handleRequestInternal(
28: HttpServletRequest request, HttpServletResponse response)
29: throws Exception {
30: Map<String, Object> model = new HashMap<String, Object>();
31: IPagedResult<ITask> tasks = null;
32: try {
33: // TODO: this is a bit crap as it would be nicer to do
34: // it on the server side but it means distributing the
35: // authentication
36: tasks = remoteTaskListManager.getTasks(Query.ALL);
37: List<ITask> result = new ArrayList<ITask>();
38: String remoteUser = request.getRemoteUser();
39: for (ITask task : tasks.getResults()) {
40: ITaskRequest taskRequest = task.getTaskRequest();
41: String user = taskRequest.getUser();
42: String role = taskRequest.getRole();
43: if (request.isUserInRole(adminRole)) {
44: result.add(task);
45: } else {
46: if (user != null) {
47: if (user.equals(remoteUser)) {
48: result.add(task);
49: }
50: } else {
51: if (role != null) {
52: if (request.isUserInRole(role)
53: || role
54: .equalsIgnoreCase(anonymousRole)) {
55: result.add(task);
56: }
57: } else {
58: result.add(task);
59: }
60: }
61: }
62: }
63: tasks = new PagedResult<ITask>(result, false, -1);
64: } catch (Exception exception) {
65: tasks = new PagedResult<ITask>(new ArrayList<ITask>(),
66: false, -1);
67: model.put("tasksUnavailable", true);
68: }
69: model.put("tasks", tasks);
70: return new ModelAndView(getViewName(), model);
71: }
72:
73: public void setRemoteTaskListManager(
74: IRemoteTaskListManager remoteTaskListManager) {
75: this .remoteTaskListManager = remoteTaskListManager;
76: }
77:
78: public void setAdminRole(String adminRole) {
79: this .adminRole = adminRole;
80: }
81:
82: public void setAnonymousRole(String anonymousRole) {
83: this.anonymousRole = anonymousRole;
84: }
85:
86: }
|