branch feature/9099_order_on_columns updated (2458ea5 -> 560a494)
This is an automated email from the git hooks/post-receive script. New change to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git discards 2458ea5 ajout du header de license discards 2714984 refs #9099 enregistrement du tri pour chaque dossier discards f1e01ea add license header discards b10475f refs #9099 prise en compte de la conf canChangeOrderInTable dans la partie cliente discards 3e42c20 refs #9099 gestion de la conf canChangeOrderInTable dans la partie admin discards 8a4d54a refs #9099 ajout de la conf canChangeOrderInTable dans les dossiers discards f38d01e fix filter discards 4dc19e1 suppression code mort discards dbccb2f fix lazy loading discards a3de618 fixes #9095 le pris par n'est pas enregistré quand on imprime depuis la liste adds 7bbc801 refs #9098 ajout de la configuration displayOnlyUserTrigraphInTables + migration adds 8b1fffe refs #9098 gestion de la conf displayOnlyUserTrigraphInTables dans la partie admin adds 3b330c4 refs #9098 prise en compte de la conf displayOnlyUserTrigraphInTables dans la partie cliente adds 5d6d9e3 renommage des scripts de migration adds 0703d50 fixes #9098 Colonne "Pris par" : n'afficher que le tryptique (gain de place) adds 6ea48a1 refs #9103 ajout de la conf pour afficher ou non les boutons repondre et transférer dans les dossiers adds 27d6a5a refs #9103 gestion de la conf de répondre et transférer dans la partie admin adds 39ab5e9 refs #9103 prise en compte de la conf des fonctions répondre et transférer dans la partie cliente adds bd0dddd fixes #9103 Ajouter une fonction transférer, pour transférer une demande avec toutes les pièces jointes qui ne sont pas dans "Divers" new 11b71d6 fixes #9095 le pris par n'est pas enregistré quand on imprime depuis la liste new b7fb956 fix lazy loading new 77c2b73 suppression code mort new f339092 fix filter new abcabd8 refs #9099 ajout de la conf canChangeOrderInTable dans les dossiers new 79eca5d refs #9099 gestion de la conf canChangeOrderInTable dans la partie admin new 07601c6 refs #9099 prise en compte de la conf canChangeOrderInTable dans la partie cliente new 5ace615 add license header new 0275598 refs #9099 enregistrement du tri pour chaque dossier new 4247750 ajout du header de license new 560a494 refs #9099 merge model + change migrtaion file names This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (2458ea5) \ N -- N -- N refs/heads/feature/9099_order_on_columns (560a494) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 11 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 560a49475a97a4c17f5367c275664d2cb4d9007d Author: Kevin Morin <morin@codelutin.com> Date: Thu Mar 30 11:31:26 2017 +0200 refs #9099 merge model + change migrtaion file names commit 4247750f730338d1dcc2d0b7cb85348bfbdd84b7 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 28 11:13:19 2017 +0200 ajout du header de license commit 027559885ecf9f7869d67baac0e65f3507c02818 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 28 11:06:13 2017 +0200 refs #9099 enregistrement du tri pour chaque dossier commit 5ace615b669f062e776f5476ccbcac5c90c95687 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:44:59 2017 +0100 add license header commit 07601c60417c8ce9ea1839d95825709e953b43c3 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:39:24 2017 +0100 refs #9099 prise en compte de la conf canChangeOrderInTable dans la partie cliente commit 79eca5d292aa4401bf3b97c3058efb49b1279db8 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:38:00 2017 +0100 refs #9099 gestion de la conf canChangeOrderInTable dans la partie admin commit abcabd83317df2f6fbf74435862f615d5963457a Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:37:35 2017 +0100 refs #9099 ajout de la conf canChangeOrderInTable dans les dossiers commit f339092591d6635fec97819871be79cdd6b82ea6 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:19:02 2017 +0100 fix filter commit 77c2b731afb9953d76533ff7709e7d974db113bd Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:18:47 2017 +0100 suppression code mort commit b7fb9560474b6e4a3010d7172a75e0467006a359 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:18:17 2017 +0100 fix lazy loading commit 11b71d6b4c603a85ac4fd5457b93f763d99f0dfa Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:20:06 2017 +0100 fixes #9095 le pris par n'est pas enregistré quand on imprime depuis la liste Summary of changes: .../faxtomail/persistence/entities/MailAction.java | 1 + faxtomail-persistence/src/main/xmi/faxtomail.zargo | Bin 35710 -> 35918 bytes .../faxtomail/services/DecoratorService.java | 1 + .../faxtomail/services/DecoratorServiceImpl.java | 1 + ...0328_1__add_displayOnlyUserTrigraphInTables.sql | 4 ++ .../h2/V2_4_170328_2__add_show_actions_config.sql | 5 ++ ...> V2_4_170330_1__add_canChangeOrderInTable.sql} | 0 ...0328_1__add_displayOnlyUserTrigraphInTables.sql | 6 +++ .../V2_4_170328_2__add_show_actions_config.sql | 7 +++ ...> V2_4_170330_1__add_canChangeOrderInTable.sql} | 0 .../ui/swing/content/demande/DemandeListUI.css | 10 ++++ .../ui/swing/content/demande/DemandeListUI.jaxx | 1 + .../content/demande/DemandeListUIHandler.java | 23 ++++++++ .../swing/content/demande/DemandeListUIModel.java | 55 +++++++++++++++++++ .../ui/swing/content/demande/DemandesUI.css | 8 +++ .../ui/swing/content/demande/DemandesUI.jaxx | 38 +++++++++---- .../swing/content/demande/DemandesUIHandler.java | 30 ++++++++++- .../ui/swing/content/demande/DemandesUIModel.java | 36 +++++++++++++ ...yFormAction.java => OpenForwardFormAction.java} | 17 ++---- .../demande/actions/OpenReplyFormAction.java | 1 + ...tion.java => SaveAndOpenForwardFormAction.java} | 17 ++---- .../actions/SaveAndOpenReplyFormAction.java | 2 +- .../demande/replies/DemandRepliesUIHandler.java | 1 + .../demande/replies/actions/OpenReplyAction.java | 5 +- .../ui/swing/content/reply/ReplyFormUI.css | 10 ++-- .../ui/swing/content/reply/ReplyFormUI.jaxx | 33 ++++++------ .../ui/swing/content/reply/ReplyFormUIHandler.java | 59 ++++++++++++++++----- .../ui/swing/content/reply/ReplyFormUIModel.java | 12 +++++ .../content/search/SearchToGroupUIHandler.java | 5 ++ .../ui/swing/content/search/SearchUIHandler.java | 5 ++ .../util/AbstractFaxToMailDemandListHandler.java | 9 +++- .../ui/swing/util/AbstractFaxToMailUIHandler.java | 5 +- .../i18n/faxtomail-ui-swing_fr_FR.properties | 4 ++ .../i18n/faxtomail-ui-web_fr_FR.properties | 1 + .../WEB-INF/content/admin/configuration-input.jsp | 56 ++++++++++++++++++- .../src/main/webapp/js/configuration.js | 20 ++++--- 36 files changed, 399 insertions(+), 89 deletions(-) create mode 100644 faxtomail-service/src/main/resources/db/migration/h2/V2_4_170328_1__add_displayOnlyUserTrigraphInTables.sql create mode 100644 faxtomail-service/src/main/resources/db/migration/h2/V2_4_170328_2__add_show_actions_config.sql rename faxtomail-service/src/main/resources/db/migration/h2/{V2_4_170317_2__add_canChangeOrderInTable.sql => V2_4_170330_1__add_canChangeOrderInTable.sql} (100%) create mode 100644 faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170328_1__add_displayOnlyUserTrigraphInTables.sql create mode 100644 faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170328_2__add_show_actions_config.sql rename faxtomail-service/src/main/resources/db/migration/sqlserver/{V2_4_170317_2__add_canChangeOrderInTable.sql => V2_4_170330_1__add_canChangeOrderInTable.sql} (100%) copy faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/{OpenReplyFormAction.java => OpenForwardFormAction.java} (83%) copy faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/{SaveAndOpenReplyFormAction.java => SaveAndOpenForwardFormAction.java} (77%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 11b71d6b4c603a85ac4fd5457b93f763d99f0dfa Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:20:06 2017 +0100 fixes #9095 le pris par n'est pas enregistré quand on imprime depuis la liste --- .../ui/swing/actions/PrintOnDefaultPrinterAction.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java index 5b5a16a..94b4fd5 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java @@ -25,7 +25,6 @@ package com.franciaflex.faxtomail.ui.swing.actions; */ import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; -import com.franciaflex.faxtomail.persistence.entities.Configuration; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.HistoryType; @@ -79,11 +78,10 @@ public class PrintOnDefaultPrinterAction extends AbstractFaxToMailAction { public void doAction() throws Exception { FaxToMailUser currentUser = getContext().getCurrentUser(); AbstractFaxToMailUIHandler handler = (AbstractFaxToMailUIHandler) getHandler(); - Configuration config = getContext().newServiceContext().getConfigurationService().getConfiguration(); int printedFileNb = 0; Multimap<DemandeUIModel, AttachmentFile> nonPrintedAttachment = HashMultimap.create(); - notPrintableDemands = new ArrayList<DemandeUIModel>(); + notPrintableDemands = new ArrayList<>(); List<DemandeUIModel> orderedDemands = new ArrayList<>(attachmentsToPrintByDemand.keySet()); // order the demands by reception date @@ -94,6 +92,10 @@ public class PrintOnDefaultPrinterAction extends AbstractFaxToMailAction { return o1.getReceptionDate().compareTo(o2.getReceptionDate()); } }); + + FaxToMailServiceContext serviceContext = getContext().newServiceContext(); + EmailService emailService = serviceContext.getEmailService(); + for (DemandeUIModel demandeUIModel : orderedDemands) { if(!handler.isActionEnabled(demandeUIModel, MailAction.PRINT)) { @@ -102,14 +104,15 @@ public class PrintOnDefaultPrinterAction extends AbstractFaxToMailAction { } else { if (take && (demandeUIModel.getTakenBy() == null || !takeOnlyIfNotTaken)) { demandeUIModel.setTakenBy(currentUser); + Email persistedEmail = emailService.getFullEmailById(demandeUIModel.getTopiaId()); + Email email = demandeUIModel.toEntity(persistedEmail); + emailService.saveEmail(email, currentUser); } List<String> printedFiles = new ArrayList<String>(); - FaxToMailServiceContext serviceContext = getContext().newServiceContext(); if (printDemandDetails) { // generate details as pdf - EmailService emailService = serviceContext.getEmailService(); Email email = demandeUIModel.toEntity(); final AttachmentFile demandDetailAttachment = emailService.getEmailDetailAsAttachment(email); // print details @@ -133,7 +136,7 @@ public class PrintOnDefaultPrinterAction extends AbstractFaxToMailAction { } } - Email email = serviceContext.getEmailService().addToHistory(demandeUIModel.getTopiaId(), + Email email = emailService.addToHistory(demandeUIModel.getTopiaId(), HistoryType.PRINTING, getContext().getCurrentUser(), new Date(), -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit b7fb9560474b6e4a3010d7172a75e0467006a359 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:18:17 2017 +0100 fix lazy loading --- .../faxtomail/persistence/entities/EmailTopiaDao.java | 18 ++++-------------- .../faxtomail/services/service/EmailServiceImpl.java | 1 + 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java index 9340ccd..d8015fc 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java @@ -407,15 +407,10 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Email.PROPERTY_PRIORITY, Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_CLIENT, - //Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, Email.PROPERTY_WAITING_STATE, Email.PROPERTY_TAKEN_BY, - Email.PROPERTY_LAST_ATTACHMENT_OPENER - //Email.PROPERTY_REPLIES, - //Email.PROPERTY_ATTACHMENT, - //Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, - //Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS, - //Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL + Email.PROPERTY_LAST_ATTACHMENT_OPENER, + Email.PROPERTY_LAST_PRINTING_USER ) + " WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; // code copied from topia to perform search @@ -546,15 +541,10 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Email.PROPERTY_PRIORITY, Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_CLIENT, - //Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, Email.PROPERTY_WAITING_STATE, Email.PROPERTY_TAKEN_BY, - Email.PROPERTY_LAST_ATTACHMENT_OPENER - //Email.PROPERTY_REPLIES, - //Email.PROPERTY_ATTACHMENT, - //Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, - //Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS, - //Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL + Email.PROPERTY_LAST_ATTACHMENT_OPENER, + Email.PROPERTY_LAST_PRINTING_USER ) + " WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; if (log.isTraceEnabled()) { diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java index 735f8d0..09dc4d3 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java @@ -208,6 +208,7 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe .addAllFetches(Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_TAKEN_BY, Email.PROPERTY_LAST_ATTACHMENT_OPENER, + Email.PROPERTY_LAST_PRINTING_USER, Email.PROPERTY_CLIENT, Email.PROPERTY_WAITING_STATE, Email.PROPERTY_ORIGINAL_EMAIL, -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 77c2b731afb9953d76533ff7709e7d974db113bd Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:18:47 2017 +0100 suppression code mort --- .../java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java index 978295c..055e9e6 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java @@ -531,10 +531,6 @@ public final class FaxToMailUIUtil extends ApplicationUIUtil { result = defaultPrinter || printJob.printDialog(attributes); if (result) { -// pdDocument = PDDocument.loadLegacy(fis); -// if (pdDocument.isEncrypted()) { -// pdDocument.decrypt(""); -// } pdDocument = PDDocument.load(fis); final PDFRenderer renderer = new PDFRenderer(pdDocument); final int numOfPages = pdDocument.getNumberOfPages(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit f339092591d6635fec97819871be79cdd6b82ea6 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:19:02 2017 +0100 fix filter --- .../ui/swing/content/demande/DemandeListTableFilter.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java index 4dcc368..26f2c7b 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java @@ -167,6 +167,14 @@ public class DemandeListTableFilter extends AbstractTableFilter<JXTable> { case Email.PROPERTY_SUBJECT: emailFilter.setSubjects(!filtered ? null : new HashSet<String>((Collection) items)); break; + + case Email.PROPERTY_LAST_PRINTING_DATE: + emailFilter.setLastPrintingDates(!filtered ? null : new HashSet<Date>((Collection) items)); + break; + + case Email.PROPERTY_LAST_PRINTING_USER: + emailFilter.setLastPrintingUsers(!filtered ? null : new HashSet<FaxToMailUser>((Collection) items)); + break; } executeFilter(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit abcabd83317df2f6fbf74435862f615d5963457a Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:37:35 2017 +0100 refs #9099 ajout de la conf canChangeOrderInTable dans les dossiers --- .../db/migration/h2/V2_4_170317_2__add_canChangeOrderInTable.sql | 4 ++++ .../sqlserver/V2_4_170317_2__add_canChangeOrderInTable.sql | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/faxtomail-service/src/main/resources/db/migration/h2/V2_4_170317_2__add_canChangeOrderInTable.sql b/faxtomail-service/src/main/resources/db/migration/h2/V2_4_170317_2__add_canChangeOrderInTable.sql new file mode 100644 index 0000000..33e5f56 --- /dev/null +++ b/faxtomail-service/src/main/resources/db/migration/h2/V2_4_170317_2__add_canChangeOrderInTable.sql @@ -0,0 +1,4 @@ +-- add canChangeOrderInTable + +alter table mailfolder add canChangeOrderInTable boolean; +update mailfolder set canChangeOrderInTable = 'f' where parent is null; \ No newline at end of file diff --git a/faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170317_2__add_canChangeOrderInTable.sql b/faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170317_2__add_canChangeOrderInTable.sql new file mode 100644 index 0000000..c55733a --- /dev/null +++ b/faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170317_2__add_canChangeOrderInTable.sql @@ -0,0 +1,6 @@ +-- add canChangeOrderInTable + +alter table mailfolder add canChangeOrderInTable bit; +GO +update mailfolder set canChangeOrderInTable = 0 where parent is null; +GO \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 79eca5d292aa4401bf3b97c3058efb49b1279db8 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:38:00 2017 +0100 refs #9099 gestion de la conf canChangeOrderInTable dans la partie admin --- .../WEB-INF/content/admin/configuration-input.jsp | 18 ++++++++++++++++++ faxtomail-ui-web/src/main/webapp/js/configuration.js | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp b/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp index e25d755..f4127e0 100644 --- a/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp +++ b/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp @@ -1249,6 +1249,7 @@ </table> </div> </div> + <div class="form-group"> <label class="control-label">N'afficher que les trigrammes dans les colonnes utilisateurs ?</label><br /> <label class="radio-inline"> @@ -1265,6 +1266,23 @@ ({{parentScopeValues.displayOnlyUserTrigraphInTables ? 'Oui' : 'Non'}}) </label> </div> + + <div class="form-group"> + <label class="control-label">Permettre à l'utilisateur de trier selon les différentes colonnes ?</label><br /> + <label class="radio-inline"> + <input type="radio" + ng-model="selectedMailFolder.canChangeOrderInTable" ng-value="true"> oui + </label> + <label class="radio-inline"> + <input type="radio" + ng-model="selectedMailFolder.canChangeOrderInTable" ng-value="false"> non + </label> + <label class="radio-inline" ng-if="selectedMailFolder.$parent"> + <input type="radio" + ng-model="selectedMailFolder.canChangeOrderInTable" ng-value="undefined"> hériter du dossier parent + ({{parentScopeValues.canChangeOrderInTable ? 'Oui' : 'Non'}}) + </label> + </div> </div> </div> </div> diff --git a/faxtomail-ui-web/src/main/webapp/js/configuration.js b/faxtomail-ui-web/src/main/webapp/js/configuration.js index 4d894e5..13b7b7a 100644 --- a/faxtomail-ui-web/src/main/webapp/js/configuration.js +++ b/faxtomail-ui-web/src/main/webapp/js/configuration.js @@ -789,6 +789,7 @@ ConfigurationModule.controller('ConfigurationTreeController', ['$scope', '$windo $scope.selectedMailFolder.showForwardAction = $scope.selectedMailFolder.showForwardAction || false; $scope.selectedMailFolder.ediTransfer = $scope.selectedMailFolder.ediTransfer || false; $scope.selectedMailFolder.displayOnlyUserTrigraphInTables = $scope.selectedMailFolder.displayOnlyUserTrigraphInTables || false; + $scope.selectedMailFolder.canChangeOrderInTable = $scope.selectedMailFolder.canChangeOrderInTable || false; } // initialisation des valeurs du parent @@ -926,6 +927,9 @@ ConfigurationModule.controller('ConfigurationTreeController', ['$scope', '$windo if (angular.isUndefined($scope.parentScopeValues.displayOnlyUserTrigraphInTables)) { $scope.parentScopeValues.displayOnlyUserTrigraphInTables = folder.displayOnlyUserTrigraphInTables; } + if (angular.isUndefined($scope.parentScopeValues.canChangeOrderInTable)) { + $scope.parentScopeValues.canChangeOrderInTable = folder.canChangeOrderInTable; + } if ((!$scope.parentScopeValues.waitingStates || $scope.parentScopeValues.waitingStates.length == 0) && folder.waitingStates) { $scope.parentScopeValues.waitingStates = folder.waitingStates; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 07601c60417c8ce9ea1839d95825709e953b43c3 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:39:24 2017 +0100 refs #9099 prise en compte de la conf canChangeOrderInTable dans la partie cliente --- .../entities/AbstractFaxToMailTopiaDao.java | 32 ++ .../persistence/entities/EmailFilter.java | 3 +- .../persistence/entities/EmailTopiaDao.java | 361 +++++++++++---------- .../faxtomail/persistence/entities/MailField.java | 68 ++-- .../content/demande/DemandeListTableFilter.java | 4 +- .../content/demande/DemandeListUIHandler.java | 62 +++- .../swing/content/demande/DemandeListUIModel.java | 48 ++- .../demande/actions/LoadFolderEmailsAction.java | 10 +- .../faxtomail/ui/swing/util/DemandeTableModel.java | 65 ++-- .../util/FilterSortableTableHeaderRenderer.java | 73 +++++ .../src/main/resources/icons/sort_table_asc.png | Bin 0 -> 219 bytes .../src/main/resources/icons/sort_table_desc.png | Bin 0 -> 208 bytes .../src/main/webapp/js/configuration.js | 2 +- pom.xml | 4 +- 14 files changed, 485 insertions(+), 247 deletions(-) diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/AbstractFaxToMailTopiaDao.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/AbstractFaxToMailTopiaDao.java index 3e11a47..653c1ba 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/AbstractFaxToMailTopiaDao.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/AbstractFaxToMailTopiaDao.java @@ -30,6 +30,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.internal.AbstractTopiaDao; import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; import java.util.Collection; import java.util.HashMap; @@ -81,4 +82,35 @@ public abstract class AbstractFaxToMailTopiaDao<E extends TopiaEntity> extends A return super.findAll(hql, hqlParameters); } + protected boolean hqlContainsGroupBy(String hql) { + return hql.toLowerCase().contains("group by"); + } + + // reprise de la méthode findPage(String hql, Map<String, Object> hqlParameters, PaginationParameter page) de AbstractTopiaDao + // qui ne prend pas le nom de la table sur laquelle compter le topiaId en cas de jointure + protected <O> PaginationResult<O> findPage(String topiaIdCountTable, String hql, Map<String, Object> hqlParameters, PaginationParameter page) { + List<O> elements = find(hql, hqlParameters, page); + + String countHql = "select count(" + topiaIdCountTable + ".topiaId) "; + if (hqlStartsWithSelect(hql)) { + // must remove the from clause, otherwise some sql queries won't work. + countHql += hql.substring(hql.toLowerCase().indexOf(" from ")); + } else { + countHql += hql; + } + + if (hqlContainsOrderBy(countHql)) { + // must remove the order by clause, otherwise some sql queries won't work. + countHql = countHql.substring(0, countHql.toLowerCase().indexOf("order by")); + } + + if (hqlContainsGroupBy(countHql)) { + // must remove the group by clause, otherwise some sql queries won't work. + countHql = countHql.substring(0, countHql.toLowerCase().indexOf("group by")); + } + + long count = count(countHql, hqlParameters); + return PaginationResult.of(elements, count, page); + } + } diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailFilter.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailFilter.java index 2fb2fb7..6d8b576 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailFilter.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailFilter.java @@ -60,7 +60,6 @@ public class EmailFilter extends AbstractSerializableBean { public static final String PROPERTY_LAST_PRINTING_USERS = "lastPrintingUsers"; public static final String PROPERTY_LAST_PRINTING_DATES = "lastPrintingDates"; - protected Set<Priority> priorities; protected Set<DemandType> demandTypes; @@ -337,7 +336,7 @@ public class EmailFilter extends AbstractSerializableBean { firePropertyChange(PROPERTY_LAST_PRINTING_DATES, null, lastPrintingDates); } - public void clear() { + public void clearFilter() { setClientCodes(null); setWaitingStates(null); setDemandStatus(null); diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java index d8015fc..7ee4374 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java @@ -59,6 +59,17 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { private static final Log log = LogFactory.getLog(EmailTopiaDao.class); + public static final String EMAIL_IDENTIFIER = "E"; + public static final String CLIENT_IDENTIFIER = "C"; + public static final String PRIORITY_IDENTIFIER = "P"; + public static final String WAITING_STATE_IDENTIFIER = "WS"; + public static final String DEMAND_TYPE_IDENTIFIER = "DT"; + public static final String TAKEN_BY_IDENTIFIER = "TB"; + public static final String LAST_ATTACHMENT_OPENER_IDENTIFIER = "LAO"; + public static final String LAST_PRINTING_USER_IDENTIFIER = "LPU"; + public static final String GROUP_IDENTIFIER = "G"; + public static final String RANGE_ROW_IDENTIFIER = "RR"; + /** * Search for email using filter. * @@ -74,32 +85,32 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Map<String, Object> args = new HashMap<>(); // apply security - query.append(" WHERE E." + Email.PROPERTY_MAIL_FOLDER + " in (:readMailFolders)"); + query.append(" WHERE " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_MAIL_FOLDER + " in (:readMailFolders)"); args.put("readMailFolders", readMailFolders); // email minReceptionDate if (searchFilter.getMinReceptionDate() != null) { Date date = DateUtils.truncate(searchFilter.getMinReceptionDate(), Calendar.DAY_OF_MONTH); - query.append(" AND E." + Email.PROPERTY_RECEPTION_DATE + " >= :" + SearchFilter.PROPERTY_MIN_RECEPTION_DATE); + query.append(" AND " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RECEPTION_DATE + " >= :" + SearchFilter.PROPERTY_MIN_RECEPTION_DATE); args.put(SearchFilter.PROPERTY_MIN_RECEPTION_DATE, date); } // email maxReceptionDate if (searchFilter.getMaxReceptionDate() != null) { Date date = DateUtils.ceiling(searchFilter.getMaxReceptionDate(), Calendar.DAY_OF_MONTH); - query.append(" AND E." + Email.PROPERTY_RECEPTION_DATE + " <= :" + SearchFilter.PROPERTY_MAX_RECEPTION_DATE); + query.append(" AND " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RECEPTION_DATE + " <= :" + SearchFilter.PROPERTY_MAX_RECEPTION_DATE); args.put(SearchFilter.PROPERTY_MAX_RECEPTION_DATE, date); } // email taken by if (searchFilter.getTakenBy() != null) { - query.append(" AND E." + Email.PROPERTY_TAKEN_BY + " = :" + SearchFilter.PROPERTY_TAKEN_BY); + query.append(" AND " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_TAKEN_BY + " = :" + SearchFilter.PROPERTY_TAKEN_BY); args.put(SearchFilter.PROPERTY_TAKEN_BY, searchFilter.getTakenBy()); } // history minModificationDate && modifiedBy if (searchFilter.getMinModificationDate() != null || searchFilter.getModifiedBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :modificationType"); args.put("modificationType", HistoryType.MODIFICATION); if (searchFilter.getMinModificationDate() != null) { @@ -116,7 +127,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // history maxModificationDate && modifiedBy if (searchFilter.getMaxModificationDate() != null || searchFilter.getModifiedBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :modificationType"); args.put("modificationType", HistoryType.MODIFICATION); if (searchFilter.getMaxModificationDate() != null) { @@ -133,7 +144,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // history minTransferDate && transferBy if (searchFilter.getMinTransferDate() != null || searchFilter.getTransferBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :transmissionType"); args.put("transmissionType", HistoryType.TRANSMISSION); if (searchFilter.getMinTransferDate() != null) { @@ -150,7 +161,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // history maxTransferDate && transferBy if (searchFilter.getMaxTransferDate() != null || searchFilter.getTransferBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :transmissionType"); args.put("transmissionType", HistoryType.TRANSMISSION); if (searchFilter.getMaxTransferDate() != null) { @@ -167,7 +178,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // history minArchivedDate && transferBy if (searchFilter.getMinArchivedDate() != null || searchFilter.getArchivedBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :archivedType"); args.put("archivedType", HistoryType.ARCHIVED); if (searchFilter.getMinArchivedDate() != null) { @@ -184,7 +195,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // history maxArchivedDate && transferBy if (searchFilter.getMaxArchivedDate() != null || searchFilter.getArchivedBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :archivedType"); args.put("archivedType", HistoryType.ARCHIVED); if (searchFilter.getMaxArchivedDate() != null) { @@ -201,7 +212,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // email minPrintingDate if (searchFilter.getMinPrintingDate() != null || searchFilter.getPrintingBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :printingType"); args.put("printingType", HistoryType.PRINTING); if (searchFilter.getMinPrintingDate() != null) { @@ -218,7 +229,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // email maxPrintingDate if (searchFilter.getMaxPrintingDate() != null || searchFilter.getPrintingBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :printingType"); args.put("printingType", HistoryType.PRINTING); if (searchFilter.getMaxPrintingDate() != null) { @@ -235,7 +246,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // email minReplyDate if (searchFilter.getMinReplyDate() != null || searchFilter.getReplyBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :replyType"); args.put("replyType", HistoryType.REPLY); if (searchFilter.getMinReplyDate() != null) { @@ -252,7 +263,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // email maxReplyDate if (searchFilter.getMaxReplyDate() != null || searchFilter.getReplyBy() != null) { - query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(E." + Email.PROPERTY_HISTORY + ")"); + query.append(" AND EXISTS (FROM " + History.class.getName() + " H WHERE H in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_HISTORY + ")"); query.append(" AND H." + History.PROPERTY_TYPE + " = :replyType"); args.put("replyType", HistoryType.REPLY); if (searchFilter.getMaxReplyDate() != null) { @@ -269,54 +280,54 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // email sender if (StringUtils.isNotBlank(searchFilter.getSender())) { - query.append(" AND lower(E." + Email.PROPERTY_SENDER + ") LIKE lower(:" + SearchFilter.PROPERTY_SENDER + ")"); + query.append(" AND lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_SENDER + ") LIKE lower(:" + SearchFilter.PROPERTY_SENDER + ")"); args.put(SearchFilter.PROPERTY_SENDER, "%" + searchFilter.getSender() + "%"); } // client if (searchFilter.getClient() != null) { - query.append(" AND E." + Email.PROPERTY_CLIENT + " = :" + SearchFilter.PROPERTY_CLIENT); + query.append(" AND " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + " = :" + SearchFilter.PROPERTY_CLIENT); args.put(SearchFilter.PROPERTY_CLIENT, searchFilter.getClient()); } // email subject if (StringUtils.isNotBlank(searchFilter.getDemandObject())) { - query.append(" AND lower(E." + Email.PROPERTY_OBJECT + ") LIKE lower(:" + SearchFilter.PROPERTY_DEMAND_OBJECT + ")"); + query.append(" AND lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_OBJECT + ") LIKE lower(:" + SearchFilter.PROPERTY_DEMAND_OBJECT + ")"); args.put(SearchFilter.PROPERTY_DEMAND_OBJECT, "%" + searchFilter.getDemandObject() + "%"); } // email demand type List<DemandType> demandType = searchFilter.getDemandType(); if (CollectionUtils.isNotEmpty(demandType)) { - query.append(" AND (E." + Email.PROPERTY_DEMAND_TYPE + " IN (:" + SearchFilter.PROPERTY_DEMAND_TYPE + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_TYPE + " IN (:" + SearchFilter.PROPERTY_DEMAND_TYPE + ")"); args.put(SearchFilter.PROPERTY_DEMAND_TYPE, demandType); if (demandType.contains(null)) { - query.append(" OR E." + Email.PROPERTY_DEMAND_TYPE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_TYPE + " IS NULL"); } query.append(")"); } // email ediCodeNumber if (StringUtils.isNotBlank(searchFilter.getEdiCodeNumber())) { - query.append(" AND lower(E." + Email.PROPERTY_EDI_ERROR + ") LIKE lower(:" + SearchFilter.PROPERTY_EDI_CODE_NUMBER + ")"); + query.append(" AND lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_EDI_ERROR + ") LIKE lower(:" + SearchFilter.PROPERTY_EDI_CODE_NUMBER + ")"); args.put(SearchFilter.PROPERTY_EDI_CODE_NUMBER, "%" + searchFilter.getEdiCodeNumber() + "%"); } // email projectReference if (StringUtils.isNotBlank(searchFilter.getProjectReference())) { - query.append(" AND lower(E." + Email.PROPERTY_PROJECT_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_PROJECT_REFERENCE + ")"); + query.append(" AND lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PROJECT_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_PROJECT_REFERENCE + ")"); args.put(SearchFilter.PROPERTY_PROJECT_REFERENCE, "%" + searchFilter.getProjectReference() + "%"); } // email priority List<Priority> priority = searchFilter.getPriority(); if (CollectionUtils.isNotEmpty(priority)) { - query.append(" AND (E." + Email.PROPERTY_PRIORITY + " IN (:" + SearchFilter.PROPERTY_PRIORITY + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PRIORITY + " IN (:" + SearchFilter.PROPERTY_PRIORITY + ")"); args.put(SearchFilter.PROPERTY_PRIORITY, priority); if (priority.contains(null)) { - query.append(" OR E." + Email.PROPERTY_PRIORITY + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PRIORITY + " IS NULL"); } query.append(")"); } @@ -324,11 +335,11 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // email demand status List<DemandStatus> demandStatus = searchFilter.getDemandStatus(); if (CollectionUtils.isNotEmpty(demandStatus)) { - query.append(" AND (E." + Email.PROPERTY_DEMAND_STATUS + " IN (:" + SearchFilter.PROPERTY_DEMAND_STATUS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_STATUS + " IN (:" + SearchFilter.PROPERTY_DEMAND_STATUS + ")"); args.put(SearchFilter.PROPERTY_DEMAND_STATUS, demandStatus); if (demandStatus.contains(null)) { - query.append(" OR E." + Email.PROPERTY_DEMAND_STATUS + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_STATUS + " IS NULL"); } query.append(")"); } @@ -336,70 +347,72 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // email etat attente List<WaitingState> waitingStates = searchFilter.getWaitingStates(); if (CollectionUtils.isNotEmpty(waitingStates)) { - query.append(" AND (E." + Email.PROPERTY_WAITING_STATE + " IN (:" + SearchFilter.PROPERTY_WAITING_STATES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_WAITING_STATE + " IN (:" + SearchFilter.PROPERTY_WAITING_STATES + ")"); args.put(SearchFilter.PROPERTY_WAITING_STATES, waitingStates); if (waitingStates.contains(null)) { - query.append(" OR E." + Email.PROPERTY_WAITING_STATE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_WAITING_STATE + " IS NULL"); } query.append(")"); } // email message if (StringUtils.isNotBlank(searchFilter.getMessage())) { - query.append(" AND lower(E." + Email.PROPERTY_COMMENT + ") LIKE lower(:" + SearchFilter.PROPERTY_MESSAGE + ")"); + query.append(" AND lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMMENT + ") LIKE lower(:" + SearchFilter.PROPERTY_MESSAGE + ")"); args.put(SearchFilter.PROPERTY_MESSAGE, "%" + searchFilter.getMessage() + "%"); } if (StringUtils.isNotBlank(searchFilter.getBody())) { - query.append(" AND lower(E." + Email.PROPERTY_ORIGINAL_EMAIL + "." + OriginalEmail.PROPERTY_CONTENT + ") LIKE lower(:" + SearchFilter.PROPERTY_BODY + ")"); + query.append(" AND lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_ORIGINAL_EMAIL + "." + OriginalEmail.PROPERTY_CONTENT + ") LIKE lower(:" + SearchFilter.PROPERTY_BODY + ")"); args.put(SearchFilter.PROPERTY_BODY, "%" + searchFilter.getBody() + "%"); } // email gamme List<Range> gamme = searchFilter.getGamme(); if (CollectionUtils.isNotEmpty(gamme)) { - query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query.append(" AND RR." + RangeRow.PROPERTY_RANGE + " IN (:" + SearchFilter.PROPERTY_GAMME + "))"); args.put(SearchFilter.PROPERTY_GAMME, gamme); if (gamme.contains(null)) { - query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))"); + query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))"); } query.append("))"); } // email localReference if (StringUtils.isNotBlank(searchFilter.getLocalReference())) { - query.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + query.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query.append(" AND lower(RR." + RangeRow.PROPERTY_COMMAND_NUMBER + ") LIKE lower(:" + SearchFilter.PROPERTY_LOCAL_REFERENCE + "))"); - query.append(" OR lower(E." + Email.PROPERTY_COMPANY_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_LOCAL_REFERENCE + ")"); + query.append(" OR lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_LOCAL_REFERENCE + ")"); args.put(SearchFilter.PROPERTY_LOCAL_REFERENCE, "%" + searchFilter.getLocalReference() + "%"); query.append(")"); } // command Nb if (StringUtils.isNotBlank(searchFilter.getCommandNb())) { - query.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + query.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query.append(" AND lower(RR." + RangeRow.PROPERTY_COMMAND_NUMBER + ") LIKE lower(:" + SearchFilter.PROPERTY_COMMAND_NB + "))"); - query.append(" OR lower(E." + Email.PROPERTY_COMPANY_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_COMMAND_NB + ")"); + query.append(" OR lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_COMMAND_NB + ")"); args.put(SearchFilter.PROPERTY_COMMAND_NB, "%" + searchFilter.getCommandNb() + "%"); query.append(")"); } // add same fecth liste as emailService#getEmailForFolder() - String hqlForFetchStep1 = "SELECT E." + TopiaEntity.PROPERTY_TOPIA_ID + " FROM " + Email.class.getName() + " E " - + "WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " IN ("; + String hqlForFetchStep1 = "SELECT " + EMAIL_IDENTIFIER + "." + TopiaEntity.PROPERTY_TOPIA_ID + + " FROM " + Email.class.getName() + " " + EMAIL_IDENTIFIER + + " WHERE " + EMAIL_IDENTIFIER + "." + TopiaEntity.PROPERTY_TOPIA_ID + " IN ("; if (searchFilter.isAddGroupDemands()) { hqlForFetchStep1 += "SELECT CASE WHEN G IS NULL " + - "THEN E." + TopiaEntity.PROPERTY_TOPIA_ID + + "THEN " + EMAIL_IDENTIFIER + "." + TopiaEntity.PROPERTY_TOPIA_ID + " ELSE E2." + TopiaEntity.PROPERTY_TOPIA_ID + " END " + "FROM " + Email.class.getName() + " E " + - "LEFT OUTER JOIN E." + Email.PROPERTY_EMAIL_GROUP + " AS G " + + "LEFT OUTER JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_EMAIL_GROUP + " AS G " + "LEFT OUTER JOIN G." + EmailGroup.PROPERTY_EMAIL + " AS E2 "; } else { - hqlForFetchStep1 += "select E." + TopiaEntity.PROPERTY_TOPIA_ID + " FROM " + Email.class.getName() + " E "; + hqlForFetchStep1 += "select " + EMAIL_IDENTIFIER + "." + TopiaEntity.PROPERTY_TOPIA_ID + + " FROM " + Email.class.getName() + " " + EMAIL_IDENTIFIER + " "; } hqlForFetchStep1 += query.toString() + ")"; @@ -410,11 +423,12 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Email.PROPERTY_WAITING_STATE, Email.PROPERTY_TAKEN_BY, Email.PROPERTY_LAST_ATTACHMENT_OPENER, - Email.PROPERTY_LAST_PRINTING_USER - ) + " WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; + Email.PROPERTY_LAST_PRINTING_USER, + Email.PROPERTY_LAST_ATTACHMENT_OPENER + ) + " WHERE " + EMAIL_IDENTIFIER + "." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; // code copied from topia to perform search - PaginationResult<String> pageResult = findPage(hqlForFetchStep1, args, pagination); + PaginationResult<String> pageResult = findPage(EMAIL_IDENTIFIER, hqlForFetchStep1, args, pagination); List<String> step1ResultTopiaIds = pageResult.getElements(); List<Email> sortedEntities; @@ -430,41 +444,15 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { PaginationResult<Email> result = PaginationResult.of(sortedEntities, pageResult.getCount(), pageResult.getCurrentPage()); - //PaginationResult<Email> result = findPage(query.toString(), args, pagination); - - // manual fetch - // Email.PROPERTY_PRIORITY, - // Email.PROPERTY_DEMAND_TYPE, - // Email.PROPERTY_CLIENT, - // Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, - // Email.PROPERTY_ETAT_ATTENTE, - // Email.PROPERTY_TAKEN_BY, - // Email.PROPERTY_REPLIES, - // Email.PROPERTY_ATTACHMENT, - // Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, - // Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS, - // Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL) for (Email email : result.getElements()) { - //Hibernate.initialize(email.getPriority()); - //Hibernate.initialize(email.getDemandType()); - //Hibernate.initialize(email.getClient()); List<RangeRow> rangeRows = email.getRangeRow(); if (rangeRows != null) { for (RangeRow rangeRow : rangeRows) { Hibernate.initialize(rangeRow.getRange()); } } - //Hibernate.initialize(email.getWaitingState()); - //Hibernate.initialize(email.getTakenBy()); Hibernate.initialize(email.getReplies()); Hibernate.initialize(email.getAttachment()); -// Collection<History> histories = email.getHistory(); -// if (histories != null) { -// for (History history : histories) { -// Hibernate.initialize(history.getFaxToMailUser()); -// Hibernate.initialize(history.getFields()); -// } -// } EmailGroup emailGroup = email.getEmailGroup(); if (emailGroup != null) { Hibernate.initialize(emailGroup.getEmail()); @@ -484,22 +472,22 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Set<Email> result = new HashSet<>(); - query.append(newFromClause("E") + " WHERE E." + Email.PROPERTY_MAIL_FOLDER + "." + MailFolder.PROPERTY_COMPANY + " = (:company)"); + query.append(newFromClause("E") + " WHERE " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_MAIL_FOLDER + "." + MailFolder.PROPERTY_COMPANY + " = (:company)"); args.put("company", company); - query.append(" AND E." + Email.PROPERTY_DEMAND_STATUS + " = :archiveStatus"); + query.append(" AND " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_STATUS + " = :archiveStatus"); args.put("archiveStatus", DemandStatus.ARCHIVED); // kmorin 20150417 impossible de savoir pourquoi, mais sqlserver n'aime pas cette requete... // si on la fait en 2 fois ca passe -// query.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); +// query.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); // query.append(" AND lower(RR." + RangeRow.PROPERTY_COMMAND_NUMBER + ") LIKE lower(:" + SearchFilter.PROPERTY_COMMAND_NB + "))"); -// query.append(" OR lower(E." + Email.PROPERTY_COMPANY_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_COMMAND_NB + ")"); +// query.append(" OR lower(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + ") LIKE lower(:" + SearchFilter.PROPERTY_COMMAND_NB + ")"); // args.put(SearchFilter.PROPERTY_COMMAND_NB, "%" + commandQuotationNumber + "%"); StringBuilder query1 = new StringBuilder(query); - query1.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + query1.append(" AND (EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query1.append(" AND RR." + RangeRow.PROPERTY_COMMAND_NUMBER + " LIKE :" + SearchFilter.PROPERTY_COMMAND_NB + ")"); args.put(SearchFilter.PROPERTY_COMMAND_NB, "%" + commandQuotationNumber + "%"); @@ -509,7 +497,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { result.addAll(this.<Email>findAll(query1.toString(), args)); StringBuilder query2 = new StringBuilder(query); - query2.append(" AND (E." + Email.PROPERTY_COMPANY_REFERENCE + " LIKE :" + SearchFilter.PROPERTY_COMMAND_NB); + query2.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + " LIKE :" + SearchFilter.PROPERTY_COMMAND_NB); query2.append(")"); result.addAll(this.<Email>findAll(query2.toString(), args)); @@ -532,8 +520,34 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Map<String, Object> args = new HashMap<>(); String query = filteredDemandsOfFolderCondition(folder, emailFilter, args); + String orderClause = null; + String tableToJoin = null; + if (!pagination.getOrderClauses().isEmpty()) { + orderClause = pagination.getOrderClauses().get(0).getClause(); + String clauseNoSum = orderClause.replaceAll("SUM\\((.*)\\)", "$1"); + int dotIndex = clauseNoSum.indexOf('.'); + if (dotIndex >= 0) { + tableToJoin = clauseNoSum.substring(0, dotIndex); + } + } + + boolean orderByWithSum = orderClause != null && orderClause.startsWith("SUM("); // add same fecth liste as emailService#getEmailForFolder() - String hqlForFetchStep1 = "select E." + TopiaEntity.PROPERTY_TOPIA_ID + " FROM " + Email.class.getName() + " E " + query; + StringBuilder hqlForFetchStep1 = new StringBuilder("SELECT " + EMAIL_IDENTIFIER + "." + TopiaEntity.PROPERTY_TOPIA_ID); + if (orderByWithSum) { + hqlForFetchStep1.append(", " + orderClause); + } + hqlForFetchStep1.append(" FROM " + Email.class.getName() + " " + EMAIL_IDENTIFIER); + + if (RANGE_ROW_IDENTIFIER.equals(tableToJoin)) { + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + " " + RANGE_ROW_IDENTIFIER); + } + + if (orderClause != null) { + addJoinsForOrderBy(orderClause, hqlForFetchStep1); + } + + hqlForFetchStep1.append(" ").append(query).append(" GROUP BY E.topiaId"); if (log.isTraceEnabled()) { log.trace("getEmailForFolder 1 - " + hqlForFetchStep1); } @@ -545,7 +559,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Email.PROPERTY_TAKEN_BY, Email.PROPERTY_LAST_ATTACHMENT_OPENER, Email.PROPERTY_LAST_PRINTING_USER - ) + " WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; + ) + " WHERE " + EMAIL_IDENTIFIER + "." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; if (log.isTraceEnabled()) { log.trace("getEmailForFolder 2 - " + hqlForFetchStep2); @@ -557,14 +571,23 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { log.trace("getEmailForFolder start query 1 : " + time); } - PaginationResult<String> pageResult = findPage(hqlForFetchStep1, args, pagination); - + PaginationResult pageResult = findPage(EMAIL_IDENTIFIER, hqlForFetchStep1.toString(), args, pagination); long time2 = new Date().getTime(); if (log.isTraceEnabled()) { log.trace("getEmailForFolder end query 1 : " + time2 + " (" + (time2 - time) + ")"); } - List<String> step1ResultTopiaIds = pageResult.getElements(); + List<String> step1ResultTopiaIds; + if (orderByWithSum) { + step1ResultTopiaIds = Lists.transform(pageResult.getElements(), new Function<Object[], String>() { + @Override + public String apply(Object[] input) { + return String.valueOf(input[0]); + } + }); + } else { + step1ResultTopiaIds = pageResult.getElements(); + } List<Email> sortedEntities; if (CollectionUtils.isEmpty(step1ResultTopiaIds)) { @@ -604,41 +627,15 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { log.trace("getEmailForFolder after pagination results : " + time2 + " (" + (time2 - time) + ")"); } - //PaginationResult<Email> result = findPage(query.toString(), args, pagination); - - // manual fetch - // Email.PROPERTY_PRIORITY, - // Email.PROPERTY_DEMAND_TYPE, - // Email.PROPERTY_CLIENT, - // Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, - // Email.PROPERTY_ETAT_ATTENTE, - // Email.PROPERTY_TAKEN_BY, - // Email.PROPERTY_REPLIES, - // Email.PROPERTY_ATTACHMENT, - // Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, - // Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS, - // Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL) for (Email email : result.getElements()) { - //Hibernate.initialize(email.getPriority()); - //Hibernate.initialize(email.getDemandType()); - //Hibernate.initialize(email.getClient()); List<RangeRow> rangeRows = email.getRangeRow(); if (rangeRows != null) { for (RangeRow rangeRow : rangeRows) { Hibernate.initialize(rangeRow.getRange()); } } - //Hibernate.initialize(email.getWaitingState()); - //Hibernate.initialize(email.getTakenBy()); Hibernate.initialize(email.getReplies()); Hibernate.initialize(email.getAttachment()); -// Collection<History> histories = email.getHistory(); -// if (histories != null) { -// for (History history : histories) { -// Hibernate.initialize(history.getFaxToMailUser()); -// Hibernate.initialize(history.getFields()); -// } -// } EmailGroup emailGroup = email.getEmailGroup(); if (emailGroup != null) { Hibernate.initialize(emailGroup.getEmail()); @@ -662,10 +659,44 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { return result; } + protected void addJoinsForOrderBy(String clause, StringBuilder hqlForFetchStep1) { + String clauseNoSize = clause.replaceAll("SIZE\\((.*)\\)", "$1"); + int dotIndex = clauseNoSize.indexOf('.'); + if (dotIndex >= 0) { + String tableToJoin = clauseNoSize.substring(0, dotIndex); + switch (tableToJoin) { + case CLIENT_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + " " + CLIENT_IDENTIFIER); + break; + case PRIORITY_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PRIORITY + " " + PRIORITY_IDENTIFIER); + break; + case WAITING_STATE_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_WAITING_STATE + " " + WAITING_STATE_IDENTIFIER); + break; + case DEMAND_TYPE_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_TYPE + " " + DEMAND_TYPE_IDENTIFIER); + break; + case TAKEN_BY_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_TAKEN_BY + " " + TAKEN_BY_IDENTIFIER); + break; + case LAST_ATTACHMENT_OPENER_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_ATTACHMENT_OPENER + " " + LAST_ATTACHMENT_OPENER_IDENTIFIER); + break; + case LAST_PRINTING_USER_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_PRINTING_USER + " " + LAST_PRINTING_USER_IDENTIFIER); + break; + case GROUP_IDENTIFIER: + hqlForFetchStep1.append(" LEFT JOIN " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_EMAIL_GROUP + " " + GROUP_IDENTIFIER); + break; + } + } + } + protected String filteredDemandsOfFolderCondition(MailFolder folder, EmailFilter emailFilter, Map<String, Object> args) { StringBuilder query = new StringBuilder(); - query.append(" WHERE E." + Email.PROPERTY_MAIL_FOLDER + " = :folder AND E." + Email.PROPERTY_DEMAND_STATUS + " != :archiveStatus"); + query.append(" WHERE " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_MAIL_FOLDER + " = :folder AND " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_STATUS + " != :archiveStatus"); args.put("folder", folder); args.put("archiveStatus", DemandStatus.ARCHIVED); @@ -674,7 +705,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { query.append(" AND ("); int i = 0; for (Date date : receptionDates) { - query.append(" E." + Email.PROPERTY_RECEPTION_DATE + " BETWEEN :" + EmailFilter.PROPERTY_RECEPTION_DATES + i + "Min"); + query.append(" " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RECEPTION_DATE + " BETWEEN :" + EmailFilter.PROPERTY_RECEPTION_DATES + i + "Min"); query.append(" AND :" + EmailFilter.PROPERTY_RECEPTION_DATES + i + "Max"); args.put(EmailFilter.PROPERTY_RECEPTION_DATES + i + "Min", date); @@ -689,182 +720,182 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Set<DemandStatus> demandStatus = emailFilter.getDemandStatus(); if (demandStatus != null) { - query.append(" AND (E." + Email.PROPERTY_DEMAND_STATUS + " in (:" + EmailFilter.PROPERTY_DEMAND_STATUS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_STATUS + " in (:" + EmailFilter.PROPERTY_DEMAND_STATUS + ")"); args.put(EmailFilter.PROPERTY_DEMAND_STATUS, demandStatus); if (demandStatus.contains(null)) { - query.append(" OR E." + Email.PROPERTY_DEMAND_STATUS + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_STATUS + " IS NULL"); } query.append(")"); } Set<String> senders = emailFilter.getSenders(); if (senders != null) { - query.append(" AND (E." + Email.PROPERTY_SENDER + " in (:" + EmailFilter.PROPERTY_SENDERS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_SENDER + " in (:" + EmailFilter.PROPERTY_SENDERS + ")"); args.put(EmailFilter.PROPERTY_SENDERS, senders); if (senders.contains(null)) { - query.append(" OR E." + Email.PROPERTY_SENDER + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_SENDER + " IS NULL"); } query.append(")"); } Set<String> clientBrands = emailFilter.getClientBrands(); if (clientBrands != null) { - query.append(" AND (E." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_BRAND + " IN (:" + EmailFilter.PROPERTY_CLIENT_BRANDS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_BRAND + " IN (:" + EmailFilter.PROPERTY_CLIENT_BRANDS + ")"); args.put(EmailFilter.PROPERTY_CLIENT_BRANDS, clientBrands); if (clientBrands.contains(null)) { - query.append(" OR E." + Email.PROPERTY_CLIENT + " IS NULL"); - query.append(" OR E." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_BRAND + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_BRAND + " IS NULL"); } query.append(")"); } Set<String> clientCodes = emailFilter.getClientCodes(); if (clientCodes != null) { - query.append(" AND (E." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_CODE + " IN (:" + EmailFilter.PROPERTY_CLIENT_CODES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_CODE + " IN (:" + EmailFilter.PROPERTY_CLIENT_CODES + ")"); args.put(EmailFilter.PROPERTY_CLIENT_CODES, clientCodes); if (clientCodes.contains(null)) { - query.append(" OR E." + Email.PROPERTY_CLIENT + " IS NULL"); - query.append(" OR E." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_CODE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_CODE + " IS NULL"); } query.append(")"); } Set<String> clientNames = emailFilter.getClientNames(); if (clientNames != null) { - query.append(" AND (E." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_NAME + " IN (:" + EmailFilter.PROPERTY_CLIENT_NAMES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_NAME + " IN (:" + EmailFilter.PROPERTY_CLIENT_NAMES + ")"); args.put(EmailFilter.PROPERTY_CLIENT_NAMES, clientNames); if (clientNames.contains(null)) { - query.append(" OR E." + Email.PROPERTY_CLIENT + " IS NULL"); - query.append(" OR E." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_NAME + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_CLIENT + "." + Client.PROPERTY_NAME + " IS NULL"); } query.append(")"); } Set<String> comments = emailFilter.getComments(); if (comments != null) { - query.append(" AND (E." + Email.PROPERTY_COMMENT + " in (:" + EmailFilter.PROPERTY_COMMENTS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMMENT + " in (:" + EmailFilter.PROPERTY_COMMENTS + ")"); args.put(EmailFilter.PROPERTY_COMMENTS, comments); if (comments.contains(null)) { - query.append(" OR E." + Email.PROPERTY_COMMENT + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMMENT + " IS NULL"); } query.append(")"); } Set<String> demandObjects = emailFilter.getDemandObjects(); if (demandObjects != null) { - query.append(" AND (E." + Email.PROPERTY_OBJECT + " in (:" + EmailFilter.PROPERTY_DEMAND_OBJECTS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_OBJECT + " in (:" + EmailFilter.PROPERTY_DEMAND_OBJECTS + ")"); args.put(EmailFilter.PROPERTY_DEMAND_OBJECTS, demandObjects); if (demandObjects.contains(null)) { - query.append(" OR E." + Email.PROPERTY_OBJECT + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_OBJECT + " IS NULL"); } query.append(")"); } Set<DemandType> demandTypes = emailFilter.getDemandTypes(); if (demandTypes != null) { - query.append(" AND (E." + Email.PROPERTY_DEMAND_TYPE + " in (:" + EmailFilter.PROPERTY_DEMAND_TYPES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_TYPE + " in (:" + EmailFilter.PROPERTY_DEMAND_TYPES + ")"); args.put(EmailFilter.PROPERTY_DEMAND_TYPES, demandTypes); if (demandTypes.contains(null)) { - query.append(" OR E." + Email.PROPERTY_DEMAND_TYPE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_TYPE + " IS NULL"); } query.append(")"); } Set<String> ediCodeNumbers = emailFilter.getEdiCodeNumbers(); if (ediCodeNumbers != null) { - query.append(" AND (E." + Email.PROPERTY_EDI_ERROR + " in (:" + EmailFilter.PROPERTY_EDI_CODE_NUMBERS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_EDI_ERROR + " in (:" + EmailFilter.PROPERTY_EDI_CODE_NUMBERS + ")"); args.put(EmailFilter.PROPERTY_EDI_CODE_NUMBERS, ediCodeNumbers); if (ediCodeNumbers.contains(null)) { - query.append(" OR E." + Email.PROPERTY_EDI_ERROR + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_EDI_ERROR + " IS NULL"); } query.append(")"); } Set<FaxToMailUser> takenBys = emailFilter.getTakenBys(); if (takenBys != null) { - query.append(" AND (E." + Email.PROPERTY_TAKEN_BY + " in (:" + EmailFilter.PROPERTY_TAKEN_BYS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_TAKEN_BY + " in (:" + EmailFilter.PROPERTY_TAKEN_BYS + ")"); args.put(EmailFilter.PROPERTY_TAKEN_BYS, takenBys); if (takenBys.contains(null)) { - query.append(" OR E." + Email.PROPERTY_TAKEN_BY + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_TAKEN_BY + " IS NULL"); } query.append(")"); } Set<FaxToMailUser> lastAttachmentOpeners = emailFilter.getLastAttachmentOpeners(); if (lastAttachmentOpeners != null) { - query.append(" AND (E." + Email.PROPERTY_LAST_ATTACHMENT_OPENER + " in (:" + EmailFilter.PROPERTY_LAST_ATTACHMENT_OPENERS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_ATTACHMENT_OPENER + " in (:" + EmailFilter.PROPERTY_LAST_ATTACHMENT_OPENERS + ")"); args.put(EmailFilter.PROPERTY_LAST_ATTACHMENT_OPENERS, lastAttachmentOpeners); if (lastAttachmentOpeners.contains(null)) { - query.append(" OR E." + Email.PROPERTY_LAST_ATTACHMENT_OPENER + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_ATTACHMENT_OPENER + " IS NULL"); } query.append(")"); } Set<FaxToMailUser> lastPrintingUsers = emailFilter.getLastPrintingUsers(); if (lastPrintingUsers != null) { - query.append(" AND (E." + Email.PROPERTY_LAST_PRINTING_USER + " in (:" + EmailFilter.PROPERTY_LAST_PRINTING_USERS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_PRINTING_USER + " in (:" + EmailFilter.PROPERTY_LAST_PRINTING_USERS + ")"); args.put(EmailFilter.PROPERTY_LAST_PRINTING_USERS, lastPrintingUsers); if (lastPrintingUsers.contains(null)) { - query.append(" OR E." + Email.PROPERTY_LAST_PRINTING_USER + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_PRINTING_USER + " IS NULL"); } query.append(")"); } Set<Date> lastPrintingDates = emailFilter.getLastPrintingDates(); if (lastPrintingDates != null) { - query.append(" AND (E." + Email.PROPERTY_LAST_PRINTING_DATE + " in (:" + EmailFilter.PROPERTY_LAST_PRINTING_DATES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_PRINTING_DATE + " in (:" + EmailFilter.PROPERTY_LAST_PRINTING_DATES + ")"); args.put(EmailFilter.PROPERTY_LAST_PRINTING_DATES, lastPrintingDates); if (lastPrintingDates.contains(null)) { - query.append(" OR E." + Email.PROPERTY_LAST_PRINTING_DATE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_PRINTING_DATE + " IS NULL"); } query.append(")"); } Set<String> recipients = emailFilter.getRecipients(); if (recipients != null) { - query.append(" AND (E." + Email.PROPERTY_RECIPIENT + " in (:" + EmailFilter.PROPERTY_RECIPIENTS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RECIPIENT + " in (:" + EmailFilter.PROPERTY_RECIPIENTS + ")"); args.put(EmailFilter.PROPERTY_RECIPIENTS, recipients); if (recipients.contains(null)) { - query.append(" OR E." + Email.PROPERTY_RECIPIENT + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RECIPIENT + " IS NULL"); } query.append(")"); } Set<Priority> priorities = emailFilter.getPriorities(); if (priorities != null) { - query.append(" AND (E." + Email.PROPERTY_PRIORITY + " in (:" + EmailFilter.PROPERTY_PRIORITIES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PRIORITY + " in (:" + EmailFilter.PROPERTY_PRIORITIES + ")"); args.put(EmailFilter.PROPERTY_PRIORITIES, priorities); if (priorities.contains(null)) { - query.append(" OR E." + Email.PROPERTY_PRIORITY + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PRIORITY + " IS NULL"); } query.append(")"); } Set<Range> ranges = emailFilter.getRanges(); if (CollectionUtils.isNotEmpty(ranges)) { - query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))" + query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))" + " AND (select count(*) FROM " + RangeRow.class.getName() + " RR" - + " WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ") AND RR." + RangeRow.PROPERTY_RANGE + + " WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ") AND RR." + RangeRow.PROPERTY_RANGE + " IN (:" + EmailFilter.PROPERTY_RANGES + ")"); query.append(") > 0"); if (ranges.contains(null)) { - query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))"); + query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))"); } query.append("))"); @@ -873,13 +904,13 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Set<Long> productQuantities = emailFilter.getProductsQuantities(); if (CollectionUtils.isNotEmpty(productQuantities)) { - query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))" + query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))" + " AND (select sum(RR." + RangeRow.PROPERTY_PRODUCT_QUANTITY + ") " + - "FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + "FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query.append(") IN (:" + EmailFilter.PROPERTY_PRODUCT_QUANTITIES + ")"); if (productQuantities.contains(null) || productQuantities.contains(0L)) { - query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))"); + query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))"); } query.append("))"); @@ -888,13 +919,13 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Set<Long> savQuantities = emailFilter.getSavQuantities(); if (CollectionUtils.isNotEmpty(savQuantities)) { - query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))" + query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))" + " AND (select sum(RR." + RangeRow.PROPERTY_SAV_QUANTITY + ") " + - "FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + "FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query.append(") IN (:" + EmailFilter.PROPERTY_SAV_QUANTITIES + ")"); if (savQuantities.contains(null) || savQuantities.contains(0L)) { - query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))"); + query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))"); } query.append("))"); @@ -903,13 +934,13 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Set<Long> quotationQuantities = emailFilter.getQuotationQuantities(); if (CollectionUtils.isNotEmpty(quotationQuantities)) { - query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))" + query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))" + " AND (select sum(RR." + RangeRow.PROPERTY_QUOTATION_QUANTITY + ") " + - "FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + "FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query.append(") IN (:" + EmailFilter.PROPERTY_QUOTATION_QUANTITIES + ")"); if (quotationQuantities.contains(null) || quotationQuantities.contains(0L)) { - query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))"); + query.append(" OR NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))"); } query.append("))"); @@ -918,58 +949,58 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Set<String> projectReferences = emailFilter.getProjectReferences(); if (projectReferences != null) { - query.append(" AND (E." + Email.PROPERTY_PROJECT_REFERENCE + " in (:" + EmailFilter.PROPERTY_PROJECT_REFERENCES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PROJECT_REFERENCE + " in (:" + EmailFilter.PROPERTY_PROJECT_REFERENCES + ")"); args.put(EmailFilter.PROPERTY_PROJECT_REFERENCES, projectReferences); if (projectReferences.contains(null)) { - query.append(" OR E." + Email.PROPERTY_PROJECT_REFERENCE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_PROJECT_REFERENCE + " IS NULL"); } query.append(")"); } Set<String> localReferences = emailFilter.getLocalReferences(); if (localReferences != null) { - query.append(" AND (E." + Email.PROPERTY_COMPANY_REFERENCE + " in (:" + EmailFilter.PROPERTY_LOCAL_REFERENCES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + " in (:" + EmailFilter.PROPERTY_LOCAL_REFERENCES + ")"); args.put(EmailFilter.PROPERTY_LOCAL_REFERENCES, localReferences); if (localReferences.contains(null)) { - query.append(" OR E." + Email.PROPERTY_COMPANY_REFERENCE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + " IS NULL"); } query.append(")"); } Set<String> references = emailFilter.getReferences(); if (references != null) { - query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + ")"); + query.append(" AND ((EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + ")"); query.append(" AND RR." + RangeRow.PROPERTY_COMMAND_NUMBER + " IN (:" + EmailFilter.PROPERTY_LOCAL_REFERENCES + "))"); - query.append(" OR E." + Email.PROPERTY_COMPANY_REFERENCE + " IN (:" + EmailFilter.PROPERTY_LOCAL_REFERENCES + ")"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + " IN (:" + EmailFilter.PROPERTY_LOCAL_REFERENCES + ")"); args.put(EmailFilter.PROPERTY_LOCAL_REFERENCES, references); if (references.contains(null)) { - query.append(" OR (NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(E." + Email.PROPERTY_RANGE_ROW + "))"); - query.append(" AND E." + Email.PROPERTY_COMPANY_REFERENCE + " IS NULL)"); + query.append(" OR (NOT EXISTS (FROM " + RangeRow.class.getName() + " RR WHERE RR in elements(" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_RANGE_ROW + "))"); + query.append(" AND " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE + " IS NULL)"); } query.append("))"); } Set<WaitingState> waitingStates = emailFilter.getWaitingStates(); if (waitingStates != null) { - query.append(" AND (E." + Email.PROPERTY_WAITING_STATE + " in (:" + EmailFilter.PROPERTY_WAITING_STATES + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_WAITING_STATE + " in (:" + EmailFilter.PROPERTY_WAITING_STATES + ")"); args.put(EmailFilter.PROPERTY_WAITING_STATES, waitingStates); if (waitingStates.contains(null)) { - query.append(" OR E." + Email.PROPERTY_WAITING_STATE + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_WAITING_STATE + " IS NULL"); } query.append(")"); } Set<String> subjects = emailFilter.getSubjects(); if (subjects != null) { - query.append(" AND (E." + Email.PROPERTY_SUBJECT + " in (:" + EmailFilter.PROPERTY_SUBJECTS + ")"); + query.append(" AND (" + EMAIL_IDENTIFIER + "." + Email.PROPERTY_SUBJECT + " in (:" + EmailFilter.PROPERTY_SUBJECTS + ")"); args.put(EmailFilter.PROPERTY_SUBJECTS, subjects); if (subjects.contains(null)) { - query.append(" OR E." + Email.PROPERTY_SUBJECT + " IS NULL"); + query.append(" OR " + EMAIL_IDENTIFIER + "." + Email.PROPERTY_SUBJECT + " IS NULL"); } query.append(")"); } diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/MailField.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/MailField.java index fcd2c25..0056018 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/MailField.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/MailField.java @@ -31,35 +31,45 @@ package com.franciaflex.faxtomail.persistence.entities; */ public enum MailField { - OBJECT, - PROJECT_REFERENCE, - PRIORITY, - RANGE_ROW, - CLIENT, - WAITING_STATE, - COMPANY_REFERENCE, - COMMENT, - DEMAND_TYPE, - CLIENT_CODE, - CLIENT_NAME, - CLIENT_BRAND, - SENDER, - REFERENCE, - RECEPTION_DATE, - RECIPIENT, - DEMAND_STATUS, - PF_NB, - SAV_NB, - QUOTATION_NB, - TAKEN_BY, - LAST_ATTACHMENT_OPENING_IN_THIS_FOLDER_USER, - REPLIES, - ATTACHMENT, - GROUP, - EDI_RETURN, - SUBJECT, - LAST_PRINTING_USER, - LAST_PRINTING_DATE; + OBJECT(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_OBJECT), + PROJECT_REFERENCE(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_PROJECT_REFERENCE), + PRIORITY(EmailTopiaDao.PRIORITY_IDENTIFIER + "." + Priority.PROPERTY_LABEL), + RANGE_ROW(null), + CLIENT(null), + WAITING_STATE(EmailTopiaDao.WAITING_STATE_IDENTIFIER + "." + WaitingState.PROPERTY_LABEL), + COMPANY_REFERENCE(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMPANY_REFERENCE), + COMMENT(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_COMMENT), + DEMAND_TYPE(EmailTopiaDao.DEMAND_TYPE_IDENTIFIER + "." + DemandType.PROPERTY_LABEL), + CLIENT_CODE(EmailTopiaDao.CLIENT_IDENTIFIER + "." + Client.PROPERTY_CODE), + CLIENT_NAME(EmailTopiaDao.CLIENT_IDENTIFIER + "." + Client.PROPERTY_NAME), + CLIENT_BRAND(EmailTopiaDao.CLIENT_IDENTIFIER + "." + Client.PROPERTY_BRAND), + SENDER(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_SENDER), + REFERENCE(null), + RECEPTION_DATE(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_RECEPTION_DATE), + RECIPIENT(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_RECIPIENT), + DEMAND_STATUS(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_DEMAND_STATUS), + PF_NB("SUM(" + EmailTopiaDao.RANGE_ROW_IDENTIFIER + "." + RangeRow.PROPERTY_PRODUCT_QUANTITY + ")"), + SAV_NB("SUM(" + EmailTopiaDao.RANGE_ROW_IDENTIFIER + "." + RangeRow.PROPERTY_SAV_QUANTITY + ")"), + QUOTATION_NB("SUM(" + EmailTopiaDao.RANGE_ROW_IDENTIFIER + "." + RangeRow.PROPERTY_QUOTATION_QUANTITY + ")"), + TAKEN_BY(EmailTopiaDao.TAKEN_BY_IDENTIFIER + "." + FaxToMailUser.PROPERTY_TRIGRAPH), + LAST_ATTACHMENT_OPENING_IN_THIS_FOLDER_USER(EmailTopiaDao.LAST_ATTACHMENT_OPENER_IDENTIFIER + "." + FaxToMailUser.PROPERTY_TRIGRAPH), + REPLIES("SIZE(" + EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_REPLIES + ")"), + ATTACHMENT("SIZE(" + EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_ATTACHMENT + ")"), + GROUP("SIZE(" + EmailTopiaDao.GROUP_IDENTIFIER + "." + EmailGroup.PROPERTY_EMAIL + ")"), + EDI_RETURN(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_EDI_ERROR), + SUBJECT(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_SUBJECT), + LAST_PRINTING_USER(EmailTopiaDao.LAST_PRINTING_USER_IDENTIFIER + "." + FaxToMailUser.PROPERTY_TRIGRAPH), + LAST_PRINTING_DATE(EmailTopiaDao.EMAIL_IDENTIFIER + "." + Email.PROPERTY_LAST_PRINTING_DATE); + + private String orderProperty; + + MailField(String orderProperty) { + this.orderProperty = orderProperty; + } + + public String getOrderProperty() { + return orderProperty; + } public static MailField[] getCanBeRequiredMailFields() { return new MailField[] { diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java index 26f2c7b..65397c8 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java @@ -295,7 +295,7 @@ public class DemandeListTableFilter extends AbstractTableFilter<JXTable> { @Override public void clear() { super.clear(); - handler.getModel().getEmailFilter().clear(); + handler.getModel().getEmailFilter().clearFilter(); executeFilter(); } @@ -309,7 +309,7 @@ public class DemandeListTableFilter extends AbstractTableFilter<JXTable> { context.setCurrentPaginationParameter(null); } else { - handler.getModel().resetPaginationParameter(); + handler.getModel().resetPaginationParameterPage(); } LoadFolderEmailsAction loadFolderEmailsAction = diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java index 6c29f64..4c8d5fe 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java @@ -45,6 +45,7 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.actions.SaveDemandeFro import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailDemandListHandler; import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import com.franciaflex.faxtomail.ui.swing.util.FilterSortableTableHeaderRenderer; import com.franciaflex.faxtomail.ui.swing.util.FolderTreeNode; import com.franciaflex.faxtomail.ui.swing.util.PaginationComboModel; import com.franciaflex.faxtomail.ui.swing.util.RemoveablePropertyChangeListener; @@ -62,6 +63,8 @@ import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.ComponentAdapter; import org.jdesktop.swingx.decorator.HighlightPredicate; +import org.jdesktop.swingx.table.TableColumnExt; +import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.swing.action.ApplicationUIAction; import org.nuiton.jaxx.application.swing.util.CloseableUI; @@ -90,6 +93,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.IntrospectionException; import java.beans.PropertyChangeEvent; @@ -102,6 +106,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Objects; /** * Handler of UI {@link com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler}. @@ -184,7 +189,7 @@ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<Dem initUI(ui); - DemandeListUIModel model = getModel(); + final DemandeListUIModel model = getModel(); // init table final JXTable dataTable = getUI().getDataTable(); @@ -210,15 +215,36 @@ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<Dem } }; + FilterSortableTableHeaderRenderer tableHeaderRenderer = new FilterSortableTableHeaderRenderer(tableFilter, model); TableRowFilterSupport.forFilter(tableFilter) .searchable(true) .searchDecorator(decorator) .useTableRenderers(true) .setPopupDefaultSize(new Dimension(250, 290)) + .setTableHeaderRenderer(tableHeaderRenderer) .apply(); updateEmailFilterWithContextEmailFilter(); + dataTable.getTableHeader().addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + if (model.isCanSortResults()) { + TableColumnModelExt colModel = (TableColumnModelExt) dataTable.getColumnModel(); + int vColumnIndex = colModel.getColumnIndexAtX(e.getX()); + TableColumnExt column = colModel.getColumnExt(vColumnIndex); + MailField mailField = DemandeTableModel.COLUMN_IDENTIFIERS.inverse().get(column.getIdentifier()); + if (mailField.getOrderProperty() != null) { + boolean changeSortOrder = Objects.equals(model.getOrderByMailField(), mailField); + model.setOrderByMailField(mailField); + model.setOrderDesc(changeSortOrder && !model.isOrderDesc()); + tableFilter.executeFilter(); + } + } + } + }); + dataTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override @@ -341,6 +367,18 @@ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<Dem } }); + model.addPropertyChangeListener(DemandeListUIModel.PROPERTY_CAN_SORT_RESULTS, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + boolean canSortResults = (boolean) evt.getNewValue(); + if (!canSortResults) { + model.setOrderByMailField(MailField.RECEPTION_DATE); + model.setOrderDesc(false); + } + } + }); + // int combo box for result per page ui.getResultPerPageCombo().setModel(new PaginationComboModel()); int resultPerPage = getConfig().getResultPerPage(); @@ -389,7 +427,7 @@ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<Dem EmailFilter contextEmailFilter = getContext().getEmailFilter(); EmailFilter currentEmailFilter = getModel().getEmailFilter(); - currentEmailFilter.clear(); + currentEmailFilter.clearFilter(); List<MailField> fields = getColumns(); if (CollectionUtils.isEmpty(fields)) { @@ -561,21 +599,29 @@ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<Dem folder = model.getSelectedFolder(); if (folder != null) { - while (!folder.isUseCurrentLevelNbElementToDisplay() - && folder.getParent() != null) { - folder = folder.getParent(); + MailFolder folderWithNbElementToDisplay = folder; + while (!folderWithNbElementToDisplay.isUseCurrentLevelNbElementToDisplay() + && folderWithNbElementToDisplay.getParent() != null) { + folderWithNbElementToDisplay = folderWithNbElementToDisplay.getParent(); } - boolean enableChangeResultPerPage = folder.getNbElementToDisplay() == null; + boolean enableChangeResultPerPage = folderWithNbElementToDisplay.getNbElementToDisplay() == null; model.setEnableChangeResultPerPage(enableChangeResultPerPage); int resultPerPage; if (!enableChangeResultPerPage) { - resultPerPage = folder.getNbElementToDisplay(); + resultPerPage = folderWithNbElementToDisplay.getNbElementToDisplay(); } else { resultPerPage = getConfig().getResultPerPage(); } model.setResultPerPage(resultPerPage); ui.getResultPerPageCombo().setSelectedItem(resultPerPage); + + MailFolder folderWithCanChangeOrderInTable = folder; + while (folderWithCanChangeOrderInTable.getCanChangeOrderInTable() == null + && folderWithCanChangeOrderInTable.getParent() != null) { + folderWithCanChangeOrderInTable = folderWithCanChangeOrderInTable.getParent(); + } + model.setCanSortResults(Boolean.TRUE.equals(folderWithCanChangeOrderInTable.getCanChangeOrderInTable())); } tableFilter.executeFilter(); @@ -598,7 +644,7 @@ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<Dem model.setResultPerPage(resultPerPage); getConfig().setResultPerPage(resultPerPage); getConfig().save(); - model.resetPaginationParameter(); + model.resetPaginationParameterPage(); runListAction(); } } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java index d61d6e4..bc50c19 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java @@ -24,6 +24,7 @@ package com.franciaflex.faxtomail.ui.swing.content.demande; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.EmailFilter; +import com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import org.jdesktop.beans.AbstractSerializableBean; import org.nuiton.util.pagination.PaginationParameter; @@ -58,7 +59,10 @@ public class DemandeListUIModel extends AbstractSerializableBean { public static final String PROPERTY_COMPUTE_QUANTITIES_BY_RANGE_ENABLED = "computeQuantitiesByRangeEnabled"; public static final String PROPERTY_NEW_DEMAND_ENABLED = "newDemandEnabled"; public static final String PROPERTY_RESULT_PER_PAGE = "resultPerPage"; + public static final String PROPERTY_ORDER_BY_MAILFIELD = "orderByMailField"; + public static final String PROPERTY_ORDER_DESC = "orderDesc"; public static final String PROPERTY_ENABLE_CHANGE_RESULT_PER_PAGE = "enableChangeResultPerPage"; + public static final String PROPERTY_CAN_SORT_RESULTS = "canSortResults"; protected List<MailFolder> folders; @@ -68,8 +72,14 @@ public class DemandeListUIModel extends AbstractSerializableBean { protected int resultPerPage = 50; + protected MailField orderByMailField = MailField.RECEPTION_DATE; + + protected boolean orderDesc = false; + protected boolean enableChangeResultPerPage = true; + protected boolean canSortResults = false; + protected PaginationParameter paginationParameter = PaginationParameter.of(0, resultPerPage, Email.PROPERTY_TOPIA_CREATE_DATE, false); protected PaginationResult<Email> paginationResult = PaginationResult.of(null, 0, paginationParameter); @@ -133,17 +143,16 @@ public class DemandeListUIModel extends AbstractSerializableBean { } public void setPaginationParameter(PaginationParameter paginationParameter) { - PaginationParameter oldValue = this.paginationParameter; this.paginationParameter = paginationParameter; - firePropertyChange(PROPERTY_PAGINATION_PARAMETER, oldValue, paginationParameter); + firePropertyChange(PROPERTY_PAGINATION_PARAMETER, null, paginationParameter); } public PaginationParameter getPaginationParameter() { return paginationParameter; } - - public void resetPaginationParameter() { - setPaginationParameter(PaginationParameter.of(0, resultPerPage, Email.PROPERTY_RECEPTION_DATE, false)); + + public void resetPaginationParameterPage() { + setPaginationParameter(PaginationParameter.of(0, resultPerPage, orderByMailField.getOrderProperty(), orderDesc)); } public void setPaginationResult(PaginationResult<Email> paginationResult) { @@ -341,6 +350,26 @@ public class DemandeListUIModel extends AbstractSerializableBean { return resultPerPage; } + public MailField getOrderByMailField() { + return orderByMailField; + } + + public void setOrderByMailField(MailField orderByMailField) { + Object oldValue = getOrderByMailField(); + this.orderByMailField = orderByMailField; + firePropertyChange(PROPERTY_ORDER_BY_MAILFIELD, oldValue, orderByMailField); + } + + public boolean isOrderDesc() { + return orderDesc; + } + + public void setOrderDesc(boolean orderDesc) { + Object oldValue = isOrderDesc(); + this.orderDesc = orderDesc; + firePropertyChange(PROPERTY_ORDER_DESC, oldValue, orderDesc); + } + public boolean isEnableChangeResultPerPage() { return enableChangeResultPerPage; } @@ -354,4 +383,13 @@ public class DemandeListUIModel extends AbstractSerializableBean { public boolean isDisplayOnlyUserTrigraphInTables() { return Boolean.TRUE.equals(displayOnlyUserTrigraphInTables); } + + public boolean isCanSortResults() { + return canSortResults; + } + + public void setCanSortResults(boolean canSortResults) { + this.canSortResults = canSortResults; + firePropertyChange(PROPERTY_CAN_SORT_RESULTS, null, canSortResults); + } } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java index 10fde07..c0d97c9 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java @@ -94,7 +94,15 @@ public class LoadFolderEmailsAction extends AbstractFaxToMailAction<DemandeListU // change name to save the state of the column width for every folder // (as every folder can have a different header) getContext().getSwingSession().updateState(); - String columns = handler.populateColumnModel(dataTable, false); + + MailFolder folderWithCanChangeOrderInTable = folder; + while (folderWithCanChangeOrderInTable.getCanChangeOrderInTable() == null + && folderWithCanChangeOrderInTable.getParent() != null) { + folderWithCanChangeOrderInTable = folderWithCanChangeOrderInTable.getParent(); + } + boolean sortable = Boolean.TRUE.equals(folderWithCanChangeOrderInTable.getCanChangeOrderInTable()); + String columns = handler.populateColumnModel(dataTable, sortable); + dataTable.setName("dataTable" + columns); getContext().getSwingSession().add(dataTable, true); diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeTableModel.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeTableModel.java index 41242a7..ee6149f 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeTableModel.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeTableModel.java @@ -27,6 +27,8 @@ import com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -41,9 +43,7 @@ import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Set; import static org.nuiton.i18n.I18n.n; @@ -58,176 +58,177 @@ public class DemandeTableModel extends AbstractTableModel { private static final Log log = LogFactory.getLog(DemandeTableModel.class); - public static final Map<MailField, ColumnIdentifier<Email>> COLUMN_IDENTIFIERS = new HashMap<MailField, ColumnIdentifier<Email>>() {{ - put(MailField.SENDER, + public static final BiMap<MailField, ColumnIdentifier<Email>> COLUMN_IDENTIFIERS = HashBiMap.create(MailField.values().length); + static { + COLUMN_IDENTIFIERS.put(MailField.SENDER, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_SENDER, n("faxtomail.demandeList.table.header.sender"), n("faxtomail.demandeList.table.header.sender.tip"))); - put(MailField.OBJECT, + COLUMN_IDENTIFIERS.put(MailField.OBJECT, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_OBJECT, n("faxtomail.demandeList.table.header.object"), n("faxtomail.demandeList.table.header.object.tip"))); - put(MailField.RECEPTION_DATE, + COLUMN_IDENTIFIERS.put(MailField.RECEPTION_DATE, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_RECEPTION_DATE, n("faxtomail.demandeList.table.header.receptionDate"), n("faxtomail.demandeList.table.header.receptionDate.tip"))); - put(MailField.RECIPIENT, + COLUMN_IDENTIFIERS.put(MailField.RECIPIENT, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_RECIPIENT, n("faxtomail.demandeList.table.header.recipient"), n("faxtomail.demandeList.table.header.recipient.tip"))); - put(MailField.CLIENT_CODE, + COLUMN_IDENTIFIERS.put(MailField.CLIENT_CODE, ColumnIdentifier.<Email>newReadOnlyId( DemandeUIModel.PROPERTY_CLIENT_CODE, n("faxtomail.demandeList.table.header.clientCode"), n("faxtomail.demandeList.table.header.clientCode.tip"))); - put(MailField.CLIENT_NAME, + COLUMN_IDENTIFIERS.put(MailField.CLIENT_NAME, ColumnIdentifier.<Email>newReadOnlyId( DemandeUIModel.PROPERTY_CLIENT_NAME, n("faxtomail.demandeList.table.header.clientName"), n("faxtomail.demandeList.table.header.clientName.tip"))); - put(MailField.CLIENT_BRAND, + COLUMN_IDENTIFIERS.put(MailField.CLIENT_BRAND, ColumnIdentifier.<Email>newReadOnlyId( DemandeUIModel.PROPERTY_CLIENT_BRAND, n("faxtomail.demandeList.table.header.brand"), n("faxtomail.demandeList.table.header.brand.tip"))); - put(MailField.DEMAND_STATUS, + COLUMN_IDENTIFIERS.put(MailField.DEMAND_STATUS, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_DEMAND_STATUS, n("faxtomail.demandeList.table.header.status"), n("faxtomail.demandeList.table.header.status.tip"))); - put(MailField.DEMAND_TYPE, + COLUMN_IDENTIFIERS.put(MailField.DEMAND_TYPE, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_DEMAND_TYPE, n("faxtomail.demandeList.table.header.type"), n("faxtomail.demandeList.table.header.type.tip"))); - put(MailField.EDI_RETURN, + COLUMN_IDENTIFIERS.put(MailField.EDI_RETURN, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_EDI_ERROR, n("faxtomail.demandeList.table.header.ediCodeNumber"), n("faxtomail.demandeList.table.header.ediCodeNumber.tip"))); - put(MailField.WAITING_STATE, + COLUMN_IDENTIFIERS.put(MailField.WAITING_STATE, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_WAITING_STATE, n("faxtomail.demandeList.table.header.waitingState"), n("faxtomail.demandeList.table.header.waitingState.tip"))); - put(MailField.TAKEN_BY, + COLUMN_IDENTIFIERS.put(MailField.TAKEN_BY, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_TAKEN_BY, n("faxtomail.demandeList.table.header.user"), n("faxtomail.demandeList.table.header.user.tip"))); - put(MailField.PRIORITY, + COLUMN_IDENTIFIERS.put(MailField.PRIORITY, ColumnIdentifier.<Email>newId( Email.PROPERTY_PRIORITY, n("faxtomail.demandeList.table.header.priority"), n("faxtomail.demandeList.table.header.priority.tip"))); - put(MailField.PROJECT_REFERENCE, + COLUMN_IDENTIFIERS.put(MailField.PROJECT_REFERENCE, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_PROJECT_REFERENCE, n("faxtomail.demandeList.table.header.projectReference"), n("faxtomail.demandeList.table.header.projectReference.tip"))); - put(MailField.COMPANY_REFERENCE, + COLUMN_IDENTIFIERS.put(MailField.COMPANY_REFERENCE, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_COMPANY_REFERENCE, n("faxtomail.demandeList.table.header.companyReference"), n("faxtomail.demandeList.table.header.companyReference.tip"))); - put(MailField.REFERENCE, + COLUMN_IDENTIFIERS.put(MailField.REFERENCE, ColumnIdentifier.<Email>newReadOnlyId( DemandeUIModel.PROPERTY_REFERENCE, n("faxtomail.demandeList.table.header.reference"), n("faxtomail.demandeList.table.header.reference.tip"))); - put(MailField.RANGE_ROW, + COLUMN_IDENTIFIERS.put(MailField.RANGE_ROW, ColumnIdentifier.<Email>newReadOnlyId( Email.PROPERTY_RANGE_ROW, n("faxtomail.demandeList.table.header.range"), n("faxtomail.demandeList.table.header.range.tip"))); - put(MailField.PF_NB, + COLUMN_IDENTIFIERS.put(MailField.PF_NB, ColumnIdentifier.<Email>newReadOnlyId( DemandeUIModel.PROPERTY_PF_NB, n("faxtomail.demandeList.table.header.pfNb"), n("faxtomail.demandeList.table.header.pfNb.tip"))); - put(MailField.SAV_NB, + COLUMN_IDENTIFIERS.put(MailField.SAV_NB, ColumnIdentifier.<Email>newReadOnlyId( DemandeUIModel.PROPERTY_SAV_NB, n("faxtomail.demandeList.table.header.savNb"), n("faxtomail.demandeList.table.header.savNb.tip"))); - put(MailField.QUOTATION_NB, + COLUMN_IDENTIFIERS.put(MailField.QUOTATION_NB, ColumnIdentifier.<Email>newReadOnlyId( DemandeUIModel.PROPERTY_QUOTATION_NB, n("faxtomail.demandeList.table.header.quotationNb"), n("faxtomail.demandeList.table.header.quotationNb.tip"))); - put(MailField.REPLIES, + COLUMN_IDENTIFIERS.put(MailField.REPLIES, ColumnIdentifier.<Email>newId( Email.PROPERTY_REPLIES, n("faxtomail.demandeList.table.header.replies"), n("faxtomail.demandeList.table.header.replies.tip"))); - put(MailField.ATTACHMENT, + COLUMN_IDENTIFIERS.put(MailField.ATTACHMENT, ColumnIdentifier.<Email>newId( Email.PROPERTY_ATTACHMENT, n("faxtomail.demandeList.table.header.attachment"), n("faxtomail.demandeList.table.header.attachment.tip"))); - put(MailField.GROUP, + COLUMN_IDENTIFIERS.put(MailField.GROUP, ColumnIdentifier.<Email>newId( DemandeUIModel.PROPERTY_GROUPED_DEMANDES, n("faxtomail.demandeList.table.header.emailGroup"), n("faxtomail.demandeList.table.header.emailGroup.tip"))); - put(MailField.LAST_ATTACHMENT_OPENING_IN_THIS_FOLDER_USER, + COLUMN_IDENTIFIERS.put(MailField.LAST_ATTACHMENT_OPENING_IN_THIS_FOLDER_USER, ColumnIdentifier.<Email>newId( Email.PROPERTY_LAST_ATTACHMENT_OPENER, n("faxtomail.demandeList.table.header.lastAttachmentOpeningUser"), n("faxtomail.demandeList.table.header.lastAttachmentOpeningUser.tip"))); - put(MailField.COMMENT, + COLUMN_IDENTIFIERS.put(MailField.COMMENT, ColumnIdentifier.<Email>newId( Email.PROPERTY_COMMENT, n("faxtomail.demandeList.table.header.comment"), n("faxtomail.demandeList.table.header.comment.tip"))); - put(MailField.SUBJECT, + COLUMN_IDENTIFIERS.put(MailField.SUBJECT, ColumnIdentifier.<Email>newId( Email.PROPERTY_SUBJECT, n("faxtomail.demandeList.table.header.subject"), n("faxtomail.demandeList.table.header.subject.tip"))); - put(MailField.LAST_PRINTING_USER, + COLUMN_IDENTIFIERS.put(MailField.LAST_PRINTING_USER, ColumnIdentifier.<Email>newId( Email.PROPERTY_LAST_PRINTING_USER, n("faxtomail.demandeList.table.header.lastPrintingUser"), n("faxtomail.demandeList.table.header.lastPrintingUser.tip"))); - put(MailField.LAST_PRINTING_DATE, + COLUMN_IDENTIFIERS.put(MailField.LAST_PRINTING_DATE, ColumnIdentifier.<Email>newId( Email.PROPERTY_LAST_PRINTING_DATE, n("faxtomail.demandeList.table.header.lastPrintingDate"), n("faxtomail.demandeList.table.header.lastPrintingDate.tip"))); - }}; + }; public DemandeTableModel(TableColumnModelExt columnModel, MailField... editableProperties) { diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FilterSortableTableHeaderRenderer.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FilterSortableTableHeaderRenderer.java new file mode 100644 index 0000000..2df6191 --- /dev/null +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FilterSortableTableHeaderRenderer.java @@ -0,0 +1,73 @@ +package com.franciaflex.faxtomail.ui.swing.util; + +import com.franciaflex.faxtomail.persistence.entities.MailField; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; +import jaxx.runtime.swing.CompoundIcon; +import jaxx.runtime.swing.JAXXWidgetUtil; +import jaxx.runtime.swing.table.filter.FilterTableHeaderRenderer; +import jaxx.runtime.swing.table.filter.TableFilter; +import org.jdesktop.swingx.table.TableColumnExt; +import org.jdesktop.swingx.table.TableColumnModelExt; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JTable; +import java.awt.Component; +import java.awt.Image; + +/** + * @author Kevin Morin (Code Lutin) + * @since 2.4 + */ +public class FilterSortableTableHeaderRenderer extends FilterTableHeaderRenderer { + + protected final DemandeListUIModel demandeListUIModel; + + protected final ImageIcon sortAscIcon; + protected final ImageIcon sortDescIcon; + + public FilterSortableTableHeaderRenderer(TableFilter<?> tableFilter, DemandeListUIModel demandeListUIModel) { + super(tableFilter); + this.demandeListUIModel = demandeListUIModel; + + ImageIcon icon = JAXXWidgetUtil.createImageIcon("sort_table_asc.png"); + sortAscIcon = new ImageIcon(icon.getImage().getScaledInstance(12, 12, Image.SCALE_SMOOTH)); + + icon = JAXXWidgetUtil.createImageIcon("sort_table_desc.png"); + sortDescIcon = new ImageIcon(icon.getImage().getScaledInstance(12, 12, Image.SCALE_SMOOTH)); + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, + boolean hasFocus, int row, int column) { + + TableColumnModelExt colModel = (TableColumnModelExt) table.getColumnModel(); + TableColumnExt columnExt = colModel.getColumnExt(column); + MailField mailField = DemandeTableModel.COLUMN_IDENTIFIERS.inverse().get(columnExt.getIdentifier()); + + boolean focusCell = hasFocus && mailField.getOrderProperty() != null; + final JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, focusCell, row, column); + + if (demandeListUIModel.getOrderByMailField() != null + && demandeListUIModel.getOrderByMailField().equals(mailField)) { + + Icon originalIcon = label.getIcon(); + Icon sortIcon; + if (demandeListUIModel.isOrderDesc()) { + sortIcon = sortDescIcon; + } else { + sortIcon = sortAscIcon; + } + if (originalIcon == null) { + label.setIcon(sortIcon); + } else { + label.setIcon(new CompoundIcon(sortIcon, originalIcon)); + } + label.setHorizontalTextPosition(JLabel.TRAILING); + } + + return label; + } + +} diff --git a/faxtomail-ui-swing/src/main/resources/icons/sort_table_asc.png b/faxtomail-ui-swing/src/main/resources/icons/sort_table_asc.png new file mode 100644 index 0000000..3f19917 Binary files /dev/null and b/faxtomail-ui-swing/src/main/resources/icons/sort_table_asc.png differ diff --git a/faxtomail-ui-swing/src/main/resources/icons/sort_table_desc.png b/faxtomail-ui-swing/src/main/resources/icons/sort_table_desc.png new file mode 100644 index 0000000..db263fe Binary files /dev/null and b/faxtomail-ui-swing/src/main/resources/icons/sort_table_desc.png differ diff --git a/faxtomail-ui-web/src/main/webapp/js/configuration.js b/faxtomail-ui-web/src/main/webapp/js/configuration.js index 13b7b7a..c603c50 100644 --- a/faxtomail-ui-web/src/main/webapp/js/configuration.js +++ b/faxtomail-ui-web/src/main/webapp/js/configuration.js @@ -921,7 +921,7 @@ ConfigurationModule.controller('ConfigurationTreeController', ['$scope', '$windo if (angular.isUndefined($scope.parentScopeValues.company)) { $scope.parentScopeValues.company = folder.company; } - if ((!$scope.parentScopeValues.folderTableColumns || $scope.parentScopeValues.folderTableColumns.length == 0) && folder.folderTableColumns) { + if ((!$scope.parentScDeopeValues.folderTableColumns || $scope.parentScopeValues.folderTableColumns.length == 0) && folder.folderTableColumns) { $scope.parentScopeValues.folderTableColumns = folder.folderTableColumns; } if (angular.isUndefined($scope.parentScopeValues.displayOnlyUserTrigraphInTables)) { diff --git a/pom.xml b/pom.xml index 238475f..fad7a54 100644 --- a/pom.xml +++ b/pom.xml @@ -109,11 +109,11 @@ <h2Version>1.3.176</h2Version> <guavaVersion>18.0</guavaVersion> - <jaxxVersion>2.38</jaxxVersion> + <jaxxVersion>2.43-SNAPSHOT</jaxxVersion> <!-- do not upgrade to 1.6.5-1 --> <swingXVersion>1.6.4</swingXVersion> <xworkVersion>2.3.16.3</xworkVersion> - <struts2Version>2.3.16.3</struts2Version> + <struts2Version>2.3.32</struts2Version> <jqueryPluginVersion>3.7.1</jqueryPluginVersion> <bootstrapPluginVersion>2.0.0</bootstrapPluginVersion> <slf4jVersion>1.7.7</slf4jVersion> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 5ace615b669f062e776f5476ccbcac5c90c95687 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:44:59 2017 +0100 add license header --- .../util/FilterSortableTableHeaderRenderer.java | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FilterSortableTableHeaderRenderer.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FilterSortableTableHeaderRenderer.java index 2df6191..48ed28d 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FilterSortableTableHeaderRenderer.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FilterSortableTableHeaderRenderer.java @@ -1,5 +1,29 @@ package com.franciaflex.faxtomail.ui.swing.util; +/*- + * #%L + * FaxToMail :: UI + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2014 - 2017 Mac-Groupe, Code Lutin + * %% + * 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 com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; import jaxx.runtime.swing.CompoundIcon; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 027559885ecf9f7869d67baac0e65f3507c02818 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 28 11:06:13 2017 +0200 refs #9099 enregistrement du tri pour chaque dossier --- .../faxtomail/ui/swing/FaxToMailUIContext.java | 3 + .../demande/actions/LoadFolderEmailsAction.java | 3 + .../swing/util/DemandeListUISwingSessionState.java | 75 ++++++++++++++++++++++ 3 files changed, 81 insertions(+) diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java index e578793..50b5465 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java @@ -40,8 +40,10 @@ import com.franciaflex.faxtomail.services.service.UserService; import com.franciaflex.faxtomail.services.service.ldap.AuthenticationException; import com.franciaflex.faxtomail.services.service.ldap.Contact; import com.franciaflex.faxtomail.ui.swing.content.MainUI; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.content.search.SearchUIModel; +import com.franciaflex.faxtomail.ui.swing.util.DemandeListUISwingSessionState; import com.franciaflex.faxtomail.ui.swing.util.UIMessageNotifier; import com.franciaflex.faxtomail.ui.swing.util.data.Handler; import com.google.common.base.Preconditions; @@ -272,6 +274,7 @@ public class FaxToMailUIContext extends AbstractBean implements Closeable, UIMes Map<Class, State> additionalStates = Maps.newHashMap(); additionalStates.put(BeanFilterableComboBox.class, new BeanFilterableComboBoxState()); additionalStates.put(BeanDoubleList.class, new BeanDoubleListState()); + additionalStates.put(DemandeListUI.class, new DemandeListUISwingSessionState()); File uiConfigFile = getConfig().getUIConfigFile(); this.swingSession = new SwingSession(uiConfigFile, false, additionalStates); if (!uiConfigFile.exists()) { diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java index c0d97c9..82cefac 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java @@ -105,9 +105,12 @@ public class LoadFolderEmailsAction extends AbstractFaxToMailAction<DemandeListU dataTable.setName("dataTable" + columns); getContext().getSwingSession().add(dataTable, true); + getUI().setName("demandeListUI" + folder.getTopiaId()); + getContext().getSwingSession().add(getUI(), true); // fixes #5528 filtre sur les colonnes : il manque l'icone qui indique que la colonne est filtrée handler.updateEmailFilterWithContextEmailFilter(); + model.resetPaginationParameterPage(); result = true; } } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeListUISwingSessionState.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeListUISwingSessionState.java new file mode 100644 index 0000000..ceef79f --- /dev/null +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeListUISwingSessionState.java @@ -0,0 +1,75 @@ +package com.franciaflex.faxtomail.ui.swing.util; + +import com.franciaflex.faxtomail.persistence.entities.MailField; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; +import jaxx.runtime.swing.session.State; + +/** + * @author Kevin Morin (Code Lutin) + * @since 2.4 + */ +public class DemandeListUISwingSessionState implements State { + + protected MailField orderByMailField = MailField.RECEPTION_DATE; + protected boolean orderDesc = false; + + public DemandeListUISwingSessionState() { + } + + public DemandeListUISwingSessionState(MailField orderByMailField, boolean orderDesc) { + this.orderByMailField = orderByMailField; + this.orderDesc = orderDesc; + } + + public MailField getOrderByMailField() { + return orderByMailField; + } + + public void setOrderByMailField(MailField orderByMailField) { + this.orderByMailField = orderByMailField; + } + + public boolean isOrderDesc() { + return orderDesc; + } + + public void setOrderDesc(boolean orderDesc) { + this.orderDesc = orderDesc; + } + + protected DemandeListUI checkComponent(Object o) { + if (o == null) { + throw new IllegalArgumentException("null component"); + } + if (!(o instanceof DemandeListUI)) { + throw new IllegalArgumentException("invalid component"); + } + return (DemandeListUI) o; + } + + @Override + public State getState(Object o) { + DemandeListUI ui = checkComponent(o); + DemandeListUIModel model = ui.getModel(); + DemandeListUISwingSessionState result = new DemandeListUISwingSessionState(); + + result.setOrderByMailField(model.getOrderByMailField()); + result.setOrderDesc(model.isOrderDesc()); + + return result; + } + + @Override + public void setState(Object o, State state) { + if (!(state instanceof DemandeListUISwingSessionState)) { + throw new IllegalArgumentException("invalid state"); + } + + DemandeListUI ui = checkComponent(o); + DemandeListUIModel model = ui.getModel(); + DemandeListUISwingSessionState demandeListUISwingSessionState = (DemandeListUISwingSessionState) state; + model.setOrderByMailField(demandeListUISwingSessionState.getOrderByMailField()); + model.setOrderDesc(demandeListUISwingSessionState.isOrderDesc()); + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 4247750f730338d1dcc2d0b7cb85348bfbdd84b7 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 28 11:13:19 2017 +0200 ajout du header de license --- .../swing/util/DemandeListUISwingSessionState.java | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeListUISwingSessionState.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeListUISwingSessionState.java index ceef79f..b63c8e9 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeListUISwingSessionState.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeListUISwingSessionState.java @@ -1,5 +1,29 @@ package com.franciaflex.faxtomail.ui.swing.util; +/*- + * #%L + * FaxToMail :: UI + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2014 - 2017 Mac-Groupe, Code Lutin + * %% + * 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 com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/9099_order_on_columns in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 560a49475a97a4c17f5367c275664d2cb4d9007d Author: Kevin Morin <morin@codelutin.com> Date: Thu Mar 30 11:31:26 2017 +0200 refs #9099 merge model + change migrtaion file names --- faxtomail-persistence/src/main/xmi/faxtomail.zargo | Bin 35847 -> 35918 bytes ...=> V2_4_170330_1__add_canChangeOrderInTable.sql} | 0 ...=> V2_4_170330_1__add_canChangeOrderInTable.sql} | 0 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/faxtomail-persistence/src/main/xmi/faxtomail.zargo b/faxtomail-persistence/src/main/xmi/faxtomail.zargo index bfdfe59..87a6572 100644 Binary files a/faxtomail-persistence/src/main/xmi/faxtomail.zargo and b/faxtomail-persistence/src/main/xmi/faxtomail.zargo differ diff --git a/faxtomail-service/src/main/resources/db/migration/h2/V2_4_170317_2__add_canChangeOrderInTable.sql b/faxtomail-service/src/main/resources/db/migration/h2/V2_4_170330_1__add_canChangeOrderInTable.sql similarity index 100% rename from faxtomail-service/src/main/resources/db/migration/h2/V2_4_170317_2__add_canChangeOrderInTable.sql rename to faxtomail-service/src/main/resources/db/migration/h2/V2_4_170330_1__add_canChangeOrderInTable.sql diff --git a/faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170317_2__add_canChangeOrderInTable.sql b/faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170330_1__add_canChangeOrderInTable.sql similarity index 100% rename from faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170317_2__add_canChangeOrderInTable.sql rename to faxtomail-service/src/main/resources/db/migration/sqlserver/V2_4_170330_1__add_canChangeOrderInTable.sql -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm