r684 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin faxtomail-ui-web/src/main/resources
Author: kmorin Date: 2014-10-31 16:14:53 +0100 (Fri, 31 Oct 2014) New Revision: 684 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/684 Log: - fix archive import Added: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailExecuteAndWaitInterceptor.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/HasUploadedFile.java Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportModel.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java trunk/faxtomail-ui-web/src/main/resources/struts.properties trunk/faxtomail-ui-web/src/main/resources/struts.xml Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-10-28 17:17:15 UTC (rev 683) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-10-31 15:14:53 UTC (rev 684) @@ -69,6 +69,7 @@ import com.google.common.base.Optional; import com.google.common.collect.Iterables; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.IteratorUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportModel.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportModel.java 2014-10-28 17:17:15 UTC (rev 683) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportModel.java 2014-10-31 15:14:53 UTC (rev 684) @@ -54,7 +54,7 @@ /** * Parse date pattern : dd/MM/yyyy hh:mm:ss. */ - protected ValueParserFormatter<Date> dateValueParserFormatter = new ValueParserFormatter<Date>() { + protected static final ValueParserFormatter<Date> dateValueParserFormatter = new ValueParserFormatter<Date>() { protected DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); @Override public Date parse(String value) throws ParseException { Added: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailExecuteAndWaitInterceptor.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailExecuteAndWaitInterceptor.java (rev 0) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailExecuteAndWaitInterceptor.java 2014-10-31 15:14:53 UTC (rev 684) @@ -0,0 +1,59 @@ +package com.franciaflex.faxtomail.web; + +import com.opensymphony.xwork2.ActionInvocation; +import org.apache.commons.io.FileUtils; +import org.apache.struts2.interceptor.BackgroundProcess; +import org.apache.struts2.interceptor.ExecuteAndWaitInterceptor; + +import java.io.File; + +/** + * Interceptor to copy the temp file to avoid it is deleted before the execAndWait thread has time to read it + * cf http://stackoverflow.com/questions/22382779/file-not-saved-in-temp-path-usin... + * @author Kevin Morin (Code Lutin) + * @since 1.1 + */ +public class FaxToMailExecuteAndWaitInterceptor extends ExecuteAndWaitInterceptor { + + @Override + protected BackgroundProcess getNewBackgroundProcess(String name, + ActionInvocation actionInvocation, + int threadPriority) { + + BackgroundProcess bgProcess; + if (actionInvocation.getAction() instanceof HasUploadedFile) { + HasUploadedFile uploadAction = (HasUploadedFile) actionInvocation.getAction(); + try { + File origFile = uploadAction.getUploadedFile(); + if (origFile != null) { + File altFile = new File(origFile.getParentFile(), origFile.getName() + "-alt.tmp"); + FileUtils.copyFile(origFile, altFile); + altFile.deleteOnExit(); + uploadAction.setUploadedFile(altFile); + } + } catch (Exception ex) { + throw new RuntimeException("Error copying uploaded file", ex); + } + bgProcess = new UploadBackgroundProcess(name + "BackgroundThread", actionInvocation, threadPriority); + } else { + bgProcess = super.getNewBackgroundProcess(name, actionInvocation, threadPriority); + } + return bgProcess; + } + + /** + * Wraps the standard {@link BackgroundProcess} to clean up alternate file created above. + */ + private class UploadBackgroundProcess extends BackgroundProcess { + + public UploadBackgroundProcess(String threadName, ActionInvocation invocation, int threadPriority) { + super(threadName, invocation, threadPriority); + } + + @Override + protected void afterInvocation() throws Exception { + super.afterInvocation(); + FileUtils.deleteQuietly(((HasUploadedFile)getAction()).getUploadedFile()); + } + } +} Added: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/HasUploadedFile.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/HasUploadedFile.java (rev 0) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/HasUploadedFile.java 2014-10-31 15:14:53 UTC (rev 684) @@ -0,0 +1,14 @@ +package com.franciaflex.faxtomail.web; + +import java.io.File; + +/** + * @author Kevin Morin (Code Lutin) + * @since 1.1 + */ +public interface HasUploadedFile { + + File getUploadedFile(); + + void setUploadedFile(File file); +} Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java 2014-10-28 17:17:15 UTC (rev 683) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java 2014-10-31 15:14:53 UTC (rev 684) @@ -33,6 +33,7 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailTopiaPersistenceContext; import com.franciaflex.faxtomail.services.FaxToMailServiceContext; import com.franciaflex.faxtomail.services.service.imports.ArchiveImportResult; +import com.franciaflex.faxtomail.web.HasUploadedFile; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,16 +55,18 @@ @InterceptorRef("faxToMailInterceptor"), @InterceptorRef("loginInterceptor"), @InterceptorRef("paramsPrepareParamsStack"), - @InterceptorRef(value="execAndWait", - params={"excludeMethods", "input,downloadImportErrorFile"}) + @InterceptorRef(value="faxToMailExecAndWait", + params={"excludeMethods", "input,downloadImportErrorFile", "delay", "1000"}) }) -public class ImportArchiveAction extends FaxToMailActionSupport implements Preparable { +public class ImportArchiveAction extends FaxToMailActionSupport implements Preparable, HasUploadedFile { private static final Log log = LogFactory.getLog(ImportArchiveAction.class); protected String attachmentBase; protected File archiveFile; + protected String archiveFileFileName; + protected String archiveFileContentType; protected FaxToMailApplicationContext applicationContext; @@ -73,14 +76,6 @@ protected String fileName; protected String contentType; - public void setArchiveFile(File archiveFile) { - this.archiveFile = archiveFile; - } - - public void setAttachmentBase(String attachmentBase) { - this.attachmentBase = attachmentBase; - } - public void setApplicationContext(FaxToMailApplicationContext applicationContext) { this.applicationContext = applicationContext; } @@ -131,7 +126,7 @@ importResult = emailService.importArchive(is, file); if (log.isInfoEnabled()) { - log.info(importResult.getNbImportedArchives()); + log.info(importResult.getNbImportedArchives() + " imported archives"); } } catch (Exception ex) { @@ -170,13 +165,37 @@ return SUCCESS; } + + public void setArchiveFile(File archiveFile) { + this.archiveFile = archiveFile; + } + + public void setAttachmentBase(String attachmentBase) { + this.attachmentBase = attachmentBase; + } + + public String getArchiveFileFileName() { + return archiveFileFileName; + } + + public void setArchiveFileFileName(String archiveFileFileName) { + this.archiveFileFileName = archiveFileFileName; + } + + public String getArchiveFileContentType() { + return archiveFileContentType; + } + + public void setArchiveFileContentType(String archiveFileContentType) { + this.archiveFileContentType = archiveFileContentType; + } + public ArchiveImportResult getImportResult() { return importResult; } public void setImportResult(ArchiveImportResult importResult) { this.importResult = importResult; - log.info(importResult); } public InputStream getInputStream() { @@ -194,4 +213,14 @@ public String getContentType() { return contentType; } + + @Override + public File getUploadedFile() { + return archiveFile; + } + + @Override + public void setUploadedFile(File file) { + archiveFile = file; + } } Modified: trunk/faxtomail-ui-web/src/main/resources/struts.properties =================================================================== --- trunk/faxtomail-ui-web/src/main/resources/struts.properties 2014-10-28 17:17:15 UTC (rev 683) +++ trunk/faxtomail-ui-web/src/main/resources/struts.properties 2014-10-31 15:14:53 UTC (rev 684) @@ -38,3 +38,6 @@ struts.freemarker.templatesCache=true struts.convention.package.locators.basePackage=com.franciaflex.faxtomail.web.action + +# allow large file upload +struts.multipart.maxSize=2000000000 \ No newline at end of file Modified: trunk/faxtomail-ui-web/src/main/resources/struts.xml =================================================================== --- trunk/faxtomail-ui-web/src/main/resources/struts.xml 2014-10-28 17:17:15 UTC (rev 683) +++ trunk/faxtomail-ui-web/src/main/resources/struts.xml 2014-10-31 15:14:53 UTC (rev 684) @@ -42,6 +42,7 @@ <interceptors> <interceptor name="faxToMailInterceptor" class="com.franciaflex.faxtomail.web.FaxToMailInterceptor"/> <interceptor name="loginInterceptor" class="com.franciaflex.faxtomail.web.FaxToMailLoginInterceptor" /> + <interceptor name="faxToMailExecAndWait" class="com.franciaflex.faxtomail.web.FaxToMailExecuteAndWaitInterceptor" /> <interceptor-stack name="faxToMailStack"> <interceptor-ref name="faxToMailInterceptor" />
participants (1)
-
kmorin@users.forge.codelutin.com