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

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


The following commit(s) were added to refs/heads/3_0_X by this push:
     new 2b9e921835 [SYNCOPE-1933] Ensure to show all dynamic memberships
2b9e921835 is described below

commit 2b9e9218354158384452ab5c1eb1254076d7e157
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Wed Nov 26 13:15:13 2025 +0100

    [SYNCOPE-1933] Ensure to show all dynamic memberships
---
 .../ui/commons/wizards/any/AbstractGroupsModel.java  |  5 -----
 .../syncope/client/console/wizards/any/Groups.java   | 16 ++++++++--------
 .../syncope/client/enduser/panels/any/Groups.java    |  5 -----
 .../persistence/jpa/JPAJSONPersistenceContext.java   |  3 +++
 .../core/persistence/jpa/dao/JPAJSONGroupDAO.java    |  3 +++
 .../core/persistence/jpa/PersistenceContext.java     |  2 ++
 .../core/persistence/jpa/dao/JPAGroupDAO.java        | 20 +++++++++++++-------
 7 files changed, 29 insertions(+), 25 deletions(-)

diff --git 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
index 395db18d56..7264856b08 100644
--- 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
+++ 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
@@ -56,10 +56,5 @@ public abstract class AbstractGroupsModel extends 
ListModel<GroupTO> {
         return memberships;
     }
 
-    /**
-     * Retrieve dyn group memberships.
-     */
-    protected abstract void reloadDynMemberships();
-
     public abstract List<String> getDynMemberships();
 }
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
index e1c83b6209..d662e508ff 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -252,24 +252,24 @@ public class Groups extends AbstractGroups {
             memberships.sort(Comparator.comparing(MembershipTO::getGroupName));
         }
 
-        @Override
         protected void reloadDynMemberships() {
             GroupFiqlSearchConditionBuilder builder = 
SyncopeClient.getGroupSearchConditionBuilder();
 
             List<CompleteCondition> conditions = 
GroupableRelatableTO.class.cast(anyTO).getDynMemberships().
                     stream().map(membership -> 
builder.is(Constants.KEY_FIELD_NAME).
-                    equalTo(membership.getGroupKey()).wrap()).
-                    collect(Collectors.toList());
+                    
equalTo(membership.getGroupKey()).wrap()).collect(Collectors.toList());
 
-            dynMemberships = new ArrayList<>();
             if 
(SyncopeConsoleSession.get().owns(IdRepoEntitlement.GROUP_SEARCH) && 
!conditions.isEmpty()) {
-                dynMemberships.addAll(groupRestClient.search(
+                dynMemberships = groupRestClient.search(
                         SyncopeConstants.ROOT_REALM,
                         builder.or(conditions).query(),
-                        -1,
-                        -1,
+                        1,
+                        Constants.MAX_GROUP_LIST_SIZE,
                         new SortParam<>(Constants.NAME_FIELD_NAME, true),
-                        
null).stream().map(GroupTO::getName).collect(Collectors.toList()));
+                        
null).stream().map(GroupTO::getName).collect(Collectors.toList());
+            } else {
+                dynMemberships = 
GroupableRelatableTO.class.cast(anyTO).getDynMemberships().
+                        
stream().map(MembershipTO::getGroupName).collect(Collectors.toList());
             }
         }
 
diff --git 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
index c767c3544d..8b4dcc02a0 100644
--- 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
+++ 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
@@ -195,11 +195,6 @@ public class Groups extends Panel {
             memberships = 
GroupableRelatableTO.class.cast(anyTO).getMemberships();
         }
 
