r236 - in trunk: faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin
Author: echatellier Date: 2014-06-19 18:09:40 +0200 (Thu, 19 Jun 2014) New Revision: 236 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/236 Log: Conversion des pi?\195?\168ces jointes en PDF ?\195?\160 la r?\195?\169ception Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-06-19 15:08:04 UTC (rev 235) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-06-19 16:09:40 UTC (rev 236) @@ -67,6 +67,7 @@ import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.jaxx.application.swing.util.ApplicationUIUtil; +import org.nuiton.util.DesktopUtil; import org.nuiton.util.FileUtil; import com.franciaflex.faxtomail.persistence.entities.Attachment; Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-19 15:08:04 UTC (rev 235) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-19 16:09:40 UTC (rev 236) @@ -26,6 +26,8 @@ import static org.nuiton.i18n.I18n.t; +import java.io.File; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.text.DateFormat; @@ -53,27 +55,33 @@ import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; -import com.franciaflex.faxtomail.persistence.entities.Client; -import com.franciaflex.faxtomail.services.service.ClientService; - +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.Charsets; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; +import org.nuiton.util.StringUtil; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; +import com.franciaflex.faxtomail.persistence.entities.AttachmentFileImpl; import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; +import com.franciaflex.faxtomail.persistence.entities.Client; import com.franciaflex.faxtomail.persistence.entities.DemandStatus; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.EmailAccount; import com.franciaflex.faxtomail.persistence.entities.EmailImpl; +import com.franciaflex.faxtomail.persistence.entities.ExtensionCommand; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.services.DecoratorService; import com.franciaflex.faxtomail.services.FaxToMailServiceContext; +import com.franciaflex.faxtomail.services.service.ClientService; import com.franciaflex.faxtomail.services.service.ConfigurationService; import com.franciaflex.faxtomail.services.service.EmailService; import com.franciaflex.faxtomail.services.service.MailFolderService; @@ -88,6 +96,7 @@ protected FaxToMailServiceContext serviceContext; + protected ConfigurationService configurationService; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { serviceContext = getServiceContext(jobExecutionContext); @@ -96,7 +105,7 @@ log.debug("Running MailFilterJob at " + serviceContext.getNow()); } - ConfigurationService configurationService = serviceContext.newService(ConfigurationService.class); + configurationService = serviceContext.newService(ConfigurationService.class); Collection<EmailAccount> emailAccounts = configurationService.getEmailAccounts(); for (EmailAccount account : emailAccounts) { @@ -373,6 +382,7 @@ DataHandler dh = bp.getDataHandler(); + // create new attachment Attachment attachment = new AttachmentImpl(); attachment.setAddedByUser(false); AttachmentFile attachmentFile = emailService.getAttachmentFileFromStream(dh.getInputStream()); @@ -380,7 +390,10 @@ attachment.setOriginalFile(attachmentFile); attachment.setContentId(contentID); - //email.addAttachment(attachment); + // convert attachment if defined by admin + convertIfNecessary(attachment); + + // save attachment attachments.add(attachment); } } @@ -392,4 +405,83 @@ Charset charset = Charsets.toCharset(charsetName); return charset; } + + /** + * Retourne un input stream sur une piece jointe convertie ou pas. + * + * @param attachment to convert + * @return attachment + * @throws IOException + */ + protected Attachment convertIfNecessary(Attachment attachment) throws IOException { + + // get file extension + String filename = attachment.getOriginalFileName(); + String extension = FilenameUtils.getExtension(filename); + + Collection<ExtensionCommand> commands = CollectionUtils.emptyIfNull(configurationService.getConfiguration().getExtensionCommands()); + for (ExtensionCommand command : commands) { + if (extension.equalsIgnoreCase(command.getExtension())) { + attachment = convertToPdf(attachment, command); + break; + } + } + return attachment; + } + + /** + * Convert attachment to pdf. + * + * @param attachment attchment to convert + * @param extensionCommand command + * @return + * @throws IOException + */ + protected Attachment convertToPdf(Attachment attachment, ExtensionCommand extensionCommand) throws IOException { + + // get file extension + String filename = attachment.getOriginalFileName(); + String basename = FilenameUtils.getBaseName(filename); + String extension = FilenameUtils.getExtension(filename); + + // copy file to temp file + File file = File.createTempFile("faxtomail-" + basename, "." + extension); + file.deleteOnExit(); + File outfile = File.createTempFile("faxtomail-" + basename, ".pdf"); + outfile.deleteOnExit(); + FileUtils.writeByteArrayToFile(file, attachment.getOriginalFile().getContent()); + + // get process command + String command = extensionCommand.getConvertToPdfCommand(); + command = StringUtils.replaceOnce(command, "%f", "\"" + file.getAbsolutePath() + "\""); + command = StringUtils.replaceOnce(command, "%o", "\"" + outfile.getAbsolutePath() + "\""); + + String[] args = StringUtil.split(command, " "); + List<String> comArgs = Arrays.asList(args); + ProcessBuilder pb = new ProcessBuilder(comArgs); + // run process + if (log.isDebugEnabled()) { + log.debug("Convert attachment with command : " + comArgs); + } + try { + pb.start(); + + // read output to save into attachment + byte[] outContent = FileUtils.readFileToByteArray(outfile); + AttachmentFile editedFile = new AttachmentFileImpl(); + editedFile.setContent(outContent); + editedFile.setFilename(basename + "-converted.pdf"); + attachment.setEditedFile(editedFile); + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Cannot run convert command", e); + } + } + + // cleanup + //file.delete(); + //outfile.delete(); + + return attachment; + } } Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-19 15:08:04 UTC (rev 235) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-19 16:09:40 UTC (rev 236) @@ -119,6 +119,7 @@ <div class="form-group"> <label for="convertToToPdfField">Conversion en pdf :</label> <input id="convertToToPdfField" type="text" class="form-control" ng-model="extensionCommand.convertToPdfCommand" placeholder="" /> + <p class="help-block">Utilisez <code>%f</code> et <code>%o</code> pour representer respectivement le fichier en entrée et en sortie de la commande</p> </div> <div class="form-group"> <label for="openAttachmentCommandField">Ouverture :</label>
participants (1)
-
echatellier@users.forge.codelutin.com