diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/ReorderRules.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/ReorderRules.java new file mode 100644 index 0000000000..3d270e756c --- /dev/null +++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/ReorderRules.java @@ -0,0 +1,80 @@ +/* + * #%L + * Alfresco Repository + * %% + * Copyright (C) 2005 - 2022 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.rest.rules; + +import static java.util.stream.Collectors.toList; + +import static org.alfresco.rest.rules.RulesTestsUtils.createRuleModel; +import static org.alfresco.utility.report.log.Step.STEP; +import static org.springframework.http.HttpStatus.OK; + +import java.util.List; +import java.util.stream.IntStream; + +import org.alfresco.rest.RestTest; +import org.alfresco.rest.model.RestRuleModel; +import org.alfresco.rest.model.RestRuleSetModel; +import org.alfresco.utility.model.FolderModel; +import org.alfresco.utility.model.SiteModel; +import org.alfresco.utility.model.TestGroup; +import org.alfresco.utility.model.UserModel; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +@Test (groups = { TestGroup.RULES }) +public class ReorderRules extends RestTest +{ + private UserModel user; + private SiteModel site; + + @BeforeClass (alwaysRun = true) + public void dataPreparation() + { + STEP("Create a user and site."); + user = dataUser.createRandomTestUser(); + site = dataSite.usingUser(user).createPublicRandomSite(); + } + + /** Check we can get the ordered list of rules in a rule set. */ + @Test (groups = { TestGroup.REST_API, TestGroup.RULES }) + public void getOrderedRuleIds() + { + STEP("Create a folder containing three rules in the existing site"); + FolderModel folder = dataContent.usingUser(user).usingSite(site).createFolder(); + List rules = IntStream.range(0, 3).mapToObj(index -> { + RestRuleModel ruleModel = createRuleModel("ruleName"); + return restClient.authenticateUser(user).withCoreAPI().usingNode(folder).usingDefaultRuleSet().createSingleRule(ruleModel); + }).collect(toList()); + + STEP("Get the default rule set for the folder including the ordered rule ids"); + RestRuleSetModel ruleSet = restClient.authenticateUser(user).withCoreAPI().usingNode(folder) + .include("ruleIds").getDefaultRuleSet(); + + List expectedRuleIds = rules.stream().map(RestRuleModel::getId).collect(toList()); + restClient.assertStatusCodeIs(OK); + ruleSet.assertThat().field("ruleIds").is(expectedRuleIds); + } +} diff --git a/pom.xml b/pom.xml index efe66f72dd..1edc9b7983 100644 --- a/pom.xml +++ b/pom.xml @@ -123,7 +123,7 @@ 2.7.4 3.0.56 5.2.0 - 1.124 + 1.126 1.9 1.7 1.7 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 bda45c9c15..2d50a387f9 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 @@ -25,6 +25,8 @@ */ package org.alfresco.rest.api.impl.rules; +import static java.util.stream.Collectors.toList; + import static org.alfresco.rest.api.model.rules.InclusionType.INHERITED; import static org.alfresco.rest.api.model.rules.InclusionType.LINKED; import static org.alfresco.rest.api.model.rules.InclusionType.OWNED; @@ -32,6 +34,8 @@ import static org.alfresco.rest.api.model.rules.InclusionType.OWNED; import java.util.List; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.rest.api.impl.mapper.rules.RestRuleModelMapper; +import org.alfresco.rest.api.model.rules.Rule; import org.alfresco.rest.api.model.rules.RuleSet; import org.alfresco.service.Experimental; import org.alfresco.service.cmr.repository.ChildAssociationRef; @@ -49,9 +53,11 @@ public class RuleSetLoader protected static final String LINKED_TO_BY = "linkedToBy"; protected static final String IS_INHERITED = "isInherited"; 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 NodeService nodeService; private RuleService ruleService; + private RestRuleModelMapper restRuleModelMapper; /** * Load a rule set for the given node ref. @@ -103,6 +109,10 @@ public class RuleSetLoader { ruleSet.setIsLinkedTo(loadIsLinkedTo(ruleSetNodeRef, parentRef)); } + if (includes.contains(RULE_IDS)) + { + ruleSet.setRuleIds(loadRuleIds(parentRef)); + } } return ruleSet; } @@ -139,6 +149,14 @@ public class RuleSetLoader ); } + private List loadRuleIds(NodeRef folderNodeRef) + { + return ruleService.getRules(folderNodeRef, false).stream() + .map(restRuleModelMapper::toRestModel) + .map(Rule::getId) + .collect(toList()); + } + public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; @@ -148,4 +166,9 @@ public class RuleSetLoader { this.ruleService = ruleService; } + + public void setRestRuleModelMapper(RestRuleModelMapper restRuleModelMapper) + { + this.restRuleModelMapper = restRuleModelMapper; + } } diff --git a/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java b/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java index 4a3713936d..3e7fa5f794 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java @@ -45,6 +45,7 @@ public class RuleSet private List linkedToBy; private Boolean isInherited; private Boolean isLinkedTo; + private List ruleIds; public static RuleSet of(String id) { @@ -151,6 +152,16 @@ public class RuleSet return isLinkedTo; } + public List getRuleIds() + { + return ruleIds; + } + + public void setRuleIds(List ruleIds) + { + this.ruleIds = ruleIds; + } + @Override public String toString() { @@ -163,6 +174,7 @@ public class RuleSet .add("linkedToBy='" + linkedToBy + "'") .add("isInherited='" + isInherited + "'") .add("isLinkedTo='" + isLinkedTo + "'") + .add("ruleIds='" + ruleIds + "'") .toString() + '}'; } @@ -181,13 +193,14 @@ public class RuleSet && Objects.equals(inheritedBy, ruleSet.inheritedBy) && Objects.equals(linkedToBy, ruleSet.linkedToBy) && Objects.equals(isInherited, ruleSet.isInherited) - && Objects.equals(isLinkedTo, ruleSet.isLinkedTo); + && Objects.equals(isLinkedTo, ruleSet.isLinkedTo) + && Objects.equals(ruleIds, ruleSet.ruleIds); } @Override public int hashCode() { - return Objects.hash(id, owningFolder, inclusionType, inheritedBy, linkedToBy, isInherited, isLinkedTo); + return Objects.hash(id, owningFolder, inclusionType, inheritedBy, linkedToBy, isInherited, isLinkedTo, ruleIds); } public static Builder builder() @@ -204,6 +217,7 @@ public class RuleSet private List linkedToBy; private Boolean isInherited; private Boolean isLinkedTo; + private List ruleIds; public Builder id(String id) { @@ -247,6 +261,12 @@ public class RuleSet return this; } + public Builder ruleIds(List ruleIds) + { + this.ruleIds = ruleIds; + return this; + } + public RuleSet create() { final RuleSet ruleSet = new RuleSet(); @@ -257,6 +277,7 @@ public class RuleSet ruleSet.setLinkedToBy(linkedToBy); ruleSet.setIsInherited(isInherited); ruleSet.setIsLinkedTo(isLinkedTo); + ruleSet.setRuleIds(ruleIds); return ruleSet; } } diff --git a/remote-api/src/main/resources/alfresco/public-rest-context.xml b/remote-api/src/main/resources/alfresco/public-rest-context.xml index a3da17122c..23eadc7954 100644 --- a/remote-api/src/main/resources/alfresco/public-rest-context.xml +++ b/remote-api/src/main/resources/alfresco/public-rest-context.xml @@ -864,6 +864,7 @@ +