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 2017/05/16 13:40:07 UTC
[1/2] syncope git commit: [SYNCOPE-1082] using native queries to work
with dynamic members' tables
Repository: syncope
Updated Branches:
refs/heads/2_0_X 841f3e63e -> f77f4f7f4
refs/heads/master 66f665191 -> 9fc62b668
[SYNCOPE-1082] using native queries to work with dynamic members' tables
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/f77f4f7f
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/f77f4f7f
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/f77f4f7f
Branch: refs/heads/2_0_X
Commit: f77f4f7f4fb2dd1d4cfc175389684c68c66fce14
Parents: 841f3e6
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue May 16 11:02:38 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue May 16 11:02:38 2017 +0200
----------------------------------------------------------------------
.../core/persistence/api/dao/AnyObjectDAO.java | 2 +-
.../core/persistence/api/dao/GroupDAO.java | 8 ++
.../core/persistence/api/dao/RoleDAO.java | 4 +
.../core/persistence/api/dao/UserDAO.java | 6 +-
.../persistence/api/entity/DynMembership.java | 4 +-
.../persistence/jpa/dao/JPAAnyObjectDAO.java | 22 ++--
.../core/persistence/jpa/dao/JPAGroupDAO.java | 101 +++++++++++++++++--
.../core/persistence/jpa/dao/JPARoleDAO.java | 42 +++++++-
.../core/persistence/jpa/dao/JPAUserDAO.java | 32 +++---
.../anyobject/JPAADynGroupMembership.java | 9 +-
.../jpa/entity/user/AbstractUDynMembership.java | 5 +-
.../jpa/entity/user/JPADynRoleMembership.java | 4 +-
.../jpa/entity/user/JPAUDynGroupMembership.java | 4 +-
.../core/persistence/jpa/outer/GroupTest.java | 48 +++++----
.../core/persistence/jpa/outer/RoleTest.java | 18 ++--
.../java/data/AnyObjectDataBinderImpl.java | 2 +-
.../java/data/RoleDataBinderImpl.java | 2 +-
.../java/data/UserDataBinderImpl.java | 4 +-
.../client/ElasticsearchUtils.java | 11 +-
pom.xml | 2 +-
20 files changed, 236 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
index c3a4cd7..650130c 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
@@ -43,7 +43,7 @@ public interface AnyObjectDAO extends AnyDAO<AnyObject> {
AnyObject authFindByName(String name);
- List<Group> findDynGroupMemberships(AnyObject anyObject);
+ List<Group> findDynGroups(AnyObject anyObject);
List<ARelationship> findAllARelationships(AnyObject anyObject);
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
index c74e430..b08c9b9 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
@@ -46,8 +46,16 @@ public interface GroupDAO extends AnyDAO<Group> {
List<TypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
+ List<String> findADynMembersKeys(Group group);
+
void refreshDynMemberships(AnyObject anyObject);
+ void removeDynMemberships(AnyObject anyObject);
+
+ List<String> findUDynMembersKeys(Group group);
+
void refreshDynMemberships(User user);
+ void removeDynMemberships(User user);
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
index c5ff0e8..16f3003 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
@@ -39,5 +39,9 @@ public interface RoleDAO extends DAO<Role> {
void delete(String key);
+ List<String> findDynMembersKeys(Role role);
+
void refreshDynMemberships(User user);
+
+ void removeDynMemberships(User user);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
index 55efa93..9e44bb3 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
@@ -42,12 +42,12 @@ public interface UserDAO extends AnyDAO<User> {
List<User> findBySecurityQuestion(SecurityQuestion securityQuestion);
- List<Role> findDynRoleMemberships(User user);
-
- List<Group> findDynGroupMemberships(User user);
+ List<Role> findDynRoles(User user);
Collection<Role> findAllRoles(User user);
+ List<Group> findDynGroups(User user);
+
Collection<Group> findAllGroups(User user);
Collection<String> findAllGroupKeys(User user);
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
index c3bcea9..2b12744 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
@@ -18,8 +18,6 @@
*/
package org.apache.syncope.core.persistence.api.entity;
-import java.util.List;
-
public interface DynMembership<A extends Any<?>> extends Entity {
String getFIQLCond();
@@ -28,5 +26,5 @@ public interface DynMembership<A extends Any<?>> extends Entity {
boolean add(A any);
- List<? extends A> getMembers();
+ void clear();
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index a64afe3..23234b3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import static org.apache.syncope.core.persistence.jpa.dao.AbstractDAO.LOG;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -232,34 +234,32 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
}
@Override
- public void delete(final AnyObject any) {
- for (Group group : findDynGroupMemberships(any)) {
- group.getADynMembership(any.getType()).getMembers().remove(any);
- }
+ public void delete(final AnyObject anyObject) {
+ groupDAO().removeDynMemberships(anyObject);
- for (ARelationship relationship : findARelationships(any)) {
+ for (ARelationship relationship : findARelationships(anyObject)) {
relationship.getLeftEnd().getRelationships().remove(relationship);
save(relationship.getLeftEnd());
entityManager().remove(relationship);
}
- for (URelationship relationship : findURelationships(any)) {
+ for (URelationship relationship : findURelationships(anyObject)) {
relationship.getLeftEnd().getRelationships().remove(relationship);
userDAO().save(relationship.getLeftEnd());
entityManager().remove(relationship);
}
- entityManager().remove(any);
- publisher.publishEvent(new AnyDeletedEvent(this, AnyTypeKind.ANY_OBJECT, any.getKey()));
+ entityManager().remove(anyObject);
+ publisher.publishEvent(new AnyDeletedEvent(this, AnyTypeKind.ANY_OBJECT, anyObject.getKey()));
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public List<Group> findDynGroupMemberships(final AnyObject anyObject) {
+ public List<Group> findDynGroups(final AnyObject anyObject) {
Query query = entityManager().createNativeQuery(
"SELECT t2.id FROM " + JPAADynGroupMembership.TABLE + " t0 "
- + "INNER JOIN ADynGroupMembership_AnyObject t1 "
+ + "INNER JOIN " + JPAADynGroupMembership.JOIN_TABLE + " t1 "
+ "ON t0.id = t1.aDynGroupMembership_id "
+ "LEFT OUTER JOIN " + JPAGroup.TABLE + " t2 "
+ "ON t0.GROUP_ID = t2.id "
@@ -293,7 +293,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
return input.getRightEnd();
}
}, new ArrayList<Group>()),
- findDynGroupMemberships(anyObject));
+ findDynGroups(anyObject));
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
----------------------------------------------------------------------
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 54423b8..93ceddc 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
@@ -18,6 +18,9 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import static org.apache.syncope.core.persistence.jpa.dao.AbstractDAO.LOG;
+
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -56,8 +59,10 @@ import org.apache.syncope.core.persistence.api.entity.group.TypeExtension;
import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr;
import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
+import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership;
import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAMembership;
import org.apache.syncope.core.persistence.jpa.entity.group.JPATypeExtension;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUMembership;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.spring.event.AnyCreatedUpdatedEvent;
@@ -271,7 +276,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(merged.getUDynMembership().getFIQLCond(), merged.getRealm()),
AnyTypeKind.USER);
- merged.getUDynMembership().getMembers().clear();
+ merged.getUDynMembership().clear();
for (User user : matching) {
merged.getUDynMembership().add(user);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, user));
@@ -282,7 +287,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(memb.getFIQLCond(), merged.getRealm()),
AnyTypeKind.ANY_OBJECT);
- memb.getMembers().clear();
+ memb.clear();
for (AnyObject anyObject : matching) {
memb.add(anyObject);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, anyObject));
@@ -337,6 +342,26 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
return query.getResultList();
}
+ @Override
+ public List<String> findADynMembersKeys(final Group group) {
+ List<String> result = new ArrayList<>();
+ for (ADynGroupMembership memb : group.getADynMemberships()) {
+ Query query = entityManager().createNativeQuery(
+ "SELECT t.anyObject_id FROM " + JPAADynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.aDynGroupMembership_id=?");
+ query.setParameter(1, memb.getKey());
+
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ result.add(actualKey);
+ }
+ }
+ return result;
+ }
+
private List<Group> findWithADynMemberships(final int page, final int itemsPerPage) {
TypedQuery<Group> query = entityManager().createQuery(
"SELECT e FROM " + JPAGroup.class.getSimpleName() + " e WHERE e.aDynMemberships IS NOT EMPTY",
@@ -363,16 +388,56 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(memb.getFIQLCond(), group.getRealm()))) {
memb.add(anyObject);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
} else {
- memb.getMembers().remove(anyObject);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAADynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.anyObject_id=? and t.aDynGroupMembership_id=?");
+ query.setParameter(1, anyObject.getKey());
+ query.setParameter(2, memb.getKey());
+ query.executeUpdate();
}
+
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
}
}
}
}
+ }
+
+ @Override
+ public void removeDynMemberships(final AnyObject anyObject) {
+ List<Group> dynGroups = anyObjectDAO().findDynGroups(anyObject);
+
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAADynGroupMembership.JOIN_TABLE + " t WHERE t.anyObject_id=?");
+ query.setParameter(1, anyObject.getKey());
+ query.executeUpdate();
+ for (Group group : dynGroups) {
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ }
+ }
+
+ @Override
+ public List<String> findUDynMembersKeys(final Group group) {
+ if (group.getUDynMembership() == null) {
+ return Collections.emptyList();
+ }
+
+ Query query = entityManager().createNativeQuery(
+ "SELECT t.user_id FROM " + JPAUDynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.uDynGroupMembership_id=?");
+ query.setParameter(1, group.getUDynMembership().getKey());
+
+ List<String> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ result.add(actualKey);
+ }
+ return result;
}
private List<Group> findWithUDynMemberships(final int page, final int itemsPerPage) {
@@ -400,13 +465,33 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(group.getUDynMembership().getFIQLCond(), group.getRealm()))) {
group.getUDynMembership().add(user);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
} else {
- group.getUDynMembership().getMembers().remove(user);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAUDynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.user_id=? and t.uDynGroupMembership_id=?");
+ query.setParameter(1, user.getKey());
+ query.setParameter(2, group.getUDynMembership().getKey());
+ query.executeUpdate();
}
+
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
}
}
}
}
+
+ @Override
+ public void removeDynMemberships(final User user) {
+ List<Group> dynGroups = userDAO().findDynGroups(user);
+
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAUDynGroupMembership.JOIN_TABLE + " t WHERE t.user_id=?");
+ query.setParameter(1, user.getKey());
+ query.executeUpdate();
+
+ for (Group group : dynGroups) {
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
index a5cabbb..7aa9300 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
@@ -29,6 +31,7 @@ import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.persistence.api.entity.Role;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.jpa.entity.JPARole;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.spring.event.AnyCreatedUpdatedEvent;
@@ -88,7 +91,7 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
List<User> matchingUsers = searchDAO().search(
SearchCondConverter.convert(role.getDynMembership().getFIQLCond()), AnyTypeKind.USER);
- role.getDynMembership().getMembers().clear();
+ role.getDynMembership().clear();
for (User user : matchingUsers) {
role.getDynMembership().add(user);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, user));
@@ -122,6 +125,28 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
delete(role);
}
+ @Override
+ public List<String> findDynMembersKeys(final Role role) {
+ if (role.getDynMembership() == null) {
+ return Collections.emptyList();
+ }
+
+ Query query = entityManager().createNativeQuery(
+ "SELECT t.user_id FROM " + JPADynRoleMembership.JOIN_TABLE + " t "
+ + "WHERE t.dynRoleMembership_id=?");
+ query.setParameter(1, role.getDynMembership().getKey());
+
+ List<String> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ result.add(actualKey);
+ }
+ return result;
+ }
+
@Transactional
@Override
public void refreshDynMemberships(final User user) {
@@ -130,10 +155,23 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
if (searchDAO().matches(user, SearchCondConverter.convert(role.getDynMembership().getFIQLCond()))) {
role.getDynMembership().add(user);
} else {
- role.getDynMembership().getMembers().remove(user);
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPADynRoleMembership.JOIN_TABLE + " t "
+ + "WHERE t.user_id=? and t.dynRoleMembership_id=?");
+ query.setParameter(1, user.getKey());
+ query.setParameter(2, role.getDynMembership().getKey());
+ query.executeUpdate();
}
}
}
}
+ @Override
+ public void removeDynMemberships(final User user) {
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPADynRoleMembership.JOIN_TABLE + " t WHERE t.user_id=?");
+ query.setParameter(1, user.getKey());
+ query.executeUpdate();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index a6b4383..92b94fb 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import static org.apache.syncope.core.persistence.jpa.dao.AbstractDAO.LOG;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -452,12 +454,8 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Override
public void delete(final User user) {
- for (Role role : findDynRoleMemberships(user)) {
- role.getDynMembership().getMembers().remove(user);
- }
- for (Group group : findDynGroupMemberships(user)) {
- group.getUDynMembership().getMembers().remove(user);
- }
+ roleDAO.removeDynMemberships(user);
+ groupDAO.removeDynMemberships(user);
AccessToken accessToken = accessTokenDAO.findByOwner(user.getUsername());
if (accessToken != null) {
@@ -470,10 +468,16 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public List<Role> findDynRoleMemberships(final User user) {
+ public Collection<Role> findAllRoles(final User user) {
+ return CollectionUtils.union(user.getRoles(), findDynRoles(user));
+ }
+
+ @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
+ @Override
+ public List<Role> findDynRoles(final User user) {
Query query = entityManager().createNativeQuery(
"SELECT t2.id FROM " + JPADynRoleMembership.TABLE + " t0 "
- + "INNER JOIN " + JPADynRoleMembership.TABLE + "_User t1 "
+ + "INNER JOIN " + JPADynRoleMembership.JOIN_TABLE + " t1 "
+ "ON t0.id = t1.dynRoleMembership_id "
+ "LEFT OUTER JOIN " + JPARole.TABLE + " t2 "
+ "ON t0.ROLE_ID = t2.id "
@@ -498,10 +502,10 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public List<Group> findDynGroupMemberships(final User user) {
+ public List<Group> findDynGroups(final User user) {
Query query = entityManager().createNativeQuery(
"SELECT t2.id FROM " + JPAUDynGroupMembership.TABLE + " t0 "
- + "INNER JOIN " + JPAUDynGroupMembership.TABLE + "_User t1 "
+ + "INNER JOIN " + JPAUDynGroupMembership.JOIN_TABLE + " t1 "
+ "ON t0.id = t1.uDynGroupMembership_id "
+ "LEFT OUTER JOIN " + JPAGroup.TABLE + " t2 "
+ "ON t0.GROUP_ID = t2.id "
@@ -526,12 +530,6 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public Collection<Role> findAllRoles(final User user) {
- return CollectionUtils.union(user.getRoles(), findDynRoleMemberships(user));
- }
-
- @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
- @Override
public Collection<Group> findAllGroups(final User user) {
return CollectionUtils.union(
CollectionUtils.collect(user.getMemberships(), new Transformer<UMembership, Group>() {
@@ -541,7 +539,7 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
return input.getRightEnd();
}
}, new ArrayList<Group>()),
- findDynGroupMemberships(user));
+ findDynGroups(user));
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
index 4bb75fc..5ae02d3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
@@ -43,6 +43,8 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
public static final String TABLE = "ADynGroupMembership";
+ public static final String JOIN_TABLE = TABLE + "_AnyObject";
+
@OneToOne
private JPAGroup group;
@@ -50,7 +52,7 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
private JPAAnyType anyType;
@ManyToMany
- @JoinTable(joinColumns =
+ @JoinTable(name = JOIN_TABLE, joinColumns =
@JoinColumn(name = "aDynGroupMembership_id"),
inverseJoinColumns =
@JoinColumn(name = "anyObject_id"))
@@ -85,7 +87,8 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
}
@Override
- public List<? extends AnyObject> getMembers() {
- return anyObjects;
+ public void clear() {
+ anyObjects.clear();
}
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
index d4fe264..963b742 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
@@ -37,7 +37,8 @@ public abstract class AbstractUDynMembership extends AbstractDynMembership<User>
}
@Override
- public List<? extends User> getMembers() {
- return internalGetUsers();
+ public void clear() {
+ internalGetUsers().clear();
}
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
index dbb2fab..aa310cd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
@@ -38,11 +38,13 @@ public class JPADynRoleMembership extends AbstractUDynMembership implements DynR
public static final String TABLE = "DynRoleMembership";
+ public static final String JOIN_TABLE = TABLE + "_User";
+
@OneToOne
private JPARole role;
@ManyToMany
- @JoinTable(name = TABLE + "_User", joinColumns =
+ @JoinTable(name = JOIN_TABLE, joinColumns =
@JoinColumn(name = "dynRoleMembership_id"),
inverseJoinColumns =
@JoinColumn(name = "user_id"))
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
index 53db0d9..63228b3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
@@ -38,11 +38,13 @@ public class JPAUDynGroupMembership extends AbstractUDynMembership implements UD
public static final String TABLE = "UDynGroupMembership";
+ public static final String JOIN_TABLE = TABLE + "_User";
+
@OneToOne
private JPAGroup group;
@ManyToMany
- @JoinTable(name = TABLE + "_User", joinColumns =
+ @JoinTable(name = JOIN_TABLE, joinColumns =
@JoinColumn(name = "uDynGroupMembership_id"),
inverseJoinColumns =
@JoinColumn(name = "user_id"))
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index 39eb25e..ff050bf 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -24,15 +24,16 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import javax.persistence.TypedQuery;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
@@ -228,11 +229,10 @@ public class GroupTest extends AbstractTest {
assertEquals(actual, actual.getUDynMembership().getGroup());
// 3. verify that expected users have the created group dynamically assigned
- assertEquals(2, actual.getUDynMembership().getMembers().size());
+ List<String> members = groupDAO.findUDynMembersKeys(actual);
+ assertEquals(2, members.size());
assertEquals(new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
- CollectionUtils.collect(actual.getUDynMembership().getMembers(),
- EntityUtils.<User>keyTransformer(),
- new HashSet<String>()));
+ new HashSet<>(members));
user = userDAO.findByUsername("bellini");
assertNotNull(user);
@@ -246,10 +246,9 @@ public class GroupTest extends AbstractTest {
userDAO.flush();
actual = groupDAO.find(actual.getKey());
- assertEquals(1, actual.getUDynMembership().getMembers().size());
- assertEquals(
- "c9b2dec2-00a7-4855-97c0-d854842b4b24",
- actual.getUDynMembership().getMembers().get(0).getKey());
+ members = groupDAO.findUDynMembersKeys(actual);
+ assertEquals(1, members.size());
+ assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", members.get(0));
// 5. delete group and verify that dynamic membership was also removed
String dynMembershipKey = actual.getUDynMembership().getKey();
@@ -321,12 +320,18 @@ public class GroupTest extends AbstractTest {
assertEquals(actual, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getGroup());
// 3. verify that expected any objects have the created group dynamically assigned
- assertEquals(2, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().size());
- assertEquals(new HashSet<>(Arrays.asList(
- "fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey)),
- CollectionUtils.collect(actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers(),
- EntityUtils.<AnyObject>keyTransformer(),
- new HashSet<String>()));
+ System.out.println("MMMMMMMMM " + groupDAO.findADynMembersKeys(actual));
+ List<String> members = CollectionUtils.select(groupDAO.findADynMembersKeys(actual), new Predicate<String>() {
+
+ @Override
+ public boolean evaluate(final String object) {
+ return "PRINTER".equals(anyObjectDAO.find(object).getType().getKey());
+ }
+ }, new ArrayList<String>());
+ assertEquals(2, members.size());
+ assertEquals(
+ new HashSet<>(Arrays.asList("fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey)),
+ new HashSet<>(members));
anyObject = anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
assertNotNull(anyObject);
@@ -340,10 +345,15 @@ public class GroupTest extends AbstractTest {
anyObjectDAO.flush();
actual = groupDAO.find(actual.getKey());
- assertEquals(1, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().size());
- assertEquals(
- "fc6dbc3a-6c07-4965-8781-921e7401a4a5",
- actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().get(0).getKey());
+ members = CollectionUtils.select(groupDAO.findADynMembersKeys(actual), new Predicate<String>() {
+
+ @Override
+ public boolean evaluate(final String object) {
+ return "PRINTER".equals(anyObjectDAO.find(object).getType().getKey());
+ }
+ }, new ArrayList<String>());
+ assertEquals(1, members.size());
+ assertEquals("fc6dbc3a-6c07-4965-8781-921e7401a4a5", members.get(0));
// 5. delete group and verify that dynamic membership was also removed
String dynMembershipKey = actual.getADynMembership(anyTypeDAO.find("PRINTER")).getKey();
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
index 04d3e39..49d92c7 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
@@ -26,11 +26,10 @@ import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import javax.persistence.TypedQuery;
-import org.apache.commons.collections4.CollectionUtils;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
@@ -123,11 +122,11 @@ public class RoleTest extends AbstractTest {
assertEquals(actual, actual.getDynMembership().getRole());
// 3. verify that expected users have the created role dynamically assigned
- assertEquals(2, actual.getDynMembership().getMembers().size());
- assertEquals(new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
- CollectionUtils.collect(actual.getDynMembership().getMembers(),
- EntityUtils.<User>keyTransformer(),
- new HashSet<String>()));
+ List<String> members = roleDAO.findDynMembersKeys(actual);
+ assertEquals(2, members.size());
+ assertEquals(
+ new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
+ new HashSet<>(members));
user = userDAO.find("c9b2dec2-00a7-4855-97c0-d854842b4b24");
assertNotNull(user);
@@ -141,8 +140,9 @@ public class RoleTest extends AbstractTest {
userDAO.flush();
actual = roleDAO.find(actual.getKey());
- assertEquals(1, actual.getDynMembership().getMembers().size());
- assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", actual.getDynMembership().getMembers().get(0).getKey());
+ members = roleDAO.findDynMembersKeys(actual);
+ assertEquals(1, members.size());
+ assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", members.get(0));
// 5. delete role and verify that dynamic membership was also removed
String dynMembershipKey = actual.getDynMembership().getKey();
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index 677bf81..fa17f20 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -125,7 +125,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
}, anyObjectTO.getMemberships());
// dynamic memberships
- CollectionUtils.collect(anyObjectDAO.findDynGroupMemberships(anyObject),
+ CollectionUtils.collect(anyObjectDAO.findDynGroups(anyObject),
EntityUtils.<Group>keyTransformer(), anyObjectTO.getDynGroups());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
index 7db064d..567739d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
@@ -100,7 +100,7 @@ public class RoleDataBinderImpl implements RoleDataBinder {
} else if (role.getDynMembership() != null && roleTO.getDynMembershipCond() != null
&& !role.getDynMembership().getFIQLCond().equals(roleTO.getDynMembershipCond())) {
- role.getDynMembership().getMembers().clear();
+ role.getDynMembership().clear();
setDynMembership(role, roleTO.getDynMembershipCond());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index fe21b51..2ba5d85 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -613,9 +613,9 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
}, userTO.getMemberships());
// dynamic memberships
- CollectionUtils.collect(userDAO.findDynRoleMemberships(user),
+ CollectionUtils.collect(userDAO.findDynRoles(user),
EntityUtils.<Role>keyTransformer(), userTO.getDynRoles());
- CollectionUtils.collect(userDAO.findDynGroupMemberships(user),
+ CollectionUtils.collect(userDAO.findDynGroups(user),
EntityUtils.<Group>keyTransformer(), userTO.getDynGroups());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
----------------------------------------------------------------------
diff --git a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index 572ef37..1d22a1e 100644
--- a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++ b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -32,12 +32,10 @@ import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.PlainAttr;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.Role;
-import org.apache.syncope.core.persistence.api.entity.anyobject.ADynGroupMembership;
import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship;
import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
import org.apache.syncope.core.persistence.api.entity.group.Group;
-import org.apache.syncope.core.persistence.api.entity.user.UDynGroupMembership;
import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.apache.syncope.core.persistence.api.entity.user.URelationship;
import org.apache.syncope.core.persistence.api.entity.user.User;
@@ -130,10 +128,7 @@ public class ElasticsearchUtils {
return input.getLeftEnd().getKey();
}
}, new ArrayList<>());
- UDynGroupMembership udynmembership = group.getUDynMembership();
- if (udynmembership != null) {
- CollectionUtils.collect(udynmembership.getMembers(), EntityUtils.keyTransformer(), members);
- }
+ members.add(groupDAO.findUDynMembersKeys(group));
CollectionUtils.collect(groupDAO.findAMemberships(group),
new Transformer<AMembership, Object>() {
@@ -142,9 +137,7 @@ public class ElasticsearchUtils {
return input.getLeftEnd().getKey();
}
}, members);
- for (ADynGroupMembership adynmembership : group.getADynMemberships()) {
- CollectionUtils.collect(adynmembership.getMembers(), EntityUtils.keyTransformer(), members);
- }
+ members.add(groupDAO.findADynMembersKeys(group));
builder = builder.field("members", members);
} else if (any instanceof User) {
User user = ((User) any);
http://git-wip-us.apache.org/repos/asf/syncope/blob/f77f4f7f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 847df88..8d32416 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1633,7 +1633,7 @@ under the License.
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
- <version>1.5.4</version>
+ <version>1.5.5</version>
<scope>test</scope>
</dependency>
<dependency>
[2/2] syncope git commit: [SYNCOPE-1082] using native queries to work
with dynamic members' tables
Posted by il...@apache.org.
[SYNCOPE-1082] using native queries to work with dynamic members' tables
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/9fc62b66
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/9fc62b66
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/9fc62b66
Branch: refs/heads/master
Commit: 9fc62b668a300567cb3e3d6c468187226e387663
Parents: 66f6651
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue May 16 11:02:38 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue May 16 11:03:04 2017 +0200
----------------------------------------------------------------------
.../core/persistence/api/dao/AnyObjectDAO.java | 2 +-
.../core/persistence/api/dao/GroupDAO.java | 8 ++
.../core/persistence/api/dao/RoleDAO.java | 4 +
.../core/persistence/api/dao/UserDAO.java | 6 +-
.../persistence/api/entity/DynMembership.java | 4 +-
.../persistence/jpa/dao/JPAAnyObjectDAO.java | 22 ++--
.../core/persistence/jpa/dao/JPAGroupDAO.java | 101 +++++++++++++++++--
.../core/persistence/jpa/dao/JPARoleDAO.java | 42 +++++++-
.../core/persistence/jpa/dao/JPAUserDAO.java | 32 +++---
.../anyobject/JPAADynGroupMembership.java | 9 +-
.../jpa/entity/user/AbstractUDynMembership.java | 5 +-
.../jpa/entity/user/JPADynRoleMembership.java | 4 +-
.../jpa/entity/user/JPAUDynGroupMembership.java | 4 +-
.../core/persistence/jpa/outer/GroupTest.java | 48 +++++----
.../core/persistence/jpa/outer/RoleTest.java | 18 ++--
.../java/data/AnyObjectDataBinderImpl.java | 2 +-
.../java/data/RoleDataBinderImpl.java | 2 +-
.../java/data/UserDataBinderImpl.java | 4 +-
.../client/ElasticsearchUtils.java | 11 +-
pom.xml | 2 +-
20 files changed, 236 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
index c3a4cd7..650130c 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
@@ -43,7 +43,7 @@ public interface AnyObjectDAO extends AnyDAO<AnyObject> {
AnyObject authFindByName(String name);
- List<Group> findDynGroupMemberships(AnyObject anyObject);
+ List<Group> findDynGroups(AnyObject anyObject);
List<ARelationship> findAllARelationships(AnyObject anyObject);
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
index c74e430..b08c9b9 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
@@ -46,8 +46,16 @@ public interface GroupDAO extends AnyDAO<Group> {
List<TypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
+ List<String> findADynMembersKeys(Group group);
+
void refreshDynMemberships(AnyObject anyObject);
+ void removeDynMemberships(AnyObject anyObject);
+
+ List<String> findUDynMembersKeys(Group group);
+
void refreshDynMemberships(User user);
+ void removeDynMemberships(User user);
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
index c5ff0e8..16f3003 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
@@ -39,5 +39,9 @@ public interface RoleDAO extends DAO<Role> {
void delete(String key);
+ List<String> findDynMembersKeys(Role role);
+
void refreshDynMemberships(User user);
+
+ void removeDynMemberships(User user);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
index 55efa93..9e44bb3 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
@@ -42,12 +42,12 @@ public interface UserDAO extends AnyDAO<User> {
List<User> findBySecurityQuestion(SecurityQuestion securityQuestion);
- List<Role> findDynRoleMemberships(User user);
-
- List<Group> findDynGroupMemberships(User user);
+ List<Role> findDynRoles(User user);
Collection<Role> findAllRoles(User user);
+ List<Group> findDynGroups(User user);
+
Collection<Group> findAllGroups(User user);
Collection<String> findAllGroupKeys(User user);
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
index c3bcea9..2b12744 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
@@ -18,8 +18,6 @@
*/
package org.apache.syncope.core.persistence.api.entity;
-import java.util.List;
-
public interface DynMembership<A extends Any<?>> extends Entity {
String getFIQLCond();
@@ -28,5 +26,5 @@ public interface DynMembership<A extends Any<?>> extends Entity {
boolean add(A any);
- List<? extends A> getMembers();
+ void clear();
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index a64afe3..23234b3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import static org.apache.syncope.core.persistence.jpa.dao.AbstractDAO.LOG;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -232,34 +234,32 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
}
@Override
- public void delete(final AnyObject any) {
- for (Group group : findDynGroupMemberships(any)) {
- group.getADynMembership(any.getType()).getMembers().remove(any);
- }
+ public void delete(final AnyObject anyObject) {
+ groupDAO().removeDynMemberships(anyObject);
- for (ARelationship relationship : findARelationships(any)) {
+ for (ARelationship relationship : findARelationships(anyObject)) {
relationship.getLeftEnd().getRelationships().remove(relationship);
save(relationship.getLeftEnd());
entityManager().remove(relationship);
}
- for (URelationship relationship : findURelationships(any)) {
+ for (URelationship relationship : findURelationships(anyObject)) {
relationship.getLeftEnd().getRelationships().remove(relationship);
userDAO().save(relationship.getLeftEnd());
entityManager().remove(relationship);
}
- entityManager().remove(any);
- publisher.publishEvent(new AnyDeletedEvent(this, AnyTypeKind.ANY_OBJECT, any.getKey()));
+ entityManager().remove(anyObject);
+ publisher.publishEvent(new AnyDeletedEvent(this, AnyTypeKind.ANY_OBJECT, anyObject.getKey()));
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public List<Group> findDynGroupMemberships(final AnyObject anyObject) {
+ public List<Group> findDynGroups(final AnyObject anyObject) {
Query query = entityManager().createNativeQuery(
"SELECT t2.id FROM " + JPAADynGroupMembership.TABLE + " t0 "
- + "INNER JOIN ADynGroupMembership_AnyObject t1 "
+ + "INNER JOIN " + JPAADynGroupMembership.JOIN_TABLE + " t1 "
+ "ON t0.id = t1.aDynGroupMembership_id "
+ "LEFT OUTER JOIN " + JPAGroup.TABLE + " t2 "
+ "ON t0.GROUP_ID = t2.id "
@@ -293,7 +293,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
return input.getRightEnd();
}
}, new ArrayList<Group>()),
- findDynGroupMemberships(anyObject));
+ findDynGroups(anyObject));
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
----------------------------------------------------------------------
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 54423b8..93ceddc 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
@@ -18,6 +18,9 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import static org.apache.syncope.core.persistence.jpa.dao.AbstractDAO.LOG;
+
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -56,8 +59,10 @@ import org.apache.syncope.core.persistence.api.entity.group.TypeExtension;
import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr;
import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
+import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership;
import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAMembership;
import org.apache.syncope.core.persistence.jpa.entity.group.JPATypeExtension;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUMembership;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.spring.event.AnyCreatedUpdatedEvent;
@@ -271,7 +276,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(merged.getUDynMembership().getFIQLCond(), merged.getRealm()),
AnyTypeKind.USER);
- merged.getUDynMembership().getMembers().clear();
+ merged.getUDynMembership().clear();
for (User user : matching) {
merged.getUDynMembership().add(user);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, user));
@@ -282,7 +287,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(memb.getFIQLCond(), merged.getRealm()),
AnyTypeKind.ANY_OBJECT);
- memb.getMembers().clear();
+ memb.clear();
for (AnyObject anyObject : matching) {
memb.add(anyObject);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, anyObject));
@@ -337,6 +342,26 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
return query.getResultList();
}
+ @Override
+ public List<String> findADynMembersKeys(final Group group) {
+ List<String> result = new ArrayList<>();
+ for (ADynGroupMembership memb : group.getADynMemberships()) {
+ Query query = entityManager().createNativeQuery(
+ "SELECT t.anyObject_id FROM " + JPAADynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.aDynGroupMembership_id=?");
+ query.setParameter(1, memb.getKey());
+
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ result.add(actualKey);
+ }
+ }
+ return result;
+ }
+
private List<Group> findWithADynMemberships(final int page, final int itemsPerPage) {
TypedQuery<Group> query = entityManager().createQuery(
"SELECT e FROM " + JPAGroup.class.getSimpleName() + " e WHERE e.aDynMemberships IS NOT EMPTY",
@@ -363,16 +388,56 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(memb.getFIQLCond(), group.getRealm()))) {
memb.add(anyObject);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
} else {
- memb.getMembers().remove(anyObject);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAADynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.anyObject_id=? and t.aDynGroupMembership_id=?");
+ query.setParameter(1, anyObject.getKey());
+ query.setParameter(2, memb.getKey());
+ query.executeUpdate();
}
+
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
}
}
}
}
+ }
+
+ @Override
+ public void removeDynMemberships(final AnyObject anyObject) {
+ List<Group> dynGroups = anyObjectDAO().findDynGroups(anyObject);
+
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAADynGroupMembership.JOIN_TABLE + " t WHERE t.anyObject_id=?");
+ query.setParameter(1, anyObject.getKey());
+ query.executeUpdate();
+ for (Group group : dynGroups) {
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ }
+ }
+
+ @Override
+ public List<String> findUDynMembersKeys(final Group group) {
+ if (group.getUDynMembership() == null) {
+ return Collections.emptyList();
+ }
+
+ Query query = entityManager().createNativeQuery(
+ "SELECT t.user_id FROM " + JPAUDynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.uDynGroupMembership_id=?");
+ query.setParameter(1, group.getUDynMembership().getKey());
+
+ List<String> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ result.add(actualKey);
+ }
+ return result;
}
private List<Group> findWithUDynMemberships(final int page, final int itemsPerPage) {
@@ -400,13 +465,33 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
buildDynMembershipCond(group.getUDynMembership().getFIQLCond(), group.getRealm()))) {
group.getUDynMembership().add(user);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
} else {
- group.getUDynMembership().getMembers().remove(user);
- publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAUDynGroupMembership.JOIN_TABLE + " t "
+ + "WHERE t.user_id=? and t.uDynGroupMembership_id=?");
+ query.setParameter(1, user.getKey());
+ query.setParameter(2, group.getUDynMembership().getKey());
+ query.executeUpdate();
}
+
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
}
}
}
}
+
+ @Override
+ public void removeDynMemberships(final User user) {
+ List<Group> dynGroups = userDAO().findDynGroups(user);
+
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPAUDynGroupMembership.JOIN_TABLE + " t WHERE t.user_id=?");
+ query.setParameter(1, user.getKey());
+ query.executeUpdate();
+
+ for (Group group : dynGroups) {
+ publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, group));
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
index a5cabbb..7aa9300 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
@@ -29,6 +31,7 @@ import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.persistence.api.entity.Role;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.jpa.entity.JPARole;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.spring.event.AnyCreatedUpdatedEvent;
@@ -88,7 +91,7 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
List<User> matchingUsers = searchDAO().search(
SearchCondConverter.convert(role.getDynMembership().getFIQLCond()), AnyTypeKind.USER);
- role.getDynMembership().getMembers().clear();
+ role.getDynMembership().clear();
for (User user : matchingUsers) {
role.getDynMembership().add(user);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, user));
@@ -122,6 +125,28 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
delete(role);
}
+ @Override
+ public List<String> findDynMembersKeys(final Role role) {
+ if (role.getDynMembership() == null) {
+ return Collections.emptyList();
+ }
+
+ Query query = entityManager().createNativeQuery(
+ "SELECT t.user_id FROM " + JPADynRoleMembership.JOIN_TABLE + " t "
+ + "WHERE t.dynRoleMembership_id=?");
+ query.setParameter(1, role.getDynMembership().getKey());
+
+ List<String> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ result.add(actualKey);
+ }
+ return result;
+ }
+
@Transactional
@Override
public void refreshDynMemberships(final User user) {
@@ -130,10 +155,23 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
if (searchDAO().matches(user, SearchCondConverter.convert(role.getDynMembership().getFIQLCond()))) {
role.getDynMembership().add(user);
} else {
- role.getDynMembership().getMembers().remove(user);
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPADynRoleMembership.JOIN_TABLE + " t "
+ + "WHERE t.user_id=? and t.dynRoleMembership_id=?");
+ query.setParameter(1, user.getKey());
+ query.setParameter(2, role.getDynMembership().getKey());
+ query.executeUpdate();
}
}
}
}
+ @Override
+ public void removeDynMemberships(final User user) {
+ Query query = entityManager().createNativeQuery(
+ "DELETE FROM " + JPADynRoleMembership.JOIN_TABLE + " t WHERE t.user_id=?");
+ query.setParameter(1, user.getKey());
+ query.executeUpdate();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index a6b4383..92b94fb 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import static org.apache.syncope.core.persistence.jpa.dao.AbstractDAO.LOG;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -452,12 +454,8 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Override
public void delete(final User user) {
- for (Role role : findDynRoleMemberships(user)) {
- role.getDynMembership().getMembers().remove(user);
- }
- for (Group group : findDynGroupMemberships(user)) {
- group.getUDynMembership().getMembers().remove(user);
- }
+ roleDAO.removeDynMemberships(user);
+ groupDAO.removeDynMemberships(user);
AccessToken accessToken = accessTokenDAO.findByOwner(user.getUsername());
if (accessToken != null) {
@@ -470,10 +468,16 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public List<Role> findDynRoleMemberships(final User user) {
+ public Collection<Role> findAllRoles(final User user) {
+ return CollectionUtils.union(user.getRoles(), findDynRoles(user));
+ }
+
+ @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
+ @Override
+ public List<Role> findDynRoles(final User user) {
Query query = entityManager().createNativeQuery(
"SELECT t2.id FROM " + JPADynRoleMembership.TABLE + " t0 "
- + "INNER JOIN " + JPADynRoleMembership.TABLE + "_User t1 "
+ + "INNER JOIN " + JPADynRoleMembership.JOIN_TABLE + " t1 "
+ "ON t0.id = t1.dynRoleMembership_id "
+ "LEFT OUTER JOIN " + JPARole.TABLE + " t2 "
+ "ON t0.ROLE_ID = t2.id "
@@ -498,10 +502,10 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public List<Group> findDynGroupMemberships(final User user) {
+ public List<Group> findDynGroups(final User user) {
Query query = entityManager().createNativeQuery(
"SELECT t2.id FROM " + JPAUDynGroupMembership.TABLE + " t0 "
- + "INNER JOIN " + JPAUDynGroupMembership.TABLE + "_User t1 "
+ + "INNER JOIN " + JPAUDynGroupMembership.JOIN_TABLE + " t1 "
+ "ON t0.id = t1.uDynGroupMembership_id "
+ "LEFT OUTER JOIN " + JPAGroup.TABLE + " t2 "
+ "ON t0.GROUP_ID = t2.id "
@@ -526,12 +530,6 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
- public Collection<Role> findAllRoles(final User user) {
- return CollectionUtils.union(user.getRoles(), findDynRoleMemberships(user));
- }
-
- @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
- @Override
public Collection<Group> findAllGroups(final User user) {
return CollectionUtils.union(
CollectionUtils.collect(user.getMemberships(), new Transformer<UMembership, Group>() {
@@ -541,7 +539,7 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
return input.getRightEnd();
}
}, new ArrayList<Group>()),
- findDynGroupMemberships(user));
+ findDynGroups(user));
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
index 4bb75fc..5ae02d3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
@@ -43,6 +43,8 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
public static final String TABLE = "ADynGroupMembership";
+ public static final String JOIN_TABLE = TABLE + "_AnyObject";
+
@OneToOne
private JPAGroup group;
@@ -50,7 +52,7 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
private JPAAnyType anyType;
@ManyToMany
- @JoinTable(joinColumns =
+ @JoinTable(name = JOIN_TABLE, joinColumns =
@JoinColumn(name = "aDynGroupMembership_id"),
inverseJoinColumns =
@JoinColumn(name = "anyObject_id"))
@@ -85,7 +87,8 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
}
@Override
- public List<? extends AnyObject> getMembers() {
- return anyObjects;
+ public void clear() {
+ anyObjects.clear();
}
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
index d4fe264..963b742 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/AbstractUDynMembership.java
@@ -37,7 +37,8 @@ public abstract class AbstractUDynMembership extends AbstractDynMembership<User>
}
@Override
- public List<? extends User> getMembers() {
- return internalGetUsers();
+ public void clear() {
+ internalGetUsers().clear();
}
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
index dbb2fab..aa310cd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
@@ -38,11 +38,13 @@ public class JPADynRoleMembership extends AbstractUDynMembership implements DynR
public static final String TABLE = "DynRoleMembership";
+ public static final String JOIN_TABLE = TABLE + "_User";
+
@OneToOne
private JPARole role;
@ManyToMany
- @JoinTable(name = TABLE + "_User", joinColumns =
+ @JoinTable(name = JOIN_TABLE, joinColumns =
@JoinColumn(name = "dynRoleMembership_id"),
inverseJoinColumns =
@JoinColumn(name = "user_id"))
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
index 53db0d9..63228b3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
@@ -38,11 +38,13 @@ public class JPAUDynGroupMembership extends AbstractUDynMembership implements UD
public static final String TABLE = "UDynGroupMembership";
+ public static final String JOIN_TABLE = TABLE + "_User";
+
@OneToOne
private JPAGroup group;
@ManyToMany
- @JoinTable(name = TABLE + "_User", joinColumns =
+ @JoinTable(name = JOIN_TABLE, joinColumns =
@JoinColumn(name = "uDynGroupMembership_id"),
inverseJoinColumns =
@JoinColumn(name = "user_id"))
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index 39eb25e..ff050bf 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -24,15 +24,16 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import javax.persistence.TypedQuery;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
@@ -228,11 +229,10 @@ public class GroupTest extends AbstractTest {
assertEquals(actual, actual.getUDynMembership().getGroup());
// 3. verify that expected users have the created group dynamically assigned
- assertEquals(2, actual.getUDynMembership().getMembers().size());
+ List<String> members = groupDAO.findUDynMembersKeys(actual);
+ assertEquals(2, members.size());
assertEquals(new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
- CollectionUtils.collect(actual.getUDynMembership().getMembers(),
- EntityUtils.<User>keyTransformer(),
- new HashSet<String>()));
+ new HashSet<>(members));
user = userDAO.findByUsername("bellini");
assertNotNull(user);
@@ -246,10 +246,9 @@ public class GroupTest extends AbstractTest {
userDAO.flush();
actual = groupDAO.find(actual.getKey());
- assertEquals(1, actual.getUDynMembership().getMembers().size());
- assertEquals(
- "c9b2dec2-00a7-4855-97c0-d854842b4b24",
- actual.getUDynMembership().getMembers().get(0).getKey());
+ members = groupDAO.findUDynMembersKeys(actual);
+ assertEquals(1, members.size());
+ assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", members.get(0));
// 5. delete group and verify that dynamic membership was also removed
String dynMembershipKey = actual.getUDynMembership().getKey();
@@ -321,12 +320,18 @@ public class GroupTest extends AbstractTest {
assertEquals(actual, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getGroup());
// 3. verify that expected any objects have the created group dynamically assigned
- assertEquals(2, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().size());
- assertEquals(new HashSet<>(Arrays.asList(
- "fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey)),
- CollectionUtils.collect(actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers(),
- EntityUtils.<AnyObject>keyTransformer(),
- new HashSet<String>()));
+ System.out.println("MMMMMMMMM " + groupDAO.findADynMembersKeys(actual));
+ List<String> members = CollectionUtils.select(groupDAO.findADynMembersKeys(actual), new Predicate<String>() {
+
+ @Override
+ public boolean evaluate(final String object) {
+ return "PRINTER".equals(anyObjectDAO.find(object).getType().getKey());
+ }
+ }, new ArrayList<String>());
+ assertEquals(2, members.size());
+ assertEquals(
+ new HashSet<>(Arrays.asList("fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey)),
+ new HashSet<>(members));
anyObject = anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
assertNotNull(anyObject);
@@ -340,10 +345,15 @@ public class GroupTest extends AbstractTest {
anyObjectDAO.flush();
actual = groupDAO.find(actual.getKey());
- assertEquals(1, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().size());
- assertEquals(
- "fc6dbc3a-6c07-4965-8781-921e7401a4a5",
- actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().get(0).getKey());
+ members = CollectionUtils.select(groupDAO.findADynMembersKeys(actual), new Predicate<String>() {
+
+ @Override
+ public boolean evaluate(final String object) {
+ return "PRINTER".equals(anyObjectDAO.find(object).getType().getKey());
+ }
+ }, new ArrayList<String>());
+ assertEquals(1, members.size());
+ assertEquals("fc6dbc3a-6c07-4965-8781-921e7401a4a5", members.get(0));
// 5. delete group and verify that dynamic membership was also removed
String dynMembershipKey = actual.getADynMembership(anyTypeDAO.find("PRINTER")).getKey();
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
index 04d3e39..49d92c7 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
@@ -26,11 +26,10 @@ import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import javax.persistence.TypedQuery;
-import org.apache.commons.collections4.CollectionUtils;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
@@ -123,11 +122,11 @@ public class RoleTest extends AbstractTest {
assertEquals(actual, actual.getDynMembership().getRole());
// 3. verify that expected users have the created role dynamically assigned
- assertEquals(2, actual.getDynMembership().getMembers().size());
- assertEquals(new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
- CollectionUtils.collect(actual.getDynMembership().getMembers(),
- EntityUtils.<User>keyTransformer(),
- new HashSet<String>()));
+ List<String> members = roleDAO.findDynMembersKeys(actual);
+ assertEquals(2, members.size());
+ assertEquals(
+ new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
+ new HashSet<>(members));
user = userDAO.find("c9b2dec2-00a7-4855-97c0-d854842b4b24");
assertNotNull(user);
@@ -141,8 +140,9 @@ public class RoleTest extends AbstractTest {
userDAO.flush();
actual = roleDAO.find(actual.getKey());
- assertEquals(1, actual.getDynMembership().getMembers().size());
- assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", actual.getDynMembership().getMembers().get(0).getKey());
+ members = roleDAO.findDynMembersKeys(actual);
+ assertEquals(1, members.size());
+ assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", members.get(0));
// 5. delete role and verify that dynamic membership was also removed
String dynMembershipKey = actual.getDynMembership().getKey();
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index 677bf81..fa17f20 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -125,7 +125,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
}, anyObjectTO.getMemberships());
// dynamic memberships
- CollectionUtils.collect(anyObjectDAO.findDynGroupMemberships(anyObject),
+ CollectionUtils.collect(anyObjectDAO.findDynGroups(anyObject),
EntityUtils.<Group>keyTransformer(), anyObjectTO.getDynGroups());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
index 7db064d..567739d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
@@ -100,7 +100,7 @@ public class RoleDataBinderImpl implements RoleDataBinder {
} else if (role.getDynMembership() != null && roleTO.getDynMembershipCond() != null
&& !role.getDynMembership().getFIQLCond().equals(roleTO.getDynMembershipCond())) {
- role.getDynMembership().getMembers().clear();
+ role.getDynMembership().clear();
setDynMembership(role, roleTO.getDynMembershipCond());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index fe21b51..2ba5d85 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -613,9 +613,9 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
}, userTO.getMemberships());
// dynamic memberships
- CollectionUtils.collect(userDAO.findDynRoleMemberships(user),
+ CollectionUtils.collect(userDAO.findDynRoles(user),
EntityUtils.<Role>keyTransformer(), userTO.getDynRoles());
- CollectionUtils.collect(userDAO.findDynGroupMemberships(user),
+ CollectionUtils.collect(userDAO.findDynGroups(user),
EntityUtils.<Group>keyTransformer(), userTO.getDynGroups());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
----------------------------------------------------------------------
diff --git a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index 572ef37..1d22a1e 100644
--- a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++ b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -32,12 +32,10 @@ import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.PlainAttr;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.Role;
-import org.apache.syncope.core.persistence.api.entity.anyobject.ADynGroupMembership;
import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship;
import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
import org.apache.syncope.core.persistence.api.entity.group.Group;
-import org.apache.syncope.core.persistence.api.entity.user.UDynGroupMembership;
import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.apache.syncope.core.persistence.api.entity.user.URelationship;
import org.apache.syncope.core.persistence.api.entity.user.User;
@@ -130,10 +128,7 @@ public class ElasticsearchUtils {
return input.getLeftEnd().getKey();
}
}, new ArrayList<>());
- UDynGroupMembership udynmembership = group.getUDynMembership();
- if (udynmembership != null) {
- CollectionUtils.collect(udynmembership.getMembers(), EntityUtils.keyTransformer(), members);
- }
+ members.add(groupDAO.findUDynMembersKeys(group));
CollectionUtils.collect(groupDAO.findAMemberships(group),
new Transformer<AMembership, Object>() {
@@ -142,9 +137,7 @@ public class ElasticsearchUtils {
return input.getLeftEnd().getKey();
}
}, members);
- for (ADynGroupMembership adynmembership : group.getADynMemberships()) {
- CollectionUtils.collect(adynmembership.getMembers(), EntityUtils.keyTransformer(), members);
- }
+ members.add(groupDAO.findADynMembersKeys(group));
builder = builder.field("members", members);
} else if (any instanceof User) {
User user = ((User) any);
http://git-wip-us.apache.org/repos/asf/syncope/blob/9fc62b66/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 39b3fbb..70a26e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1578,7 +1578,7 @@ under the License.
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
- <version>1.5.4</version>
+ <version>1.5.5</version>
<scope>test</scope>
</dependency>
<dependency>