1 16 package com.blandware.atleap.webapp.action.core.group; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.model.core.Role; 20 import com.blandware.atleap.model.core.Group; 21 import com.blandware.atleap.model.core.User; 22 import com.blandware.atleap.service.core.RoleManager; 23 import com.blandware.atleap.service.core.GroupManager; 24 import com.blandware.atleap.service.core.UserManager; 25 import com.blandware.atleap.webapp.action.core.BaseAction; 26 import com.blandware.atleap.webapp.form.core.SelectRolesForm; 27 import com.blandware.atleap.webapp.util.core.WebappConstants; 28 import com.blandware.atleap.webapp.util.core.CacheUtil; 29 import com.blandware.atleap.webapp.acegi.UserManagerDaoImpl; 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.*; 37 38 67 public final class AssignGroupRolesAction extends BaseAction { 68 77 public ActionForward execute(ActionMapping mapping, ActionForm form, 78 HttpServletRequest request, HttpServletResponse response) throws Exception { 79 80 if ( !isCancelled(request) ) { 81 82 String groupName = (String ) request.getSession().getAttribute(WebappConstants.GROUP_NAME_KEY); 83 if ( GenericValidator.isBlankOrNull(groupName) ) { 84 if ( log.isWarnEnabled() ) { 85 log.warn("Missing group name. Returning to list..."); 86 } 87 return mapping.findForward("listGroups"); 88 } 89 90 RoleManager roleManager = (RoleManager) getBean(Constants.ROLE_MANAGER_BEAN); 92 SelectRolesForm selectRolesForm = (SelectRolesForm) form; 93 String [] selectedRoleNames = selectRolesForm.getSelectedRoles(); 94 95 List roles = new ArrayList(); 96 for ( int i = 0; i < selectedRoleNames.length; i++ ) { 97 String roleName = selectedRoleNames[i]; 98 Role role = roleManager.retrieveRole(roleName); 99 if ( role != null ) { 100 roles.add(role); 101 } 102 } 103 104 GroupManager groupManager = (GroupManager) getBean(Constants.GROUP_MANAGER_BEAN); 106 Group group = groupManager.retrieveGroup(groupName); 107 108 if ( group == null ) { 109 ActionMessages errors = new ActionMessages(); 111 errors.add("groupNotFound", new ActionMessage("core.group.errors.notFound")); 112 saveErrors(request, errors); 113 return mapping.findForward("listGroups"); 114 } 115 116 group.setVersion(Long.valueOf(selectRolesForm.getVersion())); 117 118 UserManager userManager = (UserManager) getBean(Constants.USER_MANAGER_BEAN); 119 Set touchedUsers = new HashSet(); 120 121 List groupRoles = new ArrayList(group.getRoles()); 124 for ( int i = 0; i < groupRoles.size(); i++ ) { 125 Role role = (Role) groupRoles.get(i); 126 if ( !roles.contains(role) ) { 127 group.removeRole(role); 128 List groupUsers = group.getUsers(); 129 for (int j = 0; j < groupUsers.size(); j++) { 130 User user = (User) groupUsers.get(j); 131 user.removeRole(role, group); 132 touchedUsers.add(user); 133 } 134 } 135 } 136 for ( Iterator i = roles.iterator(); i.hasNext(); ) { 138 Role role = (Role) i.next(); 139 group.addRole(role); 140 List groupUsers = group.getUsers(); 141 for (int j = 0; j < groupUsers.size(); j++) { 142 User user = (User) groupUsers.get(j); 143 user.addRole(role, group); 144 touchedUsers.add(user); 145 } 146 } 147 148 UserManagerDaoImpl userManagerDaoImpl = (UserManagerDaoImpl) getBean(Constants.USER_DETAILS_SERVICE_BEAN); 149 150 try { 151 groupManager.updateGroup(group); 152 for (Iterator i = touchedUsers.iterator(); i.hasNext();) { 153 User user = (User) i.next(); 154 userManager.updateUser(user); 155 156 if (user.getName().equals(request.getRemoteUser())) { 157 userManagerDaoImpl.updateUser(user); 158 } 159 } 160 } catch ( ObjectOptimisticLockingFailureException e ) { 161 ActionMessages errors = new ActionMessages(); 163 errors.add("updateFailed", new ActionMessage("core.group.errors.updateFailed")); 164 saveErrors(request, errors); 165 request.setAttribute(WebappConstants.GROUP_NAME_KEY, groupName); 166 return mapping.findForward("callAssignRoles"); 167 } 168 169 CacheUtil cacheUtil = CacheUtil.getInstance(request); 173 cacheUtil.flushContentPageCache(); 174 } 175 return mapping.findForward("listGroups"); 176 } 177 } | Popular Tags |