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 2020/02/27 12:23:42 UTC

[syncope] branch master updated: [SYNCOPE-1531] CSV export now takes into account page, size and sort

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 9197adc  [SYNCOPE-1531] CSV export now takes into account page, size and sort
9197adc is described below

commit 9197adc15d0d78e2c01c25e75b5bcfd23404441f
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Feb 27 12:55:10 2020 +0100

    [SYNCOPE-1531] CSV export now takes into account page, size and sort
---
 .../IdMAnyDirectoryPanelAdditionalActionsProvider.java  | 16 +++++++++++++---
 .../syncope/client/console/commons/AnyDataProvider.java | 17 +++++++++++++----
 .../AnyDirectoryPanelAdditionalActionsProvider.java     |  1 +
 ...dRepoAnyDirectoryPanelAdditionalActionsProvider.java |  1 +
 .../client/console/panels/AnyDirectoryPanel.java        |  6 +++++-
 .../syncope/client/console/rest/BaseRestClient.java     |  2 +-
 6 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMAnyDirectoryPanelAdditionalActionsProvider.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMAnyDirectoryPanelAdditionalActionsProvider.java
index d184720..999575f 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMAnyDirectoryPanelAdditionalActionsProvider.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMAnyDirectoryPanelAdditionalActionsProvider.java
@@ -28,6 +28,7 @@ import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.AnyDirectoryPanel;
 import org.apache.syncope.client.console.panels.DisplayAttributesModalPanel;
+import org.apache.syncope.client.console.rest.BaseRestClient;
 import org.apache.syncope.client.console.wicket.ajax.form.AjaxDownloadBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wizards.CSVPullWizardBuilder;
@@ -68,6 +69,7 @@ public class IdMAnyDirectoryPanelAdditionalActionsProvider implements AnyDirecto
             final String type,
             final String realm,
             final String fiql,
+            final int rows,
             final List<String> pSchemaNames,
             final List<String> dSchemaNames,
             final PageReference pageRef) {
@@ -134,7 +136,7 @@ public class IdMAnyDirectoryPanelAdditionalActionsProvider implements AnyDirecto
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 CSVPushSpec spec = csvPushSpec(type, panel, pSchemaNames, dSchemaNames);
-                AnyQuery query = csvAnyQuery(realm, fiql);
+                AnyQuery query = csvAnyQuery(realm, fiql, rows, panel.getDataProvider());
 
                 target.add(modal.setContent(new CSVPushWizardBuilder(spec, query, csvDownloadBehavior, pageRef).
                         setEventSink(csvEventSink).
@@ -195,8 +197,16 @@ public class IdMAnyDirectoryPanelAdditionalActionsProvider implements AnyDirecto
         return spec;
     }
 
-    protected AnyQuery csvAnyQuery(final String realm, final String fiql) {
-        return new AnyQuery.Builder().realm(realm).fiql(fiql).build();
+    protected AnyQuery csvAnyQuery(
+            final String realm,
+            final String fiql,
+            final int rows,
+            final AnyDataProvider<?> dataProvider) {
+
+        return new AnyQuery.Builder().realm(realm).
+                fiql(fiql).page(dataProvider.getCurrentPage() + 1).size(rows).
+                orderBy(BaseRestClient.toOrderBy(dataProvider.getSort())).
+                build();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
index a1aa807..4c00af2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
@@ -57,6 +57,8 @@ public class AnyDataProvider<A extends AnyTO> extends DirectoryDataProvider<A> {
 
     protected final PageReference pageRef;
 
+    protected int currentPage;
+
     public AnyDataProvider(
             final AbstractAnyRestClient<A> restClient,
             final int paginatorRows,
@@ -97,14 +99,17 @@ public class AnyDataProvider<A extends AnyTO> extends DirectoryDataProvider<A> {
         List<A> result = new ArrayList<>();
 
         try {
-            final int page = (int) first / paginatorRows;
+            currentPage = ((int) first / paginatorRows);
+            if (currentPage < 0) {
+                currentPage = 0;
+            }
 
             if (filtered) {
                 result = fiql == null
-                        ? new ArrayList<>()
-                        : restClient.search(realm, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
+                        ? List.of()
+                        : restClient.search(realm, fiql, currentPage + 1, paginatorRows, getSort(), type);
             } else {
-                result = restClient.search(realm, null, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
+                result = restClient.search(realm, null, currentPage + 1, paginatorRows, getSort(), type);
             }
         } catch (Exception e) {
             LOG.error("While searching with FIQL {}", fiql, e);
@@ -148,4 +153,8 @@ public class AnyDataProvider<A extends AnyTO> extends DirectoryDataProvider<A> {
     public IModel<A> model(final A object) {
         return new CompoundPropertyModel<>(object);
     }
+
+    public int getCurrentPage() {
+        return currentPage;
+    }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDirectoryPanelAdditionalActionsProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDirectoryPanelAdditionalActionsProvider.java
index cf9e1ab..4414c75 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDirectoryPanelAdditionalActionsProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDirectoryPanelAdditionalActionsProvider.java
@@ -33,6 +33,7 @@ public interface AnyDirectoryPanelAdditionalActionsProvider extends Serializable
             String type,
             String realm,
             String fiql,
+            int rows,
             List<String> pSchemaNames,
             List<String> dSchemaNames,
             PageReference pageRef);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAdditionalActionsProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAdditionalActionsProvider.java
index 2f0ed85..e88b670 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAdditionalActionsProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAdditionalActionsProvider.java
@@ -36,6 +36,7 @@ public class IdRepoAnyDirectoryPanelAdditionalActionsProvider implements AnyDire
             final String type,
             final String realm,
             final String fiql,
+            final int rows,
             final List<String> pSchemaNames,
             final List<String> dSchemaNames,
             final PageReference pageRef) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index c662fb7..4b61cc8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -139,7 +139,7 @@ public abstract class AnyDirectoryPanel<A extends AnyTO, E extends AbstractAnyRe
         initResultTable();
 
         SyncopeWebApplication.get().getAnyDirectoryPanelAdditionalActionsProvider().
-                add(this, modal, container, type, realm, fiql, pSchemaNames, dSchemaNames, pageRef);
+                add(this, modal, container, type, realm, fiql, rows, pSchemaNames, dSchemaNames, pageRef);
     }
 
     @Override
@@ -209,6 +209,10 @@ public abstract class AnyDirectoryPanel<A extends AnyTO, E extends AbstractAnyRe
         return new AnyDataProvider<>(restClient, rows, filtered, realm, type, pageRef).setFIQL(this.fiql);
     }
 
+    public AnyDataProvider<A> getDataProvider() {
+        return dataProvider;
+    }
+
     public void search(final String fiql, final AjaxRequestTarget target) {
         this.fiql = fiql;
         dataProvider.setFIQL(fiql);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
index 838a3ed..8127725 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
@@ -58,7 +58,7 @@ public abstract class BaseRestClient implements RestClient {
         SyncopeConsoleSession.get().resetClient(serviceClass);
     }
 
-    protected static String toOrderBy(final SortParam<String> sort) {
+    public static String toOrderBy(final SortParam<String> sort) {
         OrderByClauseBuilder builder = SyncopeClient.getOrderByClauseBuilder();
 
         String property = sort.getProperty();