diff --git a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java index 82812fa1f9..f4830370a2 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java @@ -54,6 +54,7 @@ public class RuleSetLoader protected static final String IS_LINKED_TO = "isLinkedTo"; protected static final String RULE_IDS = "ruleIds"; private static final int MAX_INHERITED_BY_SIZE = 100; + private static final int MAX_LINKED_TO_BY_SIZE = 100; private NodeService nodeService; private RuleService ruleService; private RestRuleModelMapper restRuleModelMapper; @@ -123,7 +124,7 @@ public class RuleSetLoader private List loadLinkedToBy(NodeRef ruleSetNodeRef) { - return ruleService.getFoldersLinkingToRuleSet(ruleSetNodeRef); + return ruleService.getFoldersLinkingToRuleSet(ruleSetNodeRef, MAX_LINKED_TO_BY_SIZE); } private boolean loadIsInherited(NodeRef ruleSetNodeRef) diff --git a/repository/src/main/java/org/alfresco/repo/rule/RuleServiceImpl.java b/repository/src/main/java/org/alfresco/repo/rule/RuleServiceImpl.java index b833e426c8..5340251328 100644 --- a/repository/src/main/java/org/alfresco/repo/rule/RuleServiceImpl.java +++ b/repository/src/main/java/org/alfresco/repo/rule/RuleServiceImpl.java @@ -692,11 +692,12 @@ public class RuleServiceImpl /** {@inheritDoc} */ @Override @Experimental - public List getFoldersLinkingToRuleSet(NodeRef ruleSet) + public List getFoldersLinkingToRuleSet(NodeRef ruleSet, int maxFoldersToReturn) { NodeRef parentRef = nodeService.getPrimaryParent(ruleSet).getParentRef(); return nodeService.getParentAssocs(ruleSet) .stream() + .limit(maxFoldersToReturn) .map(ChildAssociationRef::getParentRef) .filter(folder -> !folder.equals(parentRef)) .filter(folder -> permissionService.hasReadPermission(folder) == ALLOWED) diff --git a/repository/src/main/java/org/alfresco/service/cmr/rule/RuleService.java b/repository/src/main/java/org/alfresco/service/cmr/rule/RuleService.java index 330e731f03..8b84ebc53d 100644 --- a/repository/src/main/java/org/alfresco/service/cmr/rule/RuleService.java +++ b/repository/src/main/java/org/alfresco/service/cmr/rule/RuleService.java @@ -243,11 +243,12 @@ public interface RuleService * Get a list of folders linking to the specified rule set. * * @param ruleSet The rule set node. + * @param maxFoldersToReturn A limit on the number of folders to return. * @return The list linking folders. */ @Auditable (parameters = { "ruleSet" }) @Experimental - List getFoldersLinkingToRuleSet(NodeRef ruleSet); + List getFoldersLinkingToRuleSet(NodeRef ruleSet, int maxFoldersToReturn); /** * Get the rule given its node reference diff --git a/repository/src/test/java/org/alfresco/repo/rule/RuleServiceImplUnitTest.java b/repository/src/test/java/org/alfresco/repo/rule/RuleServiceImplUnitTest.java index 939743efc1..8d03048175 100644 --- a/repository/src/test/java/org/alfresco/repo/rule/RuleServiceImplUnitTest.java +++ b/repository/src/test/java/org/alfresco/repo/rule/RuleServiceImplUnitTest.java @@ -730,7 +730,7 @@ public class RuleServiceImplUnitTest given(linkingAssocMock.getParentRef()).willReturn(linkingFolder); given(nodeService.getParentAssocs(ruleSetNode)).willReturn(List.of(owningAssocMock, linkingAssocMock)); - List linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode); + List linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode, 100); assertEquals("Unexpected list of linking folders.", List.of(linkingFolder), linkingFolders); } @@ -752,7 +752,7 @@ public class RuleServiceImplUnitTest // The currect user does not have permission to view the folder. given(permissionService.hasReadPermission(linkingFolder)).willReturn(DENIED); - List linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode); + List linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode, 100); assertEquals("Unexpected list of linking folders.", emptyList(), linkingFolders); }