1 16 package com.blandware.atleap.webapp.action.core.contentResource.image; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.model.core.ContentImage; 20 import com.blandware.atleap.model.core.ResourceData; 21 import com.blandware.atleap.service.core.ContentResourceManager; 22 import com.blandware.atleap.service.exception.BeanAlreadyExistsException; 23 import com.blandware.atleap.webapp.action.core.BaseAction; 24 import com.blandware.atleap.webapp.form.core.ImageForm; 25 import com.blandware.atleap.webapp.form.core.UploadContentResourceForm; 26 import com.blandware.atleap.webapp.util.core.CacheUtil; 27 import com.blandware.atleap.webapp.util.core.ImageUtil; 28 import com.blandware.atleap.webapp.util.core.ResourceTypesManager; 29 import com.blandware.atleap.webapp.util.core.WebappConstants; 30 import com.blandware.atleap.webapp.util.core.WebappUtil; 31 import org.apache.struts.action.ActionForm; 32 import org.apache.struts.action.ActionForward; 33 import org.apache.struts.action.ActionMapping; 34 import org.apache.struts.action.ActionMessage; 35 import org.apache.struts.action.ActionMessages; 36 import org.apache.struts.upload.FormFile; 37 38 import javax.imageio.IIOImage ; 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpServletResponse ; 41 42 67 public final class CreateImageAction extends BaseAction { 68 77 public ActionForward execute(ActionMapping mapping, ActionForm form, 78 HttpServletRequest request, HttpServletResponse response) throws Exception { 79 ImageForm imageForm = (ImageForm) form; 80 81 UploadContentResourceForm uploadContentResourceForm = (UploadContentResourceForm) request.getSession().getAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 82 if ( uploadContentResourceForm == null || uploadContentResourceForm.getFile() == null ) { 83 if (isBackPressed(request)) { 86 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 87 saveToken(request); 88 return mapping.findForward("createContentResource"); 89 } 90 if ( isCancelled(request) ) { 91 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 92 return mapping.findForward("listContentResources"); 93 } 94 if ( log.isWarnEnabled() ) { 95 log.warn("Missing required attribute in session '" + WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY + "'"); 96 } 97 ActionMessages errors = new ActionMessages(); 98 errors.add("missingResource", new ActionMessage("core.contentResource.errors.missingResource")); 99 saveErrors(request, errors); 100 saveToken(request); 101 return mapping.getInputForward(); 102 } 103 FormFile formFile = uploadContentResourceForm.getFile(); 104 String fileName = formFile.getFileName(); 105 106 if (isBackPressed(request)) { 107 if ( formFile != null ) { 108 formFile.destroy(); 109 } 110 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 111 saveToken(request); 112 return mapping.findForward("createContentResource"); 113 } 114 115 if ( isCancelled(request) ) { 116 if ( formFile != null ) { 117 formFile.destroy(); 118 } 119 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 120 return mapping.findForward("listContentResources"); 121 } 122 123 ResourceTypesManager resourceTypesManager = ResourceTypesManager.getInstance(request.getSession().getServletContext()); 124 String resourceType = resourceTypesManager.getResourceTypeByFileName(fileName); 125 126 if ( !resourceType.equalsIgnoreCase(Constants.RESOURCE_TYPE_IMAGE) ) { 127 throw new Exception ("Resource must have " + Constants.RESOURCE_TYPE_IMAGE + " type"); 128 } 129 130 ContentImage image = new ContentImage(); 131 WebappUtil.copyProperties(image, imageForm, request); 132 133 String uri = Constants.RESOURCES_URI_PREFIX + imageForm.getUri(); 135 image.setUri(uri); 136 137 String type = resourceTypesManager.getResourceTypeByFileName(fileName); 138 image.setType(type); 139 140 String mimeType = resourceTypesManager.getMimeTypeByFileName(fileName); 141 142 byte[] imageData = formFile.getFileData(); 143 144 IIOImage source = ImageUtil.decodeImage(imageData, mimeType); 145 146 if ( imageForm.isScale() ) { 147 int maxWidth = Integer.parseInt(imageForm.getScaleWidth()); 148 int maxHeight = Integer.parseInt(imageForm.getScaleHeight()); 149 IIOImage scaled = ImageUtil.scaleToRectangle(source, maxWidth, maxHeight); 150 try { 151 imageData = ImageUtil.encodeImage(scaled, mimeType); 152 } catch ( IllegalArgumentException ex ) { 153 mimeType = resourceTypesManager.getDefaultMimeType(type); 155 imageData = ImageUtil.encodeImage(scaled, mimeType); 156 } 157 image.setWidth(new Integer (scaled.getRenderedImage().getWidth())); 158 image.setHeight(new Integer (scaled.getRenderedImage().getHeight())); 159 image.setSize(new Long (imageData.length)); 160 } else { 161 image.setWidth(new Integer (source.getRenderedImage().getWidth())); 162 image.setHeight(new Integer (source.getRenderedImage().getHeight())); 163 image.setSize(new Long (imageData.length)); 164 } 165 166 image.setMimeType(mimeType); 167 168 ContentResourceManager contentResourceManager = (ContentResourceManager) getBean(Constants.CONTENT_RESOURCE_MANAGER_BEAN); 169 try { 170 Long contentResourceId = contentResourceManager.createContentImage(image, new ResourceData(imageData)); 171 172 image = contentResourceManager.retrieveContentImage(contentResourceId); 174 CacheUtil cacheUtil = CacheUtil.getInstance(request); 175 CacheUtil.ResourceData rd = new CacheUtil.ResourceData(imageData, mimeType, null, image.getLastUpdatedDatetime().getTime()); 176 cacheUtil.putResourceInCache(rd, image.getUri()); 177 } catch ( BeanAlreadyExistsException e ) { 178 ActionMessages errors = new ActionMessages(); 180 errors.add("contentResourceAlreadyExists", new ActionMessage("core.contentResource.errors.alreadyExists")); 181 saveErrors(request, errors); 182 saveToken(request); 183 return mapping.getInputForward(); 184 } 185 186 if ( formFile != null ) { 187 formFile.destroy(); 188 } 189 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 190 191 return mapping.findForward("listContentResources"); 192 193 194 } 195 } | Popular Tags |