From 750adc141cc3fe48bfde1c23e8e4235373de62d9 Mon Sep 17 00:00:00 2001 From: Martin Muller Date: Fri, 5 Aug 2016 13:46:26 +0000 Subject: [PATCH] Merged RETURN-OF-THE-API (5.2.0) to 5.2.N (5.2.1) 128479 jvonka: V1 REST API: Node Version History - add basic paging REPO-313 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@129162 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rest/api/nodes/AbstractNodeRelation.java | 27 ++++---- .../rest/api/nodes/NodeVersionsRelation.java | 24 ++----- .../rest/api/tests/NodeVersionsApiTest.java | 67 +++++++++++++++++++ 3 files changed, 86 insertions(+), 32 deletions(-) diff --git a/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java b/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java index bd916eecdf..35300856af 100644 --- a/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java +++ b/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java @@ -157,9 +157,8 @@ public class AbstractNodeRelation implements InitializingBean collection.add(node); } } - - Paging paging = parameters.getPaging(); - return CollectionWithPagingInfo.asPaged(paging, collection, false, collection.size()); + + return listPage(collection, parameters.getPaging()); } protected CollectionWithPagingInfo listNodeChildAssocs(List childAssocRefs, Parameters parameters, Boolean isPrimary, boolean returnChild) @@ -170,7 +169,7 @@ public class AbstractNodeRelation implements InitializingBean List includeParam = parameters.getInclude(); - List result = new ArrayList(childAssocRefs.size()); + List collection = new ArrayList(childAssocRefs.size()); for (ChildAssociationRef childAssocRef : childAssocRefs) { if (isPrimary == null || (isPrimary == childAssocRef.isPrimary())) @@ -192,25 +191,27 @@ public class AbstractNodeRelation implements InitializingBean } node.setAssociation(new AssocChild(assocType, childAssocRef.isPrimary())); - - - result.add(node); + + collection.add(node); } } } - - Paging paging = parameters.getPaging(); - + + return listPage(collection, parameters.getPaging()); + } + + protected CollectionWithPagingInfo listPage(List result, Paging paging) + { // return 'page' of results (note: depends on in-built/natural sort order of results) int skipCount = paging.getSkipCount(); int pageSize = paging.getMaxItems(); int pageEnd = skipCount + pageSize; - final List page = new ArrayList<>(pageSize); - Iterator it = result.iterator(); + final List page = new ArrayList<>(pageSize); + Iterator it = result.iterator(); for (int counter = 0; counter < pageEnd && it.hasNext(); counter++) { - Node element = it.next(); + Object element = it.next(); if (counter < skipCount) { continue; diff --git a/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java b/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java index 753ac7bc8a..ad6374d215 100644 --- a/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java +++ b/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java @@ -74,27 +74,15 @@ import java.util.Map; * @author janv */ @RelationshipResource(name = "versions", entityResource = NodesEntityResource.class, title = "Node Versions") -public class NodeVersionsRelation implements +public class NodeVersionsRelation extends AbstractNodeRelation implements RelationshipResourceAction.Read, RelationshipResourceAction.ReadById, RelationshipResourceBinaryAction.Read, RelationshipResourceAction.Delete, InitializingBean { - protected ServiceRegistry sr; - protected Nodes nodes; protected VersionService versionService; - - public void setNodes(Nodes nodes) - { - this.nodes = nodes; - } - - public void setServiceRegistry(ServiceRegistry sr) - { - this.sr = sr; - } - + @Override public void afterPropertiesSet() { @@ -118,8 +106,7 @@ public class NodeVersionsRelation implements Map mapUserInfo = new HashMap<>(10); List includeParam = parameters.getInclude(); - - // TODO fixme - add paging etc + List collection = null; if (vh != null) { @@ -131,9 +118,8 @@ public class NodeVersionsRelation implements collection.add(node); } } - - Paging paging = parameters.getPaging(); - return CollectionWithPagingInfo.asPaged(paging, collection, false, (collection != null ? collection.size() : 0)); + + return listPage(collection, parameters.getPaging()); } private void mapVersionInfo(Version v, Node aNode) diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java index 96db9487e4..38de871b58 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java @@ -31,10 +31,12 @@ import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.model.VersionOptions; import org.alfresco.rest.api.nodes.NodesEntityResource; import org.alfresco.rest.api.tests.client.HttpResponse; +import org.alfresco.rest.api.tests.client.PublicApiClient; import org.alfresco.rest.api.tests.client.PublicApiClient.Paging; import org.alfresco.rest.api.tests.client.PublicApiHttpClient; import org.alfresco.rest.api.tests.client.data.Document; import org.alfresco.rest.api.tests.client.data.Node; +import org.alfresco.rest.api.tests.client.data.Rendition; import org.alfresco.rest.api.tests.util.RestApiUtil; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PermissionService; @@ -1260,7 +1262,72 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest // TODO add tests to also check version comment (when we can list version history) } + /** + * Test version history paging. + * + *

GET:

+ * {@literal :/alfresco/api/-default-/public/alfresco/versions/1/nodes//versions} + */ + @Test + public void testVersionHistoryPaging() throws Exception + { + // create folder + String f1Id = null; + try + { + f1Id = createFolder(user1, Nodes.PATH_MY, "testVersionHistoryPaging-f1").getId(); + + String textContentSuffix = "Amazingly few discotheques provide jukeboxes "; + String contentName = "content-1"; + + int cnt = 6; + Pair pair = uploadTextFileVersions(user1, f1Id, contentName, cnt, textContentSuffix, 0, null, null); + String versionLabel = pair.getFirst(); + String docId = pair.getSecond(); + + assertEquals("1.5", versionLabel); // 1.0, 1.1, ... 1.5 + + // check version history count (note: no paging => default max items => 100) + HttpResponse response = getAll(getNodeVersionsUrl(docId), user1, null, null, 200); + List nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class); + assertEquals(cnt, nodes.size()); + + // Sanity Test paging + + // SkipCount=0,MaxItems=2 + Paging paging = getPaging(0, 2); + response = getAll(getNodeVersionsUrl(docId), user1, paging, 200); + nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class); + assertEquals(2, nodes.size()); + PublicApiClient.ExpectedPaging expectedPaging = RestApiUtil.parsePaging(response.getJsonResponse()); + assertEquals(2, expectedPaging.getCount().intValue()); + assertEquals(0, expectedPaging.getSkipCount().intValue()); + assertEquals(2, expectedPaging.getMaxItems().intValue()); + assertTrue(expectedPaging.getTotalItems() >= cnt); + assertTrue(expectedPaging.getHasMoreItems()); + + // SkipCount=2,MaxItems=3 + paging = getPaging(2, 3); + response = getAll(getNodeVersionsUrl(docId), user1, paging, 200); + nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class); + assertEquals(3, nodes.size()); + expectedPaging = RestApiUtil.parsePaging(response.getJsonResponse()); + assertEquals(3, expectedPaging.getCount().intValue()); + assertEquals(2, expectedPaging.getSkipCount().intValue()); + assertEquals(3, expectedPaging.getMaxItems().intValue()); + assertTrue(expectedPaging.getTotalItems() >= cnt); + } + finally + { + if (f1Id != null) + { + // some cleanup + Map params = Collections.singletonMap("permanent", "true"); + delete(URL_NODES, user1, f1Id, params, 204); + } + } + } @Override public String getScope()