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/04 09:25:28 UTC

[syncope] branch master updated (aacd9f7 -> 342d0b5)

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

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


    from aacd9f7  [SYNCOPE-957] Better status management and display
     new 28f31bb  [SYNCOPE-1538] Adjusting realm search to Admin Console needs
     new 342d0b5  [SYNCOPE-1539] setRequired for AjaxPalettePanel (#165)

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../commons/markup/html/form/AjaxPalettePanel.java   |  8 +++++++-
 .../org/apache/syncope/common/lib/to/RealmTO.java    |  3 ++-
 .../common/rest/api/service/RealmService.java        | 13 ++++++++-----
 .../org/apache/syncope/core/logic/RealmLogic.java    | 20 +++++++++++++-------
 .../core/rest/cxf/service/RealmServiceImpl.java      |  8 ++++++--
 .../apache/syncope/fit/core/MultitenancyITCase.java  | 10 +++++-----
 .../org/apache/syncope/fit/core/RealmITCase.java     |  5 +++--
 .../java/org/apache/syncope/fit/core/UserITCase.java |  2 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java    |  4 ++--
 9 files changed, 47 insertions(+), 26 deletions(-)


[syncope] 02/02: [SYNCOPE-1539] setRequired for AjaxPalettePanel (#165)

Posted by il...@apache.org.
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

commit 342d0b583da7298298419d87cef60589ada2bc1c
Author: DimaAy <di...@tirasa.net>
AuthorDate: Tue Feb 4 09:50:42 2020 +0100

    [SYNCOPE-1539] setRequired for AjaxPalettePanel (#165)
---
 .../client/ui/commons/markup/html/form/AjaxPalettePanel.java      | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
index 9256e65..abaf193 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
@@ -171,7 +171,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
             }
         };
 
-        add(palette.setOutputMarkupId(true));
+        add(palette.setLabel(new ResourceModel(name)).setOutputMarkupId(true));
 
         final Form<?> form = new Form<>("form");
         add(form.setEnabled(builder.filtered).setVisible(builder.filtered));
@@ -216,6 +216,12 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
         return this;
     }
 
