mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-09-17 14:21:39 +00:00
REPO-3630/MNT-19696: REST API add order by parameter option to GET favorites (#161)
- add orderBy parameter to sort favourite nodes (use existing sort options - by type, username, createdAt, title (name)). Default (old) sorting is used if no orderBy parameter is given - multiple parameters can be used - added positive and negative tests
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -35,7 +35,7 @@
|
||||
<dir.root>${project.build.directory}/alf_data</dir.root>
|
||||
<img.exe>convert</img.exe>
|
||||
|
||||
<dependency.alfresco-repository.version>7.50</dependency.alfresco-repository.version>
|
||||
<dependency.alfresco-repository.version>7.51</dependency.alfresco-repository.version>
|
||||
<dependency.alfresco-core.version>7.9</dependency.alfresco-core.version>
|
||||
<dependency.alfresco-data-model.version>8.27</dependency.alfresco-data-model.version>
|
||||
<dependency.alfresco-pdf-renderer.version>1.1</dependency.alfresco-pdf-renderer.version>
|
||||
|
@@ -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<Pair<FavouritesService.SortFields, Boolean>> sortProps = getSortProps(parameters);
|
||||
|
||||
final Set<Type> filteredByClientQuery = new HashSet<Type>();
|
||||
Set<Type> filterTypes = FavouritesService.Type.ALL_FILTER_TYPES; //Default all
|
||||
|
||||
@@ -345,8 +350,8 @@ public class FavouritesImpl implements Favourites
|
||||
filterTypes = filteredByClientQuery;
|
||||
}
|
||||
|
||||
final PagingResults<PersonFavourite> favourites = favouritesService.getPagedFavourites(personId, filterTypes, FavouritesService.DEFAULT_SORT_PROPS,
|
||||
Util.getPagingRequest(paging));
|
||||
final PagingResults<PersonFavourite> 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<Pair<FavouritesService.SortFields, Boolean>> getSortProps(Parameters parameters)
|
||||
{
|
||||
List<Pair<FavouritesService.SortFields, Boolean>> sortProps = new ArrayList<>();
|
||||
List<SortColumn> 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;
|
||||
}
|
||||
}
|
||||
|
@@ -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<String, String> 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.
|
||||
*
|
||||
* <p>GET:</p>
|
||||
* {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/people/<userName>/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<String, String> params = new HashMap<>();
|
||||
params.put("orderBy", "title ASC");
|
||||
|
||||
List<Favourite> 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);
|
||||
|
Reference in New Issue
Block a user