Repository: syncope Updated Branches: refs/heads/1_2_X fc421a5ec -> b4812b218
Fixed SYNCOPE-741 Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/b4812b21 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/b4812b21 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/b4812b21 Branch: refs/heads/1_2_X Commit: b4812b218b60c821fa00309674018045b5bcc1de Parents: fc421a5 Author: Massimiliano Perrone <massimiliano.perr...@tirasa.net> Authored: Thu Dec 10 15:14:07 2015 +0100 Committer: Massimiliano Perrone <massimiliano.perr...@tirasa.net> Committed: Thu Dec 10 15:14:07 2015 +0100 ---------------------------------------------------------------------- .../syncope/common/services/TaskService.java | 24 +++++++- .../syncope/common/to/AbstractSyncTaskTO.java | 2 +- .../syncope/common/to/AbstractTaskTO.java | 2 +- .../syncope/console/pages/TaskModalPage.java | 50 +++++++++------- .../org/apache/syncope/console/pages/Tasks.java | 20 ++++--- .../pages/panels/AbstractSyncTasksPanel.java | 2 +- .../console/pages/panels/PropagationTasks.java | 2 +- .../syncope/console/rest/TaskRestClient.java | 30 ++++++---- .../core/rest/controller/TaskController.java | 28 +++++---- .../syncope/core/rest/data/TaskDataBinder.java | 14 +++-- .../syncope/core/services/TaskServiceImpl.java | 20 ++++--- .../core/notification/NotificationTest.java | 2 +- .../syncope/core/rest/TaskTestITCase.java | 63 ++++++++++++-------- .../syncope/core/rest/UserTestITCase.java | 60 +++++++++---------- 14 files changed, 191 insertions(+), 128 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/common/src/main/java/org/apache/syncope/common/services/TaskService.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/syncope/common/services/TaskService.java b/common/src/main/java/org/apache/syncope/common/services/TaskService.java index 5b197c6..0deba68 100644 --- a/common/src/main/java/org/apache/syncope/common/services/TaskService.java +++ b/common/src/main/java/org/apache/syncope/common/services/TaskService.java @@ -91,13 +91,15 @@ public interface TaskService extends JAXRSService { * Returns the task matching the given id. * * @param taskId id 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("{taskId}") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - <T extends AbstractTaskTO> T read(@NotNull @PathParam("taskId") Long taskId); + <T extends AbstractTaskTO> T read(@NotNull @PathParam("taskId") Long taskId, + @QueryParam(PARAM_DETAILS) @DefaultValue("true") boolean details); /** * Returns the task execution with the given id. @@ -141,6 +143,7 @@ public interface TaskService extends JAXRSService { * @param page page number of tasks in relation to page size * @param size number of tasks listed per page * @param orderBy list of ordering clauses, separated by comma + * @param details whether include executions or not, defaults to true * @param <T> type of taskTO * @return paged list of existing tasks matching type and page/size conditions */ @@ -149,7 +152,8 @@ public interface TaskService extends JAXRSService { <T extends AbstractTaskTO> PagedResult<T> list(@NotNull @MatrixParam("type") TaskType taskType, @NotNull @Min(1) @QueryParam(PARAM_PAGE) @DefaultValue(DEFAULT_PARAM_PAGE) Integer page, @NotNull @Min(1) @QueryParam(PARAM_SIZE) @DefaultValue(DEFAULT_PARAM_SIZE) Integer size, - @QueryParam(PARAM_ORDERBY) String orderBy); + @QueryParam(PARAM_ORDERBY) String orderBy, + @QueryParam(PARAM_DETAILS) @DefaultValue("true") boolean details); /** * Returns a paged list of existing tasks matching type and page/size conditions. @@ -167,6 +171,22 @@ public interface TaskService extends JAXRSService { @NotNull @Min(1) @QueryParam(PARAM_SIZE) @DefaultValue(DEFAULT_PARAM_SIZE) Integer size); /** + * Returns the task matching the given id. + * + * @param taskId id of task where to list the executions + * @param page page number of executions in relation to page size + * @param size number of executions listed per page + * @return list of executions with matching id + */ + @GET + @Path("{taskId}/executions") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + PagedResult<TaskExecTO> listEexecutions( + @NotNull @Min(1) @QueryParam(PARAM_PAGE) @DefaultValue(DEFAULT_PARAM_PAGE) Integer page, + @NotNull @Min(1) @QueryParam(PARAM_SIZE) @DefaultValue(DEFAULT_PARAM_SIZE) Integer size, + @NotNull @PathParam("taskId") Long taskId); + + /** * Creates a new task. * * @param taskTO task to be created http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java b/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java index 8d6c129..751ab04 100644 --- a/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java +++ b/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java @@ -50,7 +50,7 @@ public class AbstractSyncTaskTO extends SchedTaskTO { private MatchingRule matchingRule; - private List<String> actionsClassNames = new ArrayList<String>(); + private final List<String> actionsClassNames = new ArrayList<String>(); public String getResource() { return resource; http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/common/src/main/java/org/apache/syncope/common/to/AbstractTaskTO.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/syncope/common/to/AbstractTaskTO.java b/common/src/main/java/org/apache/syncope/common/to/AbstractTaskTO.java index 518f985..c8a6ba7 100644 --- a/common/src/main/java/org/apache/syncope/common/to/AbstractTaskTO.java +++ b/common/src/main/java/org/apache/syncope/common/to/AbstractTaskTO.java @@ -45,7 +45,7 @@ public abstract class AbstractTaskTO extends AbstractBaseBean { private String latestExecStatus; - private List<TaskExecTO> executions = new ArrayList<TaskExecTO>(); + private final List<TaskExecTO> executions = new ArrayList<TaskExecTO>(); private Date startDate; http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/console/src/main/java/org/apache/syncope/console/pages/TaskModalPage.java ---------------------------------------------------------------------- diff --git a/console/src/main/java/org/apache/syncope/console/pages/TaskModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/TaskModalPage.java index bbb6ee7..aa4326e 100644 --- a/console/src/main/java/org/apache/syncope/console/pages/TaskModalPage.java +++ b/console/src/main/java/org/apache/syncope/console/pages/TaskModalPage.java @@ -90,8 +90,8 @@ public abstract class TaskModalPage extends BaseModalPage { final Label idLabel = new Label("idLabel", new ResourceModel("id")); profile.add(idLabel); - final AjaxTextFieldPanel id = - new AjaxTextFieldPanel("id", getString("id"), new PropertyModel<String>(taskTO, "id")); + final AjaxTextFieldPanel id = new AjaxTextFieldPanel("id", getString("id"), new PropertyModel<String>(taskTO, + "id")); id.setEnabled(false); profile.add(id); @@ -173,9 +173,10 @@ public abstract class TaskModalPage extends BaseModalPage { @Override public void onClick(final AjaxRequestTarget target) { if (target != null) { - final AjaxFallbackDefaultDataTable<TaskExecTO, String> currentTable = - new AjaxFallbackDefaultDataTable<TaskExecTO, String>("executionsTable", columns, - new TaskExecutionsProvider(getCurrentTaskExecution(taskTO)), paginatorRows); + final AjaxFallbackDefaultDataTable<TaskExecTO, String> currentTable + = new AjaxFallbackDefaultDataTable<TaskExecTO, String>("executionsTable", columns, + new TaskExecutionsProvider(taskTO.getId(), paginatorRows), + paginatorRows); currentTable.setOutputMarkupId(true); target.add(currentTable); executions.addOrReplace(currentTable); @@ -187,41 +188,46 @@ public abstract class TaskModalPage extends BaseModalPage { } }); - final AjaxFallbackDefaultDataTable<TaskExecTO, String> table = - new AjaxFallbackDefaultDataTable<TaskExecTO, String>("executionsTable", columns, - new TaskExecutionsProvider(getCurrentTaskExecution(taskTO)), paginatorRows); + final AjaxFallbackDefaultDataTable<TaskExecTO, String> table + = new AjaxFallbackDefaultDataTable<TaskExecTO, String>("executionsTable", columns, + new TaskExecutionsProvider(taskTO.getId(), paginatorRows), paginatorRows); executions.add(table); } - protected static class TaskExecutionsProvider extends SortableDataProvider<TaskExecTO, String> { + protected class TaskExecutionsProvider extends SortableDataProvider<TaskExecTO, String> { private static final long serialVersionUID = 8943636537120648961L; - private SortableDataProviderComparator<TaskExecTO> comparator; + private final SortableDataProviderComparator<TaskExecTO> comparator; - private AbstractTaskTO taskTO; + private final Long taskId; - public TaskExecutionsProvider(final AbstractTaskTO taskTO) { + private final int paginatorRows; + + public TaskExecutionsProvider(final Long taskId, final int paginatorRows) { //Default sorting - this.taskTO = taskTO; + this.taskId = taskId; + this.paginatorRows = paginatorRows; setSort("startDate", SortOrder.DESCENDING); comparator = new SortableDataProviderComparator<TaskExecTO>(this); } @Override public Iterator<TaskExecTO> iterator(final long first, final long count) { + final int page = ((int) first / paginatorRows); - List<TaskExecTO> list = taskTO.getExecutions(); + final List<TaskExecTO> list = taskRestClient.listExecutions( + (page < 0 ? 0 : page) + 1, paginatorRows, taskId); Collections.sort(list, comparator); - return list.subList((int) first, (int) first + (int) count).iterator(); + return list.iterator(); } @Override public long size() { - return taskTO.getExecutions().size(); + return taskRestClient.countExecutions(taskId); } @Override @@ -243,12 +249,12 @@ public abstract class TaskModalPage extends BaseModalPage { final AbstractTaskTO currentTask = taskTO.getId() == 0 ? taskTO : taskTO instanceof PropagationTaskTO - ? taskRestClient.readPropagationTask(taskTO.getId()) - : taskTO instanceof NotificationTaskTO - ? taskRestClient.readNotificationTask(taskTO.getId()) - : taskTO instanceof SyncTaskTO - ? taskRestClient.readSchedTask(SyncTaskTO.class, taskTO.getId()) - : taskRestClient.readSchedTask(SchedTaskTO.class, taskTO.getId()); + ? taskRestClient.readPropagationTask(taskTO.getId()) + : taskTO instanceof NotificationTaskTO + ? taskRestClient.readNotificationTask(taskTO.getId()) + : taskTO instanceof SyncTaskTO + ? taskRestClient.readSchedTask(SyncTaskTO.class, taskTO.getId()) + : taskRestClient.readSchedTask(SchedTaskTO.class, taskTO.getId()); taskTO.getExecutions().clear(); taskTO.getExecutions().addAll(currentTask.getExecutions()); http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/console/src/main/java/org/apache/syncope/console/pages/Tasks.java ---------------------------------------------------------------------- diff --git a/console/src/main/java/org/apache/syncope/console/pages/Tasks.java b/console/src/main/java/org/apache/syncope/console/pages/Tasks.java index 11819c6..b49f218 100644 --- a/console/src/main/java/org/apache/syncope/console/pages/Tasks.java +++ b/console/src/main/java/org/apache/syncope/console/pages/Tasks.java @@ -74,9 +74,9 @@ public class Tasks extends BasePage { private static final long serialVersionUID = -5401263348984206145L; - private SortableDataProviderComparator<TaskExecTO> comparator; + private final SortableDataProviderComparator<TaskExecTO> comparator; - private AbstractTaskTO taskTO; + private final AbstractTaskTO taskTO; public TaskExecutionsProvider(final AbstractTaskTO taskTO) { super(); @@ -125,15 +125,15 @@ public class Tasks extends BasePage { private static final long serialVersionUID = -20112718133295756L; - private SortableDataProviderComparator<T> comparator; + private final SortableDataProviderComparator<T> comparator; - private TaskRestClient restClient; + private final TaskRestClient restClient; - private int paginatorRows; + private final int paginatorRows; - private String id; + private final String id; - private Class<T> reference; + private final Class<T> reference; public TasksProvider( final TaskRestClient restClient, final int paginatorRows, final String id, final Class<T> reference) { @@ -213,8 +213,8 @@ public class Tasks extends BasePage { columns, (ISortableDataProvider<AbstractTaskTO, String>) dataProvider, dataProvider.paginatorRows, - Arrays.asList(new ActionLink.ActionType[] { - ActionLink.ActionType.DELETE, ActionLink.ActionType.DRYRUN, ActionLink.ActionType.EXECUTE }), + Arrays.asList(new ActionLink.ActionType[]{ + ActionLink.ActionType.DELETE, ActionLink.ActionType.DRYRUN, ActionLink.ActionType.EXECUTE}), restClient, "id", TASKS, @@ -230,6 +230,8 @@ public class Tasks extends BasePage { /** * IndicatorMarkupId behaviour is embedded in Tasks.html + * + * @return */ @Override public String getAjaxIndicatorMarkupId() { http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSyncTasksPanel.java ---------------------------------------------------------------------- diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSyncTasksPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSyncTasksPanel.java index e422305..9b24b38 100644 --- a/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSyncTasksPanel.java +++ b/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSyncTasksPanel.java @@ -48,7 +48,7 @@ public abstract class AbstractSyncTasksPanel<T extends AbstractSyncTaskTO> exten private static final long serialVersionUID = -8674781241465369244L; - private int paginatorRows; + private final int paginatorRows; protected WebMarkupContainer container; http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/console/src/main/java/org/apache/syncope/console/pages/panels/PropagationTasks.java ---------------------------------------------------------------------- diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/PropagationTasks.java b/console/src/main/java/org/apache/syncope/console/pages/panels/PropagationTasks.java index 7923c99..551266c 100644 --- a/console/src/main/java/org/apache/syncope/console/pages/panels/PropagationTasks.java +++ b/console/src/main/java/org/apache/syncope/console/pages/panels/PropagationTasks.java @@ -63,7 +63,7 @@ public class PropagationTasks extends AbstractTasks { private boolean operationResult = false; - private ModalWindow window; + private final ModalWindow window; private AjaxDataTablePanel<AbstractTaskTO, String> table; http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/console/src/main/java/org/apache/syncope/console/rest/TaskRestClient.java ---------------------------------------------------------------------- diff --git a/console/src/main/java/org/apache/syncope/console/rest/TaskRestClient.java b/console/src/main/java/org/apache/syncope/console/rest/TaskRestClient.java index c83ce88..b34cc95 100644 --- a/console/src/main/java/org/apache/syncope/console/rest/TaskRestClient.java +++ b/console/src/main/java/org/apache/syncope/console/rest/TaskRestClient.java @@ -96,12 +96,16 @@ public class TaskRestClient extends JobRestClient implements ExecutionRestClient public int count(final String kind) { return getService(TaskService.class).list(TaskType.fromString(kind), 1, 1).getTotalCount(); } + + public int countExecutions(final Long taskId) { + return getService(TaskService.class).listEexecutions(1, 1, taskId).getTotalCount(); + } @SuppressWarnings("unchecked") public <T extends AbstractTaskTO> List<T> list(final Class<T> reference, final int page, final int size, final SortParam<String> sort) { - return (List<T>) getService(TaskService.class).list(getTaskType(reference), page, size, toOrderBy(sort)). + return (List<T>) getService(TaskService.class).list(getTaskType(reference), page, size, toOrderBy(sort), false). getResult(); } @@ -121,16 +125,20 @@ public class TaskRestClient extends JobRestClient implements ExecutionRestClient return result; } + public List<TaskExecTO> listExecutions(final int page, final int size, final Long taskId) { + return getService(TaskService.class).listEexecutions(page, size, taskId).getResult(); + } + public PropagationTaskTO readPropagationTask(final Long taskId) { - return getService(TaskService.class).read(taskId); + return getService(TaskService.class).read(taskId, false); } public NotificationTaskTO readNotificationTask(final Long taskId) { - return getService(TaskService.class).read(taskId); + return getService(TaskService.class).read(taskId, false); } public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, final Long taskId) { - return getService(TaskService.class).read(taskId); + return getService(TaskService.class).read(taskId, false); } public void delete(final Long taskId, final Class<? extends AbstractTaskTO> taskToClass) { @@ -170,17 +178,19 @@ public class TaskRestClient extends JobRestClient implements ExecutionRestClient public BulkActionResult bulkAction(final BulkAction action) { return getService(TaskService.class).bulk(action); } - + @Override - public boolean isJobRunning(final long taskId){ - for(TaskExecTO taskExecTO : getService(TaskService.class).listJobs(JobStatusType.RUNNING)){ - if(taskExecTO.getTask()== taskId) return true; + public boolean isJobRunning(final long taskId) { + for (TaskExecTO taskExecTO : getService(TaskService.class).listJobs(JobStatusType.RUNNING)) { + if (taskExecTO.getTask() == taskId) { + return true; + } } return false; } - + @Override - public void startJob(final long taskId){ + public void startJob(final long taskId) { getService(TaskService.class).actionJob(taskId, JobAction.START); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/core/src/main/java/org/apache/syncope/core/rest/controller/TaskController.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/syncope/core/rest/controller/TaskController.java b/core/src/main/java/org/apache/syncope/core/rest/controller/TaskController.java index aca40e2..c3e8f4f 100644 --- a/core/src/main/java/org/apache/syncope/core/rest/controller/TaskController.java +++ b/core/src/main/java/org/apache/syncope/core/rest/controller/TaskController.java @@ -84,9 +84,6 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { private JobInstanceLoader jobInstanceLoader; @Autowired - private SchedulerFactoryBean scheduler; - - @Autowired private ImplementationClassNamesLoader classNamesLoader; @PreAuthorize("hasRole('TASK_CREATE')") @@ -106,7 +103,7 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { throw sce; } - return binder.getTaskTO(task, taskUtil); + return binder.getTaskTO(task, taskUtil, true); } @PreAuthorize("hasRole('TASK_UPDATE')") @@ -136,7 +133,7 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { throw sce; } - return binder.getTaskTO(task, taskUtil); + return binder.getTaskTO(task, taskUtil, true); } @PreAuthorize("hasRole('TASK_LIST')") @@ -147,14 +144,14 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { @PreAuthorize("hasRole('TASK_LIST')") @SuppressWarnings("unchecked") public <T extends AbstractTaskTO> List<T> list(final TaskType taskType, - final int page, final int size, final List<OrderByClause> orderByClauses) { + final int page, final int size, final List<OrderByClause> orderByClauses, final boolean details) { TaskUtil taskUtil = TaskUtil.getInstance(taskType); List<Task> tasks = taskDAO.findAll(page, size, orderByClauses, taskUtil.taskClass()); List<T> taskTOs = new ArrayList<T>(tasks.size()); for (Task task : tasks) { - taskTOs.add((T) binder.getTaskTO(task, taskUtil)); + taskTOs.add((T) binder.getTaskTO(task, taskUtil, details)); } return taskTOs; @@ -176,12 +173,12 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { } @PreAuthorize("hasRole('TASK_READ')") - public <T extends AbstractTaskTO> T read(final Long taskId) { + public <T extends AbstractTaskTO> T read(final Long taskId, final boolean details) { Task task = taskDAO.find(taskId); if (task == null) { throw new NotFoundException("Task " + taskId); } - return binder.getTaskTO(task, TaskUtil.getInstance(task)); + return binder.getTaskTO(task, TaskUtil.getInstance(task), details); } @PreAuthorize("hasRole('TASK_READ')") @@ -193,6 +190,15 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { return binder.getTaskExecTO(taskExec); } + @PreAuthorize("hasRole('TASK_READ')") + public List<TaskExecTO> listExecution(final Long taskId) { + final List<TaskExecTO> execsExecTOs = new ArrayList<TaskExecTO>(); + for (final TaskExec exec : taskDAO.find(taskId).getExecs()) { + execsExecTOs.add(binder.getTaskExecTO(exec)); + } + return execsExecTOs; + } + @PreAuthorize("hasRole('TASK_EXECUTE')") public TaskExecTO execute(final Long taskId, final boolean dryRun) { Task task = taskDAO.find(taskId); @@ -298,7 +304,7 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { } TaskUtil taskUtil = TaskUtil.getInstance(task); - T taskToDelete = binder.getTaskTO(task, taskUtil); + T taskToDelete = binder.getTaskTO(task, taskUtil, true); if (TaskType.SCHEDULED == taskUtil.getType() || TaskType.SYNCHRONIZATION == taskUtil.getType() @@ -395,7 +401,7 @@ public class TaskController extends AbstractJobController<AbstractTaskTO> { if ((id != null) && !id.equals(0l)) { try { final Task task = taskDAO.find(id); - return binder.getTaskTO(task, TaskUtil.getInstance(task)); + return binder.getTaskTO(task, TaskUtil.getInstance(task), true); } catch (Throwable ignore) { LOG.debug("Unresolved reference", ignore); throw new UnresolvedReferenceException(ignore); http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java b/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java index 965546f..b2eea8b 100644 --- a/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java +++ b/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java @@ -71,9 +71,9 @@ public class TaskDataBinder { private static final Logger LOG = LoggerFactory.getLogger(TaskDataBinder.class); private static final String[] IGNORE_TASK_PROPERTIES = { - "executions", "resource", "matchingRule", "unmatchingRule" }; + "executions", "resource", "matchingRule", "unmatchingRule"}; - private static final String[] IGNORE_TASK_EXECUTION_PROPERTIES = { "id", "task" }; + private static final String[] IGNORE_TASK_EXECUTION_PROPERTIES = {"id", "task"}; @Autowired private ResourceDAO resourceDAO; @@ -262,7 +262,7 @@ public class TaskDataBinder { } } - public <T extends AbstractTaskTO> T getTaskTO(final Task task, final TaskUtil taskUtil) { + public <T extends AbstractTaskTO> T getTaskTO(final Task task, final TaskUtil taskUtil, final boolean details) { T taskTO = taskUtil.newTaskTO(); BeanUtils.copyProperties(task, taskTO, IGNORE_TASK_PROPERTIES); @@ -270,9 +270,11 @@ public class TaskDataBinder { taskTO.setLatestExecStatus(latestExec == null ? "" : latestExec.getStatus()); taskTO.setStartDate(latestExec == null ? null : latestExec.getStartDate()); taskTO.setEndDate(latestExec == null ? null : latestExec.getEndDate()); - - for (TaskExec execution : task.getExecs()) { - taskTO.getExecutions().add(getTaskExecTO(execution)); + + if (details) { + for (TaskExec execution : task.getExecs()) { + taskTO.getExecutions().add(getTaskExecTO(execution)); + } } switch (taskUtil.getType()) { http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java b/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java index 16a6741..28c3eb9 100644 --- a/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java +++ b/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java @@ -99,34 +99,34 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService @Override public <T extends AbstractTaskTO> PagedResult<T> list(final TaskType taskType) { - return list(taskType, DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, null); + return list(taskType, DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, null, true); } @Override public <T extends AbstractTaskTO> PagedResult<T> list(final TaskType taskType, final String orderBy) { - return list(taskType, DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, orderBy); + return list(taskType, DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, orderBy, true); } @Override public <T extends AbstractTaskTO> PagedResult<T> list( final TaskType taskType, final Integer page, final Integer size) { - return list(taskType, page, size, null); + return list(taskType, page, size, null, true); } @Override @SuppressWarnings("unchecked") public <T extends AbstractTaskTO> PagedResult<T> list(final TaskType taskType, - final Integer page, final Integer size, final String orderBy) { + final Integer page, final Integer size, final String orderBy, final boolean details) { List<OrderByClause> orderByClauses = getOrderByClauses(orderBy); return (PagedResult<T>) buildPagedResult( - controller.list(taskType, page, size, orderByClauses), page, size, controller.count(taskType)); + controller.list(taskType, page, size, orderByClauses, details), page, size, controller.count(taskType)); } @Override - public <T extends AbstractTaskTO> T read(final Long taskId) { - return controller.read(taskId); + public <T extends AbstractTaskTO> T read(final Long taskId, final boolean details) { + return controller.read(taskId, details); } @Override @@ -135,6 +135,12 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService } @Override + public PagedResult<TaskExecTO> listEexecutions(final Integer page, final Integer size, final Long taskId) { + final List<TaskExecTO> execTOs = controller.listExecution(taskId); + return buildPagedResult(execTOs, page, size, execTOs.size()); + } + + @Override public void report(final Long executionId, final ReportExecTO reportExec) { reportExec.setId(executionId); controller.report( http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/core/src/test/java/org/apache/syncope/core/notification/NotificationTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/syncope/core/notification/NotificationTest.java b/core/src/test/java/org/apache/syncope/core/notification/NotificationTest.java index 3af0e2f..1838652 100644 --- a/core/src/test/java/org/apache/syncope/core/notification/NotificationTest.java +++ b/core/src/test/java/org/apache/syncope/core/notification/NotificationTest.java @@ -315,7 +315,7 @@ public class NotificationTest { assertNotNull(taskId); // 5. verify that last exec status was updated - NotificationTaskTO task = (NotificationTaskTO) taskController.read(taskId); + NotificationTaskTO task = (NotificationTaskTO) taskController.read(taskId, true); assertNotNull(task); assertTrue(task.getExecutions().isEmpty()); assertTrue(task.isExecuted()); http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java b/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java index c8e34c6..89ec7ba 100644 --- a/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java +++ b/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java @@ -112,7 +112,7 @@ public class TaskTestITCase extends AbstractTest { @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(SYNC_TASK_ID, syncTask); } @@ -174,7 +174,7 @@ public class TaskTestITCase extends AbstractTest { SyncTaskTO actual = getObject(response.getLocation(), TaskService.class, SyncTaskTO.class); assertNotNull(actual); - task = taskService.read(actual.getId()); + task = taskService.read(actual.getId(), true); assertNotNull(task); assertEquals(actual.getId(), task.getId()); assertEquals(actual.getJobClassName(), task.getJobClassName()); @@ -197,7 +197,7 @@ public class TaskTestITCase extends AbstractTest { final PushTaskTO actual = getObject(response.getLocation(), TaskService.class, PushTaskTO.class); assertNotNull(actual); - task = taskService.read(actual.getId()); + task = taskService.read(actual.getId(), true); assertNotNull(task); assertEquals(task.getId(), actual.getId()); assertEquals(task.getJobClassName(), actual.getJobClassName()); @@ -209,7 +209,7 @@ public class TaskTestITCase extends AbstractTest { @Test public void update() { - SchedTaskTO task = taskService.read(SCHED_TASK_ID); + SchedTaskTO task = taskService.read(SCHED_TASK_ID, true); assertNotNull(task); final SchedTaskTO taskMod = new SchedTaskTO(); @@ -217,7 +217,7 @@ public class TaskTestITCase extends AbstractTest { taskMod.setCronExpression(null); taskService.update(taskMod.getId(), taskMod); - SchedTaskTO actual = taskService.read(taskMod.getId()); + SchedTaskTO actual = taskService.read(taskMod.getId(), true); assertNotNull(actual); assertEquals(task.getId(), actual.getId()); assertNull(actual.getCronExpression()); @@ -285,13 +285,13 @@ public class TaskTestITCase extends AbstractTest { @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()); - final PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(17L); + final PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(17L, true); assertEquals(UnmatchingRule.ASSIGN, pushTaskTO.getUnmatchingRule()); assertEquals(MatchingRule.UPDATE, pushTaskTO.getMatchingRule()); } @@ -577,7 +577,7 @@ public class TaskTestITCase extends AbstractTest { } catch (InterruptedException e) { } - taskTO = taskService.read(taskTO.getId()); + taskTO = taskService.read(taskTO.getId(), true); assertNotNull(taskTO); assertNotNull(taskTO.getExecutions()); @@ -607,7 +607,7 @@ public class TaskTestITCase extends AbstractTest { assertNotNull(execution); // 4. verify - taskTO = taskService.read(taskTO.getId()); + taskTO = taskService.read(taskTO.getId(), true); assertNotNull(taskTO); assertEquals(1, taskTO.getExecutions().size()); } finally { @@ -709,13 +709,13 @@ public class TaskTestITCase extends AbstractTest { //----------------------------- // Update sync task - SyncTaskTO task = taskService.read(9L); + SyncTaskTO task = taskService.read(9L, true); assertNotNull(task); task.setUserTemplate(template); taskService.update(task.getId(), task); - SyncTaskTO actual = taskService.read(task.getId()); + SyncTaskTO actual = taskService.read(task.getId(), true); assertNotNull(actual); assertEquals(task.getId(), actual.getId()); assertFalse(actual.getUserTemplate().getResources().isEmpty()); @@ -750,7 +750,7 @@ public class TaskTestITCase extends AbstractTest { assertEquals("issueSYNCOPE144", actual.getName()); assertEquals("issueSYNCOPE144 Description", actual.getDescription()); - task = taskService.read(actual.getId()); + task = taskService.read(actual.getId(), true); assertNotNull(task); assertEquals("issueSYNCOPE144", task.getName()); assertEquals("issueSYNCOPE144 Description", task.getDescription()); @@ -792,7 +792,7 @@ public class TaskTestITCase extends AbstractTest { } private TaskExecTO execSyncTask(final Long taskId, final int maxWaitSeconds, final boolean dryRun) { - AbstractTaskTO taskTO = taskService.read(taskId); + AbstractTaskTO taskTO = taskService.read(taskId, true); assertNotNull(taskTO); assertNotNull(taskTO.getExecutions()); @@ -810,7 +810,7 @@ public class TaskTestITCase extends AbstractTest { } catch (InterruptedException e) { } - taskTO = taskService.read(taskTO.getId()); + taskTO = taskService.read(taskTO.getId(), true); assertNotNull(taskTO); assertNotNull(taskTO.getExecutions()); @@ -917,7 +917,7 @@ public class TaskTestITCase extends AbstractTest { execSyncTask(actual.getId(), 50, false); - SyncTaskTO executed = taskService.read(actual.getId()); + SyncTaskTO executed = taskService.read(actual.getId(), true); assertEquals(1, executed.getExecutions().size()); // asser for just one match @@ -944,7 +944,7 @@ public class TaskTestITCase extends AbstractTest { assertEquals("virtualvalue", userTO.getVirAttrMap().get("virtualdata").getValues().get(0)); // Update sync task - SyncTaskTO task = taskService.read(12L); + SyncTaskTO task = taskService.read(12L, true); assertNotNull(task); // add user template @@ -1195,7 +1195,7 @@ public class TaskTestITCase extends AbstractTest { SyncTaskTO actual = getObject(taskResponse.getLocation(), TaskService.class, SyncTaskTO.class); assertNotNull(actual); - syncTask = taskService.read(actual.getId()); + syncTask = taskService.read(actual.getId(), true); assertNotNull(syncTask); assertEquals(actual.getId(), syncTask.getId()); assertEquals(actual.getJobClassName(), syncTask.getJobClassName()); @@ -1243,8 +1243,7 @@ public class TaskTestITCase extends AbstractTest { assertEquals(encodedNewPassword, updatedUser.getPassword()); // 4. Check that the LDAP resource has the old password - ConnObjectTO connObject = - resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, user.getId()); + ConnObjectTO connObject = resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, user.getId()); assertNotNull(getLdapRemoteObject( connObject.getAttrMap().get(Name.NAME).getValues().get(0), "security", @@ -1271,7 +1270,7 @@ public class TaskTestITCase extends AbstractTest { SyncTaskTO actual = getObject(taskResponse.getLocation(), TaskService.class, SyncTaskTO.class); assertNotNull(actual); - syncTask = taskService.read(actual.getId()); + syncTask = taskService.read(actual.getId(), true); assertNotNull(syncTask); assertEquals(actual.getId(), syncTask.getId()); assertEquals(actual.getJobClassName(), syncTask.getJobClassName()); @@ -1507,7 +1506,7 @@ public class TaskTestITCase extends AbstractTest { // First of all, clear any potential conflict with existing user / role ldapCleanup(); - SyncTaskTO task = taskService.read(11L); + SyncTaskTO task = taskService.read(11L, true); assertNotNull(task); assertEquals(11L, task.getId()); @@ -1522,7 +1521,7 @@ public class TaskTestITCase extends AbstractTest { SyncTaskTO actual = getObject(response.getLocation(), TaskService.class, SyncTaskTO.class); assertNotNull(actual); - task = taskService.read(actual.getId()); + task = taskService.read(actual.getId(), true); assertNotNull(task); assertEquals(actual.getId(), task.getId()); assertEquals(actual.getJobClassName(), task.getJobClassName()); @@ -1540,8 +1539,8 @@ public class TaskTestITCase extends AbstractTest { assertEquals("syncFromLDAP", userTO.getVirAttrMap().get("virtualPropagation").getValues().get(0)); - ConnObjectTO connObj = - resourceService.getConnectorObject(RESOURCE_NAME_DBVIRATTR, SubjectType.USER, userTO.getId()); + ConnObjectTO connObj = resourceService.getConnectorObject(RESOURCE_NAME_DBVIRATTR, SubjectType.USER, userTO. + getId()); assertNotNull(connObj); assertEquals("syncFromLDAP", connObj.getAttrMap().get("SURNAME").getValues().get(0)); @@ -1575,4 +1574,20 @@ public class TaskTestITCase extends AbstractTest { taskService.delete(task.getId()); } + + @Test + public void issueSYNCOPE741() { + ldapCleanup(); + + SyncTaskTO task = taskService.read(11L, false); + assertNotNull(task); + assertEquals(11L, task.getId()); + assertTrue(task.getExecutions().isEmpty()); + + task = taskService.read(11L, true); + assertNotNull(task); + assertEquals(11L, task.getId()); + assertFalse(task.getExecutions().isEmpty()); + assertEquals(1, task.getExecutions().size()); + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/b4812b21/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java b/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java index 3c9b0f2..0d60d33 100644 --- a/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java +++ b/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java @@ -168,7 +168,7 @@ public class UserTestITCase extends AbstractTest { assertTrue(newMaxId > maxId); // get last task - PropagationTaskTO taskTO = taskService.read(newMaxId); + PropagationTaskTO taskTO = taskService.read(newMaxId, true); assertNotNull(taskTO); assertTrue(taskTO.getExecutions().isEmpty()); @@ -370,7 +370,7 @@ public class UserTestITCase extends AbstractTest { assertFalse(tasks.getResult().isEmpty()); long maxId = getMaxTaskId(tasks.getResult()); - PropagationTaskTO taskTO = taskService.read(maxId); + PropagationTaskTO taskTO = taskService.read(maxId, true); assertNotNull(taskTO); int maxTaskExecutions = taskTO.getExecutions().size(); @@ -432,7 +432,7 @@ public class UserTestITCase extends AbstractTest { assertEquals(newMaxId, maxId); // get last task - taskTO = taskService.read(newMaxId); + taskTO = taskService.read(newMaxId, true); assertNotNull(taskTO); assertEquals(maxTaskExecutions, taskTO.getExecutions().size()); @@ -807,7 +807,7 @@ public class UserTestITCase extends AbstractTest { // all update executions have to be registered assertTrue(newMaxId > maxId); - final PropagationTaskTO taskTO = taskService.read(newMaxId); + final PropagationTaskTO taskTO = taskService.read(newMaxId, true); assertNotNull(taskTO); assertEquals(1, taskTO.getExecutions().size()); @@ -1149,8 +1149,8 @@ public class UserTestITCase extends AbstractTest { assertNotNull(actual); assertNotNull(actual.getDerAttrMap().get("csvuserid")); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, actual.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, actual. + getId()); assertNotNull(connObjectTO); assertEquals("sx-dx", connObjectTO.getAttrMap().get("ROLE").getValues().get(0)); } @@ -1177,8 +1177,8 @@ public class UserTestITCase extends AbstractTest { assertNotNull(actual); assertNotNull(actual.getDerAttrMap().get("csvuserid")); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, actual.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, actual. + getId()); assertNotNull(connObjectTO); assertEquals("sx-dx", connObjectTO.getAttrMap().get("MEMBERSHIP").getValues().get(0)); } @@ -1238,8 +1238,8 @@ public class UserTestITCase extends AbstractTest { assertEquals(2, actual.getMemberships().size()); assertEquals(1, actual.getResources().size()); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, actual.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, actual. + getId()); assertNotNull(connObjectTO); // ----------------------------------- @@ -1320,8 +1320,8 @@ public class UserTestITCase extends AbstractTest { assertNotNull(actual); assertEquals(2, actual.getMemberships().size()); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, actual.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, actual. + getId()); assertNotNull(connObjectTO); AttributeTO postalAddress = connObjectTO.getAttrMap().get("postalAddress"); @@ -1432,8 +1432,8 @@ public class UserTestITCase extends AbstractTest { assertEquals(RESOURCE_NAME_DBVIRATTR, userTO.getPropagationStatusTOs().get(0).getResource()); assertEquals(PropagationTaskExecStatus.SUBMITTED, userTO.getPropagationStatusTOs().get(0).getStatus()); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_DBVIRATTR, SubjectType.USER, userTO.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_DBVIRATTR, SubjectType.USER, + userTO.getId()); assertNotNull(connObjectTO); assertEquals("virtualvalue", connObjectTO.getAttrMap().get("USERNAME").getValues().get(0)); // ---------------------------------- @@ -1633,8 +1633,8 @@ public class UserTestITCase extends AbstractTest { UserTO actual = createUser(userTO); assertNotNull(actual); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, actual.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject( + RESOURCE_NAME_CSV, SubjectType.USER, actual.getId()); assertNull(connObjectTO.getAttrMap().get("email")); } @@ -1675,14 +1675,14 @@ public class UserTestITCase extends AbstractTest { assertEquals(10, res.getResultByStatus(Status.SUCCESS).size()); assertEquals(1, res.getResultByStatus(Status.FAILURE).size()); assertEquals("suspended", userService.read( - Long.parseLong(res.getResultByStatus(Status.SUCCESS).get(3).toString())).getStatus()); + Long.parseLong(res.getResultByStatus(Status.SUCCESS).get(3))).getStatus()); bulkAction.setOperation(BulkAction.Type.REACTIVATE); res = userService.bulk(bulkAction); assertEquals(10, res.getResultByStatus(Status.SUCCESS).size()); assertEquals(1, res.getResultByStatus(Status.FAILURE).size()); assertEquals("active", userService.read( - Long.parseLong(res.getResultByStatus(Status.SUCCESS).get(3).toString())).getStatus()); + Long.parseLong(res.getResultByStatus(Status.SUCCESS).get(3))).getStatus()); bulkAction.setOperation(BulkAction.Type.DELETE); res = userService.bulk(bulkAction); @@ -2205,8 +2205,8 @@ public class UserTestITCase extends AbstractTest { assertNotNull(userTO); // 2. read resource configuration for LDAP binding - ConnObjectTO connObject = - resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, userTO.getId()); + ConnObjectTO connObject = resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, userTO. + getId()); // 3. try (and succeed) to perform simple LDAP binding with provided password ('password123') assertNotNull(getLdapRemoteObject( @@ -2374,8 +2374,7 @@ public class UserTestITCase extends AbstractTest { assertEquals(1, user.getResources().size()); // 4. Check that the LDAP resource has the correct password - ConnObjectTO connObject = - resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, user.getId()); + ConnObjectTO connObject = resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, user.getId()); assertNotNull(getLdapRemoteObject( connObject.getAttrMap().get(Name.NAME).getValues().get(0), @@ -2416,8 +2415,8 @@ public class UserTestITCase extends AbstractTest { userTO = createUser(userTO, false); assertNotNull(userTO); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, userTO.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, userTO. + getId()); assertNotNull(connObjectTO); // check if password has not changed @@ -2437,8 +2436,7 @@ public class UserTestITCase extends AbstractTest { userTO = createUser(userTO, false); assertNotNull(userTO); - connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, userTO.getId()); + connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, userTO.getId()); assertNotNull(connObjectTO); // check if password has been propagated and that saved userTO's password is null @@ -2458,8 +2456,7 @@ public class UserTestITCase extends AbstractTest { userTO = createUser(userTO); assertNotNull(userTO); - connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, userTO.getId()); + connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_CSV, SubjectType.USER, userTO.getId()); assertNotNull(connObjectTO); // check if password has been correctly propagated on Syncope and resource-csv as usual @@ -2514,8 +2511,8 @@ public class UserTestITCase extends AbstractTest { assertNotNull(actual); assertNotNull(actual.getDerAttrMap().get("csvuserid")); - ConnObjectTO connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, actual.getId()); + ConnObjectTO connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, actual. + getId()); assertNotNull(connObjectTO); assertEquals("postalAddress", connObjectTO.getAttrMap().get("postalAddress").getValues().get(0)); @@ -2530,8 +2527,7 @@ public class UserTestITCase extends AbstractTest { actual = updateUser(userMod); - connObjectTO = - resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, actual.getId()); + connObjectTO = resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.USER, actual.getId()); assertNotNull(connObjectTO); assertEquals("newPostalAddress", connObjectTO.getAttrMap().get("postalAddress").getValues().get(0)); }