From ab124e87eaea942d614c10d1ecb86ee5d348e0e9 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 14 Feb 2023 12:16:11 +0200 Subject: [PATCH] add new filters(grantLike, funderLike, collaboratorsLike) --- .../controllers/PublicDmpsDocumentation.java | 17 ++++--- .../dmp/DataManagementPlanPublicCriteria.java | 27 +++++++++++ .../DataManagmentPlanPublicTableRequest.java | 48 +++++++++++++++++-- 3 files changed, 82 insertions(+), 10 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/controllers/PublicDmpsDocumentation.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/controllers/PublicDmpsDocumentation.java index f30b2dfd0..8e0bf7027 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/controllers/PublicDmpsDocumentation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/controllers/PublicDmpsDocumentation.java @@ -94,13 +94,16 @@ public class PublicDmpsDocumentation extends BaseController { " 1. periodStart: date, dmps created date greater than periodStart\n" + " 2. periodEnd: date, dmps created date less than periodEnd\n" + " 3. grants: list of uuids, dmps with the corresponding grants\n" + - " 4. funders: list of uuids, dmps with the corresponding funders\n" + - " 5. datasetTemplates: list of uuids, dataset templates which are described in the dmps\n" + - " 6. dmpOrganisations: list of strings, dmps belonging to these organisations\n" + - " 7. collaborators: list of uuids, user who collaborated on the creation/modification of dmps\n" + - " 8. allVersions: boolean, if dmps should be fetched with all their versions\n" + - " 9. groupIds: list of uuids, in which groups the dmps are\n" + - "10. like: string, dmps fetched have this string matched in their label or description\n"; + " 4. grantsLike: list of strings, dmps fetched having their grant matching any of the strings provided\n" + + " 5. funders: list of uuids, dmps with the corresponding funders\n" + + " 6. fundersLike: list of strings, dmps fetched having their funders matching any of the strings provided\n" + + " 7. datasetTemplates: list of uuids, dataset templates which are described in the dmps\n" + + " 8. dmpOrganisations: list of strings, dmps belonging to these organisations\n" + + " 9. collaborators: list of uuids, user who collaborated on the creation/modification of dmps\n" + + "10. collaboratorsLike: list of strings, dmps fetched having their collaborators matching any of the strings provided\n" + + "11. allVersions: boolean, if dmps should be fetched with all their versions\n" + + "12. groupIds: list of uuids, in which groups the dmps are\n" + + "13. like: string, dmps fetched have this string matched in their label or description\n"; private static final String getPagedRequestParamDescription = "The fieldsGroup is a string which indicates if the returned objects would have all their properties\n" + "There are two available values: 1) listing and 2) autocomplete\n" + "**listing**: returns objects with all their properties completed\n" + diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/criteria/dmp/DataManagementPlanPublicCriteria.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/criteria/dmp/DataManagementPlanPublicCriteria.java index b5079eb27..6a430deb1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/criteria/dmp/DataManagementPlanPublicCriteria.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/criteria/dmp/DataManagementPlanPublicCriteria.java @@ -15,14 +15,20 @@ public class DataManagementPlanPublicCriteria extends Criteria { private Date periodEnd; @ApiModelProperty(value = "grants", name = "grants", dataType = "List", example = "[]") private List grants; + @ApiModelProperty(value = "grantsLike", name = "grantsLike", dataType = "List", example = "[]") + private List grantsLike; @ApiModelProperty(value = "funders", name = "funders", dataType = "List", example = "[]") private List funders; + @ApiModelProperty(value = "fundersLike", name = "fundersLike", dataType = "List", example = "[]") + private List fundersLike; @ApiModelProperty(value = "datasetTemplates", name = "datasetTemplates", dataType = "List", example = "[]") private List datasetTemplates; @ApiModelProperty(value = "dmpOrganisations", name = "dmpOrganisations", dataType = "List", example = "[]") private List dmpOrganisations; @ApiModelProperty(value = "collaborators", name = "collaborators", dataType = "List", example = "[]") private List collaborators; + @ApiModelProperty(value = "collaboratorsLike", name = "collaboratorsLike", dataType = "List", example = "[]") + private List collaboratorsLike; @ApiModelProperty(value = "allVersions", name = "allVersions", dataType = "Boolean", example = "false") private boolean allVersions; @ApiModelProperty(value = "groupIds", name = "groupIds", dataType = "List", example = "[]") @@ -49,6 +55,13 @@ public class DataManagementPlanPublicCriteria extends Criteria { this.grants = grants; } + public List getGrantsLike() { + return grantsLike; + } + public void setGrantsLike(List grantsLike) { + this.grantsLike = grantsLike; + } + public List getFunders() { return funders; } @@ -56,6 +69,13 @@ public class DataManagementPlanPublicCriteria extends Criteria { this.funders = funders; } + public List getFundersLike() { + return fundersLike; + } + public void setFundersLike(List fundersLike) { + this.fundersLike = fundersLike; + } + public List getDatasetTemplates() { return datasetTemplates; } @@ -77,6 +97,13 @@ public class DataManagementPlanPublicCriteria extends Criteria { this.collaborators = collaborators; } + public List getCollaboratorsLike() { + return collaboratorsLike; + } + public void setCollaboratorsLike(List collaboratorsLike) { + this.collaboratorsLike = collaboratorsLike; + } + public boolean getAllVersions() { return allVersions; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/request/dmp/DataManagmentPlanPublicTableRequest.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/request/dmp/DataManagmentPlanPublicTableRequest.java index 9c37ff4ac..28b622afd 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/request/dmp/DataManagmentPlanPublicTableRequest.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/request/dmp/DataManagmentPlanPublicTableRequest.java @@ -8,9 +8,9 @@ import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; -import java.util.Arrays; -import java.util.Date; -import java.util.UUID; +import javax.persistence.criteria.Predicate; +import java.util.*; +import java.util.stream.Collectors; public class DataManagmentPlanPublicTableRequest extends TableQuery { @@ -27,8 +27,36 @@ public class DataManagmentPlanPublicTableRequest extends TableQuery builder.lessThan(root.get("created"), this.getCriteria().getPeriodEnd())); if (this.getCriteria().getGrants() != null && !this.getCriteria().getGrants().isEmpty()) query.where(((builder, root) -> root.get("grant").get("id").in(this.getCriteria().getGrants()))); + if (this.getCriteria().getGrantsLike() != null && !this.getCriteria().getGrantsLike().isEmpty()) { + query.where(((builder, root) -> { + List predicates = new ArrayList<>(); + for(String grantLike: this.getCriteria().getGrantsLike()){ + String pattern = "%" + grantLike.toUpperCase() + "%"; + predicates.add(builder.like(builder.upper(root.get("grant").get("label")), pattern)); + predicates.add(builder.like(builder.upper(root.get("grant").get("abbreviation")), pattern)); + predicates.add(builder.like(builder.upper(root.get("grant").get("reference")), pattern)); + predicates.add(builder.like(builder.upper(root.get("grant").get("definition")), pattern)); + predicates.add(builder.like(builder.upper(root.get("grant").get("description")), pattern)); + } + return builder.or(predicates.toArray(new Predicate[0])); + } + )); + } if (this.getCriteria().getFunders() != null && !this.getCriteria().getFunders().isEmpty()) query.where(((builder, root) -> root.get("grant").get("funder").get("id").in(this.getCriteria().getFunders()))); + if (this.getCriteria().getFundersLike() != null && !this.getCriteria().getFundersLike().isEmpty()) { + query.where(((builder, root) -> { + List predicates = new ArrayList<>(); + for(String funderLike: this.getCriteria().getFundersLike()){ + String pattern = "%" + funderLike.toUpperCase() + "%"; + predicates.add(builder.like(builder.upper(root.get("grant").get("funder").get("label")), pattern)); + predicates.add(builder.like(builder.upper(root.get("grant").get("funder").get("reference")), pattern)); + predicates.add(builder.like(builder.upper(root.get("grant").get("funder").get("definition")), pattern)); + } + return builder.or(predicates.toArray(new Predicate[0])); + } + )); + } //query.where((builder, root) -> builder.lessThan(root.get("grant").get("enddate"), new Date())); // GrantStateType.FINISHED query.where((builder, root) -> @@ -41,6 +69,19 @@ public class DataManagmentPlanPublicTableRequest extends TableQuery root.join("organisations").get("reference").in(this.getCriteria().getDmpOrganisations()))); if (this.getCriteria().getCollaborators() != null && !this.getCriteria().getCollaborators().isEmpty()) query.where(((builder, root) -> root.join("researchers").get("id").in(this.getCriteria().getCollaborators()))); + if (this.getCriteria().getCollaboratorsLike() != null && !this.getCriteria().getCollaboratorsLike().isEmpty()) { + query.where(((builder, root) -> { + List predicates = new ArrayList<>(); + for(String collaboratorLike: this.getCriteria().getCollaboratorsLike()){ + String pattern = "%" + collaboratorLike.toUpperCase() + "%"; + predicates.add(builder.like(builder.upper(root.join("researchers").get("label")), pattern)); + predicates.add(builder.like(builder.upper(root.join("researchers").get("uri")), pattern)); + predicates.add(builder.like(builder.upper(root.join("researchers").get("primaryEmail")), pattern)); + } + return builder.or(predicates.toArray(new Predicate[0])); + } + )); + } if (!this.getCriteria().getAllVersions()) { query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.and(builder1.equal(externalRoot.get("groupId"), @@ -49,6 +90,7 @@ public class DataManagmentPlanPublicTableRequest extends TableQuery root.get("groupId").in(this.getCriteria().getGroupIds())); } + query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue())); return query; }