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);