diff --git a/pom.xml b/pom.xml index c24d0471ad..e9823b246b 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ ${project.build.directory}/alf_data convert - 7.50 + 7.51 7.9 8.27 1.1 diff --git a/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java b/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java index 331bfc93ec..1c9e783318 100644 --- a/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java +++ b/src/main/java/org/alfresco/rest/api/impl/FavouritesImpl.java @@ -26,6 +26,7 @@ package org.alfresco.rest.api.impl; import java.util.AbstractList; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -57,9 +58,11 @@ import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; import org.alfresco.rest.framework.resource.parameters.Paging; import org.alfresco.rest.framework.resource.parameters.Parameters; import org.alfresco.rest.framework.resource.parameters.Params; +import org.alfresco.rest.framework.resource.parameters.SortColumn; import org.alfresco.rest.framework.resource.parameters.where.QueryHelper; import org.alfresco.rest.framework.resource.parameters.where.QueryHelper.WalkerCallbackAdapter; import org.alfresco.service.cmr.favourites.FavouritesService; +import org.alfresco.service.cmr.favourites.FavouritesService.SortFields; import org.alfresco.service.cmr.favourites.FavouritesService.Type; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; @@ -307,7 +310,9 @@ public class FavouritesImpl implements Favourites personId = people.validatePerson(personId, true); Paging paging = parameters.getPaging(); - + + List> sortProps = getSortProps(parameters); + final Set filteredByClientQuery = new HashSet(); Set filterTypes = FavouritesService.Type.ALL_FILTER_TYPES; //Default all @@ -345,8 +350,8 @@ public class FavouritesImpl implements Favourites filterTypes = filteredByClientQuery; } - final PagingResults favourites = favouritesService.getPagedFavourites(personId, filterTypes, FavouritesService.DEFAULT_SORT_PROPS, - Util.getPagingRequest(paging)); + final PagingResults favourites = favouritesService.getPagedFavourites(personId, filterTypes, sortProps, Util.getPagingRequest(paging)); + return wrap(paging, favourites, parameters); } @@ -370,4 +375,32 @@ public class FavouritesImpl implements Favourites Parameters parameters = Params.valueOf(recognizedParams, personId, favouriteId, null); return parameters; } + + private List> getSortProps(Parameters parameters) + { + List> sortProps = new ArrayList<>(); + List sortCols = parameters.getSorting(); + if ((sortCols != null) && (sortCols.size() > 0)) + { + for (SortColumn sortCol : sortCols) + { + SortFields sortField; + try + { + sortField = SortFields.valueOf(sortCol.column); + } + catch (Exception e) + { + throw new InvalidArgumentException("Invalid sort field: " + sortCol.column); + } + sortProps.add(new Pair<>(sortField, (sortCol.asc ? Boolean.TRUE : Boolean.FALSE))); + } + } + else + { + // default sort order + sortProps = FavouritesService.DEFAULT_SORT_PROPS; + } + return sortProps; + } } diff --git a/src/test/java/org/alfresco/rest/api/tests/TestFavourites.java b/src/test/java/org/alfresco/rest/api/tests/TestFavourites.java index a2963cef5a..37854d0bdd 100644 --- a/src/test/java/org/alfresco/rest/api/tests/TestFavourites.java +++ b/src/test/java/org/alfresco/rest/api/tests/TestFavourites.java @@ -115,6 +115,8 @@ public class TestFavourites extends AbstractBaseApiTest private String person12Id; private TestPerson person14; private String person14Id; + private TestPerson person15; + private String person15Id; private TestNetwork network2; private TestPerson person21; @@ -176,6 +178,11 @@ public class TestFavourites extends AbstractBaseApiTest TestFavourites.this.person14 = network1.createUser(personInfo); assertNotNull(TestFavourites.this.person14); TestFavourites.this.person14Id = TestFavourites.this.person14.getId(); + name = GUID.generate(); + personInfo = new PersonInfo(name, name, name, "password", null, null, null, null, null, null, null); + TestFavourites.this.person15 = network1.createUser(personInfo); + assertNotNull(TestFavourites.this.person15); + TestFavourites.this.person15Id = TestFavourites.this.person15.getId(); TestFavourites.this.network2 = networksIt.next(); name = GUID.generate(); @@ -949,6 +956,22 @@ public class TestFavourites extends AbstractBaseApiTest assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } } + + // invalid orderBy param + { + publicApiClient.setRequestContext(new RequestContext(network1.getId(), person10Id)); + + try + { + Map params = new HashMap<>(); + params.put("orderBy", "invalid ASC"); + favouritesProxy.getFavourites(person10Id, createParams(null, params)); + } + catch(PublicApiException e) + { + assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode()); + } + } } @Test @@ -1912,6 +1935,60 @@ public class TestFavourites extends AbstractBaseApiTest assertTrue(node1.getIsFavorite()); } + /** + * Test sort favourites using 'orderBy' parameter. + * + *

