KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > webapp > action > core > contentResource > image > CreateImageAction


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
39 import javax.servlet.http.HttpServletRequest JavaDoc;
40 import javax.servlet.http.HttpServletResponse JavaDoc;
41
42 /**
43  * <p>Creates new content resource with type 'image'
44  * </p>
45  * <p><a HREF="CreateImageAction.java.htm"><i>View Source</i></a></p>
46  * <p/>
47  *
48  * @author Andrey Grebnev <a HREF="mailto:andrey.grebnev@blandware.com">&lt;andrey.grebnev@blandware.com&gt;</a>
49  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
50  * @version $Revision: 1.16 $ $Date: 2006/03/10 17:10:23 $
51  * @struts.action path="/core/contentResource/image/create"
52  * name="imageForm"
53  * scope="request"
54  * input="inputForward"
55  * validate="true"
56  * roles="core-contentResource-create"
57  * @struts.action-forward name="inputForward"
58  * path=".core.contentResource.image.create"
59  * @struts.action-forward name="listContentResources"
60  * path="/core/contentResource/list.do"
61  * redirect="true"
62  * @struts.action-forward name="createContentResource"
63  * path=".core.contentResource.create"
64  * @struts.action-forward name="unsatisfiable"
65  * path="/core/contentResource/list.do"
66  */

67 public final class CreateImageAction extends BaseAction {
68     /**
69      * @param mapping The ActionMapping used to select this instance
70      * @param form The optional ActionForm bean for this request (if any)
71      * @param request The HTTP request we are proceeding
72      * @param response The HTTP response we are creating
73      * @return an ActionForward instance describing where and how
74      * control should be forwarded, or null if response
75      * has already been completed
76      */

77     public ActionForward execute(ActionMapping mapping, ActionForm form,
78                                  HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
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             // Maybe session was invalidated and after that user pressed 'back'
84
// or 'cancel'?
85
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 JavaDoc 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 JavaDoc resourceType = resourceTypesManager.getResourceTypeByFileName(fileName);
125
126         if ( !resourceType.equalsIgnoreCase(Constants.RESOURCE_TYPE_IMAGE) ) {
127             throw new Exception JavaDoc("Resource must have " + Constants.RESOURCE_TYPE_IMAGE + " type");
128         }
129
130         ContentImage image = new ContentImage();
131         WebappUtil.copyProperties(image, imageForm, request);
132
133         //setup uri
134
String JavaDoc uri = Constants.RESOURCES_URI_PREFIX + imageForm.getUri();
135         image.setUri(uri);
136
137         String JavaDoc type = resourceTypesManager.getResourceTypeByFileName(fileName);
138         image.setType(type);
139
140         String JavaDoc mimeType = resourceTypesManager.getMimeTypeByFileName(fileName);
141
142         byte[] imageData = formFile.getFileData();
143
144         IIOImage JavaDoc 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 JavaDoc scaled = ImageUtil.scaleToRectangle(source, maxWidth, maxHeight);
150             try {
151                 imageData = ImageUtil.encodeImage(scaled, mimeType);
152             } catch ( IllegalArgumentException JavaDoc ex ) {
153                 //cannot encode into original format, try to default
154
mimeType = resourceTypesManager.getDefaultMimeType(type);
155                 imageData = ImageUtil.encodeImage(scaled, mimeType);
156             }
157             image.setWidth(new Integer JavaDoc(scaled.getRenderedImage().getWidth()));
158             image.setHeight(new Integer JavaDoc(scaled.getRenderedImage().getHeight()));
159             image.setSize(new Long JavaDoc(imageData.length));
160         } else {
161             image.setWidth(new Integer JavaDoc(source.getRenderedImage().getWidth()));
162             image.setHeight(new Integer JavaDoc(source.getRenderedImage().getHeight()));
163             image.setSize(new Long JavaDoc(imageData.length));
164         }
165
166         image.setMimeType(mimeType);
167
168         ContentResourceManager contentResourceManager = (ContentResourceManager) getBean(Constants.CONTENT_RESOURCE_MANAGER_BEAN);
169         try {
170             Long JavaDoc contentResourceId = contentResourceManager.createContentImage(image, new ResourceData(imageData));
171
172             //put into cache
173
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             // content resource already exists
179
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