-        @Override
-        protected void reloadDynMemberships() {
-            // DO NOTHING
-        }
-
         @Override
         public List<String> getDynMemberships() {
             return List.of();
diff --git 
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/JPAJSONPersistenceContext.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/JPAJSONPersistenceContext.java
index d7d22ffc8f..86dcaa280c 100644
--- 
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/JPAJSONPersistenceContext.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/JPAJSONPersistenceContext.java
@@ -31,6 +31,7 @@ import 
org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrValueDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 import org.apache.syncope.core.persistence.api.dao.RoleDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
@@ -83,6 +84,7 @@ public abstract class JPAJSONPersistenceContext {
             final @Lazy PlainSchemaDAO plainSchemaDAO,
             final @Lazy DerSchemaDAO derSchemaDAO,
             final @Lazy DynRealmDAO dynRealmDAO,
+            final @Lazy RealmDAO realmDAO,
             final @Lazy AnyMatchDAO anyMatchDAO,
             final @Lazy PlainAttrDAO plainAttrDAO,
             final @Lazy UserDAO userDAO,
@@ -97,6 +99,7 @@ public abstract class JPAJSONPersistenceContext {
                 plainSchemaDAO,
                 derSchemaDAO,
                 dynRealmDAO,
+                realmDAO,
                 anyMatchDAO,
                 plainAttrDAO,
                 userDAO,
diff --git 
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONGroupDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONGroupDAO.java
index 281bef1b16..c51473176e 100644
--- 
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONGroupDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONGroupDAO.java
@@ -28,6 +28,7 @@ import 
org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
 import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
 import org.apache.syncope.core.persistence.api.entity.DerSchema;
@@ -49,6 +50,7 @@ public class JPAJSONGroupDAO extends JPAGroupDAO {
             final PlainSchemaDAO plainSchemaDAO,
             final DerSchemaDAO derSchemaDAO,
             final DynRealmDAO dynRealmDAO,
+            final RealmDAO realmDAO,
             final AnyMatchDAO anyMatchDAO,
             final PlainAttrDAO plainAttrDAO,
             final UserDAO userDAO,
@@ -62,6 +64,7 @@ public class JPAJSONGroupDAO extends JPAGroupDAO {
                 plainSchemaDAO,
                 derSchemaDAO,
                 dynRealmDAO,
+                realmDAO,
                 anyMatchDAO,
                 plainAttrDAO,
                 userDAO,
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
index 33f1e234c1..dc6d4cd09f 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
@@ -504,6 +504,7 @@ public class PersistenceContext {
             final @Lazy PlainSchemaDAO plainSchemaDAO,
             final @Lazy DerSchemaDAO derSchemaDAO,
             final @Lazy DynRealmDAO dynRealmDAO,
+            final @Lazy RealmDAO realmDAO,
             final AnyMatchDAO anyMatchDAO,
             final PlainAttrDAO plainAttrDAO,
             final @Lazy UserDAO userDAO,
@@ -517,6 +518,7 @@ public class PersistenceContext {
                 plainSchemaDAO,
                 derSchemaDAO,
                 dynRealmDAO,
+                realmDAO,
                 anyMatchDAO,
                 plainAttrDAO,
                 userDAO,
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index fb6459876c..ad13f361a1 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -30,6 +30,7 @@ import javax.persistence.NoResultException;
 import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
@@ -41,6 +42,7 @@ import 
org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
@@ -81,6 +83,8 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> 
implements GroupDAO {
 
     protected final ApplicationEventPublisher publisher;
 
+    protected final RealmDAO realmDAO;
+
     protected final AnyMatchDAO anyMatchDAO;
 
     protected final PlainAttrDAO plainAttrDAO;
@@ -99,6 +103,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> 
implements GroupDAO {
             final PlainSchemaDAO plainSchemaDAO,
             final DerSchemaDAO derSchemaDAO,
             final DynRealmDAO dynRealmDAO,
+            final RealmDAO realmDAO,
             final AnyMatchDAO anyMatchDAO,
             final PlainAttrDAO plainAttrDAO,
             final UserDAO userDAO,
@@ -108,6 +113,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> 
implements GroupDAO {
 
         super(anyUtilsFactory, plainSchemaDAO, derSchemaDAO, dynRealmDAO);
         this.publisher = publisher;
+        this.realmDAO = realmDAO;
         this.anyMatchDAO = anyMatchDAO;
         this.plainAttrDAO = plainAttrDAO;
         this.userDAO = userDAO;
@@ -278,7 +284,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> 
implements GroupDAO {
     public List<UMembership> findUMemberships(final Group group, final int 
page, final int itemsPerPage) {
         TypedQuery<UMembership> query = entityManager().createQuery(
                 "SELECT e FROM " + JPAUMembership.class.getSimpleName()
-                        + " e WHERE e.rightEnd=:group ORDER BY e.leftEnd",
+                + " e WHERE e.rightEnd=:group ORDER BY e.leftEnd",
                 UMembership.class);
         query.setParameter("group", group);
         query.setFirstResult(itemsPerPage * (page <= 0 ? 0 : page - 1));
@@ -315,12 +321,12 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> 
implements GroupDAO {
         if (merged.getUDynMembership() != null) {
             SearchCond cond = 
buildDynMembershipCond(merged.getUDynMembership().getFIQLCond());
             int count = anySearchDAO.count(
-                    merged.getRealm(), true, 
Set.of(merged.getRealm().getFullPath()), cond, AnyTypeKind.USER);
+                    realmDAO.getRoot(), true, 
Set.of(SyncopeConstants.ROOT_REALM), cond, AnyTypeKind.USER);
             for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; 
page++) {
                 List<User> matching = anySearchDAO.search(
-                        merged.getRealm(),
+                        realmDAO.getRoot(),
                         true,
-                        Set.of(merged.getRealm().getFullPath()),
+                        Set.of(SyncopeConstants.ROOT_REALM),
                         cond,
                         page,
                         AnyDAO.DEFAULT_PAGE_SIZE,
@@ -343,12 +349,12 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> 
implements GroupDAO {
         merged.getADynMemberships().forEach(memb -> {
             SearchCond cond = buildDynMembershipCond(memb.getFIQLCond());
             int count = anySearchDAO.count(
-                    merged.getRealm(), true, 
Set.of(merged.getRealm().getFullPath()), cond, AnyTypeKind.ANY_OBJECT);
+                    realmDAO.getRoot(), true, 
Set.of(SyncopeConstants.ROOT_REALM), cond, AnyTypeKind.ANY_OBJECT);
             for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; 
page++) {
                 List<AnyObject> matching = anySearchDAO.search(
-                        merged.getRealm(),
+                        realmDAO.getRoot(),
                         true,
-                        Set.of(merged.getRealm().getFullPath()),
+                        Set.of(SyncopeConstants.ROOT_REALM),
                         cond,
                         page,
                         AnyDAO.DEFAULT_PAGE_SIZE,

Reply via email to