GET:

+ * {@literal :/alfresco/api//public/alfresco/versions/1/people//favorites?orderBy} + */ + @Test + public void testSortFavourites() throws Exception + { + setRequestContext(network1.getId(), person15Id, "password"); + + final NodeRef folderNodeRef1 = person1PublicFolders.get(0); // person1's folder (Test Folder1) + final NodeRef folderNodeRef2 = person1PublicFolders.get(1); // person1's folder (Test Folder2) + final NodeRef folderNodeRef3 = person1PublicFolders.get(2); // person1's folder (Test Folder3) + final NodeRef nodeRef1= person1PublicDocs.get(0); // a file (Test Doc1) + final NodeRef nodeRef2 = person1PublicDocs.get(1); // a file (Test Doc2) + + // Favourite the docs and folders + Favourite folder1Favourite = makeFolderFavourite(folderNodeRef1.getId()); + favouritesProxy.createFavourite(person15Id, folder1Favourite); + Favourite folder2Favourite = makeFolderFavourite(folderNodeRef2.getId()); + favouritesProxy.createFavourite(person15Id, folder2Favourite); + Favourite folder3Favourite = makeFolderFavourite(folderNodeRef3.getId()); + favouritesProxy.createFavourite(person15Id, folder3Favourite); + Favourite file1Favourite = makeFileFavourite(nodeRef1.getId()); + favouritesProxy.createFavourite(person15Id, file1Favourite); + Favourite file2Favourite = makeFileFavourite(nodeRef2.getId()); + favouritesProxy.createFavourite(person15Id, file2Favourite); + + // Order by title ASC + Map params = new HashMap<>(); + params.put("orderBy", "title ASC"); + + List favourites = favouritesProxy.getFavourites(person15Id, createParams(null,params)).getList(); + assertTrue(favourites.size() == 5); + assertTrue(favourites.get(0).getTargetGuid().equals(nodeRef1.getId())); + assertTrue(favourites.get(1).getTargetGuid().equals(nodeRef2.getId())); + assertTrue(favourites.get(2).getTargetGuid().equals(folderNodeRef1.getId())); + assertTrue(favourites.get(3).getTargetGuid().equals(folderNodeRef2.getId())); + assertTrue(favourites.get(4).getTargetGuid().equals(folderNodeRef3.getId())); + + // Order by type ASC, title DESC + params = new HashMap<>(); + params.put("orderBy", "type DESC, title DESC"); + + favourites = favouritesProxy.getFavourites(person15Id, createParams(null,params)).getList(); + assertTrue(favourites.size() == 5); + assertTrue(favourites.get(0).getTargetGuid().equals(folderNodeRef3.getId())); + assertTrue(favourites.get(1).getTargetGuid().equals(folderNodeRef2.getId())); + assertTrue(favourites.get(2).getTargetGuid().equals(folderNodeRef1.getId())); + assertTrue(favourites.get(3).getTargetGuid().equals(nodeRef2.getId())); + assertTrue(favourites.get(4).getTargetGuid().equals(nodeRef1.getId())); + } + private void assertPathInfo(PathInfo expectedPathInfo, String expectedPathName, boolean expectedIsComplete) { assertNotNull("Path info was requested.", expectedPathInfo);