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>
|
<dir.root>${project.build.directory}/alf_data</dir.root>
|
||||||
<img.exe>convert</img.exe>
|
<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-core.version>7.9</dependency.alfresco-core.version>
|
||||||
<dependency.alfresco-data-model.version>8.27</dependency.alfresco-data-model.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>
|
<dependency.alfresco-pdf-renderer.version>1.1</dependency.alfresco-pdf-renderer.version>
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
package org.alfresco.rest.api.impl;
|
package org.alfresco.rest.api.impl;
|
||||||
|
|
||||||
import java.util.AbstractList;
|
import java.util.AbstractList;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
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.Paging;
|
||||||
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
||||||
import org.alfresco.rest.framework.resource.parameters.Params;
|
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;
|
||||||
import org.alfresco.rest.framework.resource.parameters.where.QueryHelper.WalkerCallbackAdapter;
|
import org.alfresco.rest.framework.resource.parameters.where.QueryHelper.WalkerCallbackAdapter;
|
||||||
import org.alfresco.service.cmr.favourites.FavouritesService;
|
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.favourites.FavouritesService.Type;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
@@ -308,6 +311,8 @@ public class FavouritesImpl implements Favourites
|
|||||||
|
|
||||||
Paging paging = parameters.getPaging();
|
Paging paging = parameters.getPaging();
|
||||||
|
|
||||||
|
List<Pair<FavouritesService.SortFields, Boolean>> sortProps = getSortProps(parameters);
|
||||||
|
|
||||||
final Set<Type> filteredByClientQuery = new HashSet<Type>();
|
final Set<Type> filteredByClientQuery = new HashSet<Type>();
|
||||||
Set<Type> filterTypes = FavouritesService.Type.ALL_FILTER_TYPES; //Default all
|
Set<Type> filterTypes = FavouritesService.Type.ALL_FILTER_TYPES; //Default all
|
||||||
|
|
||||||
@@ -345,8 +350,8 @@ public class FavouritesImpl implements Favourites
|
|||||||
filterTypes = filteredByClientQuery;
|
filterTypes = filteredByClientQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
final PagingResults<PersonFavourite> favourites = favouritesService.getPagedFavourites(personId, filterTypes, FavouritesService.DEFAULT_SORT_PROPS,
|
final PagingResults<PersonFavourite> favourites = favouritesService.getPagedFavourites(personId, filterTypes, sortProps, Util.getPagingRequest(paging));
|
||||||
Util.getPagingRequest(paging));
|
|
||||||
return wrap(paging, favourites, parameters);
|
return wrap(paging, favourites, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,4 +375,32 @@ public class FavouritesImpl implements Favourites
|
|||||||
Parameters parameters = Params.valueOf(recognizedParams, personId, favouriteId, null);
|
Parameters parameters = Params.valueOf(recognizedParams, personId, favouriteId, null);
|
||||||
return parameters;
|
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 String person12Id;
|
||||||
private TestPerson person14;
|
private TestPerson person14;
|
||||||
private String person14Id;
|
private String person14Id;
|
||||||
|
private TestPerson person15;
|
||||||
|
private String person15Id;
|
||||||
|
|
||||||
private TestNetwork network2;
|
private TestNetwork network2;
|
||||||
private TestPerson person21;
|
private TestPerson person21;
|
||||||
@@ -176,6 +178,11 @@ public class TestFavourites extends AbstractBaseApiTest
|
|||||||
TestFavourites.this.person14 = network1.createUser(personInfo);
|
TestFavourites.this.person14 = network1.createUser(personInfo);
|
||||||
assertNotNull(TestFavourites.this.person14);
|
assertNotNull(TestFavourites.this.person14);
|
||||||
TestFavourites.this.person14Id = TestFavourites.this.person14.getId();
|
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();
|
TestFavourites.this.network2 = networksIt.next();
|
||||||
name = GUID.generate();
|
name = GUID.generate();
|
||||||
@@ -949,6 +956,22 @@ public class TestFavourites extends AbstractBaseApiTest
|
|||||||
assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode());
|
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
|
@Test
|
||||||
@@ -1912,6 +1935,60 @@ public class TestFavourites extends AbstractBaseApiTest
|
|||||||
assertTrue(node1.getIsFavorite());
|
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)
|
private void assertPathInfo(PathInfo expectedPathInfo, String expectedPathName, boolean expectedIsComplete)
|
||||||
{
|
{
|
||||||
assertNotNull("Path info was requested.", expectedPathInfo);
|
assertNotNull("Path info was requested.", expectedPathInfo);
|
||||||
|
Reference in New Issue
Block a user