You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/03/02 11:47:28 UTC

[09/11] syncope git commit: Adding pagination support to sample groovy script for usage with Scripted REST connector

Adding pagination support to sample groovy script for usage with Scripted REST connector


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/4f6fa1a2
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/4f6fa1a2
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/4f6fa1a2

Branch: refs/heads/master
Commit: 4f6fa1a252f399b225df4c7a73c66201b1ffbd51
Parents: e073cc4
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Mar 1 17:21:15 2018 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Mar 2 12:13:41 2018 +0100

----------------------------------------------------------------------
 .../src/test/resources/rest/SearchScript.groovy | 40 ++++++++++++++++++--
 1 file changed, 37 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/4f6fa1a2/fit/core-reference/src/test/resources/rest/SearchScript.groovy
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rest/SearchScript.groovy b/fit/core-reference/src/test/resources/rest/SearchScript.groovy
index 118da8a..ba7a2e8 100644
--- a/fit/core-reference/src/test/resources/rest/SearchScript.groovy
+++ b/fit/core-reference/src/test/resources/rest/SearchScript.groovy
@@ -22,6 +22,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode
 import javax.ws.rs.core.Response
 import org.apache.cxf.jaxrs.client.WebClient
 import org.identityconnectors.common.security.GuardedString
+import org.identityconnectors.framework.common.objects.OperationOptions;
 
 // Parameters:
 // The connector sends the following:
@@ -66,6 +67,24 @@ def buildConnectorObject(node) {
 
 log.info("Entering " + action + " Script");
 
+// ----------------
+// Manage pagination
+// ----------------
+def offset = options[OperationOptions.OP_PAGED_RESULTS_COOKIE] == null
+? 0
+: options[OperationOptions.OP_PAGED_RESULTS_COOKIE].toInteger();
+ 
+def pageSize = options[OperationOptions.OP_PAGE_SIZE] == null 
+? 100
+: options[OperationOptions.OP_PAGE_SIZE].toInteger();
+
+def limit = offset + pageSize;
+
+log.ok("pagedResultsCookie: " + offset);
+log.ok("pageSize: " + pageSize);
+log.ok("limit: " + limit);
+// ----------------
+
 WebClient webClient = client;
 ObjectMapper mapper = new ObjectMapper();
 
@@ -76,10 +95,11 @@ case "__ACCOUNT__":
   if (query == null || (!query.get("left").equals("__UID__") && !query.get("conditionType").equals("EQUALS"))) {
     webClient.path("/users");
     Response response = webClient.get();    
-    ArrayNode node = mapper.readTree(response.getEntity());
+    ArrayNode nodes = mapper.readTree(response.getEntity());
     
-    for (i = 0; i < node.size(); i++) {
-      result.add(buildConnectorObject(node.get(i)));
+    // beware: this is not enforcing any server-side pagination feature
+    for (i = offset; i < (limit < nodes.size() ? limit: nodes.size()); i++) {
+      result.add(buildConnectorObject(nodes.get(i)));
     }
   } else {
     webClient.path("/users/" + query.get("right"));
@@ -98,4 +118,18 @@ default:
   result;
 }
 
+// ----------------
+// Return paged result cookie
+// ----------------
+def pagedResultCookieLine = [:]
+if (pageSize > result.size()) {
+  // no more results
+  pagedResultCookieLine.put(OperationOptions.OP_PAGED_RESULTS_COOKIE, null);
+} else {
+  pagedResultCookieLine.put(OperationOptions.OP_PAGED_RESULTS_COOKIE, "" + limit);
+}
+ 
+result.add(pagedResultCookieLine);
+// ----------------
+
 return result;