WorklistController.java :  » Workflow-Engines » bpmscript » org » bpmscript » web » Java Open Source

Java Open Source » Workflow Engines » bpmscript 
bpmscript » org » bpmscript » web » WorklistController.java
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;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.