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/07/11 09:31:22 UTC

[1/2] syncope git commit: Cleaning up in preparation to SYNCOPE-1152

Repository: syncope
Updated Branches:
  refs/heads/2_0_X fead89205 -> 976202b8e
  refs/heads/master bd5c1af88 -> de9e20297


Cleaning up in preparation to SYNCOPE-1152


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/976202b8
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/976202b8
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/976202b8

Branch: refs/heads/2_0_X
Commit: 976202b8ee45ad70ea8f06a47a56f0bea55a629d
Parents: fead892
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Jul 11 11:31:06 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Jul 11 11:31:06 2017 +0200

----------------------------------------------------------------------
 .../syncope/core/logic/AbstractAnyLogic.java    | 13 +----
 .../syncope/core/logic/AnyObjectLogic.java      | 40 ++++-----------
 .../apache/syncope/core/logic/GroupLogic.java   | 50 +++++-------------
 .../apache/syncope/core/logic/UserLogic.java    | 54 +++++---------------
 .../core/persistence/api/dao/AnyDAO.java        | 22 +++-----
 .../persistence/jpa/dao/AbstractAnyDAO.java     | 31 ++---------
 .../core/persistence/jpa/dao/JPAGroupDAO.java   | 11 ++++
 .../persistence/jpa/inner/AnyObjectTest.java    |  7 ---
 .../core/persistence/jpa/inner/UserTest.java    | 14 ++---
 .../rest/cxf/service/AbstractAnyService.java    | 48 ++++++++---------
 .../syncope/fit/console/TopologyITCase.java     |  2 +-
 .../apache/syncope/fit/core/LoggerITCase.java   |  4 +-
 12 files changed, 85 insertions(+), 211 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
index bf83632..9755e1f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
@@ -263,24 +263,15 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch> ext
 
     public abstract TO read(String key);
 
-    public abstract int count(String realm);
-
     public abstract ProvisioningResult<TO> create(TO anyTO, boolean nullPriorityAsync);
 
     public abstract ProvisioningResult<TO> update(P anyPatch, boolean nullPriorityAsync);
 
     public abstract ProvisioningResult<TO> delete(String key, boolean nullPriorityAsync);
 
