View Javadoc

1   package org.marketchangers.prayer.portlet;
2   
3   import java.io.IOException;
4   import java.util.Arrays;
5   import java.util.Collection;
6   import java.util.Hashtable;
7   import java.util.Iterator;
8   import java.util.Map;
9   
10  import javax.portlet.ActionRequest;
11  import javax.portlet.ActionResponse;
12  import javax.portlet.Portlet;
13  import javax.portlet.PortletConfig;
14  import javax.portlet.PortletContext;
15  import javax.portlet.PortletException;
16  import javax.portlet.PortletRequest;
17  import javax.portlet.PortletRequestDispatcher;
18  import javax.portlet.RenderRequest;
19  import javax.portlet.RenderResponse;
20  
21  import org.marketchangers.PortalUserManager;
22  import org.marketchangers.ServiceLocator;
23  
24  /***
25   * @author <a href="mailto:mtodd@wc-group.com">Matthew Todd</a>
26   */
27  public class RoleSelectionPortlet implements Portlet {
28  	private PortletContext context;
29  
30  	// ------------------------------------------------------------ Portlet API
31  	public void init(PortletConfig config) {
32  		this.context = config.getPortletContext();
33  	}
34  
35  	public void processAction(ActionRequest request, ActionResponse response) {
36  		PortalUserManager manager = getUserRoleManager();
37  		String user = request.getRemoteUser();
38  
39  		Iterator configuredRoles = getConfiguredRoles(request).iterator();
40  		while (configuredRoles.hasNext()) {
41  			String role = (String) configuredRoles.next();
42  			String action = (String) request.getParameter(role);
43  
44  			if ("Add".equals(action)) {
45  				manager.addRole(user, role);
46  			}
47  
48  			if ("Remove".equals(action)) {
49  				manager.removeRole(user, role);
50  			}
51  		}
52  	}
53  
54  	public void render(RenderRequest request, RenderResponse response)
55  		throws PortletException, IOException {
56  		request.setAttribute("roleActions", buildRoleActionMap(request));
57  		getRequestDispatcher("/roleSelection.jsp").include(request, response);
58  	}
59  
60  	public void destroy() {
61  	}
62  
63  	// -------------------------------------------------------- Private Methods
64  	private Map buildRoleActionMap(RenderRequest request) {
65  		Map actionMap = new Hashtable();
66  
67  		PortalUserManager manager = getUserRoleManager();
68  		String user = request.getRemoteUser();
69  
70  		Iterator configuredRoles = getConfiguredRoles(request).iterator();
71  
72  		while (configuredRoles.hasNext()) {
73  			String role = configuredRoles.next().toString();
74  			actionMap.put(
75  				role,
76  				manager.isUserInRole(user, role) ? "Remove" : "Add");
77  		}
78  
79  		return actionMap;
80  	}
81  
82  	private Collection getConfiguredRoles(PortletRequest request) {
83  		return Arrays.asList(request.getPreferences().getValues("roles", null));
84  	}
85  
86  	private PortletRequestDispatcher getRequestDispatcher(String path) {
87  		return context.getRequestDispatcher(path);
88  	}
89  
90  	private ServiceLocator getServiceLocator() {
91  		return (ServiceLocator) context.getAttribute(
92  			ServiceLocator.KEY);
93  	}
94  
95  	private PortalUserManager getUserRoleManager() {
96  		return (PortalUserManager) getServiceLocator().get(PortalUserManager.class);
97  	}
98  }