diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/planner/AbstractCompositeEntitySearchManager.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/planner/AbstractCompositeEntitySearchManager.java index 449307a6a4a187379a962f53bb5864420bfbbbe2..733f5d39cd5bfa77fed15aff81aa9a3061a02e2d 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/planner/AbstractCompositeEntitySearchManager.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/planner/AbstractCompositeEntitySearchManager.java @@ -75,10 +75,16 @@ public abstract class AbstractCompositeEntitySearchManager<CRITERIA extends Abst authorisationInformation); } - protected Set<Long> doSearchForIDs(final Long userId, final Collection<ISearchCriteria> parentsCriteria, - final Collection<ISearchCriteria> childrenCriteria, final Collection<ISearchCriteria> mainCriteria, - final SearchOperator finalSearchOperator, final String idsColumnName, final TableMapper tableMapper, final AuthorisationInformation authorisationInformation) + protected Set<Long> doSearchForIDs(final Long userId, + final Collection<ISearchCriteria> upstreamRelationshipsCriteria, + final Collection<ISearchCriteria> downstreamRelationshipsCriteria, + final Collection<ISearchCriteria> mainCriteria, + final SearchOperator finalSearchOperator, final String idsColumnName, final TableMapper tableMapper, + final AuthorisationInformation authorisationInformation) { + // upstreamRelationshipsCriteria & downstreamRelationshipsCriteria are relationships from the relationships + // table, for datasets it is both the parent-child relationships and containers but for samples it is only the + // parent-child ones. final Set<Long> mainCriteriaIntermediateResults; if (!mainCriteria.isEmpty()) { @@ -93,10 +99,10 @@ public abstract class AbstractCompositeEntitySearchManager<CRITERIA extends Abst final Set<Long> parentCriteriaIntermediateResults; final Set<Long> containerCriteriaIntermediateResults; - if (!parentsCriteria.isEmpty()) + if (!upstreamRelationshipsCriteria.isEmpty()) { final Collection<ISearchCriteria> filteredParentsCriteria = - getCriteriaByRelationshipType(parentsCriteria, + getCriteriaByRelationshipType(upstreamRelationshipsCriteria, IGetRelationshipIdExecutor.RelationshipType.PARENT_CHILD); if (!filteredParentsCriteria.isEmpty()) @@ -113,7 +119,7 @@ public abstract class AbstractCompositeEntitySearchManager<CRITERIA extends Abst } final Collection<ISearchCriteria> filteredContainersCriteria = - getCriteriaByRelationshipType(parentsCriteria, + getCriteriaByRelationshipType(upstreamRelationshipsCriteria, IGetRelationshipIdExecutor.RelationshipType.CONTAINER_COMPONENT); if (!filteredContainersCriteria.isEmpty()) @@ -135,10 +141,10 @@ public abstract class AbstractCompositeEntitySearchManager<CRITERIA extends Abst } final Set<Long> childrenCriteriaIntermediateResults; - if (!childrenCriteria.isEmpty()) + if (!downstreamRelationshipsCriteria.isEmpty()) { final Collection<ISearchCriteria> filteredChildrenCriteria = - getCriteriaByRelationshipType(childrenCriteria, + getCriteriaByRelationshipType(downstreamRelationshipsCriteria, IGetRelationshipIdExecutor.RelationshipType.PARENT_CHILD); final Set<Long> finalChildrenIds = findFinalRelationshipIds(userId, authorisationInformation, @@ -168,7 +174,7 @@ public abstract class AbstractCompositeEntitySearchManager<CRITERIA extends Abst ? Collections.singleton(parentCriteriaIntermediateResults) : Collections.emptySet(), containerCriteriaIntermediateResults != null ? Collections.singleton(containerCriteriaIntermediateResults) : Collections.emptySet()); - } else if (mainCriteria.isEmpty() && parentsCriteria.isEmpty() && childrenCriteria.isEmpty()) + } else if (mainCriteria.isEmpty() && upstreamRelationshipsCriteria.isEmpty() && downstreamRelationshipsCriteria.isEmpty()) { // If we don't have results and criteria are empty, return all. results = getAllIds(userId, authorisationInformation, idsColumnName, tableMapper);