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,