-    public abstract List<TO> list(
-            int page, int size, List<OrderByClause> orderBy,
-            String realm,
-            boolean details);
-
-    public abstract List<TO> search(
-            SearchCond searchCondition,
+    public abstract Pair<Integer, List<TO>> search(
+            SearchCond searchCond,
             int page, int size, List<OrderByClause> orderBy,
             String realm,
             boolean details);
-
-    public abstract int searchCount(SearchCond searchCondition, String realm);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
index 49d18db..8cab1aa 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
@@ -90,22 +90,12 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
     @Transactional(readOnly = true)
     @Override
-    public int count(final String realm) {
-        throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
-    }
-
-    @Transactional(readOnly = true)
-    @Override
-    public List<AnyObjectTO> list(
+    public Pair<Integer, List<AnyObjectTO>> search(
+            final SearchCond searchCond,
             final int page, final int size, final List<OrderByClause> orderBy,
-            final String realm, final boolean details) {
-
-        throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
-    }
+            final String realm,
+            final boolean details) {
 
-    @Transactional(readOnly = true)
-    @Override
-    public int searchCount(final SearchCond searchCond, final String realm) {
         if (searchCond.hasAnyTypeCond() == null) {
             throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
         }
@@ -114,25 +104,11 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
                 AuthContextUtils.getAuthorizations().get(AnyEntitlement.SEARCH.getFor(searchCond.hasAnyTypeCond())),
                 realm);
 
-        return searchDAO.count(effectiveRealms, searchCond, AnyTypeKind.ANY_OBJECT);
-    }
+        int count = searchDAO.count(effectiveRealms, searchCond, AnyTypeKind.ANY_OBJECT);
 
-    @Transactional(readOnly = true)
-    @Override
-    public List<AnyObjectTO> search(final SearchCond searchCond, final int page, final int size,
-            final List<OrderByClause> orderBy, final String realm, final boolean details) {
-
-        if (searchCond.hasAnyTypeCond() == null) {
-            throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
-        }
-
-        Set<String> effectiveRealms = RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(AnyEntitlement.SEARCH.getFor(searchCond.hasAnyTypeCond())),
-                realm);
-
-        List<AnyObject> matchingAnyObjects = searchDAO.search(
+        List<AnyObject> matching = searchDAO.search(
                 effectiveRealms, searchCond, page, size, orderBy, AnyTypeKind.ANY_OBJECT);
-        return CollectionUtils.collect(matchingAnyObjects, new Transformer<AnyObject, AnyObjectTO>() {
+        List<AnyObjectTO> result = CollectionUtils.collect(matching, new Transformer<AnyObject, AnyObjectTO>() {
 
             @Transactional(readOnly = true)
             @Override
@@ -140,6 +116,8 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
                 return binder.getAnyObjectTO(input, details);
             }
         }, new ArrayList<AnyObjectTO>());
+
+        return Pair.of(count, result);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index 7e9b88b..4420d4d 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -176,49 +176,21 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
     @Override
-    public int count(final String realm) {
-        return groupDAO.count(RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm));
-    }
-
-    @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true)
-    @Override
-    public List<GroupTO> list(
+    public Pair<Integer, List<GroupTO>> search(
+            final SearchCond searchCond,
             final int page, final int size, final List<OrderByClause> orderBy,
-            final String realm, final boolean details) {
+            final String realm,
+            final boolean details) {
 
-        return CollectionUtils.collect(groupDAO.findAll(
+        int count = searchDAO.count(
                 RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm),
-                page, size, orderBy),
-                new Transformer<Group, GroupTO>() {
+                searchCond == null ? groupDAO.getAllMatchingCond() : searchCond, AnyTypeKind.GROUP);
 
-            @Transactional(readOnly = true)
-            @Override
-            public GroupTO transform(final Group input) {
-                return binder.getGroupTO(input, details);
-            }
-        }, new ArrayList<GroupTO>());
-    }
-
-    @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true)
-    @Override
-    public int searchCount(final SearchCond searchCondition, final String realm) {
-        return searchDAO.count(
-                RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm),
-                searchCondition, AnyTypeKind.GROUP);
-    }
-
-    @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true)
-    @Override
-    public List<GroupTO> search(final SearchCond searchCondition, final int page, final int size,
-            final List<OrderByClause> orderBy, final String realm, final boolean details) {
-
-        List<Group> matchingGroups = searchDAO.search(
+        List<Group> matching = searchDAO.search(
                 RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm),
-                searchCondition, page, size, orderBy, AnyTypeKind.GROUP);
-        return CollectionUtils.collect(matchingGroups, new Transformer<Group, GroupTO>() {
+                searchCond == null ? groupDAO.getAllMatchingCond() : searchCond,
+                page, size, orderBy, AnyTypeKind.GROUP);
+        List<GroupTO> result = CollectionUtils.collect(matching, new Transformer<Group, GroupTO>() {
 
             @Transactional(readOnly = true)
             @Override
@@ -226,6 +198,8 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
                 return binder.getGroupTO(input, details);
             }
         }, new ArrayList<GroupTO>());
+
+        return Pair.of(count, result);
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index ee68a4e..ffca88b 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -92,33 +92,6 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
         return etag;
     }
 
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true)
-    @Override
-    public int count(final String realm) {
-        return userDAO.count(RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm));
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true)
-    @Override
-    public List<UserTO> list(
-            final int page, final int size, final List<OrderByClause> orderBy,
-            final String realm, final boolean details) {
-
-        return CollectionUtils.collect(userDAO.findAll(RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm), page, size, orderBy),
-                new Transformer<User, UserTO>() {
-
-            @Transactional(readOnly = true)
-            @Override
-            public UserTO transform(final User input) {
-                return binder.returnUserTO(binder.getUserTO(input, details));
-            }
-        }, new ArrayList<UserTO>());
-    }
-
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
     public Pair<String, UserTO> selfRead() {
@@ -137,22 +110,21 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
     @Transactional(readOnly = true)
     @Override
-    public int searchCount(final SearchCond searchCondition, final String realm) {
-        return searchDAO.count(RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm),
-                searchCondition, AnyTypeKind.USER);
-    }
+    public Pair<Integer, List<UserTO>> search(
+            final SearchCond searchCond,
+            final int page, final int size, final List<OrderByClause> orderBy,
+            final String realm,
+            final boolean details) {
 
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true)
-    @Override
-    public List<UserTO> search(final SearchCond searchCondition, final int page, final int size,
-            final List<OrderByClause> orderBy, final String realm, final boolean details) {
+        int count = searchDAO.count(RealmUtils.getEffective(
+                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm),
+                searchCond == null ? userDAO.getAllMatchingCond() : searchCond, AnyTypeKind.USER);
 
-        List<User> matchingUsers = searchDAO.search(RealmUtils.getEffective(
+        List<User> matching = searchDAO.search(RealmUtils.getEffective(
                 AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm),
-                searchCondition, page, size, orderBy, AnyTypeKind.USER);
-        return CollectionUtils.collect(matchingUsers, new Transformer<User, UserTO>() {
+                searchCond == null ? userDAO.getAllMatchingCond() : searchCond,
+                page, size, orderBy, AnyTypeKind.USER);
+        List<UserTO> result = CollectionUtils.collect(matching, new Transformer<User, UserTO>() {
 
             @Transactional(readOnly = true)
             @Override
@@ -160,6 +132,8 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
                 return binder.returnUserTO(binder.getUserTO(input, details));
             }
         }, new ArrayList<UserTO>());
+
+        return Pair.of(count, result);
     }
 
     @PreAuthorize("isAnonymous() or hasRole('" + StandardEntitlement.ANONYMOUS + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
index 75b0411..c161ee7 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
@@ -20,8 +20,7 @@ package org.apache.syncope.core.persistence.api.dao;
 
 import java.util.Date;
 import java.util.List;
-import java.util.Set;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
+import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
@@ -58,6 +57,11 @@ public interface AnyDAO<A extends Any<?>> extends DAO<A> {
     List<A> findByResource(ExternalResource resource);
 
     /**
+     * @return the search condition to match all entities
+     */
+    SearchCond getAllMatchingCond();
+
+    /**
      * @return the total number of any objects of type {@link A}
      */
     int count();
@@ -71,22 +75,8 @@ public interface AnyDAO<A extends Any<?>> extends DAO<A> {
      */
     List<A> findAll(int page, int itemsPerPage);
 
-    /**
-     * Find any objects visible from the given admin realms, according to given page and items per page, sorted as
-     * required.
-     *
-     * @param adminRealms admin realms
-     * @param page search result page
-     * @param itemsPerPage items per search result page
-     * @param orderBy ordering clauses
-     * @return any objects of type {@link A} matching the provided conditions
-     */
-    List<A> findAll(Set<String> adminRealms, int page, int itemsPerPage, List<OrderByClause> orderBy);
-
     <S extends Schema> AllowedSchemas<S> findAllowedSchemas(A any, Class<S> reference);
 
-    int count(Set<String> adminRealms);
-
     A save(A any);
 
     void delete(String key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index 394359b..6ef6826 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -39,14 +39,12 @@ import org.apache.commons.jexl3.parser.Token;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.core.persistence.api.dao.AllowedSchemas;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
-import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.search.AnyCond;
 import org.apache.syncope.core.persistence.api.dao.search.AttributeCond;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
@@ -80,8 +78,6 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
 
     private DerSchemaDAO derSchemaDAO;
 
-    private AnySearchDAO searchDAO;
-
     private DynRealmDAO dynRealmDAO;
 
     private AnyUtils anyUtils;
@@ -104,15 +100,6 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         return derSchemaDAO;
     }
 
-    protected AnySearchDAO searchDAO() {
-        synchronized (this) {
-            if (searchDAO == null) {
-                searchDAO = ApplicationContextProvider.getApplicationContext().getBean(AnySearchDAO.class);
-            }
-        }
-        return searchDAO;
-    }
-
     protected DynRealmDAO dynRealmDAO() {
         synchronized (this) {
             if (dynRealmDAO == null) {
@@ -461,20 +448,13 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         return query.getResultList();
     }
 
-    private SearchCond getAllMatchingCond() {
+    @Override
+    public SearchCond getAllMatchingCond() {
         AnyCond idCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
         idCond.setSchema("id");
         return SearchCond.getLeafCond(idCond);
     }
 
-    @Override
-    public List<A> findAll(final Set<String> adminRealms,
-            final int page, final int itemsPerPage, final List<OrderByClause> orderBy) {
-
-        return searchDAO().search(adminRealms, getAllMatchingCond(), page, itemsPerPage, orderBy,
-                anyUtils().getAnyTypeKind());
-    }
-
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
     @SuppressWarnings("unchecked")
@@ -534,11 +514,6 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
     }
 
     @Override
-    public final int count(final Set<String> adminRealms) {
-        return searchDAO().count(adminRealms, getAllMatchingCond(), anyUtils().getAnyTypeKind());
-    }
-
-    @Override
     public A save(final A any) {
         return entityManager().merge(any);
     }
@@ -569,7 +544,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
             DynRealm dynRealm = dynRealmDAO().find(actualKey);
             if (dynRealm == null) {
                 LOG.error("Could not find dynRealm with id {}, even though returned by the native query", actualKey);
-            } else if (!result.contains(dynRealm)) {
+            } else if (!result.contains(actualKey)) {
                 result.add(actualKey);
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/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 4fb49e1..e4e34a3 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
@@ -89,6 +89,8 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     private AnyObjectDAO anyObjectDAO;
 
+    private AnySearchDAO searchDAO;
+
     private AnySearchDAO jpaAnySearchDAO;
 
     private UserDAO userDAO() {
@@ -109,6 +111,15 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
         return anyObjectDAO;
     }
 
+    private AnySearchDAO searchDAO() {
+        synchronized (this) {
+            if (searchDAO == null) {
+                searchDAO = ApplicationContextProvider.getApplicationContext().getBean(AnySearchDAO.class);
+            }
+        }
+        return searchDAO;
+    }
+
     private AnySearchDAO jpaAnySearchDAO() {
         synchronized (this) {
             if (jpaAnySearchDAO == null) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
index 3f4d48a..18172c5 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
-import java.util.List;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
@@ -46,12 +45,6 @@ public class AnyObjectTest extends AbstractTest {
     private RealmDAO realmDAO;
 
     @Test
-    public void findAll() {
-        List<AnyObject> list = anyObjectDAO.findAll(1, 100);
-        assertFalse(list.isEmpty());
-    }
-
-    @Test
     public void find() {
         AnyObject anyObject = anyObjectDAO.find("8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(anyObject);

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
index 101e2b5..e5dcdd4 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
@@ -23,10 +23,8 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
-import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -36,7 +34,6 @@ import org.apache.syncope.core.persistence.jpa.AbstractTest;
 import org.apache.syncope.core.provisioning.api.utils.policy.InvalidPasswordRuleConf;
 import org.apache.syncope.core.spring.security.PasswordGenerator;
 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -61,7 +58,7 @@ public class UserTest extends AbstractTest {
 
     @Test
     public void count() {
-        Integer count = userDAO.count(SyncopeConstants.FULL_ADMIN_REALMS);
+        Integer count = userDAO.count();
         assertNotNull(count);
         assertEquals(5, count, 0);
     }
@@ -69,20 +66,19 @@ public class UserTest extends AbstractTest {
     @Test
     public void findAllByPageAndSize() {
         // get first page
-        List<User> list = userDAO.findAll(
-                SyncopeConstants.FULL_ADMIN_REALMS, 1, 2, Collections.<OrderByClause>emptyList());
+        List<User> list = userDAO.findAll(1, 2);
         assertEquals("did not get expected number of users", 2, list.size());
 
         // get second page
-        list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 2, 2, Collections.<OrderByClause>emptyList());
+        list = userDAO.findAll(2, 2);
         assertEquals("did not get expected number of users", 2, list.size());
 
         // get second page with uncomplete set
-        list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 2, 3, Collections.<OrderByClause>emptyList());
+        list = userDAO.findAll(2, 3);
         assertEquals("did not get expected number of users", 2, list.size());
 
         // get unexistent page
-        list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 3, 2, Collections.<OrderByClause>emptyList());
+        list = userDAO.findAll(3, 2);
         assertEquals("did not get expected number of users", 1, list.size());
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
index 0574d82..2cc2413 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
@@ -19,10 +19,12 @@
 package org.apache.syncope.core.rest.cxf.service;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Set;
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.patch.AnyPatch;
@@ -115,34 +117,24 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
     public PagedResult<TO> search(final AnyQuery anyQuery) {
         String realm = StringUtils.prependIfMissing(anyQuery.getRealm(), SyncopeConstants.ROOT_REALM);
 
-        if (StringUtils.isBlank(anyQuery.getFiql())) {
-            return buildPagedResult(
-                    getAnyLogic().list(
-                            anyQuery.getPage(),
-                            anyQuery.getSize(),
-                            getOrderByClauses(anyQuery.getOrderBy()),
-                            realm,
-                            anyQuery.getDetails()),
-                    anyQuery.getPage(),
-                    anyQuery.getSize(),
-                    getAnyLogic().count(realm));
-        } else {
-            // if an assignable query is provided in the FIQL string, start anyway from root realm
-            boolean isAssignableCond = -1 != anyQuery.getFiql().indexOf(SpecialAttr.ASSIGNABLE.toString());
-
-            SearchCond cond = getSearchCond(anyQuery.getFiql(), realm);
-            return buildPagedResult(
-                    getAnyLogic().search(
-                            cond,
-                            anyQuery.getPage(),
-                            anyQuery.getSize(),
-                            getOrderByClauses(anyQuery.getOrderBy()),
-                            isAssignableCond ? SyncopeConstants.ROOT_REALM : realm,
-                            anyQuery.getDetails()),
-                    anyQuery.getPage(),
-                    anyQuery.getSize(),
-                    getAnyLogic().searchCount(cond, isAssignableCond ? SyncopeConstants.ROOT_REALM : realm));
-        }
+        // if an assignable query is provided in the FIQL string, start anyway from root realm
+        boolean isAssignableCond = StringUtils.isBlank(anyQuery.getFiql())
+                ? false
+                : -1 != anyQuery.getFiql().indexOf(SpecialAttr.ASSIGNABLE.toString());
+
+        SearchCond searchCond = StringUtils.isBlank(anyQuery.getFiql())
+                ? null
+                : getSearchCond(anyQuery.getFiql(), realm);
+
+        Pair<Integer, List<TO>> result = getAnyLogic().search(
+                searchCond,
+                anyQuery.getPage(),
+                anyQuery.getSize(),
+                getOrderByClauses(anyQuery.getOrderBy()),
+                isAssignableCond ? SyncopeConstants.ROOT_REALM : realm,
+                anyQuery.getDetails());
+
+        return buildPagedResult(result.getRight(), anyQuery.getPage(), anyQuery.getSize(), result.getLeft());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
index a4723c7..302441e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
@@ -389,7 +389,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
 
         TESTER.assertLabel(
                 "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:secondLevelContainer:title",
-                "CREATE task about USER");
+                "CREATE __ACCOUNT__");
 
         component = findComponentByProp("status", "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:"
                 + "secondLevelContainer:second:executions:firstLevelContainer:first:container:content:searchContainer:"

http://git-wip-us.apache.org/repos/asf/syncope/blob/976202b8/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
index 7e38c19..5720785 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
@@ -162,7 +162,7 @@ public class LoggerITCase extends AbstractITCase {
             if (UserLogic.class.getSimpleName().equals(eventCategoryTO.getCategory())) {
                 assertEquals(EventCategoryType.LOGIC, eventCategoryTO.getType());
                 assertTrue(eventCategoryTO.getEvents().contains("create"));
-                assertTrue(eventCategoryTO.getEvents().contains("list"));
+                assertTrue(eventCategoryTO.getEvents().contains("search"));
                 assertFalse(eventCategoryTO.getEvents().contains("doCreate"));
                 assertFalse(eventCategoryTO.getEvents().contains("setStatusOnWfAdapter"));
                 assertFalse(eventCategoryTO.getEvents().contains("resolveReference"));
@@ -176,7 +176,7 @@ public class LoggerITCase extends AbstractITCase {
             if (GroupLogic.class.getSimpleName().equals(eventCategoryTO.getCategory())) {
                 assertEquals(EventCategoryType.LOGIC, eventCategoryTO.getType());
                 assertTrue(eventCategoryTO.getEvents().contains("create"));
-                assertTrue(eventCategoryTO.getEvents().contains("list"));
+                assertTrue(eventCategoryTO.getEvents().contains("search"));
                 assertFalse(eventCategoryTO.getEvents().contains("resolveReference"));
                 found = true;
             }


[2/2] syncope git commit: Cleaning up in preparation to SYNCOPE-1152

Posted by il...@apache.org.
Cleaning up in preparation to SYNCOPE-1152


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/de9e2029
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/de9e2029
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/de9e2029

Branch: refs/heads/master
Commit: de9e202971bee50cdf0c4d2c50f1c57eb5684f8c
Parents: bd5c1af
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Jul 11 11:31:06 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Jul 11 11:31:14 2017 +0200

----------------------------------------------------------------------
 .../syncope/core/logic/AbstractAnyLogic.java    | 13 +----
 .../syncope/core/logic/AnyObjectLogic.java      | 40 ++++-----------
 .../apache/syncope/core/logic/GroupLogic.java   | 50 +++++-------------
 .../apache/syncope/core/logic/UserLogic.java    | 54 +++++---------------
 .../core/persistence/api/dao/AnyDAO.java        | 22 +++-----
 .../persistence/jpa/dao/AbstractAnyDAO.java     | 31 ++---------
 .../core/persistence/jpa/dao/JPAGroupDAO.java   | 11 ++++
 .../persistence/jpa/inner/AnyObjectTest.java    |  7 ---
 .../core/persistence/jpa/inner/UserTest.java    | 14 ++---
 .../rest/cxf/service/AbstractAnyService.java    | 48 ++++++++---------
 .../syncope/fit/console/TopologyITCase.java     |  2 +-
 .../apache/syncope/fit/core/LoggerITCase.java   |  4 +-
 12 files changed, 85 insertions(+), 211 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
index bf83632..9755e1f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
@@ -263,24 +263,15 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch> ext
 
     public abstract TO read(String key);
 
-    public abstract int count(String realm);
-
     public abstract ProvisioningResult<TO> create(TO anyTO, boolean nullPriorityAsync);
 
     public abstract ProvisioningResult<TO> update(P anyPatch, boolean nullPriorityAsync);
 
     public abstract ProvisioningResult<TO> delete(String key, boolean nullPriorityAsync);
 
-    public abstract List<TO> list(
-            int page, int size, List<OrderByClause> orderBy,
-            String realm,
-            boolean details);
-
-    public abstract List<TO> search(
-            SearchCond searchCondition,
+    public abstract Pair<Integer, List<TO>> search(
+            SearchCond searchCond,
             int page, int size, List<OrderByClause> orderBy,
             String realm,
             boolean details);
-
-    public abstract int searchCount(SearchCond searchCondition, String realm);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
index 49d18db..8cab1aa 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
@@ -90,22 +90,12 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
     @Transactional(readOnly = true)
     @Override
-    public int count(final String realm) {
-        throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
-    }
-
-    @Transactional(readOnly = true)
-    @Override
-    public List<AnyObjectTO> list(
+    public Pair<Integer, List<AnyObjectTO>> search(
+            final SearchCond searchCond,
             final int page, final int size, final List<OrderByClause> orderBy,
-            final String realm, final boolean details) {
-
-        throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
-    }
+            final String realm,
+            final boolean details) {
 
-    @Transactional(readOnly = true)
-    @Override
-    public int searchCount(final SearchCond searchCond, final String realm) {
         if (searchCond.hasAnyTypeCond() == null) {
             throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
         }
@@ -114,25 +104,11 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
                 AuthContextUtils.getAuthorizations().get(AnyEntitlement.SEARCH.getFor(searchCond.hasAnyTypeCond())),
                 realm);
 
-        return searchDAO.count(effectiveRealms, searchCond, AnyTypeKind.ANY_OBJECT);
-    }
+        int count = searchDAO.count(effectiveRealms, searchCond, AnyTypeKind.ANY_OBJECT);
 
-    @Transactional(readOnly = true)
-    @Override
-    public List<AnyObjectTO> search(final SearchCond searchCond, final int page, final int size,
-            final List<OrderByClause> orderBy, final String realm, final boolean details) {
-
-        if (searchCond.hasAnyTypeCond() == null) {
-            throw new UnsupportedOperationException("Need to specify " + AnyType.class.getSimpleName());
-        }
-
-        Set<String> effectiveRealms = RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(AnyEntitlement.SEARCH.getFor(searchCond.hasAnyTypeCond())),
-                realm);
-
-        List<AnyObject> matchingAnyObjects = searchDAO.search(
+        List<AnyObject> matching = searchDAO.search(
                 effectiveRealms, searchCond, page, size, orderBy, AnyTypeKind.ANY_OBJECT);
-        return CollectionUtils.collect(matchingAnyObjects, new Transformer<AnyObject, AnyObjectTO>() {
+        List<AnyObjectTO> result = CollectionUtils.collect(matching, new Transformer<AnyObject, AnyObjectTO>() {
 
             @Transactional(readOnly = true)
             @Override
@@ -140,6 +116,8 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
                 return binder.getAnyObjectTO(input, details);
             }
         }, new ArrayList<AnyObjectTO>());
+
+        return Pair.of(count, result);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index 7e9b88b..4420d4d 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -176,49 +176,21 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
     @Override
-    public int count(final String realm) {
-        return groupDAO.count(RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm));
-    }
-
-    @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true)
-    @Override
-    public List<GroupTO> list(
+    public Pair<Integer, List<GroupTO>> search(
+            final SearchCond searchCond,
             final int page, final int size, final List<OrderByClause> orderBy,
-            final String realm, final boolean details) {
+            final String realm,
+            final boolean details) {
 
-        return CollectionUtils.collect(groupDAO.findAll(
+        int count = searchDAO.count(
                 RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm),
-                page, size, orderBy),
-                new Transformer<Group, GroupTO>() {
+                searchCond == null ? groupDAO.getAllMatchingCond() : searchCond, AnyTypeKind.GROUP);
 
-            @Transactional(readOnly = true)
-            @Override
-            public GroupTO transform(final Group input) {
-                return binder.getGroupTO(input, details);
-            }
-        }, new ArrayList<GroupTO>());
-    }
-
-    @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true)
-    @Override
-    public int searchCount(final SearchCond searchCondition, final String realm) {
-        return searchDAO.count(
-                RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm),
-                searchCondition, AnyTypeKind.GROUP);
-    }
-
-    @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true)
-    @Override
-    public List<GroupTO> search(final SearchCond searchCondition, final int page, final int size,
-            final List<OrderByClause> orderBy, final String realm, final boolean details) {
-
-        List<Group> matchingGroups = searchDAO.search(
+        List<Group> matching = searchDAO.search(
                 RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm),
-                searchCondition, page, size, orderBy, AnyTypeKind.GROUP);
-        return CollectionUtils.collect(matchingGroups, new Transformer<Group, GroupTO>() {
+                searchCond == null ? groupDAO.getAllMatchingCond() : searchCond,
+                page, size, orderBy, AnyTypeKind.GROUP);
+        List<GroupTO> result = CollectionUtils.collect(matching, new Transformer<Group, GroupTO>() {
 
             @Transactional(readOnly = true)
             @Override
@@ -226,6 +198,8 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
                 return binder.getGroupTO(input, details);
             }
         }, new ArrayList<GroupTO>());
+
+        return Pair.of(count, result);
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index ee68a4e..ffca88b 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -92,33 +92,6 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
         return etag;
     }
 
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true)
-    @Override
-    public int count(final String realm) {
-        return userDAO.count(RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm));
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true)
-    @Override
-    public List<UserTO> list(
-            final int page, final int size, final List<OrderByClause> orderBy,
-            final String realm, final boolean details) {
-
-        return CollectionUtils.collect(userDAO.findAll(RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm), page, size, orderBy),
-                new Transformer<User, UserTO>() {
-
-            @Transactional(readOnly = true)
-            @Override
-            public UserTO transform(final User input) {
-                return binder.returnUserTO(binder.getUserTO(input, details));
-            }
-        }, new ArrayList<UserTO>());
-    }
-
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
     public Pair<String, UserTO> selfRead() {
@@ -137,22 +110,21 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
     @Transactional(readOnly = true)
     @Override
-    public int searchCount(final SearchCond searchCondition, final String realm) {
-        return searchDAO.count(RealmUtils.getEffective(
-                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm),
-                searchCondition, AnyTypeKind.USER);
-    }
+    public Pair<Integer, List<UserTO>> search(
+            final SearchCond searchCond,
+            final int page, final int size, final List<OrderByClause> orderBy,
+            final String realm,
+            final boolean details) {
 
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true)
-    @Override
-    public List<UserTO> search(final SearchCond searchCondition, final int page, final int size,
-            final List<OrderByClause> orderBy, final String realm, final boolean details) {
+        int count = searchDAO.count(RealmUtils.getEffective(
+                AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm),
+                searchCond == null ? userDAO.getAllMatchingCond() : searchCond, AnyTypeKind.USER);
 
-        List<User> matchingUsers = searchDAO.search(RealmUtils.getEffective(
+        List<User> matching = searchDAO.search(RealmUtils.getEffective(
                 AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm),
-                searchCondition, page, size, orderBy, AnyTypeKind.USER);
-        return CollectionUtils.collect(matchingUsers, new Transformer<User, UserTO>() {
+                searchCond == null ? userDAO.getAllMatchingCond() : searchCond,
+                page, size, orderBy, AnyTypeKind.USER);
+        List<UserTO> result = CollectionUtils.collect(matching, new Transformer<User, UserTO>() {
 
             @Transactional(readOnly = true)
             @Override
@@ -160,6 +132,8 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
                 return binder.returnUserTO(binder.getUserTO(input, details));
             }
         }, new ArrayList<UserTO>());
+
+        return Pair.of(count, result);
     }
 
     @PreAuthorize("isAnonymous() or hasRole('" + StandardEntitlement.ANONYMOUS + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
index 75b0411..c161ee7 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
@@ -20,8 +20,7 @@ package org.apache.syncope.core.persistence.api.dao;
 
 import java.util.Date;
 import java.util.List;
-import java.util.Set;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
+import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
@@ -58,6 +57,11 @@ public interface AnyDAO<A extends Any<?>> extends DAO<A> {
     List<A> findByResource(ExternalResource resource);
 
     /**
+     * @return the search condition to match all entities
+     */
+    SearchCond getAllMatchingCond();
+
+    /**
      * @return the total number of any objects of type {@link A}
      */
     int count();
@@ -71,22 +75,8 @@ public interface AnyDAO<A extends Any<?>> extends DAO<A> {
      */
     List<A> findAll(int page, int itemsPerPage);
 
-    /**
-     * Find any objects visible from the given admin realms, according to given page and items per page, sorted as
-     * required.
-     *
-     * @param adminRealms admin realms
-     * @param page search result page
-     * @param itemsPerPage items per search result page
-     * @param orderBy ordering clauses
-     * @return any objects of type {@link A} matching the provided conditions
-     */
-    List<A> findAll(Set<String> adminRealms, int page, int itemsPerPage, List<OrderByClause> orderBy);
-
     <S extends Schema> AllowedSchemas<S> findAllowedSchemas(A any, Class<S> reference);
 
-    int count(Set<String> adminRealms);
-
     A save(A any);
 
     void delete(String key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index 394359b..6ef6826 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -39,14 +39,12 @@ import org.apache.commons.jexl3.parser.Token;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.core.persistence.api.dao.AllowedSchemas;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
-import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.search.AnyCond;
 import org.apache.syncope.core.persistence.api.dao.search.AttributeCond;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
@@ -80,8 +78,6 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
 
     private DerSchemaDAO derSchemaDAO;
 
-    private AnySearchDAO searchDAO;
-
     private DynRealmDAO dynRealmDAO;
 
     private AnyUtils anyUtils;
@@ -104,15 +100,6 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         return derSchemaDAO;
     }
 
-    protected AnySearchDAO searchDAO() {
-        synchronized (this) {
-            if (searchDAO == null) {
-                searchDAO = ApplicationContextProvider.getApplicationContext().getBean(AnySearchDAO.class);
-            }
-        }
-        return searchDAO;
-    }
-
     protected DynRealmDAO dynRealmDAO() {
         synchronized (this) {
             if (dynRealmDAO == null) {
@@ -461,20 +448,13 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         return query.getResultList();
     }
 
-    private SearchCond getAllMatchingCond() {
+    @Override
+    public SearchCond getAllMatchingCond() {
         AnyCond idCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
         idCond.setSchema("id");
         return SearchCond.getLeafCond(idCond);
     }
 
-    @Override
-    public List<A> findAll(final Set<String> adminRealms,
-            final int page, final int itemsPerPage, final List<OrderByClause> orderBy) {
-
-        return searchDAO().search(adminRealms, getAllMatchingCond(), page, itemsPerPage, orderBy,
-                anyUtils().getAnyTypeKind());
-    }
-
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
     @SuppressWarnings("unchecked")
@@ -534,11 +514,6 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
     }
 
     @Override
-    public final int count(final Set<String> adminRealms) {
-        return searchDAO().count(adminRealms, getAllMatchingCond(), anyUtils().getAnyTypeKind());
-    }
-
-    @Override
     public A save(final A any) {
         return entityManager().merge(any);
     }
@@ -569,7 +544,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
             DynRealm dynRealm = dynRealmDAO().find(actualKey);
             if (dynRealm == null) {
                 LOG.error("Could not find dynRealm with id {}, even though returned by the native query", actualKey);
-            } else if (!result.contains(dynRealm)) {
+            } else if (!result.contains(actualKey)) {
                 result.add(actualKey);
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/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 4fb49e1..e4e34a3 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
@@ -89,6 +89,8 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     private AnyObjectDAO anyObjectDAO;
 
+    private AnySearchDAO searchDAO;
+
     private AnySearchDAO jpaAnySearchDAO;
 
     private UserDAO userDAO() {
@@ -109,6 +111,15 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
         return anyObjectDAO;
     }
 
+    private AnySearchDAO searchDAO() {
+        synchronized (this) {
+            if (searchDAO == null) {
+                searchDAO = ApplicationContextProvider.getApplicationContext().getBean(AnySearchDAO.class);
+            }
+        }
+        return searchDAO;
+    }
+
     private AnySearchDAO jpaAnySearchDAO() {
         synchronized (this) {
             if (jpaAnySearchDAO == null) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
index 3f4d48a..18172c5 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
-import java.util.List;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
@@ -46,12 +45,6 @@ public class AnyObjectTest extends AbstractTest {
     private RealmDAO realmDAO;
 
     @Test
-    public void findAll() {
-        List<AnyObject> list = anyObjectDAO.findAll(1, 100);
-        assertFalse(list.isEmpty());
-    }
-
-    @Test
     public void find() {
         AnyObject anyObject = anyObjectDAO.find("8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(anyObject);

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
index 101e2b5..e5dcdd4 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
@@ -23,10 +23,8 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
-import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -36,7 +34,6 @@ import org.apache.syncope.core.persistence.jpa.AbstractTest;
 import org.apache.syncope.core.provisioning.api.utils.policy.InvalidPasswordRuleConf;
 import org.apache.syncope.core.spring.security.PasswordGenerator;
 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -61,7 +58,7 @@ public class UserTest extends AbstractTest {
 
     @Test
     public void count() {
-        Integer count = userDAO.count(SyncopeConstants.FULL_ADMIN_REALMS);
+        Integer count = userDAO.count();
         assertNotNull(count);
         assertEquals(5, count, 0);
     }
@@ -69,20 +66,19 @@ public class UserTest extends AbstractTest {
     @Test
     public void findAllByPageAndSize() {
         // get first page
-        List<User> list = userDAO.findAll(
-                SyncopeConstants.FULL_ADMIN_REALMS, 1, 2, Collections.<OrderByClause>emptyList());
+        List<User> list = userDAO.findAll(1, 2);
         assertEquals("did not get expected number of users", 2, list.size());
 
         // get second page
-        list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 2, 2, Collections.<OrderByClause>emptyList());
+        list = userDAO.findAll(2, 2);
         assertEquals("did not get expected number of users", 2, list.size());
 
         // get second page with uncomplete set
-        list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 2, 3, Collections.<OrderByClause>emptyList());
+        list = userDAO.findAll(2, 3);
         assertEquals("did not get expected number of users", 2, list.size());
 
         // get unexistent page
-        list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 3, 2, Collections.<OrderByClause>emptyList());
+        list = userDAO.findAll(3, 2);
         assertEquals("did not get expected number of users", 1, list.size());
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
index 0574d82..2cc2413 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
@@ -19,10 +19,12 @@
 package org.apache.syncope.core.rest.cxf.service;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Set;
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.patch.AnyPatch;
@@ -115,34 +117,24 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
     public PagedResult<TO> search(final AnyQuery anyQuery) {
         String realm = StringUtils.prependIfMissing(anyQuery.getRealm(), SyncopeConstants.ROOT_REALM);
 
-        if (StringUtils.isBlank(anyQuery.getFiql())) {
-            return buildPagedResult(
-                    getAnyLogic().list(
-                            anyQuery.getPage(),
-                            anyQuery.getSize(),
-                            getOrderByClauses(anyQuery.getOrderBy()),
-                            realm,
-                            anyQuery.getDetails()),
-                    anyQuery.getPage(),
-                    anyQuery.getSize(),
-                    getAnyLogic().count(realm));
-        } else {
-            // if an assignable query is provided in the FIQL string, start anyway from root realm
-            boolean isAssignableCond = -1 != anyQuery.getFiql().indexOf(SpecialAttr.ASSIGNABLE.toString());
-
-            SearchCond cond = getSearchCond(anyQuery.getFiql(), realm);
-            return buildPagedResult(
-                    getAnyLogic().search(
-                            cond,
-                            anyQuery.getPage(),
-                            anyQuery.getSize(),
-                            getOrderByClauses(anyQuery.getOrderBy()),
-                            isAssignableCond ? SyncopeConstants.ROOT_REALM : realm,
-                            anyQuery.getDetails()),
-                    anyQuery.getPage(),
-                    anyQuery.getSize(),
-                    getAnyLogic().searchCount(cond, isAssignableCond ? SyncopeConstants.ROOT_REALM : realm));
-        }
+        // if an assignable query is provided in the FIQL string, start anyway from root realm
+        boolean isAssignableCond = StringUtils.isBlank(anyQuery.getFiql())
+                ? false
+                : -1 != anyQuery.getFiql().indexOf(SpecialAttr.ASSIGNABLE.toString());
+
+        SearchCond searchCond = StringUtils.isBlank(anyQuery.getFiql())
+                ? null
+                : getSearchCond(anyQuery.getFiql(), realm);
+
+        Pair<Integer, List<TO>> result = getAnyLogic().search(
+                searchCond,
+                anyQuery.getPage(),
+                anyQuery.getSize(),
+                getOrderByClauses(anyQuery.getOrderBy()),
+                isAssignableCond ? SyncopeConstants.ROOT_REALM : realm,
+                anyQuery.getDetails());
+
+        return buildPagedResult(result.getRight(), anyQuery.getPage(), anyQuery.getSize(), result.getLeft());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
index a4723c7..302441e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
@@ -389,7 +389,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
 
         TESTER.assertLabel(
                 "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:secondLevelContainer:title",
-                "CREATE task about USER");
+                "CREATE __ACCOUNT__");
 
         component = findComponentByProp("status", "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:"
                 + "secondLevelContainer:second:executions:firstLevelContainer:first:container:content:searchContainer:"

http://git-wip-us.apache.org/repos/asf/syncope/blob/de9e2029/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
index 7e38c19..5720785 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
@@ -162,7 +162,7 @@ public class LoggerITCase extends AbstractITCase {
             if (UserLogic.class.getSimpleName().equals(eventCategoryTO.getCategory())) {
                 assertEquals(EventCategoryType.LOGIC, eventCategoryTO.getType());
                 assertTrue(eventCategoryTO.getEvents().contains("create"));
-                assertTrue(eventCategoryTO.getEvents().contains("list"));
+                assertTrue(eventCategoryTO.getEvents().contains("search"));
                 assertFalse(eventCategoryTO.getEvents().contains("doCreate"));
                 assertFalse(eventCategoryTO.getEvents().contains("setStatusOnWfAdapter"));
                 assertFalse(eventCategoryTO.getEvents().contains("resolveReference"));
@@ -176,7 +176,7 @@ public class LoggerITCase extends AbstractITCase {
             if (GroupLogic.class.getSimpleName().equals(eventCategoryTO.getCategory())) {
                 assertEquals(EventCategoryType.LOGIC, eventCategoryTO.getType());
                 assertTrue(eventCategoryTO.getEvents().contains("create"));
-                assertTrue(eventCategoryTO.getEvents().contains("list"));
+                assertTrue(eventCategoryTO.getEvents().contains("search"));
                 assertFalse(eventCategoryTO.getEvents().contains("resolveReference"));
                 found = true;
             }