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());
         }
     }
 

Reply via email to