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
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
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 }