Repository: syncope
Updated Branches:
  refs/heads/master 0d5ba39a3 -> 930db341f


[SYNCOPE-741] Merge from 1_2_X


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

Branch: refs/heads/master
Commit: 930db341fc53b0c71ada1b9300979cbd8ac791e5
Parents: 0d5ba39
Author: Francesco Chicchiriccò <[email protected]>
Authored: Fri Dec 11 09:42:22 2015 +0100
Committer: Francesco Chicchiriccò <[email protected]>
Committed: Fri Dec 11 09:42:22 2015 +0100

----------------------------------------------------------------------
 .../commands/task/TaskSyncopeOperations.java    | 10 +--
 .../client/console/rest/TaskRestClient.java     | 24 ++++----
 .../syncope/common/rest/api/beans/AnyQuery.java |  4 +-
 .../common/rest/api/beans/TaskExecQuery.java    | 53 ++++++++++++++++
 .../common/rest/api/beans/TaskQuery.java        | 18 ++++++
 .../common/rest/api/service/TaskService.java    | 41 +++++++++----
 .../apache/syncope/core/logic/TaskLogic.java    | 61 ++++++++++++-------
 .../core/persistence/api/dao/TaskExecDAO.java   |  5 ++
 .../core/persistence/jpa/dao/JPATaskDAO.java    |  8 +--
 .../persistence/jpa/dao/JPATaskExecDAO.java     | 64 +++++++++++++++++---
 .../provisioning/api/data/TaskDataBinder.java   |  2 +-
 .../java/data/TaskDataBinderImpl.java           | 10 +--
 .../rest/cxf/service/AbstractAnyService.java    |  4 +-
 .../rest/cxf/service/AnyObjectServiceImpl.java  |  2 +-
 .../core/rest/cxf/service/TaskServiceImpl.java  | 41 +++++++++----
 .../fit/core/reference/AbstractTaskITCase.java  |  4 +-
 .../fit/core/reference/MultitenancyITCase.java  |  2 +-
 .../core/reference/NotificationTaskITCase.java  | 12 ++--
 .../core/reference/PropagationTaskITCase.java   | 45 +++++++++++++-
 .../fit/core/reference/PushTaskITCase.java      |  4 +-
 .../fit/core/reference/SchedTaskITCase.java     |  6 +-
 .../fit/core/reference/SyncTaskITCase.java      | 16 ++---
 .../syncope/fit/core/reference/UserITCase.java  |  8 +--
 23 files changed, 331 insertions(+), 113 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
----------------------------------------------------------------------
diff --git 
a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
 
b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
index 8a2ec62..ae6d464 100644
--- 
a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
+++ 
b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
@@ -39,18 +39,18 @@ public class TaskSyncopeOperations {
         return taskService.listJobs(JobStatusType.RUNNING);
     }
 
