r281 - in trunk: faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities faxtomail-persistence/src/main/xmi faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util faxtomail-ui-web faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job faxtomail-ui-web/src/main/webapp/WEB-INF/co
Author: kmorin Date: 2014-06-27 17:39:42 +0200 (Fri, 27 Jun 2014) New Revision: 281 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/281 Log: - cloture propre de l'appli swing - prise en compte des dossiers affect?\195?\169s ?\195?\160 l'utilisateur - g?\195?\169n?\195?\169ration du contenu du mail en pdf Added: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/NewClientType.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ClientService.java 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/content/demande/DemandeUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java trunk/faxtomail-ui-web/pom.xml 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 trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js Added: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/NewClientType.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/NewClientType.java (rev 0) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/NewClientType.java 2014-06-27 15:39:42 UTC (rev 281) @@ -0,0 +1,10 @@ +package com.franciaflex.faxtomail.persistence.entities; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public enum NewClientType { + + CREATION, UPDATE, DELETION +} Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo =================================================================== (Binary files differ) Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ClientService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ClientService.java 2014-06-27 15:23:36 UTC (rev 280) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ClientService.java 2014-06-27 15:39:42 UTC (rev 281) @@ -25,9 +25,12 @@ */ import com.franciaflex.faxtomail.persistence.entities.Client; +import com.franciaflex.faxtomail.persistence.entities.ClientImpl; import com.franciaflex.faxtomail.persistence.entities.ClientTopiaDao; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import com.franciaflex.faxtomail.persistence.entities.NewClient; +import com.franciaflex.faxtomail.persistence.entities.NewClientTopiaDao; import com.franciaflex.faxtomail.services.FaxToMailServiceSupport; import com.google.common.base.Function; import com.google.common.base.Preconditions; @@ -38,6 +41,7 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.beans.Binder; import java.util.ArrayList; import java.util.List; @@ -64,6 +68,7 @@ if (CollectionUtils.isEmpty(clients)) { emailAddress = emailAddress.substring(0, emailAddress.indexOf('@')); + emailAddress.replaceAll(" ", ""); if (NumberUtils.isNumber(emailAddress)) { emailAddress = StringUtils.leftPad(emailAddress, 10, '0'); clients = clientDao.forFaxNumberEquals(emailAddress).findAll(); @@ -104,4 +109,25 @@ } return client; } + + public void updateNewClients() { + NewClientTopiaDao dao = getPersistenceContext().getNewClientDao(); + List<NewClient> newClients = dao.findAll(); + + Binder<NewClient, Client> binder = new Binder<>(); + List<Client> clients = new ArrayList<>(); + for (NewClient newClient : newClients) { + Client client = new ClientImpl(); + binder.copyExcluding(newClient, client, + NewClient.PROPERTY_TOPIA_ID, + NewClient.PROPERTY_TOPIA_CREATE_DATE, + NewClient.PROPERTY_TOPIA_VERSION); + clients.add(client); + } + //TODO kmorin 20140626 update some clients and add others + +// dao.deleteAll(newClients); +// getPersistenceContext().commit(); + } + } 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:23:36 UTC (rev 280) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java 2014-06-27 15:39:42 UTC (rev 281) @@ -342,7 +342,7 @@ } filter.setExpression(mailFilter.getExpression().toLowerCase()); - filter.setClientResponsiblePriority(mailFilter.isClientResponsiblePriority()); + filter.setFilterFolderPriority(mailFilter.isFilterFolderPriority()); // mailFilter.getMailFolder().getTopiaId() can start with new_ MailFolder mailFolder = mailFolderCache.get(mailFilter.getMailFolder().getTopiaId()); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-06-27 15:23:36 UTC (rev 280) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-06-27 15:39:42 UTC (rev 281) @@ -326,6 +326,16 @@ firePropertyChanged(PROPERTY_CLIENT_CODE, oldValue, clientCode); } + public boolean isFax() { + return editObject.isFax(); + } + + public void setFax(boolean fax) { + Object oldValue = isFax(); + editObject.setFax(fax); + firePropertyChanged(Email.PROPERTY_FAX, oldValue, fax); + } + public void setClient(Client client) { Object oldValue = getClient(); editObject.setClient(client); 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:23:36 UTC (rev 280) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-06-27 15:39:42 UTC (rev 281) @@ -156,6 +156,7 @@ Color foreground; if (!colorNotAffectedFolders + || context.getCurrentUser().isAffectedFoldersEmpty() || context.getCurrentUser().containsAffectedFolders(node.getMailFolder())) { foreground = Color.BLACK; } else { Modified: trunk/faxtomail-ui-web/pom.xml =================================================================== --- trunk/faxtomail-ui-web/pom.xml 2014-06-27 15:23:36 UTC (rev 280) +++ trunk/faxtomail-ui-web/pom.xml 2014-06-27 15:39:42 UTC (rev 281) @@ -287,6 +287,12 @@ <groupId>org.webjars</groupId> <artifactId>respond</artifactId> </dependency> + + <dependency> + <groupId>com.itextpdf</groupId> + <artifactId>itextpdf</artifactId> + </dependency> + </dependencies> <build> Added: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java (rev 0) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java 2014-06-27 15:39:42 UTC (rev 281) @@ -0,0 +1,32 @@ +package com.franciaflex.faxtomail.web.job; + +import com.franciaflex.faxtomail.services.FaxToMailServiceContext; +import com.franciaflex.faxtomail.services.service.ClientService; +import com.franciaflex.faxtomail.services.service.EmailService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class ClientUpdateJob extends AbstractFaxToMailJob { + + private static final Log log = LogFactory.getLog(ClientUpdateJob.class); + + protected FaxToMailServiceContext serviceContext; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + serviceContext = getServiceContext(jobExecutionContext); + + if (log.isDebugEnabled()) { + log.debug("Running ClientUpdateJob at " + serviceContext.getNow()); + } + + ClientService clientService = serviceContext.newService(ClientService.class); + clientService.updateNewClients(); + } +} 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:23:36 UTC (rev 280) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-27 15:39:42 UTC (rev 281) @@ -26,9 +26,17 @@ import static org.nuiton.i18n.I18n.t; +import java.awt.image.RenderedImage; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileReader; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.text.DateFormat; import java.util.ArrayList; @@ -42,7 +50,6 @@ import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.Address; -import javax.mail.BodyPart; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; @@ -58,6 +65,11 @@ 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; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.pdf.PdfWriter; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.Charsets; import org.apache.commons.io.FileUtils; @@ -286,7 +298,20 @@ email.setClient(client); MailFolder mailFolder; - if (filter.isClientResponsiblePriority()) { + if (filter.isFilterFolderPriority()) { + if (client == null && + (filter.getMailFolder().getRejectUnknownSender() != null && + filter.getMailFolder().getRejectUnknownSender())) { + // client unknown filter active + // unknown client -> message rejected + MailFolder folderTmp = filter.getMailFolder(); + emailService.rejectEmail(email.getRecipient(), email.getSender(), email.getObject(), folderTmp.getRejectResponseMessage()); + continue; + } + // to default folder + mailFolder = filter.getMailFolder(); + + } else { // add to person in charge or reject the mail if client is unknown if ( client == null || @@ -309,24 +334,14 @@ FaxToMailUser personInCharge = client.getPersonInCharge(); mailFolder = mailFolderService.getFolderForFaxToMailUser(personInCharge); } - } else { - if(client == null && - (filter.getMailFolder().getRejectUnknownSender() != null && - filter.getMailFolder().getRejectUnknownSender())) { - // client unknown filter active - // unknown client -> message rejected - MailFolder folderTmp = filter.getMailFolder(); - emailService.rejectEmail(email.getRecipient(), email.getSender(), email.getObject(), folderTmp.getRejectResponseMessage()); - continue; - } - // to default folder - mailFolder = filter.getMailFolder(); } - if (mailFolder != null) { - email.setMailFolder(mailFolder); - modifiedProperties.add(Email.PROPERTY_MAIL_FOLDER); + // if no folder found, do not save the mail + if (mailFolder == null) { + continue; } + email.setMailFolder(mailFolder); + modifiedProperties.add(Email.PROPERTY_MAIL_FOLDER); } Date receivedDate = message.getReceivedDate(); @@ -358,6 +373,9 @@ email.setOriginalEmail(emailSource.toString()); List<Attachment> attachements = new ArrayList<>(); + Attachment attachment = convertTextToPdf(emailSource.toString(), email.getObject()); + attachements.add(attachment); + if (message.isMimeType("multipart/*")) { decomposeMultipartEmail(attachements, message, email, emailService); // } else { @@ -565,4 +583,35 @@ return attachment; } + + public Attachment convertTextToPdf(String content, String name) throws IOException, DocumentException { + + File target = File.createTempFile("faxtomail-", ".tmp"); + target.deleteOnExit(); + + Document document = new Document(); + FileOutputStream fos = new FileOutputStream(target); + PdfWriter writer = PdfWriter.getInstance(document, fos); + writer.open(); + + document.setPageSize(PageSize.A4); + document.open(); + + document.add(new Paragraph(content)); + + document.close(); + writer.close(); + + // convert content to blob + EmailService emailService = serviceContext.newService(EmailService.class); + AttachmentFile attachmentFileNew = emailService.getAttachmentFileFromStream(new FileInputStream(target)); + attachmentFileNew.setFilename(name + ".pdf"); + + Attachment attachment = new AttachmentImpl(); + attachment.setOriginalFile(attachmentFileNew); + attachment.setOriginalFileName(name); + attachment.setAddedByUser(false); + + 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-27 15:23:36 UTC (rev 280) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-27 15:39:42 UTC (rev 281) @@ -899,7 +899,7 @@ <tr ng-repeat="mailFilter in rootFolderMailFilters[mailFolder.topiaId]"> <td>{{mailFilter.expression}}</td> <td>{{mailFilter.mailFolder.$fullPath}}</td> - <td>{{mailFilter.clientResponsiblePriority ? 'Oui' : 'Non'}}</td> + <td>{{mailFilter.filterFolderPriority ? 'Oui' : 'Non'}}</td> <td><a class="btn btn-danger btn-xs" ng-click="removeFilter(mailFolder, mailFilter)"> <span class="glyphicon glyphicon-remove"></span> </a></td> @@ -917,14 +917,14 @@ <select class="form-control" ng-model="newFilter.mailFolder" ng-options="mailFolder.$fullPath for mailFolder in flatMailFolders[mailFolder.topiaId]"></select> </div> <div class="form-group"> - <label for="clientResponsiblePriorityField">Utiliser le dossier de la règle en priorité : </label> + <label for="filterFolderPriorityField">Utiliser le dossier de la règle en priorité : </label> <label class="radio-inline"> <input type="radio" - ng-model="newFilter.clientResponsiblePriority" ng-value="false"> non + ng-model="newFilter.filterFolderPriority" ng-value="false"> non </label> <label class="radio-inline"> <input type="radio" - ng-model="newFilter.clientResponsiblePriority" ng-value="true"> oui + ng-model="newFilter.filterFolderPriority" ng-value="true"> oui </label> </div> </div> Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-27 15:23:36 UTC (rev 280) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-27 15:39:42 UTC (rev 281) @@ -936,7 +936,7 @@ ConfigurationModule.controller('ConfigurationFilterController', ['$scope', '$window', 'ConfigurationData', function($scope, $window, ConfigurationData) { //{Object} New accout empty filter - $scope.newFilter = {clientResponsiblePriority:true}; + $scope.newFilter = { filterFolderPriority: false }; // option de la configuration 'sortable' $scope.sortableOptions = { @@ -957,7 +957,7 @@ } $scope.rootFolderMailFilters[rootMailFolder.topiaId].push($scope.newFilter); // clear form - $scope.newFilter = {clientResponsiblePriority:false}; + $scope.newFilter = { filterFolderPriority: false }; }; // remove filter
participants (1)
-
kmorin@users.forge.codelutin.com