Repository: syncope Updated Branches: refs/heads/master ec7612419 -> 44a818844
improvement for paged search of dynamic group members + fix for dynamic members table clearing before populate Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/44a81884 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/44a81884 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/44a81884 Branch: refs/heads/master Commit: 44a818844233e2e7560b4a5d6608c7df535adc18 Parents: ec76124 Author: fmartelli <fabio.marte...@gmail.com> Authored: Wed Dec 20 12:42:57 2017 +0100 Committer: fmartelli <fabio.marte...@gmail.com> Committed: Wed Dec 20 13:13:33 2017 +0100 ---------------------------------------------------------------------- .../core/persistence/jpa/dao/JPAGroupDAO.java | 20 ++++++++++++-------- .../syncope/fit/core/ExceptionMapperITCase.java | 7 +++++-- 2 files changed, 17 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/44a81884/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 f0ca2da..52f82f6 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 @@ -286,18 +286,20 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO { publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, merged, AuthContextUtils.getDomain())); // refresh dynamic memberships + clearUDynMembers(merged); if (merged.getUDynMembership() != null) { - for (int page = 1; page <= (countUDynMembers(group) / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) { + SearchCond cond = buildDynMembershipCond(merged.getUDynMembership().getFIQLCond(), merged.getRealm()); + int count = searchDAO().count( + Collections.<String>singleton(merged.getRealm().getFullPath()), cond, AnyTypeKind.USER); + for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) { List<User> matching = searchDAO().search( Collections.<String>singleton(merged.getRealm().getFullPath()), - buildDynMembershipCond(merged.getUDynMembership().getFIQLCond(), merged.getRealm()), + cond, page, AnyDAO.DEFAULT_PAGE_SIZE, Collections.<OrderByClause>emptyList(), AnyTypeKind.USER); - clearUDynMembers(merged); - matching.forEach(user -> { Query insert = entityManager().createNativeQuery("INSERT INTO " + UDYNMEMB_TABLE + " VALUES(?, ?)"); insert.setParameter(1, user.getKey()); @@ -308,18 +310,20 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO { }); } } + clearADynMembers(merged); merged.getADynMemberships().stream().forEach(memb -> { - for (int page = 1; page <= (countUDynMembers(group) / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) { + SearchCond cond = buildDynMembershipCond(memb.getFIQLCond(), merged.getRealm()); + int count = searchDAO().count( + Collections.<String>singleton(merged.getRealm().getFullPath()), cond, AnyTypeKind.ANY_OBJECT); + for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) { List<AnyObject> matching = searchDAO().search( Collections.<String>singleton(merged.getRealm().getFullPath()), - buildDynMembershipCond(memb.getFIQLCond(), merged.getRealm()), + cond, page, AnyDAO.DEFAULT_PAGE_SIZE, Collections.<OrderByClause>emptyList(), AnyTypeKind.ANY_OBJECT); - clearADynMembers(merged); - matching.forEach(anyObject -> { Query insert = entityManager().createNativeQuery( "INSERT INTO " + ADYNMEMB_TABLE + " VALUES(?, ?, ?)"); http://git-wip-us.apache.org/repos/asf/syncope/blob/44a81884/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ExceptionMapperITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ExceptionMapperITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ExceptionMapperITCase.java index b99d16d..08f6532 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ExceptionMapperITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ExceptionMapperITCase.java @@ -25,12 +25,14 @@ import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.apache.syncope.common.lib.SyncopeClientCompositeException; +import org.apache.syncope.common.lib.SyncopeClientException; import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.to.AnyTypeClassTO; import org.apache.syncope.common.lib.to.GroupTO; import org.apache.syncope.common.lib.to.PlainSchemaTO; import org.apache.syncope.common.lib.to.UserTO; import org.apache.syncope.common.lib.types.AttrSchemaType; +import org.apache.syncope.common.lib.types.ClientExceptionType; import org.apache.syncope.common.lib.types.SchemaType; import org.apache.syncope.fit.AbstractITCase; import org.junit.jupiter.api.BeforeAll; @@ -118,9 +120,10 @@ public class ExceptionMapperITCase extends AbstractITCase { try { createGroup(groupTO2); fail("This should not happen"); - } catch (Exception e) { + } catch (SyncopeClientException e) { + assertEquals(ClientExceptionType.EntityExists, e.getType()); String message = ERROR_MESSAGES.getProperty("errMessage.UniqueConstraintViolation"); - assertEquals("DataIntegrityViolation [" + message + "]", e.getMessage()); + assertEquals("EntityExists [" + message + "]", e.getMessage()); } }