diff --git a/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/model/RestPersonFavoritesModel.java b/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/model/RestPersonFavoritesModel.java index f3ef35ed78..7643872eec 100644 --- a/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/model/RestPersonFavoritesModel.java +++ b/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/model/RestPersonFavoritesModel.java @@ -25,6 +25,8 @@ */ package org.alfresco.rest.model; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonProperty; import org.alfresco.rest.core.IRestModel; @@ -43,6 +45,7 @@ public class RestPersonFavoritesModel extends TestModel implements IRestModel allowableOperations; private RestTargetModel target; @@ -86,4 +89,12 @@ public class RestPersonFavoritesModel extends TestModel implements IRestModel getAllowableOperations() { + return allowableOperations; + } + + public void setAllowableOperations(List allowableOperations) { + this.allowableOperations = allowableOperations; + } } diff --git a/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/search/SearchNodeModel.java b/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/search/SearchNodeModel.java index 86215aedb1..588ab607d8 100644 --- a/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/search/SearchNodeModel.java +++ b/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/search/SearchNodeModel.java @@ -101,6 +101,8 @@ public class SearchNodeModel extends TestModel implements IRestModel getAssociation() { return association; @@ -326,5 +328,12 @@ public class SearchNodeModel extends TestModel implements IRestModel m.assertThat().field(ALLOWABLE_OPERATIONS).isNotEmpty()); + } } diff --git a/remote-api/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java b/remote-api/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java index 0092429118..5dd75b1591 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java @@ -25,13 +25,14 @@ */ package org.alfresco.rest.api.impl; +import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS; + import java.util.AbstractList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -76,6 +77,7 @@ import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -89,7 +91,9 @@ public class FavouritesImpl implements Favourites { private static final Log logger = LogFactory.getLog(FavouritesImpl.class); - private People people; + private static final List ALLOWED_INCLUDES = List.of(PARAM_INCLUDE_PROPERTIES, PARAM_INCLUDE_ALLOWABLEOPERATIONS); + + private People people; private Sites sites; private Nodes nodes; private FavouritesService favouritesService; @@ -175,18 +179,23 @@ public class FavouritesImpl implements Favourites fav.setTarget(target); // REPO-1147 allow retrieving additional properties - if (parameters.getInclude().contains(PARAM_INCLUDE_PROPERTIES)) + final List paramsInclude = parameters.getInclude(); + if (!Collections.disjoint(paramsInclude, ALLOWED_INCLUDES)) { - List includeProperties = new LinkedList<>(); - includeProperties.add(PARAM_INCLUDE_PROPERTIES); + final List includes = ALLOWED_INCLUDES.stream().filter(a -> paramsInclude.contains(a)).collect(Collectors.toList()); // get node representation with only properties included - Node node = nodes.getFolderOrDocument(personFavourite.getNodeRef(), null, null, includeProperties, null); + Node node = nodes.getFolderOrDocument(personFavourite.getNodeRef(), null, null, includes, null); // Create a map from node properties excluding properties already in this Favorite Map filteredNodeProperties = filterProps(node.getProperties(), EXCLUDED_PROPS); - if(filteredNodeProperties.size() > 0) + if(filteredNodeProperties.size() > 0 && paramsInclude.contains(PARAM_INCLUDE_PROPERTIES)) { fav.setProperties(filteredNodeProperties); } + final List allowableOperations = node.getAllowableOperations(); + if (CollectionUtils.isNotEmpty(allowableOperations) && paramsInclude.contains(PARAM_INCLUDE_ALLOWABLEOPERATIONS)) + { + fav.setAllowableOperations(allowableOperations); + } } return fav; diff --git a/remote-api/src/main/java/org/alfresco/rest/api/model/Favourite.java b/remote-api/src/main/java/org/alfresco/rest/api/model/Favourite.java index a148f4fc05..79429a40ab 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/model/Favourite.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/model/Favourite.java @@ -26,6 +26,7 @@ package org.alfresco.rest.api.model; import java.util.Date; +import java.util.List; import java.util.Map; import org.alfresco.rest.framework.resource.UniqueId; @@ -42,6 +43,7 @@ public class Favourite private Date createdAt; private Target target; private Map properties; + private List allowableOperations; public Date getCreatedAt() { @@ -84,10 +86,18 @@ public class Favourite this.properties = properties; } + public List getAllowableOperations() { + return allowableOperations; + } + + public void setAllowableOperations(List allowableOperations) { + this.allowableOperations = allowableOperations; + } + @Override public String toString() { return "Favourite [targetGuid=" + targetGuid + ", createdAt=" + createdAt + ", target=" + target + ", properties=" + properties + "]"; } -} \ No newline at end of file +} diff --git a/remote-api/src/main/java/org/alfresco/rest/api/search/impl/SearchMapper.java b/remote-api/src/main/java/org/alfresco/rest/api/search/impl/SearchMapper.java index d4c82ad128..b0be1b0f5b 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/search/impl/SearchMapper.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/search/impl/SearchMapper.java @@ -31,6 +31,7 @@ import static java.util.stream.Collectors.toList; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASPECTNAMES; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASSOCIATION; +import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ISFAVORITE; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ISLINK; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ISLOCKED; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_PATH; @@ -96,10 +97,9 @@ import java.util.stream.Collectors; */ public class SearchMapper { - public static final List PERMITTED_INCLUDES - = Arrays.asList(PARAM_INCLUDE_ALLOWABLEOPERATIONS,PARAM_INCLUDE_ASPECTNAMES, - PARAM_INCLUDE_ISLINK, PARAM_INCLUDE_PATH, PARAM_INCLUDE_PROPERTIES, - PARAM_INCLUDE_ASSOCIATION, PARAM_INCLUDE_ISLOCKED, PARAM_INCLUDE_PERMISSIONS); + public static final List PERMITTED_INCLUDES = Arrays.asList(PARAM_INCLUDE_ALLOWABLEOPERATIONS,PARAM_INCLUDE_ASPECTNAMES, + PARAM_INCLUDE_ISLINK, PARAM_INCLUDE_PATH, PARAM_INCLUDE_PROPERTIES, PARAM_INCLUDE_ASSOCIATION, + PARAM_INCLUDE_ISLOCKED, PARAM_INCLUDE_PERMISSIONS, PARAM_INCLUDE_ISFAVORITE); public static final String CMIS = "cmis"; public static final String LUCENE = "lucene"; diff --git a/remote-api/src/test/java/org/alfresco/rest/api/search/SearchMapperTests.java b/remote-api/src/test/java/org/alfresco/rest/api/search/SearchMapperTests.java index a67a9f6814..a4012ffe28 100644 --- a/remote-api/src/test/java/org/alfresco/rest/api/search/SearchMapperTests.java +++ b/remote-api/src/test/java/org/alfresco/rest/api/search/SearchMapperTests.java @@ -32,6 +32,7 @@ import static junit.framework.TestCase.fail; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASPECTNAMES; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASSOCIATION; +import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ISFAVORITE; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ISLINK; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ISLOCKED; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_PATH; @@ -300,7 +301,7 @@ public class SearchMapperTests { searchMapper.validateInclude(Arrays.asList(PARAM_INCLUDE_ALLOWABLEOPERATIONS,PARAM_INCLUDE_ASPECTNAMES, PARAM_INCLUDE_ISLINK, PARAM_INCLUDE_PATH, PARAM_INCLUDE_PROPERTIES, - PARAM_INCLUDE_ASSOCIATION, PARAM_INCLUDE_ISLOCKED, PARAM_INCLUDE_PERMISSIONS)); + PARAM_INCLUDE_ASSOCIATION, PARAM_INCLUDE_ISLOCKED, PARAM_INCLUDE_PERMISSIONS, PARAM_INCLUDE_ISFAVORITE)); }