branch feature/9099_order_on_columns created (now f1e01ea)
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 at f1e01ea add license header This branch includes the following new commits: new a3de618 fixes #9095 le pris par n'est pas enregistré quand on imprime depuis la liste new dbccb2f fix lazy loading new 4dc19e1 suppression code mort new f38d01e fix filter new 8a4d54a refs #9099 ajout de la conf canChangeOrderInTable dans les dossiers new 3e42c20 refs #9099 gestion de la conf canChangeOrderInTable dans la partie admin new b10475f refs #9099 prise en compte de la conf canChangeOrderInTable dans la partie cliente new f1e01ea add license header The 8 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 f1e01ea581e0b14b2b84fb2ba48a820c6b5e559e Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 24 15:44:59 2017 +0100 add license header commit b10475f223837276b2a8a85b2361b04179ba161c 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 3e42c205ec30f2d249864f80a5ca0a6346b976d5 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 8a4d54aa460703b98baf7f59229214ebe95e8e9b 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 f38d01e1ae9d9996a600b117d126af0fec6a5221 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:19:02 2017 +0100 fix filter commit 4dc19e15cf195457c9a6f3ca428dd72c546094cd Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:18:47 2017 +0100 suppression code mort commit dbccb2f826d9cc87975fbc4cdc20bcf6d200a6f7 Author: Kevin Morin <morin@codelutin.com> Date: Fri Mar 17 15:18:17 2017 +0100 fix lazy loading commit a3de61882043a047124e2f6dbcb3ebb74f72e935 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 -- 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 a3de61882043a047124e2f6dbcb3ebb74f72e935 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 dbccb2f826d9cc87975fbc4cdc20bcf6d200a6f7 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 4dc19e15cf195457c9a6f3ca428dd72c546094cd 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 f38d01e1ae9d9996a600b117d126af0fec6a5221 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 8a4d54aa460703b98baf7f59229214ebe95e8e9b 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 --- faxtomail-persistence/src/main/xmi/faxtomail.zargo | Bin 35628 -> 35710 bytes .../h2/V2_4_170317_2__add_canChangeOrderInTable.sql | 4 ++++ .../V2_4_170317_2__add_canChangeOrderInTable.sql | 6 ++++++ 3 files changed, 10 insertions(+) diff --git a/faxtomail-persistence/src/main/xmi/faxtomail.zargo b/faxtomail-persistence/src/main/xmi/faxtomail.zargo index ef2f72d..3c3dcfb 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_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 3e42c205ec30f2d249864f80a5ca0a6346b976d5 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 | 100 ++++++++++++--------- .../src/main/webapp/js/configuration.js | 4 + 2 files changed, 63 insertions(+), 41 deletions(-) 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 fe3f5b2..7c05a92 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 @@ -1162,54 +1162,72 @@ </div> <div id="collapse8" class="panel-collapse collapse"> <div class="panel-body"> + <div class="form-group"> + <label ng-if="selectedMailFolder.$parent"> + <input type="radio" ng-model="selectedMailFolder.useCurrentLevelTableColumns" + ng-value="false" ng-change="initFolderColumns()" /> + Hériter des colonnes déclarées sur les dossiers parent : + </label> - <label ng-if="selectedMailFolder.$parent"> - <input type="radio" ng-model="selectedMailFolder.useCurrentLevelTableColumns" - ng-value="false" ng-change="initFolderColumns()" /> - Hériter des colonnes déclarées sur les dossiers parent : - </label> + <div class="control-group" ng-show="selectedMailFolder.$parent && !selectedMailFolder.useCurrentLevelTableColumns"> + <div class="controls"> + <input type="hidden" ui-select2-sortable ng-model="parentFolderTableColumns" + simple-query="getObjectsData" multiple sortable disabled> + </div> + </div> - <div class="control-group" ng-show="selectedMailFolder.$parent && !selectedMailFolder.useCurrentLevelTableColumns"> - <div class="controls"> - <input type="hidden" ui-select2-sortable ng-model="parentFolderTableColumns" - simple-query="getObjectsData" multiple sortable disabled> + <div ng-if="selectedMailFolder.$parent && !selectedMailFolder.useCurrentLevelTableColumns"> + <table id='table-snapshot' class="table table-bordered"> + <caption>Aperçu</caption> + <thead> + <tr> + <th ng-repeat="mailField in parentFolderTableColumns">{{tableMailFields[mailField.id]}}</th> + </tr> + </thead> + </table> </div> - </div> - <div ng-if="selectedMailFolder.$parent && !selectedMailFolder.useCurrentLevelTableColumns"> - <table id='table-snapshot' class="table table-bordered"> - <caption>Aperçu</caption> - <thead> - <tr> - <th ng-repeat="mailField in parentFolderTableColumns">{{tableMailFields[mailField.id]}}</th> - </tr> - </thead> - </table> - </div> - - <label> - <input type="radio" ng-model="selectedMailFolder.useCurrentLevelTableColumns" ng-value="true" - ng-change="initFolderColumns()" ng-if="selectedMailFolder.$parent" /> - Définir les colonnes à afficher pour ce dossier : - </label> - - <div class="control-group" ng-show="!selectedMailFolder.$parent || selectedMailFolder.useCurrentLevelTableColumns"> - <div class="controls"> - <input type="hidden" ui-select2-sortable ng-model="folderTableColumns" - simple-query="getObjectsData" multiple sortable> - <p class="help-block">(l'ordre peut être changé en faisant un glisser/déposer sur les champs)</p> + <label> + <input type="radio" ng-model="selectedMailFolder.useCurrentLevelTableColumns" ng-value="true" + ng-change="initFolderColumns()" ng-if="selectedMailFolder.$parent" /> + Définir les colonnes à afficher pour ce dossier : + </label> + + <div class="control-group" ng-show="!selectedMailFolder.$parent || selectedMailFolder.useCurrentLevelTableColumns"> + <div class="controls"> + <input type="hidden" ui-select2-sortable ng-model="folderTableColumns" + simple-query="getObjectsData" multiple sortable> + <p class="help-block">(l'ordre peut être changé en faisant un glisser/déposer sur les champs)</p> + </div> + </div> + + <div ng-if="!selectedMailFolder.$parent || selectedMailFolder.useCurrentLevelTableColumns"> + <table id='table-snapshot' class="table table-bordered"> + <caption>Aperçu</caption> + <thead> + <tr> + <th ng-repeat="mailField in folderTableColumns">{{tableMailFields[mailField.id]}}</th> + </tr> + </thead> + </table> </div> </div> - <div ng-if="!selectedMailFolder.$parent || selectedMailFolder.useCurrentLevelTableColumns"> - <table id='table-snapshot' class="table table-bordered"> - <caption>Aperçu</caption> - <thead> - <tr> - <th ng-repeat="mailField in folderTableColumns">{{tableMailFields[mailField.id]}}</th> - </tr> - </thead> - </table> + <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> diff --git a/faxtomail-ui-web/src/main/webapp/js/configuration.js b/faxtomail-ui-web/src/main/webapp/js/configuration.js index 28d8507..abe1ce6 100644 --- a/faxtomail-ui-web/src/main/webapp/js/configuration.js +++ b/faxtomail-ui-web/src/main/webapp/js/configuration.js @@ -785,6 +785,7 @@ ConfigurationModule.controller('ConfigurationTreeController', ['$scope', '$windo $scope.selectedMailFolder.mustTakeToEditDemand = $scope.selectedMailFolder.mustTakeToEditDemand || false; $scope.selectedMailFolder.displayHelpOnMessages = $scope.selectedMailFolder.displayHelpOnMessages || false; $scope.selectedMailFolder.computeQuantitiesSubtotalsByState = $scope.selectedMailFolder.computeQuantitiesSubtotalsByState || false; + $scope.selectedMailFolder.canChangeOrderInTable = $scope.selectedMailFolder.canChangeOrderInTable || false; $scope.selectedMailFolder.ediTransfer = $scope.selectedMailFolder.ediTransfer|| false; } @@ -914,6 +915,9 @@ ConfigurationModule.controller('ConfigurationTreeController', ['$scope', '$windo if ((!$scope.parentScopeValues.folderTableColumns || $scope.parentScopeValues.folderTableColumns.length == 0) && folder.folderTableColumns) { $scope.parentScopeValues.folderTableColumns = folder.folderTableColumns; } + 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 b10475f223837276b2a8a85b2361b04179ba161c 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 | 68 +++- .../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 pom.xml | 4 +- 13 files changed, 485 insertions(+), 251 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 9e66904..d92525f 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 @@ -327,6 +353,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(); @@ -375,7 +413,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)) { @@ -503,11 +541,7 @@ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<Dem if (log.isErrorEnabled()) { log.error("error while introspecting emailfilter for property " + property, e); } - } catch (InvocationTargetException e) { - if (log.isErrorEnabled()) { - log.error("error while calling getter for property " + property, e); - } - } catch (IllegalAccessException e) { + } catch (InvocationTargetException | IllegalAccessException e) { if (log.isErrorEnabled()) { log.error("error while calling getter for property " + property, e); } @@ -546,21 +580,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(); @@ -583,7 +625,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 3a58f60..7af2481 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; @@ -55,7 +56,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; @@ -65,8 +69,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); @@ -122,17 +132,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) { @@ -290,6 +299,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; } @@ -299,4 +328,13 @@ public class DemandeListUIModel extends AbstractSerializableBean { this.enableChangeResultPerPage = enableChangeResultPerPage; firePropertyChange(PROPERTY_ENABLE_CHANGE_RESULT_PER_PAGE, oldValue, enableChangeResultPerPage); } + + 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/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 f1e01ea581e0b14b2b84fb2ba48a820c6b5e559e 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>.
participants (1)
-
codelutin.com scm