1 16 package com.blandware.atleap.webapp.action.core.contentResource.document; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.model.core.ContentDocument; 20 import com.blandware.atleap.model.core.ResourceData; 21 import com.blandware.atleap.search.SearchManager; 22 import com.blandware.atleap.service.core.ContentResourceManager; 23 import com.blandware.atleap.service.exception.BeanAlreadyExistsException; 24 import com.blandware.atleap.webapp.action.core.BaseAction; 25 import com.blandware.atleap.webapp.form.ContentDocumentForm; 26 import com.blandware.atleap.webapp.form.core.UploadContentResourceForm; 27 import com.blandware.atleap.webapp.util.core.CacheUtil; 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.servlet.http.HttpServletRequest ; 39 import javax.servlet.http.HttpServletResponse ; 40 41 65 public final class CreateDocumentAction extends BaseAction { 66 75 public ActionForward execute(ActionMapping mapping, ActionForm form, 76 HttpServletRequest request, HttpServletResponse response) throws Exception { 77 78 ContentDocumentForm documentForm = (ContentDocumentForm) form; 79 80 UploadContentResourceForm uploadContentResourceForm = (UploadContentResourceForm) request.getSession().getAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 81 if ( uploadContentResourceForm == null || uploadContentResourceForm.getFile() == null ) { 82 if (isBackPressed(request)) { 85 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 86 saveToken(request); 87 return mapping.findForward("createContentResource"); 88 } 89 if ( isCancelled(request) ) { 90 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 91 return mapping.findForward("listContentResources"); 92 } 93 if ( log.isWarnEnabled() ) { 94 log.warn("Missing required attribute in session '" + WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY + "'"); 95 } 96 ActionMessages errors = new ActionMessages(); 97 errors.add("missingResource", new ActionMessage("core.contentResource.errors.missingResource")); 98 saveErrors(request, errors); 99 saveToken(request); 100 return mapping.getInputForward(); 101 } 102 FormFile formFile = uploadContentResourceForm.getFile(); 103 String fileName = formFile.getFileName(); 104 105 if (isBackPressed(request)) { 106 if ( formFile != null ) { 107 formFile.destroy(); 108 } 109 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 110 saveToken(request); 111 return mapping.findForward("createContentResource"); 112 } 113 114 if ( isCancelled(request) ) { 115 if ( formFile != null ) { 116 formFile.destroy(); 117 } 118 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 119 return mapping.findForward("listContentResources"); 120 } 121 122 ResourceTypesManager resourceTypesManager = ResourceTypesManager.getInstance(request.getSession().getServletContext()); 123 String resourceType = resourceTypesManager.getResourceTypeByFileName(fileName); 124 125 if ( !resourceType.equalsIgnoreCase(Constants.RESOURCE_TYPE_DOCUMENT) ) { 126 throw new Exception ("Resource must have " + Constants.RESOURCE_TYPE_DOCUMENT + " type"); 127 } 128 129 if ( !WebappUtil.isCharsetSupported(documentForm.getCharset()) ) { 130 ActionMessages errors = new ActionMessages(); 132 errors.add("notSupportedCharset", new ActionMessage("core.commons.errors.notSupportedCharset", documentForm.getCharset())); 133 saveErrors(request, errors); 134 saveToken(request); 135 return mapping.getInputForward(); 136 } 137 138 ContentDocument document = new ContentDocument(); 139 WebappUtil.copyProperties(document, documentForm, request); 140 141 String uri = Constants.RESOURCES_URI_PREFIX + documentForm.getUri(); 143 document.setUri(uri); 144 145 String type = resourceTypesManager.getResourceTypeByFileName(fileName); 146 document.setType(type); 147 148 String mimeType = resourceTypesManager.getMimeTypeByFileName(fileName); 149 150 byte[] documentData = formFile.getFileData(); 151 152 document.setSize(new Long (documentData.length)); 153 154 document.setMimeType(mimeType); 155 156 ContentResourceManager contentResourceManager = (ContentResourceManager) getBean(Constants.CONTENT_RESOURCE_MANAGER_BEAN); 157 try { 158 Long contentResourceId = contentResourceManager.createContentDocument(document, new ResourceData(documentData), documentForm.getContentLocaleId()); 159 160 document = contentResourceManager.retrieveContentDocument(contentResourceId); 162 CacheUtil cacheUtil = CacheUtil.getInstance(request); 163 CacheUtil.ResourceData rd = new CacheUtil.ResourceData(documentData, mimeType, document.getCharset(), null, document.getLastUpdatedDatetime().getTime()); 164 cacheUtil.putResourceInCache(rd, document.getUri()); 165 166 SearchManager searchManager = SearchManager.getInstance(servlet.getServletContext()); 168 searchManager.reIndexDocument(document, request); 169 } catch ( BeanAlreadyExistsException e ) { 170 ActionMessages errors = new ActionMessages(); 172 errors.add("contentResourceAlreadyExists", new ActionMessage("core.contentResource.errors.alreadyExists")); 173 saveErrors(request, errors); 174 saveToken(request); 175 return mapping.getInputForward(); 176 } 177 178 if ( formFile != null ) { 179 formFile.destroy(); 180 } 181 request.getSession().removeAttribute(WebappConstants.UPLOAD_CONTENT_RESOURCE_FORM_KEY); 182 183 return mapping.findForward("listContentResources"); 184 185 186 } 187 } | Popular Tags |