-    public <T extends AbstractTaskTO> T read(final String taskId) {
-        return taskService.read(Long.valueOf(taskId));
+    public <T extends AbstractTaskTO> T read(final String taskKey) {
+        return taskService.read(Long.valueOf(taskKey), true);
     }
 
-    public void delete(final String taskId) {
-        taskService.delete(Long.valueOf(taskId));
+    public void delete(final String taskKey) {
+        taskService.delete(Long.valueOf(taskKey));
     }
 
     public List<AbstractTaskTO> list(final String type) {
         return taskService.list(new 
TaskQuery.Builder().type(TaskType.valueOf(type)).build()).getResult();
     }
-    
+
     public List<AbstractTaskTO> listPropagationTask() {
         return taskService.list(new 
TaskQuery.Builder().type(TaskType.PROPAGATION).build()).getResult();
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
index 6781390..876e640 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
@@ -93,29 +93,29 @@ public class TaskRestClient extends BaseRestClient 
implements ExecutionRestClien
         return result;
     }
 
-    public PropagationTaskTO readPropagationTask(final Long taskId) {
-        return getService(TaskService.class).read(taskId);
+    public PropagationTaskTO readPropagationTask(final Long taskKey) {
+        return getService(TaskService.class).read(taskKey, false);
     }
 
-    public NotificationTaskTO readNotificationTask(final Long taskId) {
-        return getService(TaskService.class).read(taskId);
+    public NotificationTaskTO readNotificationTask(final Long taskKey) {
+        return getService(TaskService.class).read(taskKey, false);
     }
 
-    public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, 
final Long taskId) {
-        return getService(TaskService.class).read(taskId);
+    public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, 
final Long taskKey) {
+        return getService(TaskService.class).read(taskKey, false);
     }
 
-    public void delete(final Long taskId, final Class<? extends 
AbstractTaskTO> taskToClass) {
-        getService(TaskService.class).delete(taskId);
+    public void delete(final Long taskKey, final Class<? extends 
AbstractTaskTO> taskToClass) {
+        getService(TaskService.class).delete(taskKey);
     }
 
     @Override
-    public void startExecution(final long taskId) {
-        startExecution(taskId, false);
+    public void startExecution(final long taskKey) {
+        startExecution(taskKey, false);
     }
 
-    public void startExecution(final long taskId, final boolean dryRun) {
-        getService(TaskService.class).execute(taskId, dryRun);
+    public void startExecution(final long taskKey, final boolean dryRun) {
+        getService(TaskService.class).execute(taskKey, dryRun);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyQuery.java
----------------------------------------------------------------------
diff --git 
a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyQuery.java
 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyQuery.java
index d369ee2..4763b13 100644
--- 
a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyQuery.java
+++ 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyQuery.java
@@ -42,13 +42,13 @@ public class AnyQuery extends AbstractQuery {
 
     private Boolean details;
 
-    public boolean isDetails() {
+    public Boolean getDetails() {
         return details == null ? true : details;
     }
 
     @QueryParam(JAXRSService.PARAM_DETAILS)
     @DefaultValue("true")
-    public void setDetails(final boolean details) {
+    public void setDetails(final Boolean details) {
         this.details = details;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
----------------------------------------------------------------------
diff --git 
a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
new file mode 100644
index 0000000..626b0bb
--- /dev/null
+++ 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.rest.api.beans;
+
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.PathParam;
+
+public class TaskExecQuery extends AbstractQuery {
+
+    private static final long serialVersionUID = -8792519310029596796L;
+
+    public static class Builder extends AbstractQuery.Builder<TaskExecQuery, 
Builder> {
+
+        @Override
+        protected TaskExecQuery newInstance() {
+            return new TaskExecQuery();
+        }
+
+        public Builder key(final Long key) {
+            getInstance().setKey(key);
+            return this;
+        }
+    }
+
+    private Long key;
+
+    public Long getKey() {
+        return key;
+    }
+
+    @NotNull
+    @PathParam("key")
+    public void setKey(final Long key) {
+        this.key = key;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
----------------------------------------------------------------------
diff --git 
a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
index 145384e..75442c8 100644
--- 
a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
+++ 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
@@ -20,6 +20,7 @@ package org.apache.syncope.common.rest.api.beans;
 
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
+import javax.ws.rs.DefaultValue;
 import javax.ws.rs.MatrixParam;
 import javax.ws.rs.QueryParam;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -57,6 +58,11 @@ public class TaskQuery extends AbstractQuery {
             return this;
         }
 
+        public Builder details(final boolean details) {
+            getInstance().setDetails(details);
+            return this;
+        }
+
         @Override
         public TaskQuery build() {
             if (getInstance().type == null) {
@@ -75,6 +81,8 @@ public class TaskQuery extends AbstractQuery {
 
     private Long anyTypeKey;
 
+    private Boolean details;
+
     public TaskType getType() {
         return type;
     }
@@ -113,4 +121,14 @@ public class TaskQuery extends AbstractQuery {
         this.anyTypeKey = anyTypeKey;
     }
 
+    public Boolean getDetails() {
+        return details == null ? true : details;
+    }
+
+    @QueryParam(JAXRSService.PARAM_DETAILS)
+    @DefaultValue("true")
+    public void setDetails(final Boolean details) {
+        this.details = details;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
----------------------------------------------------------------------
diff --git 
a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
index 5337d44..7e03bfe 100644
--- 
a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
+++ 
b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
@@ -42,6 +42,7 @@ import org.apache.syncope.common.lib.to.SchedTaskTO;
 import org.apache.syncope.common.lib.to.TaskExecTO;
 import org.apache.syncope.common.lib.types.JobAction;
 import org.apache.syncope.common.lib.types.JobStatusType;
+import org.apache.syncope.common.rest.api.beans.TaskExecQuery;
 import org.apache.syncope.common.rest.api.beans.TaskQuery;
 
 /**
@@ -54,31 +55,23 @@ public interface TaskService extends JAXRSService {
      * Returns the task matching the given key.
      *
      * @param key key of task to be read
+     * @param details whether include executions or not, defaults to true
      * @param <T> type of taskTO
      * @return task with matching id
      */
     @GET
     @Path("{key}")
     @Produces({ JAXRSService.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    <T extends AbstractTaskTO> T read(@NotNull @PathParam("key") Long key);
-
-    /**
-     * Returns the task execution with the given id.
-     *
-     * @param executionKey key of task execution to be read
-     * @return task execution with matching Id
-     */
-    @GET
-    @Path("executions/{executionKey}")
-    @Produces({ JAXRSService.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    TaskExecTO readExecution(@NotNull @PathParam("executionKey") Long 
executionKey);
+    <T extends AbstractTaskTO> T read(
+            @NotNull @PathParam("key") Long key,
+            @QueryParam(JAXRSService.PARAM_DETAILS) @DefaultValue("true") 
boolean details);
 
     /**
      * Returns a paged list of existing tasks matching the given query.
      *
      * @param query query conditions
      * @param <T> type of taskTO
-     * @return paged list of existing tasks matching type and the given query
+     * @return paged list of existing tasks matching the given query
      */
     @GET
     @Produces({ JAXRSService.APPLICATION_XML, MediaType.APPLICATION_JSON })
@@ -113,6 +106,28 @@ public interface TaskService extends JAXRSService {
     @Path("{key}")
     void delete(@NotNull @PathParam("key") Long key);
 
+    /*
+     * Returns the task execution with the given id.
+     *
+     * @param executionKey key of task execution to be read
+     * @return task execution with matching Id
+     */
+    @GET
+    @Path("executions/{executionKey}")
+    @Produces({ JAXRSService.APPLICATION_XML, MediaType.APPLICATION_JSON })
+    TaskExecTO readExecution(@NotNull @PathParam("executionKey") Long 
executionKey);
+
+    /**
+     * Returns a paged list of task executions matching the given query.
+     *
+     * @param query query conditions
+     * @return paged list of task executions the given query
+     */
+    @GET
+    @Path("{key}/executions")
+    @Produces({ JAXRSService.APPLICATION_XML, MediaType.APPLICATION_JSON })
+    PagedResult<TaskExecTO> listExecutions(@BeanParam TaskExecQuery query);
+
     /**
      * Deletes the task execution matching the provided key.
      *

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java 
b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index 3e716d6..1c48f62 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -113,7 +113,7 @@ public class TaskLogic extends 
AbstractJobLogic<AbstractTaskTO> {
             throw sce;
         }
 
-        return binder.getTaskTO(task, taskUtils);
+        return binder.getTaskTO(task, taskUtils, false);
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_UPDATE + "')")
@@ -145,7 +145,7 @@ public class TaskLogic extends 
AbstractJobLogic<AbstractTaskTO> {
             throw sce;
         }
 
-        return binder.getTaskTO(task, taskUtils);
+        return binder.getTaskTO(task, taskUtils, false);
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_LIST + "')")
@@ -159,7 +159,7 @@ public class TaskLogic extends 
AbstractJobLogic<AbstractTaskTO> {
     @SuppressWarnings("unchecked")
     public <T extends AbstractTaskTO> List<T> list(
             final TaskType type, final String resource, final AnyTypeKind 
anyTypeKind, final Long anyTypeKey,
-            final int page, final int size, final List<OrderByClause> 
orderByClauses) {
+            final int page, final int size, final List<OrderByClause> 
orderByClauses, final boolean details) {
 
         final TaskUtils taskUtils = taskUtilsFactory.getInstance(type);
 
@@ -167,29 +167,20 @@ public class TaskLogic extends 
AbstractJobLogic<AbstractTaskTO> {
                 type, resourceDAO.find(resource), anyTypeKind, anyTypeKey, 
page, size, orderByClauses),
                 new Transformer<Task, T>() {
 
-                    @Override
-                    public T transform(final Task task) {
-                        return (T) binder.getTaskTO(task, taskUtils);
-                    }
-                }, new ArrayList<T>());
+            @Override
+            public T transform(final Task task) {
+                return (T) binder.getTaskTO(task, taskUtils, details);
+            }
+        }, new ArrayList<T>());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
-    public <T extends AbstractTaskTO> T read(final Long taskKey) {
+    public <T extends AbstractTaskTO> T read(final Long taskKey, final boolean 
details) {
         Task task = taskDAO.find(taskKey);
         if (task == null) {
             throw new NotFoundException("Task " + taskKey);
         }
-        return binder.getTaskTO(task, taskUtilsFactory.getInstance(task));
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
-    public TaskExecTO readExecution(final Long execKey) {
-        TaskExec taskExec = taskExecDAO.find(execKey);
-        if (taskExec == null) {
-            throw new NotFoundException("Task execution " + execKey);
-        }
-        return binder.getTaskExecTO(taskExec);
+        return binder.getTaskTO(task, taskUtilsFactory.getInstance(task), 
details);
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_EXECUTE + "')")
@@ -253,7 +244,7 @@ public class TaskLogic extends 
AbstractJobLogic<AbstractTaskTO> {
         }
         TaskUtils taskUtils = taskUtilsFactory.getInstance(task);
 
-        T taskToDelete = binder.getTaskTO(task, taskUtils);
+        T taskToDelete = binder.getTaskTO(task, taskUtils, true);
 
         if (TaskType.SCHEDULED == taskUtils.getType()
                 || TaskType.SYNCHRONIZATION == taskUtils.getType()
@@ -266,6 +257,34 @@ public class TaskLogic extends 
AbstractJobLogic<AbstractTaskTO> {
         return taskToDelete;
     }
 
+    @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
+    public TaskExecTO readExecution(final Long execKey) {
+        TaskExec taskExec = taskExecDAO.find(execKey);
+        if (taskExec == null) {
+            throw new NotFoundException("Task execution " + execKey);
+        }
+        return binder.getTaskExecTO(taskExec);
+    }
+
+    @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
+    public int countExecutions(final Long taskId) {
+        return taskExecDAO.count(taskId);
+    }
+
+    @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
+    public List<TaskExecTO> listExecutions(
+            final Long taskKey, final int page, final int size, final 
List<OrderByClause> orderByClauses) {
+
+        return CollectionUtils.collect(taskExecDAO.findAll(taskKey, page, 
size, orderByClauses),
+                new Transformer<TaskExec, TaskExecTO>() {
+
+            @Override
+            public TaskExecTO transform(final TaskExec taskExec) {
+                return binder.getTaskExecTO(taskExec);
+            }
+        }, new ArrayList<TaskExecTO>());
+    }
+
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_DELETE + "')")
     public TaskExecTO deleteExecution(final Long execKey) {
         TaskExec taskExec = taskExecDAO.find(execKey);
@@ -299,7 +318,7 @@ public class TaskLogic extends 
AbstractJobLogic<AbstractTaskTO> {
         if ((key != null) && !key.equals(0L)) {
             try {
                 final Task task = taskDAO.find(key);
-                return binder.getTaskTO(task, 
taskUtilsFactory.getInstance(task));
+                return binder.getTaskTO(task, 
taskUtilsFactory.getInstance(task), false);
             } catch (Throwable ignore) {
                 LOG.debug("Unresolved reference", ignore);
                 throw new UnresolvedReferenceException(ignore);

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
index 103016d..72e2988 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.api.dao;
 
 import java.util.List;
 import org.apache.syncope.common.lib.types.TaskType;
+import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
 import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
 
@@ -33,6 +34,10 @@ public interface TaskExecDAO extends DAO<TaskExec, Long> {
 
     List<TaskExec> findAll(TaskType type);
 
+    int count(Long taskKey);
+
+    List<TaskExec> findAll(Long taskKey, int page, int itemsPerPage, 
List<OrderByClause> orderByClauses);
+
     TaskExec save(TaskExec execution);
 
     void saveAndAdd(Long taskId, TaskExec execution);

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
index 1ea8968..582cd18 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
@@ -149,7 +149,9 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> 
implements TaskDAO {
             }
         }
 
-        if (statement.length() > 0) {
+        if (statement.length() == 0) {
+            statement.append("ORDER BY t.id DESC");
+        } else {
             statement.insert(0, "ORDER BY ");
         }
         return statement.toString();
@@ -167,9 +169,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> 
implements TaskDAO {
             final List<OrderByClause> orderByClauses) {
 
         StringBuilder queryString = buildFindAllQuery(type, resource, 
anyTypeKind, anyTypeKey).
-                append(orderByClauses.isEmpty()
-                        ? "ORDER BY t.id DESC"
-                        : toOrderByStatement(getEntityReference(type), 
orderByClauses));
+                append(toOrderByStatement(getEntityReference(type), 
orderByClauses));
 
         Query query = entityManager().createQuery(queryString.toString());
         query.setParameter("type", type);

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
index 9b03814..4876056 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
@@ -19,16 +19,19 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.List;
+import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
 import org.apache.syncope.core.persistence.api.dao.TaskExecDAO;
+import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
 import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
 import org.apache.syncope.core.persistence.jpa.entity.task.JPATaskExec;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ReflectionUtils;
 
 @Repository
 public class JPATaskExecDAO extends AbstractDAO<TaskExec, Long> implements 
TaskExecDAO {
@@ -67,14 +70,59 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec, 
Long> implements TaskE
 
     @Override
     public List<TaskExec> findAll(final TaskType type) {
-        StringBuilder queryString = new StringBuilder("SELECT e FROM ").
-                append(JPATaskExec.class.getSimpleName()).
-                append(" e WHERE e.task IN (").
-                append("SELECT t FROM ").
-                append(taskDAO.getEntityReference(type).getSimpleName()).
-                append(" t)");
-
-        TypedQuery<TaskExec> query = 
entityManager().createQuery(queryString.toString(), TaskExec.class);
+        String queryString = "SELECT e FROM " + 
JPATaskExec.class.getSimpleName()
+                + " e WHERE e.task IN ("
+                + "SELECT t FROM " + 
taskDAO.getEntityReference(type).getSimpleName() + " t)";
+
+        TypedQuery<TaskExec> query = entityManager().createQuery(queryString, 
TaskExec.class);
+        return query.getResultList();
+    }
+
+    @Override
+    public int count(final Long taskKey) {
+        Query countQuery = entityManager().createNativeQuery(
+                "SELECT COUNT(e.id) FROM " + JPATaskExec.TABLE + " e WHERE 
e.task_id=?1");
+        countQuery.setParameter(1, taskKey);
+
+        return ((Number) countQuery.getSingleResult()).intValue();
+    }
+
+    private String toOrderByStatement(final List<OrderByClause> 
orderByClauses) {
+        StringBuilder statement = new StringBuilder();
+
+        for (OrderByClause clause : orderByClauses) {
+            String field = clause.getField().trim();
+            if (ReflectionUtils.findField(JPATaskExec.class, field) != null) {
+                statement.append("e.").append(field).append(' 
').append(clause.getDirection().name());
+            }
+        }
+
+        if (statement.length() == 0) {
+            statement.append("ORDER BY e.id DESC");
+        } else {
+            statement.insert(0, "ORDER BY ");
+        }
+        return statement.toString();
+    }
+
+    @Override
+    public List<TaskExec> findAll(
+            final Long taskKey, final int page, final int itemsPerPage, final 
List<OrderByClause> orderByClauses) {
+
+        String queryString =
+                "SELECT e FROM " + JPATaskExec.class.getSimpleName() + " e 
WHERE e.task.id=:taskKey "
+                + toOrderByStatement(orderByClauses);
+
+        TypedQuery<TaskExec> query = entityManager().createQuery(queryString, 
TaskExec.class);
+        query.setParameter("taskKey", taskKey);
+
+        // page starts from 1, while setFirtResult() starts from 0
+        query.setFirstResult(itemsPerPage * (page <= 0 ? 0 : page - 1));
+
+        if (itemsPerPage >= 0) {
+            query.setMaxResults(itemsPerPage);
+        }
+
         return query.getResultList();
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/TaskDataBinder.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/TaskDataBinder.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/TaskDataBinder.java
index 997e98e..dcaca2b 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/TaskDataBinder.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/TaskDataBinder.java
@@ -32,7 +32,7 @@ public interface TaskDataBinder {
 
     TaskExecTO getTaskExecTO(TaskExec execution);
 
-    <T extends AbstractTaskTO> T getTaskTO(Task task, TaskUtils taskUtil);
+    <T extends AbstractTaskTO> T getTaskTO(Task task, TaskUtils taskUtil, 
boolean details);
 
     void updateSchedTask(SchedTask task, SchedTaskTO taskTO, TaskUtils 
taskUtil);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
index 94dcd13..d3035a3 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
@@ -280,7 +280,7 @@ public class TaskDataBinderImpl implements TaskDataBinder {
     }
 
     @Override
-    public <T extends AbstractTaskTO> T getTaskTO(final Task task, final 
TaskUtils taskUtils) {
+    public <T extends AbstractTaskTO> T getTaskTO(final Task task, final 
TaskUtils taskUtils, final boolean details) {
         T taskTO = taskUtils.newTaskTO();
         BeanUtils.copyProperties(task, taskTO, IGNORE_TASK_PROPERTIES);
 
@@ -289,9 +289,11 @@ public class TaskDataBinderImpl implements TaskDataBinder {
         taskTO.setStartDate(latestExec == null ? null : 
latestExec.getStartDate());
         taskTO.setEndDate(latestExec == null ? null : latestExec.getEndDate());
 
-        for (TaskExec execution : task.getExecs()) {
-            if (execution != null) {
-                taskTO.getExecutions().add(getTaskExecTO(execution));
+        if (details) {
+            for (TaskExec execution : task.getExecs()) {
+                if (execution != null) {
+                    taskTO.getExecutions().add(getTaskExecTO(execution));
+                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/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 609f1f8..e1b43b4 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
@@ -117,7 +117,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, 
P extends AnyPatch>
                         listQuery.getSize(),
                         getOrderByClauses(listQuery.getOrderBy()),
                         realm,
-                        listQuery.isDetails()),
+                        listQuery.getDetails()),
                 listQuery.getPage(),
                 listQuery.getSize(),
                 getAnyLogic().count(realm));
@@ -138,7 +138,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, 
P extends AnyPatch>
                         searchQuery.getSize(),
                         getOrderByClauses(searchQuery.getOrderBy()),
                         isAssignableCond ? SyncopeConstants.ROOT_REALM : realm,
-                        searchQuery.isDetails()),
+                        searchQuery.getDetails()),
                 searchQuery.getPage(),
                 searchQuery.getSize(),
                 getAnyLogic().searchCount(cond, isAssignableCond ? 
SyncopeConstants.ROOT_REALM : realm));

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
 
b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
index 10c46a8..b5227e4 100644
--- 
a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
+++ 
b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
@@ -63,7 +63,7 @@ public class AnyObjectServiceImpl extends 
AbstractAnyService<AnyObjectTO, AnyObj
 
         AnySearchQuery searchQuery = new AnySearchQuery();
         searchQuery.setFiql(new 
AnyObjectFiqlSearchConditionBuilder(type).query());
-        searchQuery.setDetails(listQuery.isDetails());
+        searchQuery.setDetails(listQuery.getDetails());
         searchQuery.setOrderBy(listQuery.getOrderBy());
         searchQuery.setPage(listQuery.getPage());
         searchQuery.setSize(listQuery.getSize());

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
 
b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
index 17bceb8..748d998 100644
--- 
a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
+++ 
b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
@@ -33,6 +33,7 @@ import org.apache.syncope.common.lib.to.TaskExecTO;
 import org.apache.syncope.common.lib.types.JobAction;
 import org.apache.syncope.common.lib.types.JobStatusType;
 import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.beans.TaskExecQuery;
 import org.apache.syncope.common.rest.api.beans.TaskQuery;
 import org.apache.syncope.common.rest.api.service.TaskService;
 import org.apache.syncope.core.logic.TaskLogic;
@@ -66,11 +67,6 @@ public class TaskServiceImpl extends AbstractServiceImpl 
implements TaskService
     }
 
     @Override
-    public void deleteExecution(final Long executionKey) {
-        logic.deleteExecution(executionKey);
-    }
-
-    @Override
     public TaskExecTO execute(final Long key, final boolean dryRun) {
         return logic.execute(key, dryRun);
     }
@@ -86,7 +82,8 @@ public class TaskServiceImpl extends AbstractServiceImpl 
implements TaskService
                         query.getAnyTypeKey(),
                         query.getPage(),
                         query.getSize(),
-                        getOrderByClauses(query.getOrderBy())),
+                        getOrderByClauses(query.getOrderBy()),
+                        query.getDetails()),
                 query.getPage(),
                 query.getSize(),
                 logic.count(
@@ -97,13 +94,8 @@ public class TaskServiceImpl extends AbstractServiceImpl 
implements TaskService
     }
 
     @Override
-    public <T extends AbstractTaskTO> T read(final Long key) {
-        return logic.read(key);
-    }
-
-    @Override
-    public TaskExecTO readExecution(final Long executionKey) {
-        return logic.readExecution(executionKey);
+    public <T extends AbstractTaskTO> T read(final Long key, final boolean 
details) {
+        return logic.read(key, details);
     }
 
     @Override
@@ -118,6 +110,29 @@ public class TaskServiceImpl extends AbstractServiceImpl 
implements TaskService
     }
 
     @Override
+    public TaskExecTO readExecution(final Long executionKey) {
+        return logic.readExecution(executionKey);
+    }
+
+    @Override
+    public PagedResult<TaskExecTO> listExecutions(final TaskExecQuery query) {
+        return buildPagedResult(
+                logic.listExecutions(
+                        query.getKey(),
+                        query.getPage(),
+                        query.getSize(),
+                        getOrderByClauses(query.getOrderBy())),
+                query.getPage(),
+                query.getSize(),
+                logic.countExecutions(query.getKey()));
+    }
+
+    @Override
+    public void deleteExecution(final Long executionKey) {
+        logic.deleteExecution(executionKey);
+    }
+
+    @Override
     public BulkActionResult bulk(final BulkAction bulkAction) {
         BulkActionResult result = new BulkActionResult();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
index c0991a4..88d2450 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
@@ -94,7 +94,7 @@ public abstract class AbstractTaskITCase extends 
AbstractITCase {
     protected static TaskExecTO execTask(final TaskService taskService, final 
Long taskKey, final String initialStatus,
             final int maxWaitSeconds, final boolean dryRun) {
 
-        AbstractTaskTO taskTO = taskService.read(taskKey);
+        AbstractTaskTO taskTO = taskService.read(taskKey, true);
         assertNotNull(taskTO);
         assertNotNull(taskTO.getExecutions());
 
@@ -112,7 +112,7 @@ public abstract class AbstractTaskITCase extends 
AbstractITCase {
             } catch (InterruptedException e) {
             }
 
-            taskTO = taskService.read(taskTO.getKey());
+            taskTO = taskService.read(taskTO.getKey(), true);
 
             assertNotNull(taskTO);
             assertNotNull(taskTO.getExecutions());

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
index 8d456ff..bb56342 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
@@ -198,7 +198,7 @@ public class MultitenancyITCase extends AbstractITCase {
         response = adminClient.getService(TaskService.class).create(task);
         assertEquals(Response.Status.CREATED.getStatusCode(), 
response.getStatus());
         task = adminClient.getService(TaskService.class).read(
-                
Long.valueOf(StringUtils.substringAfterLast(response.getLocation().toASCIIString(),
 "/")));
+                
Long.valueOf(StringUtils.substringAfterLast(response.getLocation().toASCIIString(),
 "/")), true);
         assertNotNull(resource);
 
         // synchronize

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
index 853b17c..0d18693 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
@@ -144,7 +144,7 @@ public class NotificationTaskITCase extends 
AbstractTaskITCase {
         assertTrue(verifyMail(sender, subject, recipient));
 
         // verify message body
-        taskTO = taskService.read(taskTO.getKey());
+        taskTO = taskService.read(taskTO.getKey(), true);
         assertNotNull(taskTO);
         assertTrue(taskTO.isExecuted());
         assertNotNull(taskTO.getTextBody());
@@ -191,7 +191,7 @@ public class NotificationTaskITCase extends 
AbstractTaskITCase {
             // 4. verify notification could not be delivered
             execTask(taskService, taskTO.getKey(), 
NotificationJob.Status.NOT_SENT.name(), 5, false);
 
-            taskTO = taskService.read(taskTO.getKey());
+            taskTO = taskService.read(taskTO.getKey(), true);
             assertNotNull(taskTO);
             assertFalse(taskTO.isExecuted());
             assertFalse(taskTO.getExecutions().isEmpty());
@@ -217,7 +217,7 @@ public class NotificationTaskITCase extends 
AbstractTaskITCase {
         // generate an execution in order to verify the deletion of a 
notification task with one or more executions
         execNotificationTask(taskService, taskTO.getKey(), 50);
 
-        taskTO = taskService.read(taskTO.getKey());
+        taskTO = taskService.read(taskTO.getKey(), true);
         assertTrue(taskTO.isExecuted());
         assertFalse(taskTO.getExecutions().isEmpty());
 
@@ -240,7 +240,7 @@ public class NotificationTaskITCase extends 
AbstractTaskITCase {
             execNotificationTask(taskService, taskTO.getKey(), 50);
 
             // 4. verify
-            taskTO = taskService.read(taskTO.getKey());
+            taskTO = taskService.read(taskTO.getKey(), true);
             assertNotNull(taskTO);
             assertTrue(taskTO.isExecuted());
             assertEquals(1, taskTO.getExecutions().size());
@@ -269,7 +269,7 @@ public class NotificationTaskITCase extends 
AbstractTaskITCase {
         assertTrue(verifyMail(sender, subject, recipient));
 
         // verify that last exec status was updated
-        taskTO = taskService.read(taskTO.getKey());
+        taskTO = taskService.read(taskTO.getKey(), true);
         assertNotNull(taskTO);
         assertTrue(taskTO.isExecuted());
         assertTrue(taskTO.getExecutions().isEmpty());
@@ -291,7 +291,7 @@ public class NotificationTaskITCase extends 
AbstractTaskITCase {
         assertTrue(verifyMail(sender, subject, recipient));
 
         // verify task
-        taskTO = taskService.read(taskTO.getKey());
+        taskTO = taskService.read(taskTO.getKey(), true);
         assertTrue(taskTO.isExecuted());
         assertNotNull(taskTO);
         
assertTrue(taskTO.getRecipients().contains("[email protected]"));

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PropagationTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PropagationTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PropagationTaskITCase.java
index 5b65496..cd2a010 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PropagationTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PropagationTaskITCase.java
@@ -32,6 +32,7 @@ import org.apache.syncope.common.lib.to.PropagationTaskTO;
 import org.apache.syncope.common.lib.to.TaskExecTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.TaskType;
+import org.apache.syncope.common.rest.api.beans.TaskExecQuery;
 import org.apache.syncope.common.rest.api.beans.TaskQuery;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
@@ -69,7 +70,7 @@ public class PropagationTaskITCase extends AbstractTaskITCase 
{
 
     @Test
     public void read() {
-        final PropagationTaskTO taskTO = taskService.read(3L);
+        final PropagationTaskTO taskTO = taskService.read(3L, true);
         assertNotNull(taskTO);
         assertNotNull(taskTO.getExecutions());
         assertTrue(taskTO.getExecutions().isEmpty());
@@ -109,4 +110,46 @@ public class PropagationTaskITCase extends 
AbstractTaskITCase {
         assertFalse(taskService.list(new 
TaskQuery.Builder().type(TaskType.PROPAGATION).build()).getResult().
                 containsAll(after));
     }
+
+    @Test
+    public void issueSYNCOPE741() {
+        for (int i = 0; i < 3; i++) {
+            taskService.execute(1L, false);
+            taskService.execute(2L, false);
+        }
+        try {
+            Thread.sleep(3000);
+        } catch (InterruptedException e) {
+            // ignore
+        }
+
+        // check list
+        PagedResult<AbstractTaskTO> tasks = taskService.list(
+                new 
TaskQuery.Builder().type(TaskType.PROPAGATION).page(1).size(2).details(false).build());
+        for (AbstractTaskTO item : tasks.getResult()) {
+            assertTrue(item.getExecutions().isEmpty());
+        }
+
+        tasks = taskService.list(
+                new 
TaskQuery.Builder().type(TaskType.PROPAGATION).page(1).size(2).details(true).build());
+        for (AbstractTaskTO item : tasks.getResult()) {
+            assertFalse(item.getExecutions().isEmpty());
+        }
+
+        // check read
+        PropagationTaskTO task = taskService.read(1L, false);
+        assertNotNull(task);
+        assertEquals(1L, task.getKey());
+        assertTrue(task.getExecutions().isEmpty());
+
+        task = taskService.read(1L, true);
+        assertNotNull(task);
+        assertEquals(1L, task.getKey());
+        assertFalse(task.getExecutions().isEmpty());
+
+        // check list executions
+        PagedResult<TaskExecTO> execs = taskService.listExecutions(
+                new TaskExecQuery.Builder().key(1L).page(1).size(2).build());
+        assertTrue(execs.getTotalCount() >= execs.getResult().size());
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PushTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PushTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PushTaskITCase.java
index 1371d69..2213f53 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PushTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PushTaskITCase.java
@@ -73,7 +73,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void read() {
-        PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(17L);
+        PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(17L, true);
         assertEquals(UnmatchingRule.ASSIGN, pushTaskTO.getUnmatchingRule());
         assertEquals(MatchingRule.UPDATE, pushTaskTO.getMatchingRule());
     }
@@ -104,7 +104,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
         final PushTaskTO actual = getObject(response.getLocation(), 
TaskService.class, PushTaskTO.class);
         assertNotNull(actual);
 
-        task = taskService.read(actual.getKey());
+        task = taskService.read(actual.getKey(), true);
         assertNotNull(task);
         assertEquals(task.getKey(), actual.getKey());
         assertEquals(task.getJobDelegateClassName(), 
actual.getJobDelegateClassName());

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SchedTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SchedTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SchedTaskITCase.java
index 884ff9a..3d1605d 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SchedTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SchedTaskITCase.java
@@ -67,7 +67,7 @@ public class SchedTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void update() {
-        SchedTaskTO task = taskService.read(SCHED_TASK_ID);
+        SchedTaskTO task = taskService.read(SCHED_TASK_ID, true);
         assertNotNull(task);
 
         SchedTaskTO taskMod = new SchedTaskTO();
@@ -75,7 +75,7 @@ public class SchedTaskITCase extends AbstractTaskITCase {
         taskMod.setCronExpression(null);
 
         taskService.update(taskMod);
-        SchedTaskTO actual = taskService.read(taskMod.getKey());
+        SchedTaskTO actual = taskService.read(taskMod.getKey(), true);
         assertNotNull(actual);
         assertEquals(task.getKey(), actual.getKey());
         assertNull(actual.getCronExpression());
@@ -94,7 +94,7 @@ public class SchedTaskITCase extends AbstractTaskITCase {
         assertEquals("issueSYNCOPE144", actual.getName());
         assertEquals("issueSYNCOPE144 Description", actual.getDescription());
 
-        task = taskService.read(actual.getKey());
+        task = taskService.read(actual.getKey(), true);
         assertNotNull(task);
         assertEquals("issueSYNCOPE144", task.getName());
         assertEquals("issueSYNCOPE144 Description", task.getDescription());

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
index eeabd8f..b774bde 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
@@ -83,7 +83,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
 
     @BeforeClass
     public static void testSyncActionsSetup() {
-        SyncTaskTO syncTask = taskService.read(SYNC_TASK_ID);
+        SyncTaskTO syncTask = taskService.read(SYNC_TASK_ID, true);
         syncTask.getActionsClassNames().add(TestSyncActions.class.getName());
         taskService.update(syncTask);
     }
@@ -129,7 +129,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
         SyncTaskTO actual = getObject(response.getLocation(), 
TaskService.class, SyncTaskTO.class);
         assertNotNull(actual);
 
-        task = taskService.read(actual.getKey());
+        task = taskService.read(actual.getKey(), true);
         assertNotNull(task);
         assertEquals(actual.getKey(), task.getKey());
         assertEquals(actual.getJobDelegateClassName(), 
task.getJobDelegateClassName());
@@ -458,7 +458,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
             jdbcTemplate.execute("INSERT INTO testsync VALUES (1002, 'user2', 
'Rossi', '[email protected]')");
 
             // 2. create new sync task for test-db, with reconciliation filter 
(surname 'Rossi') 
-            task = taskService.read(10L);
+            task = taskService.read(10L, true);
             task.setSyncMode(SyncMode.FILTERED_RECONCILIATION);
             
task.setReconciliationFilterBuilderClassName(TestReconciliationFilterBuilder.class.getName());
             Response response = taskService.create(task);
@@ -536,13 +536,13 @@ public class SyncTaskITCase extends AbstractTaskITCase {
             //-----------------------------
 
             // Update sync task
-            SyncTaskTO task = taskService.read(9L);
+            SyncTaskTO task = taskService.read(9L, true);
             assertNotNull(task);
 
             task.getTemplates().put(AnyTypeKind.USER.name(), template);
 
             taskService.update(task);
-            SyncTaskTO actual = taskService.read(task.getKey());
+            SyncTaskTO actual = taskService.read(task.getKey(), true);
             assertNotNull(actual);
             assertEquals(task.getKey(), actual.getKey());
             
assertFalse(actual.getTemplates().get(AnyTypeKind.USER.name()).getResources().isEmpty());
@@ -631,7 +631,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
 
         execProvisioningTask(taskService, task.getKey(), 50, false);
 
-        SyncTaskTO executed = taskService.read(task.getKey());
+        SyncTaskTO executed = taskService.read(task.getKey(), true);
         assertEquals(1, executed.getExecutions().size());
 
         // asser for just one match
@@ -689,7 +689,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
         assertTrue(userTO.getVirAttrMap().isEmpty());
 
         // Update sync task
-        SyncTaskTO task = taskService.read(12L);
+        SyncTaskTO task = taskService.read(12L, true);
         assertNotNull(task);
 
         UserTO template = new UserTO();
@@ -755,7 +755,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
         SyncTaskTO actual = getObject(taskResponse.getLocation(), 
TaskService.class, SyncTaskTO.class);
         assertNotNull(actual);
 
-        syncTask = taskService.read(actual.getKey());
+        syncTask = taskService.read(actual.getKey(), true);
         assertNotNull(syncTask);
         assertEquals(actual.getKey(), syncTask.getKey());
         assertEquals(actual.getJobDelegateClassName(), 
syncTask.getJobDelegateClassName());

http://git-wip-us.apache.org/repos/asf/syncope/blob/930db341/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
index 44f09c2..199fe0b 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
@@ -168,7 +168,7 @@ public class UserITCase extends AbstractITCase {
         assertTrue(newMaxKey > maxKey);
 
         // get last task
-        PropagationTaskTO taskTO = taskService.read(newMaxKey);
+        PropagationTaskTO taskTO = taskService.read(newMaxKey, true);
         assertNotNull(taskTO);
         assertFalse(taskTO.getExecutions().isEmpty());
         assertEquals(PropagationTaskExecStatus.NOT_ATTEMPTED.name(), 
taskTO.getExecutions().get(0).getStatus());
@@ -353,7 +353,7 @@ public class UserITCase extends AbstractITCase {
         assertFalse(tasks.getResult().isEmpty());
 
         long maxKey = tasks.getResult().iterator().next().getKey();
-        PropagationTaskTO taskTO = taskService.read(maxKey);
+        PropagationTaskTO taskTO = taskService.read(maxKey, true);
 
         assertNotNull(taskTO);
         int maxTaskExecutions = taskTO.getExecutions().size();
@@ -400,7 +400,7 @@ public class UserITCase extends AbstractITCase {
         assertEquals(newMaxKey, maxKey);
 
         // get last task
-        taskTO = taskService.read(newMaxKey);
+        taskTO = taskService.read(newMaxKey, true);
 
         assertNotNull(taskTO);
         assertEquals(maxTaskExecutions, taskTO.getExecutions().size());
@@ -764,7 +764,7 @@ public class UserITCase extends AbstractITCase {
         // all update executions have to be registered
         assertTrue(newMaxKey > maxKey);
 
-        PropagationTaskTO taskTO = taskService.read(newMaxKey);
+        PropagationTaskTO taskTO = taskService.read(newMaxKey, true);
 
         assertNotNull(taskTO);
         assertEquals(1, taskTO.getExecutions().size());

Reply via email to