+    @Override
+    public AbstractFieldPanel<List<T>> setRequired(final boolean required) {
+        palette.setRequired(required);
+        return super.setRequired(required);
+    }
+
     public static class Builder<T extends Serializable> implements Serializable {
 
         private static final long serialVersionUID = 991248996001040352L;


[syncope] 01/02: [SYNCOPE-1538] Adjusting realm search to Admin Console needs

Posted by il...@apache.org.
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

commit 28f31bb8b93cb508110d0fb0a125eb974fcb3df4
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Tue Feb 4 10:14:52 2020 +0100

    [SYNCOPE-1538] Adjusting realm search to Admin Console needs
---
 .../org/apache/syncope/common/lib/to/RealmTO.java    |  3 ++-
 .../common/rest/api/service/RealmService.java        | 13 ++++++++-----
 .../org/apache/syncope/core/logic/RealmLogic.java    | 20 +++++++++++++-------
 .../core/rest/cxf/service/RealmServiceImpl.java      |  8 ++++++--
 .../apache/syncope/fit/core/MultitenancyITCase.java  | 10 +++++-----
 .../org/apache/syncope/fit/core/RealmITCase.java     |  5 +++--
 .../java/org/apache/syncope/fit/core/UserITCase.java |  2 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java    |  4 ++--
 8 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java
index 03a0905..910043f 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java
@@ -33,11 +33,12 @@ import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.syncope.common.lib.BaseBean;
 import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
 
 @XmlRootElement(name = "realm")
 @XmlType
-public class RealmTO implements NamedEntityTO, TemplatableTO {
+public class RealmTO extends BaseBean implements NamedEntityTO, TemplatableTO {
 
     private static final long serialVersionUID = 516330662956254391L;
 
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
index 0790b7c..79cc617 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
@@ -42,6 +42,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.rest.api.RESTHeaders;
@@ -58,21 +59,23 @@ import org.apache.syncope.common.rest.api.beans.RealmQuery;
 public interface RealmService extends JAXRSService {
 
     /**
-     * Returns a paged list of existing realms matching the given query.
+     * Returns a list of existing realms matching the given query (not including descendant realms) and the total number
+     * of descedant realms.
      *
      * @param query query conditions
-     * @return paged list of existing realms matching the given query
+     * @return list of existing realms matching the given query (not including descendant realms) and the total number
+     * of descedant realms
      */
     @GET
     @Path("search")
     @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    List<RealmTO> search(@BeanParam RealmQuery query);
+    PagedResult<RealmTO> search(@BeanParam RealmQuery query);
 
     /**
-     * Returns realms rooted at the given path.
+     * Returns realms rooted at the given path, including descendant realms.
      *
      * @param fullPath full path of the root realm where to read from
-     * @return realms rooted at the given path
+     * @return realms rooted at the given path, including descendant realms
      */
     @GET
     @Path("{fullPath:.*}")
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index a1fd376..bad86d8 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -25,6 +25,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.RealmTO;
@@ -72,16 +73,21 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
 
     @PreAuthorize("hasRole('" + IdRepoEntitlement.REALM_LIST + "')")
     @Transactional(readOnly = true)
-    public List<RealmTO> search(final String keyword) {
+    public Pair<Integer, List<RealmTO>> search(final String keyword) {
         Set<String> bases = AuthContextUtils.getAuthorizations().get(IdRepoEntitlement.REALM_LIST);
 
-        return realmDAO.findMatching(keyword).stream().
+        Set<Realm> match = realmDAO.findMatching(keyword).stream().
                 filter(realm -> bases.stream().anyMatch(base -> realm.getFullPath().startsWith(base))).
-                flatMap(realm -> realmDAO.findDescendants(realm).stream()).
-                distinct().
-                map(realm -> binder.getRealmTO(realm, true)).
-                sorted(Comparator.comparing(RealmTO::getFullPath)).
-                collect(Collectors.toList());
+                collect(Collectors.toSet());
+
+        int descendants = Math.toIntExact(
+                match.stream().flatMap(realm -> realmDAO.findDescendants(realm).stream()).distinct().count());
+
+        return Pair.of(
+                descendants,
+                match.stream().map(realm -> binder.getRealmTO(realm, true)).
+                        sorted(Comparator.comparing(RealmTO::getFullPath)).
+                        collect(Collectors.toList()));
     }
 
     @PreAuthorize("isAuthenticated()")
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java
index 5767ad2..c80403e 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java
@@ -22,7 +22,9 @@ import java.net.URI;
 import java.util.List;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.rest.api.RESTHeaders;
@@ -39,9 +41,11 @@ public class RealmServiceImpl extends AbstractServiceImpl implements RealmServic
     private RealmLogic logic;
 
     @Override
-    public List<RealmTO> search(final RealmQuery query) {
+    public PagedResult<RealmTO> search(final RealmQuery query) {
         String keyword = query.getKeyword() == null ? null : query.getKeyword().replace('*', '%');
-        return logic.search(keyword);
+
+        Pair<Integer, List<RealmTO>> result = logic.search(keyword);
+        return buildPagedResult(result.getRight(), 1, result.getRight().size(), result.getLeft());
     }
 
     @Override
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
index f5f16e0..bd8cdde 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
@@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.junit.jupiter.api.Assumptions.assumeFalse;
 
-import java.util.List;
 import java.util.Locale;
 import javax.ws.rs.ForbiddenException;
 import javax.ws.rs.core.GenericType;
@@ -114,16 +113,17 @@ public class MultitenancyITCase extends AbstractITCase {
 
     @Test
     public void readRealm() {
-        List<RealmTO> realms = adminClient.getService(RealmService.class).
+        PagedResult<RealmTO> realms = adminClient.getService(RealmService.class).
                 search(new RealmQuery.Builder().keyword("*").build());
-        assertEquals(1, realms.size());
-        assertEquals(SyncopeConstants.ROOT_REALM, realms.get(0).getName());
+        assertEquals(1, realms.getTotalCount());
+        assertEquals(1, realms.getResult().size());
+        assertEquals(SyncopeConstants.ROOT_REALM, realms.getResult().get(0).getName());
     }
 
     @Test
     public void createUser() {
         assertNull(adminClient.getService(RealmService.class).
-                search(new RealmQuery.Builder().keyword("*").build()).get(0).getPasswordPolicy());
+                search(new RealmQuery.Builder().keyword("*").build()).getResult().get(0).getPasswordPolicy());
 
         UserCR userCR = new UserCR();
         userCR.setRealm(SyncopeConstants.ROOT_REALM);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
index bc86a1b..1d8d5bc 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
@@ -36,6 +36,7 @@ import org.apache.syncope.common.lib.policy.AccountPolicyTO;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.lib.policy.DefaultAccountRuleConf;
 import org.apache.syncope.common.lib.to.ImplementationTO;
+import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.ImplementationEngine;
@@ -58,8 +59,8 @@ public class RealmITCase extends AbstractITCase {
 
     @Test
     public void search() {
-        List<RealmTO> match = realmService.search(new RealmQuery.Builder().keyword("*o*").build());
-        assertTrue(match.stream().allMatch(realm -> realm.getName().contains("o")));
+        PagedResult<RealmTO> match = realmService.search(new RealmQuery.Builder().keyword("*o*").build());
+        assertTrue(match.getResult().stream().allMatch(realm -> realm.getName().contains("o")));
     }
 
     @Test
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
index f93a363..76da0ad 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
@@ -963,7 +963,7 @@ public class UserITCase extends AbstractITCase {
         passwordPolicy = createPolicy(PolicyType.PASSWORD, passwordPolicy);
         assertNotNull(passwordPolicy);
 
-        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).get(0);
+        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).getResult().get(0);
         String oldAccountPolicy = realm.getAccountPolicy();
         realm.setAccountPolicy(accountPolicy.getKey());
         String oldPasswordPolicy = realm.getPasswordPolicy();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
index a24107c..818fffa 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
@@ -793,7 +793,7 @@ public class UserIssuesITCase extends AbstractITCase {
         }
         assertNotNull(logicActions);
 
-        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).get(0);
+        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).getResult().get(0);
         assertNotNull(realm);
         realm.getActions().add(logicActions.getKey());
         realmService.update(realm);
@@ -1223,7 +1223,7 @@ public class UserIssuesITCase extends AbstractITCase {
         passwordPolicy = createPolicy(PolicyType.PASSWORD, passwordPolicy);
         assertNotNull(passwordPolicy);
 
-        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).get(0);
+        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).getResult().get(0);
         String oldPasswordPolicy = realm.getPasswordPolicy();
         realm.setPasswordPolicy(passwordPolicy.getKey());
         realmService.update(realm);