diff --git a/database-connector/src/main/java/life/qbic/projectmanagement/experiment/persistence/SamplePreviewJpaRepository.java b/database-connector/src/main/java/life/qbic/projectmanagement/experiment/persistence/SamplePreviewJpaRepository.java index 4b540c478..4d132deb3 100644 --- a/database-connector/src/main/java/life/qbic/projectmanagement/experiment/persistence/SamplePreviewJpaRepository.java +++ b/database-connector/src/main/java/life/qbic/projectmanagement/experiment/persistence/SamplePreviewJpaRepository.java @@ -1,5 +1,9 @@ package life.qbic.projectmanagement.experiment.persistence; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import life.qbic.persistence.OffsetBasedRequest; @@ -65,17 +69,12 @@ private Specification generateExperimentIdandFilterSpecification( Specification batchLabelSpec = SamplePreviewSpecs.batchLabelContains(filter); Specification bioReplicateLabelSpec = SamplePreviewSpecs.BioReplicateLabelContains( filter); - /* - Specification experimentalGroupSpec = SamplePreviewSpecs.experimentalGroupContains( - filter); - - */ Specification speciesSpec = SamplePreviewSpecs.speciesContains(filter); Specification specimenSpec = SamplePreviewSpecs.specimenContains(filter); Specification analyteSpec = SamplePreviewSpecs.analyteContains(filter); - + Specification conditionSpec = SamplePreviewSpecs.conditionContains(filter); Specification containsFilterSpec = Specification.anyOf(sampleCodeSpec, - sampleLabelSpec, batchLabelSpec, bioReplicateLabelSpec, speciesSpec, + sampleLabelSpec, batchLabelSpec, bioReplicateLabelSpec, conditionSpec, speciesSpec, specimenSpec, analyteSpec); return Specification.where(experimentIdSpec).and(containsFilterSpec); @@ -119,14 +118,14 @@ public static Specification sampleLabelContains(String filter) { builder.like(root.get("sampleLabel"), "%" + filter + "%"); } - /* - public static Specification experimentalGroupContains(String filter) { - return (root, query, builder) -> - StringUtil.isBlank(filter) ? - builder.conjunction() : - builder.any(), "%" + filter + "%") - } - */ + + public static Specification conditionContains(String filter) { + return (root, query, builder) -> + StringUtil.isBlank(filter) ? + builder.conjunction() : + generateConditionPredicates(root, builder, filter); + } + public static Specification speciesContains(String filter) { return (root, query, builder) -> StringUtil.isBlank(filter) ? @@ -148,4 +147,22 @@ public static Specification analyteContains(String filter) { builder.like(root.get("analyte"), "%" + filter + "%"); } } + + private static Predicate generateConditionPredicates(Root root, + CriteriaBuilder builder, String filter) { + List predicates = new ArrayList<>(); + Predicate experimentalVariableNamePredicate = builder.like( + root.get("experimentalGroup").get("condition").get("variableLevels").get("variableName") + .as(String.class), "%" + filter + "%"); + predicates.add(experimentalVariableNamePredicate); + Predicate experimentalValueValuePredicate = builder.like( + root.get("experimentalGroup").get("condition").get("variableLevels") + .get("experimentalValue").get("value"), "%" + filter + "%"); + predicates.add(experimentalValueValuePredicate); + Predicate experimentalValueUnitPredicate = builder.like( + root.get("experimentalGroup").get("condition").get("variableLevels") + .get("experimentalValue").get("unit"), "%" + filter + "%"); + predicates.add(experimentalValueUnitPredicate); + return builder.or(predicates.toArray(new Predicate[0])); + } } diff --git a/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SampleInformationService.java b/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SampleInformationService.java index bb0f6b9ba..f3e9ba0ca 100644 --- a/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SampleInformationService.java +++ b/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SampleInformationService.java @@ -59,8 +59,6 @@ public List queryPreview(ExperimentId experimentId, int offset, i limit, sortOrders, filter); // the list must be modifiable for spring security to filter it - previewList.forEach( - samplePreview -> System.out.println(samplePreview.experimentalVariables().size())); return new ArrayList<>(previewList); } diff --git a/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SamplePreview.java b/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SamplePreview.java index 70b43dc78..9da03a835 100644 --- a/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SamplePreview.java +++ b/projectmanagement/src/main/java/life/qbic/projectmanagement/application/sample/SamplePreview.java @@ -6,19 +6,14 @@ import jakarta.persistence.Embedded; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; import jakarta.persistence.OneToOne; import jakarta.persistence.Table; -import java.util.ArrayList; -import java.util.List; import java.util.Objects; import life.qbic.projectmanagement.domain.project.experiment.BiologicalReplicate; import life.qbic.projectmanagement.domain.project.experiment.Experiment; import life.qbic.projectmanagement.domain.project.experiment.ExperimentId; import life.qbic.projectmanagement.domain.project.experiment.ExperimentalGroup; -import life.qbic.projectmanagement.domain.project.experiment.ExperimentalVariable; import life.qbic.projectmanagement.domain.project.experiment.vocabulary.Analyte; import life.qbic.projectmanagement.domain.project.experiment.vocabulary.Species; import life.qbic.projectmanagement.domain.project.experiment.vocabulary.Specimen; @@ -55,9 +50,6 @@ public class SamplePreview { private String species; private String specimen; private String analyte; - @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL) - @JoinColumn(name = "experimentId", referencedColumnName = "experiment_id") - private final List experimentalVariables = new ArrayList<>(); protected SamplePreview() { //needed by JPA @@ -159,10 +151,6 @@ public ExperimentalGroup experimentalGroup() { return experimentalGroup; } - public List experimentalVariables() { - return experimentalVariables; - } - @Override public boolean equals(Object o) { if (this == o) {