r282 - in trunk: faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job
Author: echatellier Date: 2014-06-27 18:29:09 +0200 (Fri, 27 Jun 2014) New Revision: 282 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/282 Log: Ouverture des pieces jointes suivant la commande de la configuration Added: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/ExtensionCommandTopiaDao.java Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenAttachmentAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 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 Added: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/ExtensionCommandTopiaDao.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/ExtensionCommandTopiaDao.java (rev 0) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/ExtensionCommandTopiaDao.java 2014-06-27 16:29:09 UTC (rev 282) @@ -0,0 +1,42 @@ +package com.franciaflex.faxtomail.persistence.entities; + +/* + * #%L + * FaxToMail :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Franciaflex + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.util.HashMap; +import java.util.Map; + +public class ExtensionCommandTopiaDao extends AbstractExtensionCommandTopiaDao<ExtensionCommand> { + + public ExtensionCommand findByExtension(String extension) { + String query = "FROM " + ExtensionCommand.class.getName() + + " WHERE lower(" + ExtensionCommand.PROPERTY_EXTENSION + ") = :extension"; + + Map<String, Object> args = new HashMap<>(); + args.put("extension", extension); + ExtensionCommand result = findUniqueOrNull(query, args); + return result; + } + +} //ExtensionCommandTopiaDao Property changes on: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/ExtensionCommandTopiaDao.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java 2014-06-27 15:39:42 UTC (rev 281) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java 2014-06-27 16:29:09 UTC (rev 282) @@ -56,6 +56,8 @@ import com.franciaflex.faxtomail.persistence.entities.EtatAttente; import com.franciaflex.faxtomail.persistence.entities.EtatAttenteImpl; import com.franciaflex.faxtomail.persistence.entities.EtatAttenteTopiaDao; +import com.franciaflex.faxtomail.persistence.entities.ExtensionCommand; +import com.franciaflex.faxtomail.persistence.entities.ExtensionCommandTopiaDao; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserGroup; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserGroupTopiaDao; @@ -457,6 +459,12 @@ return faxToMailUserGroupDao.forAll().setOrderByArguments(FaxToMailUserGroup.PROPERTY_COMPLETE_NAME).findAll(); } + public ExtensionCommand getExtensionCommand(String extension) { + ExtensionCommandTopiaDao extensionCommandDao = getPersistenceContext().getExtensionCommandDao(); + ExtensionCommand result = extensionCommandDao.findByExtension(extension); + return result; + } + /** * Retourne l'ensemble des utilisateurs appartenant aux groupes gérés par les groupes chef. * Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenAttachmentAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenAttachmentAction.java 2014-06-27 15:39:42 UTC (rev 281) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenAttachmentAction.java 2014-06-27 16:29:09 UTC (rev 282) @@ -64,7 +64,6 @@ getModel().fireAttachmentOpened(attachment, original); FaxToMailUIUtil.forceAttachmentFileLoading(getContext(), attachment); AttachmentFile attachmentFile = original ? attachment.getOriginalFile() : attachment.getEditedFile(); - File file = attachmentFile.getFile(); - DesktopUtil.browse(file.toURI()); + FaxToMailUIUtil.openFile(getContext(), attachmentFile); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-06-27 15:39:42 UTC (rev 281) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-06-27 16:29:09 UTC (rev 282) @@ -64,6 +64,7 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; import com.franciaflex.faxtomail.ui.swing.util.Cancelable; +import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import com.google.common.collect.Lists; /** @@ -279,8 +280,7 @@ public void openAttachment(AttachmentFile attachment) { - File file = attachment.getFile(); - DesktopUtil.browse(file.toURI()); + FaxToMailUIUtil.openFile(getContext(), attachment); } 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-27 15:39:42 UTC (rev 281) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-06-27 16:29:09 UTC (rev 282) @@ -24,11 +24,15 @@ import static org.nuiton.i18n.I18n.t; -import java.awt.*; +import java.awt.Color; +import java.awt.Component; +import java.awt.Desktop; +import java.awt.Font; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -64,17 +68,25 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; +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.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 org.nuiton.util.StringUtil; 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.ExtensionCommand; import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import com.franciaflex.faxtomail.services.service.ConfigurationService; import com.franciaflex.faxtomail.services.service.EmailService; import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIHandler; @@ -324,15 +336,17 @@ if (log.isDebugEnabled()) { log.debug("Force attachment loading " + attachment.getOriginalFileName()); } - EmailService service = context.getEmailService(); - if (attachment.getOriginalFile() == null) { - AttachmentFile file = service.getAttachmentFile(attachment.getTopiaId(), true); - attachment.setOriginalFile(file); + if (attachment.isPersisted()) { + EmailService service = context.getEmailService(); + if (attachment.getOriginalFile() == null) { + AttachmentFile file = service.getAttachmentFile(attachment.getTopiaId(), true); + attachment.setOriginalFile(file); + } + if (attachment.getEditedFile() == null) { + AttachmentFile file = service.getAttachmentFile(attachment.getTopiaId(), false); + attachment.setEditedFile(file); + } } - if (attachment.getEditedFile() == null) { - AttachmentFile file = service.getAttachmentFile(attachment.getTopiaId(), false); - attachment.setEditedFile(file); - } } public static Desktop getDesktopForPrint() { @@ -417,4 +431,50 @@ public static String getEditedFileName(String originalFileName) { return t("faxtomail.attachment.editedFile.name", originalFileName) + "-.pdf"; } + + /** + * Ouvre un attachment en fonction de la configuration des extensions, ou à default le open système. + * + * @param context + * @param attachment + */ + public static void openFile(FaxToMailUIContext context, AttachmentFile attachment) { + + File file = attachment.getFile(); + String filename = attachment.getFilename(); + String extension = FilenameUtils.getExtension(filename); + + // get configuration extension command + ExtensionCommand extCommand = null; + if (StringUtils.isNotBlank(extension)) { + ConfigurationService service = context.getConfigurationService(); + extCommand = service.getExtensionCommand(extension); + } + + // open file + if (extCommand != null && StringUtils.isNotBlank(extCommand.getOpenAttachmentCommand())) { + String command = extCommand.getOpenAttachmentCommand(); + String[] args = StringUtil.split(command, " "); + List<String> comArgs = new ArrayList<String>(); + for (String arg : args) { + String localArg = arg; + localArg = localArg.replace("%f", file.getAbsolutePath()); + comArgs.add(localArg); + } + ProcessBuilder pb = new ProcessBuilder(comArgs); + // run process + if (log.isDebugEnabled()) { + log.debug("Open attachment with command : " + comArgs); + } + try { + pb.start(); + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Cannot run convert command", e); + } + } + } else { + DesktopUtil.open(file); + } + } } 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-27 15:39:42 UTC (rev 281) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-27 16:29:09 UTC (rev 282) @@ -65,6 +65,7 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.MailFilter; + import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; @@ -511,11 +512,12 @@ 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())) { + if (StringUtils.isNotBlank(extension)) { + ExtensionCommand command = configurationService.getExtensionCommand(extension); + + // si une extension est configurée avec une commande non vide + if (command != null && StringUtils.isNotBlank(command.getConvertToPdfCommand())) { attachment = convertToPdf(attachment, command); - break; } } return attachment; @@ -545,11 +547,14 @@ // 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); + List<String> comArgs = new ArrayList<String>(); + for (String arg : args) { + String localArg = arg; + localArg = localArg.replace("%f", file.getAbsolutePath()); + localArg = localArg.replace("%o", outfile.getAbsolutePath()); + comArgs.add(localArg); + } ProcessBuilder pb = new ProcessBuilder(comArgs); // run process if (log.isDebugEnabled()) {
participants (1)
-
echatellier@users.forge.codelutin.com