1 16 package com.blandware.atleap.webapp.action.core.layout; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.model.core.Layout; 20 import com.blandware.atleap.service.core.LayoutManager; 21 import com.blandware.atleap.service.exception.BeanAlreadyExistsException; 22 import com.blandware.atleap.webapp.action.core.BaseAction; 23 import com.blandware.atleap.webapp.form.LayoutForm; 24 import com.blandware.atleap.webapp.struts.HeritableComponentDefinition; 25 import com.blandware.atleap.webapp.util.core.CacheUtil; 26 import com.blandware.atleap.webapp.util.core.WebappConstants; 27 import com.blandware.atleap.webapp.util.core.WebappUtil; 28 import com.blandware.atleap.persistence.exception.UpdateException; 29 import org.apache.commons.validator.GenericValidator; 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.apache.struts.tiles.ComponentDefinition; 36 import org.apache.struts.tiles.TilesUtil; 37 import org.springframework.orm.ObjectOptimisticLockingFailureException; 38 39 import javax.servlet.ServletContext ; 40 import javax.servlet.http.HttpServletRequest ; 41 import javax.servlet.http.HttpServletResponse ; 42 43 71 public final class UpdateLayoutAction extends BaseAction { 72 81 public ActionForward execute(ActionMapping mapping, ActionForm form, 82 HttpServletRequest request, HttpServletResponse response) throws Exception { 83 84 if ( !isCancelled(request) ) { 85 LayoutForm layoutForm = (LayoutForm) form; 86 ServletContext servletContext = request.getSession().getServletContext(); 87 88 ComponentDefinition definition = TilesUtil.getDefinition(layoutForm.getDefinition(), request, getServlet().getServletContext()); 90 if ( definition == null ) { 91 ActionMessages errors = new ActionMessages(); 93 errors.add("noSuchDefinition", new ActionMessage("core.layout.errors.noSuchDefinition")); 94 saveErrors(request, errors); 95 saveToken(request); 96 return mapping.getInputForward(); 97 } 98 99 if ( layoutForm.getCpDefinition() != null && layoutForm.getCpDefinition().length() > 0 ) { 100 ComponentDefinition cpDefinition = TilesUtil.getDefinition(layoutForm.getCpDefinition(), request, getServlet().getServletContext()); 102 if ( cpDefinition == null ) { 103 ActionMessages errors = new ActionMessages(); 105 errors.add("noSuchDefinition", new ActionMessage("core.layout.errors.noSuchDefinition")); 106 saveErrors(request, errors); 107 saveToken(request); 108 return mapping.getInputForward(); 109 } 110 111 boolean isChild = false; 113 String tempDefinition = cpDefinition.getName(); 114 do { 115 if ( tempDefinition.equalsIgnoreCase(definition.getName()) ) { 116 isChild = true; 117 break; 118 } 119 tempDefinition = ((HeritableComponentDefinition) TilesUtil.getDefinition(tempDefinition, request, servletContext)).getExtends(); 120 } while ( tempDefinition != null ); 121 if ( !isChild ) { 122 ActionMessages errors = new ActionMessages(); 123 errors.add("isNotChildDefinition", new ActionMessage("core.layout.errors.isNotChildDefinition", 124 cpDefinition.getName(), 125 definition.getName())); 126 saveErrors(request, errors); 127 saveToken(request); 128 return mapping.getInputForward(); 129 } 130 } 131 132 Long layoutId = null; 133 if ( !GenericValidator.isBlankOrNull(layoutForm.getId()) ) { 134 layoutId = Long.valueOf(layoutForm.getId()); 135 } else { 136 if ( log.isWarnEnabled() ) { 137 log.warn("Missing layout ID. Returning to list..."); 138 } 139 return mapping.findForward("listLayouts"); 140 } 141 142 143 LayoutManager layoutManager = (LayoutManager) getBean(Constants.LAYOUT_MANAGER_BEAN); 144 Layout layout = layoutManager.retrieveLayout(layoutId); 145 146 if ( layout == null ) { 147 ActionMessages errors = new ActionMessages(); 149 errors.add("layoutNotFound", new ActionMessage("core.layout.errors.notFound")); 150 saveErrors(request, errors); 151 return mapping.findForward("listLayouts"); 152 } 153 154 WebappUtil.copyProperties(layout, layoutForm, request); 155 try { 156 layoutManager.updateLayout(layout); 157 158 CacheUtil cacheUtil = CacheUtil.getInstance(request); 160 cacheUtil.flushLayoutFieldValueCache(layoutForm.getDefinition()); 161 cacheUtil.flushFieldIndices(); 162 163 } catch ( BeanAlreadyExistsException e ) { 164 ActionMessages errors = new ActionMessages(); 166 errors.add("layoutAlreadyExists", new ActionMessage("core.layout.errors.alreadyExists")); 167 saveErrors(request, errors); 168 saveToken(request); 169 return mapping.getInputForward(); 170 } catch ( ObjectOptimisticLockingFailureException e ) { 171 ActionMessages errors = new ActionMessages(); 173 errors.add("updateFailed", new ActionMessage("core.layout.errors.updateFailed")); 174 saveErrors(request, errors); 175 return mapping.findForward("callUpdateLayout"); 176 } catch( UpdateException e ) { 177 ActionMessages errors = new ActionMessages(); 180 errors.add("updateFailed", new ActionMessage("core.layout.errors.cannotMakeCpDefinitionEmpty")); 181 saveErrors(request, errors); 182 return mapping.findForward("callUpdateLayout"); 183 } 184 request.getSession().setAttribute(WebappConstants.LAYOUT_ID_KEY, layout.getId()); 185 return mapping.findForward("viewLayout"); 186 } else { 187 return mapping.findForward("listLayouts"); 188 } 189 } 190 } | Popular Tags |