1 16 package com.blandware.atleap.webapp.action.core.contentPage; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.model.core.ContentPage; 20 import com.blandware.atleap.model.core.Role; 21 import com.blandware.atleap.search.SearchManager; 22 import com.blandware.atleap.service.core.PageManager; 23 import com.blandware.atleap.service.core.RoleManager; 24 import com.blandware.atleap.service.exception.OwnerNotFoundException; 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.CacheUtil; 28 import com.blandware.atleap.webapp.util.core.WebappConstants; 29 import com.blandware.atleap.webapp.util.core.WebappUtil; 30 import org.apache.struts.action.ActionForm; 31 import org.apache.struts.action.ActionForward; 32 import org.apache.struts.action.ActionMapping; 33 import org.apache.struts.action.ActionMessage; 34 import org.apache.struts.action.ActionMessages; 35 import org.springframework.orm.ObjectOptimisticLockingFailureException; 36 37 import javax.servlet.http.HttpServletRequest ; 38 import javax.servlet.http.HttpServletResponse ; 39 import java.util.ArrayList ; 40 import java.util.List ; 41 import java.util.Iterator ; 42 43 68 public final class AssignContentPageRolesAction extends BaseAction { 69 78 public ActionForward execute(ActionMapping mapping, ActionForm form, 79 HttpServletRequest request, HttpServletResponse response) throws Exception { 80 81 if ( !isCancelled(request) ) { 82 RoleManager roleManager = (RoleManager) getBean(Constants.ROLE_MANAGER_BEAN); 84 SelectRolesForm selectRolesForm = (SelectRolesForm) form; 85 String [] selectedRoleNames = selectRolesForm.getSelectedRoles(); 86 87 List roles = new ArrayList (); 88 for ( int i = 0; i < selectedRoleNames.length; i++ ) { 89 String roleName = selectedRoleNames[i]; 90 Role role = roleManager.retrieveRole(roleName); 91 if ( role != null ) { 92 roles.add(role); 93 } 94 } 95 96 Long contentPageId = null; 97 if ( request.getSession().getAttribute(WebappConstants.CONTENT_PAGE_ID_KEY) != null ) { 98 contentPageId = (Long ) request.getSession().getAttribute(WebappConstants.CONTENT_PAGE_ID_KEY); 99 } else { 100 if ( log.isWarnEnabled() ) { 101 log.warn("Missing content page ID. Returning to list..."); 102 } 103 return mapping.findForward("listContentPages"); 104 } 105 106 PageManager pageManager = (PageManager) getBean(Constants.PAGE_MANAGER_BEAN); 107 ContentPage contentPage = pageManager.retrieveContentPage(contentPageId); 108 109 if ( contentPage == null ) { 110 ActionMessages errors = new ActionMessages(); 112 errors.add("contentPageNotFound", new ActionMessage("core.contentPage.errors.notFound")); 113 saveErrors(request, errors); 114 return mapping.findForward("listContentPages"); 115 } 116 117 contentPage.setVersion(Long.valueOf(selectRolesForm.getVersion())); 118 119 List contentPageRoles = new ArrayList (contentPage.getRoles()); 122 for ( int i = 0; i < contentPageRoles.size(); i++ ) { 123 Role role = (Role) contentPageRoles.get(i); 124 if ( !roles.contains(role) ) { 125 contentPage.removeRole(role); 126 } 127 } 128 129 for ( Iterator i = roles.iterator(); i.hasNext(); ) { 131 Role role = (Role) i.next(); 132 contentPage.addRole(role); 133 } 134 135 136 try { 137 pageManager.updateContentPage(contentPage, contentPage.getLayout().getId()); 138 } catch ( OwnerNotFoundException e ) { 139 ActionMessages errors = new ActionMessages(); 141 errors.add("ownerNotFound", new ActionMessage("core.contentPage.errors.ownerNotFound")); 142 saveErrors(request, errors); 143 return mapping.findForward("listContentPages"); 144 } catch ( ObjectOptimisticLockingFailureException e ) { 145 ActionMessages errors = new ActionMessages(); 147 errors.add("updateFailed", new ActionMessage("core.contentPage.errors.updateFailed")); 148 saveErrors(request, errors); 149 request.setAttribute(WebappConstants.CONTENT_PAGE_ID_KEY, contentPage.getId()); 150 return mapping.findForward("callAssignRoles"); 151 } 152 153 if ( contentPage.getActive().booleanValue() ) { 155 CacheUtil cacheUtil = CacheUtil.getInstance(request); 156 CacheUtil.ContentPageData cpd = new CacheUtil.ContentPageData(contentPage.getLayout().getCpDefinition(), WebappUtil.rolesToString(contentPage.getRoles()), contentPage.getCacheMaxAge()); 157 cacheUtil.putContentPageInCache(cpd, contentPage.getUri()); 158 } 159 160 if ( contentPage.getActive().booleanValue() ) { 162 SearchManager searchManager = SearchManager.getInstance(request.getSession().getServletContext()); 163 searchManager.reIndexPage(contentPage, request); 164 } 165 166 } 167 return mapping.findForward("listContentPages"); 168 } 169 } | Popular Tags |