1 16 package com.blandware.atleap.webapp.action.core.menuItem; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.model.core.MenuItem; 20 import com.blandware.atleap.model.core.Role; 21 import com.blandware.atleap.service.core.MenuManager; 22 import com.blandware.atleap.service.core.RoleManager; 23 import com.blandware.atleap.webapp.action.core.BaseAction; 24 import com.blandware.atleap.webapp.form.core.SelectRolesForm; 25 import com.blandware.atleap.webapp.util.core.CacheUtil; 26 import com.blandware.atleap.webapp.util.core.WebappConstants; 27 import org.apache.struts.action.ActionForm; 28 import org.apache.struts.action.ActionForward; 29 import org.apache.struts.action.ActionMapping; 30 import org.apache.struts.action.ActionMessage; 31 import org.apache.struts.action.ActionMessages; 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.List ; 38 import java.util.Iterator ; 39 40 65 public final class AssignMenuItemRolesAction extends BaseAction { 66 75 public ActionForward execute(ActionMapping mapping, ActionForm form, 76 HttpServletRequest request, HttpServletResponse response) throws Exception { 77 78 Long ownerId = null; 79 if ( request.getSession().getAttribute(WebappConstants.OWNER_ID_KEY) != null ) { 80 ownerId = (Long ) request.getSession().getAttribute(WebappConstants.OWNER_ID_KEY); 81 } else { 82 if ( log.isWarnEnabled() ) { 83 log.warn("Missing owner ID. Returning to index..."); 84 } 85 return mapping.findForward("admin"); 86 } 87 88 if ( !isCancelled(request) ) { 89 RoleManager roleManager = (RoleManager) getBean(Constants.ROLE_MANAGER_BEAN); 91 SelectRolesForm selectRolesForm = (SelectRolesForm) form; 92 String [] selectedRoleNames = selectRolesForm.getSelectedRoles(); 93 94 List roles = new ArrayList (); 95 for ( int i = 0; i < selectedRoleNames.length; i++ ) { 96 String roleName = selectedRoleNames[i]; 97 Role role = roleManager.retrieveRole(roleName); 98 if ( role != null ) { 99 roles.add(role); 100 } 101 } 102 103 Long menuItemId = (Long ) request.getSession().getAttribute(WebappConstants.MENU_ITEM_ID_KEY); 104 MenuManager menuManager = (MenuManager) getBean(Constants.MENU_MANAGER_BEAN); 105 MenuItem menuItem = menuManager.retrieveMenuItem(menuItemId); 106 107 if ( menuItem == null ) { 108 ActionMessages errors = new ActionMessages(); 110 errors.add("menuItemNotFound", new ActionMessage("core.menuItem.errors.notFound")); 111 saveErrors(request, errors); 112 return mapping.findForward("listMenuItems"); 113 } 114 115 menuItem.setVersion(Long.valueOf(selectRolesForm.getVersion())); 116 117 List menuItemRoles = new ArrayList (menuItem.getRoles()); 120 for ( int i = 0; i < menuItemRoles.size(); i++ ) { 121 Role role = (Role) menuItemRoles.get(i); 122 if ( !roles.contains(role) ) { 123 menuItem.removeRole(role); 124 } 125 } 126 127 for ( Iterator i = roles.iterator(); i.hasNext(); ) { 129 Role role = (Role) i.next(); 130 menuItem.addRole(role); 131 } 132 133 Long parentItemId = null; 134 if ( menuItem.getParentItem() != null ) { 135 parentItemId = menuItem.getParentItem().getId(); 136 } 137 138 try { 139 menuManager.updateMenuItem(menuItem, parentItemId, ownerId); 140 } catch ( ObjectOptimisticLockingFailureException e ) { 141 ActionMessages errors = new ActionMessages(); 143 errors.add("updateFailed", new ActionMessage("core.menuItem.errors.updateFailed")); 144 saveErrors(request, errors); 145 request.setAttribute(WebappConstants.MENU_ITEM_ID_KEY, menuItem.getId()); 146 return mapping.findForward("callAssignRoles"); 147 } 148 149 CacheUtil cacheUtil = CacheUtil.getInstance(request); 151 cacheUtil.flushMenuCache(); 152 cacheUtil.flushContentPageCache(); 153 154 } 155 return mapping.findForward("listMenuItems"); 156 } 157 } | Popular Tags |