r268 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job
Author: dcosse Date: 2014-06-26 14:51:38 +0200 (Thu, 26 Jun 2014) New Revision: 268 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/268 Log: fixes #5336 refs #46660 correction sauvegarde des filtres de mail (la map n'est plus bas?\195?\169e sur le topia id mais sur la naturalId: expression). La redirection sur le dossier du charg?\195?\169 de clientelle est fonctionnelle 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/MailFolderService.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 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-26 09:46:42 UTC (rev 267) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java 2014-06-26 12:51:38 UTC (rev 268) @@ -80,6 +80,14 @@ private static final Log log = LogFactory.getLog(ConfigurationService.class); + + protected static final Function<MailFilter, String> GET_EXPRESSION = new Function<MailFilter, String>() { + @Override + public String apply(MailFilter input) { + return input == null ? null : input.getExpression(); + } + }; + /** * Return unique database configuration. * @@ -323,17 +331,17 @@ int position = 0; List<MailFilter> filters = dao.findAll(); - Map<String, MailFilter> filterById = new HashMap<>(Maps.uniqueIndex(filters, TopiaEntities.getTopiaIdFunction())); + // order by naturalId + Map<String, MailFilter> filterByExpression = new HashMap<>(Maps.uniqueIndex(filters, GET_EXPRESSION)); for (MailFilter mailFilter : mailFilters) { - MailFilter filter; - boolean create = mailFilter.getTopiaId() == null; + MailFilter filter = filterByExpression.remove(mailFilter.getExpression().toLowerCase()); + boolean create = filter == null; if (create) { filter = dao.newInstance(); - } else { - filter = filterById.remove(mailFilter.getTopiaId()); } - filter.setExpression(mailFilter.getExpression()); + + filter.setExpression(mailFilter.getExpression().toLowerCase()); filter.setClientResponsiblePriority(mailFilter.isClientResponsiblePriority()); // mailFilter.getMailFolder().getTopiaId() can start with new_ @@ -349,7 +357,7 @@ position++; } - dao.deleteAll(filterById.values()); + dao.deleteAll(filterByExpression.values()); } /** Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java 2014-06-26 09:46:42 UTC (rev 267) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java 2014-06-26 12:51:38 UTC (rev 268) @@ -80,6 +80,19 @@ return result; } + public Collection<MailFilter> getFiltersForRecipient(String recipient) { + MailFilterTopiaDao filterTopiaDao = getPersistenceContext().getMailFilterDao(); + + PaginationParameter tpb = PaginationParameter.of(0, -1, MailFilter.PROPERTY_POSITION, false); + + String query = "FROM " + MailFilter.class.getCanonicalName() + " WHERE :recipient LIKE " + MailFilter.PROPERTY_EXPRESSION; + Map<String, Object> params = new HashMap<>(); + params.put("recipient", recipient); + + Collection<MailFilter> filters = filterTopiaDao.find(query, params, tpb); + return filters; + } + public List<MailFolder> getAllMailFolders() { MailFolderTopiaDao dao = getPersistenceContext().getMailFolderDao(); return new ArrayList<MailFolder>(dao.findAll()); @@ -194,4 +207,10 @@ return result; } + public MailFolder getFolderForFaxToMailUser(FaxToMailUser customerResponsible) { + MailFolderTopiaDao dao = getPersistenceContext().getMailFolderDao(); + MailFolder result = dao.forCustomerResponsiblesContains(customerResponsible).findAnyOrNull(); + return result; + } + } 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-26 09:46:42 UTC (rev 267) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-26 12:51:38 UTC (rev 268) @@ -51,10 +51,13 @@ import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.ContentType; +import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; +import com.franciaflex.faxtomail.persistence.entities.MailFilter; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.Charsets; import org.apache.commons.io.FileUtils; @@ -224,6 +227,7 @@ recipients.addAll(Arrays.asList(ccRecipients)); } + MailFilter filter = null; for (Address address : recipients) { String recipient = address.toString(); @@ -233,21 +237,17 @@ recipient = recipient.replaceFirst("^.*<(.*)>$", "$1"); recipient = recipient.toLowerCase(); - MailFolder mailFolder = mailFolderService.getFolderForRecipient(recipient); + Collection<MailFilter> filters = mailFolderService.getFiltersForRecipient(recipient); - if (mailFolder != null) { - if (log.isDebugEnabled()){ - log.debug("\tTo : " + address + " -> " + (mailFolder != null ? mailFolder.getName() : "none")); - } - + if (CollectionUtils.isNotEmpty(filters)) { + filter = filters.iterator().next(); email.setRecipient(recipient); - email.setMailFolder(mailFolder); modifiedProperties.add(Email.PROPERTY_RECIPIENT); - modifiedProperties.add(Email.PROPERTY_MAIL_FOLDER); break; } + } - if (email.getMailFolder() == null) { + if (filter == null) { if (log.isDebugEnabled()) { log.debug("Can't place mail " + message.getSubject() + " in any folder"); if (log.isTraceEnabled()) { @@ -282,11 +282,30 @@ email.setObject(object); modifiedProperties.add(Email.PROPERTY_OBJECT); modifiedProperties.add(Email.PROPERTY_CLIENT); + } + email.setClient(client); - //TODO kmorin 20140602 find the responsible's folder -// client.getCustomerResponsible() + MailFolder mailFolder = null; + if (filter.isClientResponsiblePriority()) { + if ( + client == null || + client.getPersonInCharge() == null || + client.getPersonInCharge().getAffectedFolders() == null || + client.getPersonInCharge().getAffectedFolders().isEmpty()) { + mailFolder = filter.getMailFolder(); + } else { + FaxToMailUser personInCharge = client.getPersonInCharge(); + mailFolder = mailFolderService.getFolderForFaxToMailUser(personInCharge); + } + } else { + mailFolder = filter.getMailFolder(); } - email.setClient(client); + if (mailFolder != null) { + email.setMailFolder(mailFolder); + modifiedProperties.add(Email.PROPERTY_MAIL_FOLDER); + break; + } + } Date receivedDate = message.getReceivedDate(); @@ -360,7 +379,6 @@ MimeMultipart mimeMultipart = new MimeMultipart(dataSource); int multiPartCount = mimeMultipart.getCount(); - for (int j = 0; j < multiPartCount; j++) { BodyPart bp = mimeMultipart.getBodyPart(j); Charset charset = getCharset(bp);
participants (1)
-
dcosse@users.forge.codelutin.com