1 16 package com.blandware.atleap.webapp.action.core.user; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.model.core.Group; 20 import com.blandware.atleap.model.core.Role; 21 import com.blandware.atleap.model.core.User; 22 import com.blandware.atleap.service.core.GroupManager; 23 import com.blandware.atleap.service.core.RoleManager; 24 import com.blandware.atleap.service.core.UserManager; 25 import com.blandware.atleap.webapp.acegi.UserManagerDaoImpl; 26 import com.blandware.atleap.webapp.action.core.BaseAction; 27 import com.blandware.atleap.webapp.form.core.SelectRolesAndGroupsForm; 28 import com.blandware.atleap.webapp.util.core.WebappConstants; 29 import com.blandware.atleap.webapp.util.core.CacheUtil; 30 import org.apache.commons.validator.GenericValidator; 31 import org.apache.struts.action.*; 32 import org.springframework.orm.ObjectOptimisticLockingFailureException; 33 34 import javax.servlet.http.HttpServletRequest ; 35 import javax.servlet.http.HttpServletResponse ; 36 import java.util.ArrayList ; 37 import java.util.Iterator ; 38 import java.util.List ; 39 40 68 public final class AssignUserRolesAndGroupsAction extends BaseAction { 69 78 public ActionForward execute(ActionMapping mapping, ActionForm form, 79 HttpServletRequest request, HttpServletResponse response) throws Exception { 80 81 if ( !isCancelled(request) ) { 82 83 String userName = (String ) request.getSession().getAttribute(WebappConstants.USER_NAME_KEY); 84 if ( GenericValidator.isBlankOrNull(userName) ) { 85 if ( log.isWarnEnabled() ) { 86 log.warn("Missing user name. Returning to list..."); 87 } 88 return mapping.findForward("listUsers"); 89 } 90 91 RoleManager roleManager = (RoleManager) getBean(Constants.ROLE_MANAGER_BEAN); 93 SelectRolesAndGroupsForm selectRolesAndGroupsForm = (SelectRolesAndGroupsForm) form; 94 String [] selectedRoleNames = selectRolesAndGroupsForm.getSelectedRoles(); 95 96 List roles = new ArrayList (); 97 for ( int i = 0; i < selectedRoleNames.length; i++ ) { 98 String roleName = selectedRoleNames[i]; 99 Role role = roleManager.retrieveRole(roleName); 100 if ( role != null ) { 101 roles.add(role); 102 } 103 } 104 105 GroupManager groupManager = (GroupManager) getBean(Constants.GROUP_MANAGER_BEAN); 107 String [] selectedGroupNames = selectRolesAndGroupsForm.getSelectedGroups(); 108 109 List groups = new ArrayList (); 110 for ( int i = 0; i < selectedGroupNames.length; i++ ) { 111 String groupName = selectedGroupNames[i]; 112 Group group = groupManager.retrieveGroup(groupName); 113 if ( group != null ) { 114 groups.add(group); 115 } 116 } 117 118 UserManager userManager = (UserManager) getBean(Constants.USER_MANAGER_BEAN); 120 User user = userManager.retrieveUser(userName); 121 122 if ( user == null ) { 123 ActionMessages errors = new ActionMessages(); 125 errors.add("userNotFound", new ActionMessage("core.user.errors.notFound")); 126 saveErrors(request, errors); 127 return mapping.findForward("listUsers"); 128 } 129 130 user.setVersion(Long.valueOf(selectRolesAndGroupsForm.getVersion())); 131 132 List userRoles = new ArrayList (user.getFreeRoles()); 135 for ( int i = 0; i < userRoles.size(); i++ ) { 136 Role role = (Role) userRoles.get(i); 137 if ( !roles.contains(role) ) { 138 user.removeFreeRole(role); 139 } 140 } 141 for ( Iterator i = roles.iterator(); i.hasNext(); ) { 143 Role role = (Role) i.next(); 144 user.addFreeRole(role); 145 } 146 147 List userGroups = new ArrayList (user.getGroups()); 150 for ( int i = 0; i < userGroups.size(); i++ ) { 151 Group group = (Group) userGroups.get(i); 152 if ( !groups.contains(group) ) { 153 group.removeUser(user); 154 List groupRoles = group.getRoles(); 155 for (int j = 0; j < groupRoles.size(); j++) { 156 Role role = (Role) groupRoles.get(j); 157 user.removeRole(role, group); 158 } 159 } 160 } 161 for ( Iterator i = groups.iterator(); i.hasNext(); ) { 163 Group group = (Group) i.next(); 164 group.addUser(user); 165 List groupRoles = group.getRoles(); 166 for (int j = 0; j < groupRoles.size(); j++) { 167 Role role = (Role) groupRoles.get(j); 168 user.addRole(role, group); 169 } 170 } 171 172 try { 173 userManager.updateUser(user); 174 175 if (user.getName().equals(request.getRemoteUser())) { 176 UserManagerDaoImpl userManagerDaoImpl = (UserManagerDaoImpl) getBean(Constants.USER_DETAILS_SERVICE_BEAN); 177 userManagerDaoImpl.updateUser(user); 178 } 179 } catch ( ObjectOptimisticLockingFailureException e ) { 180 ActionMessages errors = new ActionMessages(); 182 errors.add("updateFailed", new ActionMessage("core.user.errors.updateFailed")); 183 saveErrors(request, errors); 184 request.setAttribute(WebappConstants.USER_NAME_KEY, userName); 185 return mapping.findForward("callAssignRolesAndGroups"); 186 } 187 188 CacheUtil cacheUtil = CacheUtil.getInstance(request); 192 cacheUtil.flushContentPageCache(); 193 } 194 return mapping.findForward("listUsers"); 195 } 196 } | Popular Tags |