Author: kmorin Date: 2014-12-20 20:35:03 +0000 (Sat, 20 Dec 2014) New Revision: 734 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/734 Log: refs #6335 Corriger les lenteurs d'affichage des listes Added: trunk/faxtomail-service/src/main/resources/db/migration/h2/V1_1_0_733__extract_originalemail.sql trunk/faxtomail-service/src/main/resources/db/migration/sqlserver/V1_1_0_733__extract_originalemail.sql Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 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/ArchiveImportExportBean.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportModel.java trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.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/content/search/SearchToGroupUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/DemandDetailAction.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-12-20 20:35:03 UTC (rev 734) @@ -350,8 +350,8 @@ } if (StringUtils.isNotBlank(searchFilter.getBody())) { - query.append(" AND lower(E." + Email.PROPERTY_ORIGINAL_EMAIL + ") LIKE lower(:" + SearchFilter.PROPERTY_BODY + ")"); - args.put(SearchFilter.PROPERTY_BODY, "%" + searchFilter.getBody() + "%"); + query.append(" AND lower(E." + Email.PROPERTY_ORIGINAL_EMAIL + "." + OriginalEmail.PROPERTY_CONTENT + ") LIKE lower(:" + SearchFilter.PROPERTY_CLIENT_CODE + ")"); + args.put(SearchFilter.PROPERTY_CLIENT_CODE, "%" + searchFilter.getClientCode() + "%"); } // email gamme Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties =================================================================== --- trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties 2014-12-20 20:35:03 UTC (rev 734) @@ -94,6 +94,9 @@ com.franciaflex.faxtomail.persistence.entities.Email.attribute.mailFolder.tagvalue.notNull=true com.franciaflex.faxtomail.persistence.entities.Email.attribute.originalEmail.tagvalue.notNull=true +# OriginalEmail +com.franciaflex.faxtomail.persistence.entities.OriginalEmail.attribute.content.tagvalue.notNull=true + # Reply com.franciaflex.faxtomail.persistence.entities.Reply.attribute.sentDate.tagvalue.notNull=true com.franciaflex.faxtomail.persistence.entities.Reply.attribute.subject.tagvalue.notNull=true Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo =================================================================== (Binary files differ) Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-12-20 20:35:03 UTC (rev 734) @@ -27,6 +27,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.Collection; import java.util.Date; import java.util.List; @@ -35,9 +36,11 @@ import javax.mail.MessagingException; import javax.mail.Part; +import javax.mail.internet.MimeMessage; import com.franciaflex.faxtomail.persistence.entities.EmailFilter; import com.franciaflex.faxtomail.persistence.entities.ExtensionCommand; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; import com.franciaflex.faxtomail.persistence.entities.SearchFilter; import com.franciaflex.faxtomail.services.service.imports.ArchiveImportResult; import com.itextpdf.text.DocumentException; @@ -126,6 +129,8 @@ void updateRangeRowsWithEdiReturns(); + OriginalEmail originalEmailFromMessage(MimeMessage message, Charset charset) throws MessagingException, IOException; + AttachmentFile getEmailDetailAsAttachment(Email email); /** 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-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-12-20 20:35:03 UTC (rev 734) @@ -67,6 +67,7 @@ import javax.mail.MessagingException; import javax.mail.Part; import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; @@ -78,6 +79,7 @@ import com.google.common.base.Optional; import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; @@ -87,6 +89,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.IteratorUtils; import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.map.MultiKeyMap; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; @@ -115,6 +118,7 @@ import org.nuiton.util.StringUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import org.nuiton.util.pagination.PaginationOrder; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; import org.xhtmlrenderer.pdf.ITextRenderer; @@ -167,10 +171,12 @@ //Email.PROPERTY_REPLIES, //Email.PROPERTY_ATTACHMENT, Email.PROPERTY_TAKEN_BY, + Email.PROPERTY_LAST_ATTACHMENT_OPENER, Email.PROPERTY_CLIENT, //Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL, //Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL + "." + Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_WAITING_STATE, + Email.PROPERTY_ORIGINAL_EMAIL, Email.PROPERTY_PRIORITY).findUnique(); // manual fetch @@ -381,6 +387,11 @@ email.addHistory(history); } + OriginalEmail originalEmail = email.getOriginalEmail(); + if (!originalEmail.isPersisted()) { + getPersistenceContext().getOriginalEmailDao().create(originalEmail); + } + Email result = dao.update(email); getPersistenceContext().commit(); @@ -729,10 +740,10 @@ * @return paginated results */ @Override - public PaginationResult<Email> getEmailForFolder(MailFolder folder, + public PaginationResult<Email> getEmailForFolder(final MailFolder folder, FaxToMailUser currentUser, EmailFilter filter, - PaginationParameter page) { + final PaginationParameter page) { // perform request or not depending on rigths PaginationResult<Email> result; @@ -741,6 +752,94 @@ result = dao.getEmailForFolder(filter, folder, page); // result = dao.getEmailForFolder2(filter, folder, page); +// result = dao.getEmailForFolder(filter, folder, page); +// result = dao.getEmailForFolder3(filter, folder, page); +// +// +// TopiaSqlSupport sqlSupport = getPersistenceContext().getSqlSupport(); +// sqlSupport.doSqlWork(new TopiaSqlWork() { +// +// @Override +// public void execute(Connection connection) throws SQLException { +// +// +// long time = new Date().getTime(); +// log.info("before sql : " + time); +// +// // attention, le sql à pour cible postgresql, mssql, h2, il doit rester simple +// String query = String.format("select\n" + +// " distinct top(%s) emailimpl0_.topiaId as topiaId1_7_,\n" + +// " emailimpl0_.topiaVersion as topiaVer2_7_,\n" + +// " emailimpl0_.topiaCreateDate as topiaCre3_7_,\n" + +// " emailimpl0_.receptionDate as receptio4_7_,\n" + +// " emailimpl0_.ediError as ediError5_7_,\n" + +// " emailimpl0_.projectReference as projectR6_7_,\n" + +// " emailimpl0_.sender as sender7_7_,\n" + +// " emailimpl0_.fax as fax8_7_,\n" + +// " emailimpl0_.recipient as recipien9_7_,\n" + +// " emailimpl0_.object as object10_7_,\n" + +// " emailimpl0_.archiveDate as archive11_7_,\n" + +// " emailimpl0_.companyReference as company12_7_,\n" + +// " emailimpl0_.originalEmail as origina13_7_,\n" + +// " emailimpl0_.comment as comment14_7_,\n" + +// " emailimpl0_.mailFolder as mailFol15_7_,\n" + +// " emailimpl0_.demandType as demandT16_7_,\n" + +// " emailimpl0_.priority as priorit17_7_,\n" + +// " emailimpl0_.waitingState as waiting18_7_,\n" + +// " emailimpl0_.takenBy as takenBy19_7_,\n" + +// " emailimpl0_.client as client20_7_,\n" + +// " emailimpl0_.demandStatus as demandS21_7_,\n" + +// " emailimpl0_.emailGroup as emailGr22_7_,\n" + +// " emailimpl0_.lastAttachmentOpener as lastAtt23_7_ \n" + +// " from\n" + +// " email emailimpl0_ \n" + +// " where\n" + +// " emailimpl0_.mailFolder='%s' \n" + +// " and emailimpl0_.demandStatus<>'ARCHIVED' " + +// "order by emailimpl0_.topiaCreateDate ASC", +// page.getPageSize(), +// folder.getTopiaId()); +// log.info(query); +// Statement stat = connection.createStatement(); +// +// long time2 = new Date().getTime(); +// log.info("after sql : " + time2 + "(" + (time2 - time) + ")"); +// +// // get query result set +// ResultSet resultSet = stat.executeQuery(query); +// while (resultSet.next()) { +// Email email = new EmailImpl(); +//// String topiaId = topiaId1_7_ +//// String topiaVersion = topiaVer2_7_ +//// String topiaCreateDate = topiaCre3_7_ +//// String receptionDate = receptio4_7_ +//// String ediError = ediError5_7_ +//// String projectReference = projectR6_7_ +//// String sender = sender7_7_ +//// String fax = fax8_7_ +//// String recipient = recipien9_7_ +//// String object = object10_7_ +//// String acrhiveDate = archive11_7_ +//// String companyReference = company12_7_ +//// String originalEmail = origina13_7_ +//// String comment = comment14_7_ +//// String mailFolder = mailFol15_7_ +//// String demandType = demandT16_7_ +//// String priority = priorit17_7_ +//// String waintingState = waiting18_7_ +//// String takenBy = takenBy19_7_ +//// String client = client20_7_ +//// String topiaId = demandS21_7_ +//// String topiaId = emailGr22_7_ +//// String topiaId = lastAtt23_7_ +// } +// +// +// long time3 = new Date().getTime(); +// log.info("after sql : " + time2 + "(" + (time2 - time) + ")"); +// } +// }); + // TopiaQueryBuilderAddCriteriaOrRunQueryStep<Email> builderAddCriteriaOrRunQueryStep = // dao.forMailFolderEquals(folder) // .addNull(Email.PROPERTY_ARCHIVE_DATE) @@ -1465,6 +1564,22 @@ getPersistenceContext().commit(); } + public OriginalEmail originalEmailFromMessage(MimeMessage message, Charset charset) throws MessagingException, IOException { + StringBuilder emailSource = new StringBuilder(); + Enumeration<String> headerLines = message.getAllHeaderLines(); + while (headerLines.hasMoreElements()) { + String headerLine = headerLines.nextElement(); + emailSource.append(headerLine).append("\n"); + } + String originalContent = IOUtils.toString(message.getRawInputStream(), charset); + emailSource.append("\n").append(originalContent); + + OriginalEmail originalEmail = getPersistenceContext().getOriginalEmailDao().newInstance(); + originalEmail.setContent(emailSource.toString()); + + return originalEmail; + } + /** * Generate email details as PDF and return it as an printable attachment. * @@ -1569,6 +1684,7 @@ AttachmentTopiaDao attachmentDao = persistenceContext.getAttachmentDao(); AttachmentFileTopiaDao attachmentFileDao = persistenceContext.getAttachmentFileDao(); HistoryTopiaDao historyDao = persistenceContext.getHistoryDao(); + OriginalEmailTopiaDao originalEmailTopiaDao = getPersistenceContext().getOriginalEmailDao(); int commitThreshold = getApplicationConfig().getArchiveImportCommitTreshold(); if (log.isInfoEnabled()) { @@ -1688,6 +1804,14 @@ Client client = getClientService().getClientForCode(archiveBean.getClientCode(), company); email.setClient(client); + OriginalEmail originalEmail = originalEmailTopiaDao.newInstance(); + String originalEmailContent = archiveBean.getOriginalEmailContent(); + originalEmail.setContent(originalEmailContent != null ? originalEmailContent : ""); + originalEmail.setTopiaId(getTopiaId(OriginalEmail.class, originalEmail)); + statelessSession.insert(originalEmail); + + email.setOriginalEmail(originalEmail); + // persist it email.setTopiaId(getTopiaId(Email.class, email)); statelessSession.insert(email); @@ -1701,9 +1825,9 @@ // email.addHistory(history); - if (StringUtils.isNotBlank(email.getOriginalEmail())) { + if (StringUtils.isNotBlank(originalEmailContent)) { try { - Attachment contentAttachment = convertTextToPdf(email.getOriginalEmail(), + Attachment contentAttachment = convertTextToPdf(originalEmailContent, t("faxtomail.email.content.attachment.plainfileName")); AttachmentFile contentAttachmentFile = contentAttachment.getOriginalFile(); Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportBean.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportBean.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportBean.java 2014-12-20 20:35:03 UTC (rev 734) @@ -42,6 +42,7 @@ protected static final String PROPERTY_CLIENT_CODE = "clientCode"; protected static final String PROPERTY_CLIENT_BRAND = "clientBrand"; protected static final String PROPERTY_ERROR = "error"; + protected static final String PROPERTY_ORIGINAL_EMAIL_CONTENT = "originalEmailContent"; protected String mailFolderPath; @@ -53,6 +54,8 @@ protected String error; + protected String originalEmailContent; + public String getMailFolderPath() { return mailFolderPath; } @@ -92,4 +95,12 @@ public void setError(String error) { this.error = error; } + + public String getOriginalEmailContent() { + return originalEmailContent; + } + + public void setOriginalEmailContent(String originalEmailContent) { + this.originalEmailContent = originalEmailContent; + } } 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-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportExportModel.java 2014-12-20 20:35:03 UTC (rev 734) @@ -93,7 +93,7 @@ newColumnForImportExport("object", ArchiveImportExportBean.PROPERTY_OBJECT); newColumnForImportExport("archiveDate", ArchiveImportExportBean.PROPERTY_ARCHIVE_DATE, dateValueParserFormatter); newColumnForImportExport("companyReference", ArchiveImportExportBean.PROPERTY_COMPANY_REFERENCE); - newColumnForImportExport("originalEmail", ArchiveImportExportBean.PROPERTY_ORIGINAL_EMAIL); + newColumnForImportExport("originalEmail", ArchiveImportExportBean.PROPERTY_ORIGINAL_EMAIL_CONTENT); newColumnForImportExport("comment", ArchiveImportExportBean.PROPERTY_COMMENT); newColumnForImportExport("etatAttente", ArchiveImportExportBean.PROPERTY_WAITING_STATE, new HasLabelValueParserFormatter<WaitingState>() { @Override Copied: trunk/faxtomail-service/src/main/resources/db/migration/h2/V1_1_0_733__extract_originalemail.sql (from rev 706, trunk/faxtomail-service/src/main/resources/db/migration/h2/V1_0_0_662__add_company_in_mailfolder.sql) =================================================================== --- trunk/faxtomail-service/src/main/resources/db/migration/h2/V1_1_0_733__extract_originalemail.sql (rev 0) +++ trunk/faxtomail-service/src/main/resources/db/migration/h2/V1_1_0_733__extract_originalemail.sql 2014-12-20 20:35:03 UTC (rev 734) @@ -0,0 +1,24 @@ + +-- extract original email from email +create table originalEmail ( + topiaId varchar(255) not null, + topiaVersion bigint not null, + topiaCreateDate timestamp, + content longvarchar not null, + email varchar(255) not null, + primary key (topiaId) +); + +insert into originalEmail ( + select concat('com.franciaflex.faxtomail.persistence.entities.OriginalEmail_', RANDOM_UUID()), 0, topiaCreateDate, originalEmail, topiaId from email +); + +merge into email(topiaId, originalEmail) key (topiaId) select email, topiaId from originalEmail; + +alter table email alter column originalEmail varchar(255); + +alter table email + add constraint UK_P4YIV4FRJSIKCMLMFOX8CF6RE + unique (originalEmail); + +alter table originalEmail drop column email; Property changes on: trunk/faxtomail-service/src/main/resources/db/migration/h2/V1_1_0_733__extract_originalemail.sql ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/faxtomail-service/src/main/resources/db/migration/sqlserver/V1_1_0_733__extract_originalemail.sql =================================================================== --- trunk/faxtomail-service/src/main/resources/db/migration/sqlserver/V1_1_0_733__extract_originalemail.sql (rev 0) +++ trunk/faxtomail-service/src/main/resources/db/migration/sqlserver/V1_1_0_733__extract_originalemail.sql 2014-12-20 20:35:03 UTC (rev 734) @@ -0,0 +1,29 @@ + +-- extract original email from email +create table originalEmail ( + topiaId varchar(255) not null, + topiaVersion bigint not null, + topiaCreateDate datetime2, + content varchar(MAX) not null, + email varchar(255) not null, + primary key (topiaId) +); +GO + +insert into originalEmail +select 'com.franciaflex.faxtomail.persistence.entities.OriginalEmail_' + cast(newid() as varchar(255)), 0, topiaCreateDate, originalEmail, topiaId from email; + +merge into email as e +using originalEmail as o +on (e.topiaId = o.email) +when matched then update set e.originalEmail = o.topiaId; +GO + +alter table email alter column originalEmail varchar(255) not NULL; +alter table email + add constraint UK_P4YIV4FRJSIKCMLMFOX8CF6RE + unique (originalEmail); +GO + +alter table originalEmail drop column email; +GO \ No newline at end of file Modified: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java 2014-12-20 20:35:03 UTC (rev 734) @@ -38,6 +38,8 @@ import java.util.List; import java.util.Map; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmailTopiaDao; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.logging.Log; @@ -226,19 +228,20 @@ HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); RangeRowTopiaDao rangeRowDao = getPersistenceContext().getRangeRowDao(); EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); - createEmails(historyDao, rangeRowDao, emailDao, ranges, clients, types, priorities, cyrilFolder, cyril); + OriginalEmailTopiaDao originalEmailDao = getPersistenceContext().getOriginalEmailDao(); + createEmails(historyDao, rangeRowDao, emailDao, originalEmailDao, ranges, clients, types, priorities, cyrilFolder, cyril); } - protected void createEmails(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, List<Range> ranges, - List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) + protected void createEmails(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, OriginalEmailTopiaDao originalEmailDao, + List<Range> ranges, List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) throws InvalidClientException { for (int i = 0; i < 5; i++) { - createEmail(historyDao, rangeRowDao, emailDao, ranges, clients, types, priorities, folder, user); + createEmail(historyDao, rangeRowDao, emailDao, originalEmailDao, ranges, clients, types, priorities, folder, user); } } - protected void createEmail(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, List<Range> ranges, - List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) + protected void createEmail(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, OriginalEmailTopiaDao originalEmailDao, + List<Range> ranges, List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) throws InvalidClientException { List<RangeRow> rangeRows = new ArrayList<>(); @@ -275,6 +278,8 @@ String projectRef = t("faxtomail.email.projectReference.default", dateDecorator.toString(now)); + OriginalEmail originalEmail = originalEmailDao.create(OriginalEmail.PROPERTY_CONTENT, "test"); + Email email = emailDao.create( Email.PROPERTY_SENDER, sender, Email.PROPERTY_FAX, fax, @@ -286,7 +291,7 @@ Email.PROPERTY_MAIL_FOLDER, folder, Email.PROPERTY_DEMAND_STATUS, opened ? DemandStatus.IN_PROGRESS : DemandStatus.UNTREATED, Email.PROPERTY_HISTORY, Lists.newArrayList(history), - Email.PROPERTY_ORIGINAL_EMAIL, "test"); + Email.PROPERTY_ORIGINAL_EMAIL, originalEmail); if (opened) { @@ -320,6 +325,8 @@ Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_DEMAND_STATUS)); projectRef = t("faxtomail.email.projectReference.default", dateDecorator.toString(yesterday)); + originalEmail = originalEmailDao.create(OriginalEmail.PROPERTY_CONTENT, "test"); + email = emailDao.create( Email.PROPERTY_SENDER, sender, Email.PROPERTY_FAX, fax, @@ -330,7 +337,7 @@ Email.PROPERTY_MAIL_FOLDER, folder, Email.PROPERTY_DEMAND_STATUS, opened ? DemandStatus.IN_PROGRESS : DemandStatus.UNTREATED, Email.PROPERTY_HISTORY, Lists.newArrayList(history), - Email.PROPERTY_ORIGINAL_EMAIL, "test"); + Email.PROPERTY_ORIGINAL_EMAIL, originalEmail); if (opened) { getEmailService().addToHistory(email.getTopiaId(), HistoryType.OPENING, user, now); Modified: trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties =================================================================== --- trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties 2014-12-20 20:35:03 UTC (rev 734) @@ -43,7 +43,7 @@ # Please fill the missing licenses for dependencies : # # -#Tue Nov 18 15:49:51 CET 2014 +#Mon Dec 15 12:35:36 CET 2014 commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 dom4j--dom4j--1.6.1=BSD License gui.ava--html2image--2.0.1=GNU Lesser General Public License, Version 2.1 Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-12-20 20:35:03 UTC (rev 734) @@ -51,7 +51,6 @@ import jaxx.runtime.swing.session.State; import jaxx.runtime.swing.session.SwingSession; -import jaxx.runtime.swing.table.filter.TableFilter; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -59,7 +58,6 @@ import org.jdesktop.beans.AbstractBean; import org.jdesktop.swingx.JXLoginPane; import org.jdesktop.swingx.JXLoginPane.Status; -import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.auth.LoginService; import org.jdesktop.swingx.error.ErrorInfo; import org.nuiton.i18n.I18n; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java 2014-12-20 20:35:03 UTC (rev 734) @@ -26,6 +26,7 @@ import static org.nuiton.i18n.I18n.t; +import java.util.Collection; import java.util.Date; import javax.swing.JOptionPane; @@ -80,8 +81,9 @@ MailFolder folder = model.getMailFolder(); MailFolder archiveChild = null; do { - if (folder.getChildren() != null) { - Optional<MailFolder> optArchiveChild = Iterables.tryFind(folder.getChildren(), new Predicate<MailFolder>() { + Collection<MailFolder> children = folder.getChildren(); + if (children != null) { + Optional<MailFolder> optArchiveChild = Iterables.tryFind(children, new Predicate<MailFolder>() { @Override public boolean apply(MailFolder mailFolder) { return mailFolder.isArchiveFolder(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-12-20 20:35:03 UTC (rev 734) @@ -34,6 +34,8 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; import javax.swing.*; @@ -47,6 +49,8 @@ */ public class ShowDemandeAction extends AbstractChangeScreenAction { + private static final Log log = LogFactory.getLog(ShowDemandeAction.class); + // if true, take the email when opening protected boolean takeEmail; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-12-20 20:35:03 UTC (rev 734) @@ -54,6 +54,8 @@ import com.franciaflex.faxtomail.persistence.entities.Configuration; import com.franciaflex.faxtomail.persistence.entities.EmailFilter; import com.franciaflex.faxtomail.persistence.entities.MailAction; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmailImpl; import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; import com.franciaflex.faxtomail.ui.swing.actions.OpenMailFolderChooserFromListAction; import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; @@ -729,7 +731,11 @@ email.setTakenBy(currentUser); email.setHistory(histories); email.setDemandStatus(DemandStatus.UNTREATED); - email.setOriginalEmail(""); // can't be null + + OriginalEmailImpl originalEmail = new OriginalEmailImpl(); + originalEmail.setContent(""); + email.setOriginalEmail(originalEmail); // can't be null + openDemand(email); } 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-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-12-20 20:35:03 UTC (rev 734) @@ -44,6 +44,7 @@ import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; import com.google.common.collect.Lists; import com.sun.mail.util.MimeUtil; import org.apache.commons.collections4.CollectionUtils; @@ -357,14 +358,19 @@ return htmlContent; } - public void setOriginalEmail(String originalEmail) { + public void setOriginalEmail(OriginalEmail originalEmail) { editObject.setOriginalEmail(originalEmail); } - public String getOriginalEmail() { + public OriginalEmail getOriginalEmail() { return editObject.getOriginalEmail(); } + public String getOriginalEmailContent() { + OriginalEmail originalEmail = getOriginalEmail(); + return originalEmail != null ? originalEmail.getContent() : null; + } + public void setClientCode(String clientCode) { Object oldValue = getClientCode(); this.clientCode = clientCode; @@ -880,7 +886,7 @@ protected void decomposeEmail() { try { // ce code peut provoquer une NPE avec les données de test - Message message = MimeMessageUtils.createMimeMessage(null, getOriginalEmail()); + Message message = MimeMessageUtils.createMimeMessage(null, getOriginalEmailContent()); Charset charset = FaxToMailServiceUtils.getCharset(message); @@ -914,7 +920,7 @@ log.warn("error while parsing the original email content, may come from the imported archives", e); } //may comes from the imported archives - plainContent = getOriginalEmail(); + plainContent = getOriginalEmailContent(); toRecipients = Lists.newArrayList(getRecipient()); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java 2014-12-20 20:35:03 UTC (rev 734) @@ -55,6 +55,7 @@ import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXDatePicker; @@ -280,7 +281,9 @@ getConfig().save(); getModel().setResultPerPage(resultPerPage); getModel().resetPaginationParameter(); - runSearchAction(); + if (CollectionUtils.isNotEmpty(getModel().getResults())) { + runSearchAction(); + } } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-12-20 20:35:03 UTC (rev 734) @@ -45,6 +45,7 @@ import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXDatePicker; @@ -258,7 +259,9 @@ getConfig().save(); getModel().setResultPerPage(resultPerPage); getModel().resetPaginationParameter(); - runSearchAction(); + if (CollectionUtils.isNotEmpty(getModel().getResults())) { + runSearchAction(); + } } } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/DemandDetailAction.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/DemandDetailAction.java 2014-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/DemandDetailAction.java 2014-12-20 20:35:03 UTC (rev 734) @@ -34,6 +34,7 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.History; import com.franciaflex.faxtomail.persistence.entities.MailField; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; import com.franciaflex.faxtomail.persistence.entities.RangeRow; import com.franciaflex.faxtomail.persistence.entities.Reply; import com.franciaflex.faxtomail.persistence.entities.ReplyContent; @@ -348,7 +349,10 @@ emailUIModel = new EmailUIModel(); try { // ce code peut provoquer une NPE avec les données de test - Message message = new MimeMessage(null, new ByteArrayInputStream(demand.getOriginalEmail().getBytes(StandardCharsets.UTF_8))); + OriginalEmail originalEmail = demand.getOriginalEmail(); + String originalEmailContent = originalEmail.getContent(); + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(originalEmailContent.getBytes(StandardCharsets.UTF_8)); + Message message = new MimeMessage(null, byteArrayInputStream); emailUIModel.setSubject(message.getSubject()); List<String> toRecipients = new ArrayList<>(); 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-12-18 17:37:10 UTC (rev 733) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-12-20 20:35:03 UTC (rev 734) @@ -26,6 +26,7 @@ import static org.nuiton.i18n.I18n.t; +import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; import com.google.common.base.Function; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; @@ -489,15 +490,8 @@ email.setDemandStatus(DemandStatus.UNTREATED); modifiedProperties.add(Email.PROPERTY_DEMAND_STATUS); - StringBuilder emailSource = new StringBuilder(); - Enumeration<String> headerLines = ((MimeMessage)message).getAllHeaderLines(); - while (headerLines.hasMoreElements()) { - String headerLine = headerLines.nextElement(); - emailSource.append(headerLine).append("\n"); - } - String originalContent = IOUtils.toString(((MimeMessage) message).getRawInputStream(), charset); - emailSource.append("\n").append(originalContent); - email.setOriginalEmail(emailSource.toString()); + OriginalEmail originalEmail = emailService.originalEmailFromMessage((MimeMessage) message, charset); + email.setOriginalEmail(originalEmail); List<Attachment> attachments = new ArrayList<>(); if (message.isMimeType("multipart/*")) {