http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
new file mode 100644
index 0000000..d347743
--- /dev/null
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
@@ -0,0 +1,363 @@
+/*
+ * 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.fit.console;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.status.Status;
+import org.apache.syncope.client.console.commons.status.StatusBean;
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.tester.FormTester;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class BatchesITCase extends AbstractConsoleITCase {
+
+    private static final String TAB_PANEL = 
"body:content:body:container:content:tabbedPanel:panel:searchResult:";
+
+    private static final String CONTAINER = TAB_PANEL + "container:content:";
+
+    @BeforeEach
+    public void login() {
+        doLogin(ADMIN_UNAME, ADMIN_PWD);
+    }
+
+    @Test
+    public void users() {
+        TESTER.clickLink("body:realmsLI:realms");
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
+
+        Component component = findComponentByProp("username", CONTAINER
+                + 
"searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
+        assertNotNull(component);
+
+        FormTester formTester = TESTER.newFormTester(CONTAINER + 
"searchContainer:resultTable:tablePanel:groupForm");
+        assertNotNull(formTester);
+
+        formTester.select("checkgroup", 2);
+
+        TESTER.executeAjaxEvent(CONTAINER + 
"searchContainer:resultTable:tablePanel:batchLink",
+                Constants.ON_CLICK);
+
+        TESTER.assertComponent(CONTAINER
+                + 
"searchContainer:resultTable:batchModal:form:content:content:container", 
WebMarkupContainer.class);
+
+        assertNotNull(findComponentByProp("username", CONTAINER
+                + 
"searchContainer:resultTable:batchModal:form:content:content:container", 
"rossini"));
+    }
+
+    @Test
+    public void userResource() {
+        TESTER.clickLink("body:realmsLI:realms");
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
+
+        Component component = findComponentByProp("username", CONTAINER
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
+        assertNotNull(component);
+
+        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
+        // manage resource
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
+                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:5:"
+                + "action:action");
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", WebMarkupContainer.class);
+
+        component = findComponentByProp("resource",
+                TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", "resource-csv");
+        assertNotNull(component);
+
+        FormTester formTester = TESTER.newFormTester(
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
+        assertNotNull(formTester);
+
+        formTester.select("checkgroup", 0);
+
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
+                Constants.ON_CLICK);
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
+
+        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:2:outer:"
+                + "form:content:status:secondLevelContainer:second:container", 
"resource-csv"));
+    }
+
+    @Test
+    public void userStatus() {
+        userStatusBatch(1, "resource-testdb2");
+    }
+
+    @Test
+    public void userStatusOnSyncopeOnly() {
+        userStatusBatch(0, Constants.SYNCOPE);
+    }
+
+    private void userStatusBatch(final int index, final String resource) {
+        // suspend 
+        TESTER.clickLink("body:realmsLI:realms");
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
+
+        Component component = findComponentByProp("username", CONTAINER
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
+        assertNotNull(component);
+
+        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
+        // enable
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
+                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
+                + "action:action");
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", WebMarkupContainer.class);
+
+        component = findComponentByProp("resource",
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
+                + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
+
+        component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath() + 
":cells:1:cell:check");
+        assertEquals(Status.ACTIVE, 
StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
+        assertEquals(resource, 
StatusBean.class.cast(component.getDefaultModelObject()).getResource());
+
+        FormTester formTester = TESTER.newFormTester(
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
+        assertNotNull(formTester);
+
+        formTester.select("checkgroup", index);
+
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
+                Constants.ON_CLICK);
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
+
+        // suspend link
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
+                + "second:container:actions:actionRepeater:0:action:action",
+                Constants.ON_CLICK);
+
+        TESTER.assertInfoMessages("Operation executed successfully");
+        TESTER.cleanupFeedbackMessages();
+
+        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell",
 "SUCCESS");
+
+        TESTER.executeAjaxEvent(TAB_PANEL
+                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
+                Constants.ON_CLICK);
+
+        component = findComponentByProp("resource",
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
+                + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
+
+        component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath() + 
":cells:1:cell:check");
+        assertEquals(Status.SUSPENDED, 
StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
+        assertEquals(resource, 
StatusBean.class.cast(component.getDefaultModelObject()).getResource());
+
+        // re-activate
+        TESTER.clickLink("body:realmsLI:realms");
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
+
+        component = findComponentByProp("username", CONTAINER
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
+        assertNotNull(component);
+
+        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
+        // enable
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
+                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
+                + "action:action");
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", WebMarkupContainer.class);
+
+        formTester = TESTER.newFormTester(
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
+        assertNotNull(formTester);
+
+        formTester.select("checkgroup", index);
+
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
+                Constants.ON_CLICK);
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
+
+        // suspend link
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
+                + "second:container:actions:actionRepeater:1:action:action",
+                Constants.ON_CLICK);
+
+        TESTER.assertInfoMessages("Operation executed successfully");
+        TESTER.cleanupFeedbackMessages();
+
+        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell",
 "SUCCESS");
+
+        TESTER.executeAjaxEvent(TAB_PANEL
+                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
+                Constants.ON_CLICK);
+
+        component = findComponentByProp("resource",
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
+                + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
+
+        component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath() + 
":cells:1:cell:check");
+        assertEquals(Status.ACTIVE, 
StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
+        assertEquals(resource, 
StatusBean.class.cast(component.getDefaultModelObject()).getResource());
+
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:dialog:footer:buttons:0:button",
+                Constants.ON_CLICK);
+    }
+
+    @Test
+    public void groupResource() {
+        TESTER.clickLink("body:realmsLI:realms");
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:2:link");
+
+        Component component = findComponentByProp("name", CONTAINER
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"director");
+        assertNotNull(component);
+
+        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
+        // manage resource
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
+                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:6:"
+                + "action:action");
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", WebMarkupContainer.class);
+
+        TESTER.clickLink(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:"
+                + 
"container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
+                + "toolbars:1:headers:2:header:orderByLink", true);
+
+        component = findComponentByProp("resource",
+                TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", "resource-ldap");
+        assertNotNull(component);
+
+        FormTester formTester = TESTER.newFormTester(
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
+        assertNotNull(formTester);
+
+        formTester.select("checkgroup", 0);
+
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
+                Constants.ON_CLICK);
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
+
+        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:2:outer:"
+                + 
"form:content:status:secondLevelContainer:second:container:selectedObjects", 
"resource-ldap"));
+    }
+
+    @Test
+    public void printerResource() {
+        TESTER.clickLink("body:realmsLI:realms");
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:3:link");
+
+        Component component = findComponentByProp("key", CONTAINER
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
+        assertNotNull(component);
+
+        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
+        // manage resource
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
+                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:2:"
+                + "action:action");
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", WebMarkupContainer.class);
+
+        TESTER.clickLink(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:"
+                + 
"container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
+                + "toolbars:1:headers:2:header:orderByLink", true);
+
+        component = findComponentByProp("resource",
+                TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
+                + "checkgroup:dataTable", "resource-db-scripted");
+        assertNotNull(component);
+
+        FormTester formTester = TESTER.newFormTester(
+                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
+        assertNotNull(formTester);
+
+        formTester.select("checkgroup", 0);
+
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
+                Constants.ON_CLICK);
+
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
+
+        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:2:outer:"
+                + 
"form:content:status:secondLevelContainer:second:container:selectedObjects", 
"resource-db-scripted"));
+    }
+
+    @Test
+    public void executePropagationTask() {
+        TESTER.clickLink("body:topologyLI:topology");
+
+        Component component = findComponentByProp("key", "body:resources", 
"resource-testdb");
+        assertNotNull(component);
+        TESTER.executeAjaxEvent(component.getPageRelativePath() + ":res", 
Constants.ON_CLICK);
+        
TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:propagation");
+
+        FormTester formTester = TESTER.newFormTester(
+                
"body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:first:container:"
+                + "content:searchContainer:resultTable:tablePanel:groupForm");
+        assertNotNull(formTester);
+
+        formTester.select("checkgroup", 0);
+
+        
TESTER.executeAjaxEvent("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:"
+                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
+                Constants.ON_CLICK);
+
+        
TESTER.assertComponent("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:secondLevelContainer:"
+                + "second:container:selectedObjects:body:rows:1:cells:1:cell", 
Label.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
deleted file mode 100644
index 66486ff..0000000
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * 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.fit.console;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.status.Status;
-import org.apache.syncope.client.console.commons.status.StatusBean;
-import org.apache.wicket.Component;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.util.tester.FormTester;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-public class BulkActionITCase extends AbstractConsoleITCase {
-
-    private static final String TAB_PANEL = 
"body:content:body:container:content:tabbedPanel:panel:searchResult:";
-
-    private static final String CONTAINER = TAB_PANEL + "container:content:";
-
-    @BeforeEach
-    public void login() {
-        doLogin(ADMIN_UNAME, ADMIN_PWD);
-    }
-
-    @Test
-    public void usersBulkAction() {
-        TESTER.clickLink("body:realmsLI:realms");
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
-
-        Component component = findComponentByProp("username", CONTAINER
-                + 
"searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
-        assertNotNull(component);
-
-        FormTester formTester = TESTER.newFormTester(CONTAINER + 
"searchContainer:resultTable:tablePanel:groupForm");
-        assertNotNull(formTester);
-
-        formTester.select("checkgroup", 2);
-
-        TESTER.executeAjaxEvent(CONTAINER + 
"searchContainer:resultTable:tablePanel:bulkActionLink",
-                Constants.ON_CLICK);
-
-        TESTER.assertComponent(CONTAINER
-                + 
"searchContainer:resultTable:bulkModal:form:content:content:container", 
WebMarkupContainer.class);
-
-        assertNotNull(findComponentByProp("username", CONTAINER
-                + 
"searchContainer:resultTable:bulkModal:form:content:content:container", 
"rossini"));
-    }
-
-    @Test
-    public void userResourceBulkAction() {
-        TESTER.clickLink("body:realmsLI:realms");
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
-
-        Component component = findComponentByProp("username", CONTAINER
-                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
-        assertNotNull(component);
-
-        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
-        // manage resource
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:5:"
-                + "action:action");
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", WebMarkupContainer.class);
-
-        component = findComponentByProp("resource",
-                TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", "resource-csv");
-        assertNotNull(component);
-
-        FormTester formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
-                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
-        assertNotNull(formTester);
-
-        formTester.select("checkgroup", 0);
-
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
-                Constants.ON_CLICK);
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
-
-        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:2:outer:"
-                + "form:content:status:secondLevelContainer:second:container", 
"resource-csv"));
-    }
-
-    @Test
-    public void userStatusBulkAction() {
-        userStatusBulkAction(1, "resource-testdb2");
-    }
-
-    @Test
-    public void userStatusOnSyncopeOnlyBulkAction() {
-        userStatusBulkAction(0, Constants.SYNCOPE);
-    }
-
-    private void userStatusBulkAction(final int index, final String resource) {
-        // suspend 
-        TESTER.clickLink("body:realmsLI:realms");
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
-
-        Component component = findComponentByProp("username", CONTAINER
-                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
-        assertNotNull(component);
-
-        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
-        // enable
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
-                + "action:action");
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", WebMarkupContainer.class);
-
-        component = findComponentByProp("resource",
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
-                + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
-
-        component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath() + 
":cells:1:cell:check");
-        assertEquals(Status.ACTIVE, 
StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
-        assertEquals(resource, 
StatusBean.class.cast(component.getDefaultModelObject()).getResource());
-
-        FormTester formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
-                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
-        assertNotNull(formTester);
-
-        formTester.select("checkgroup", index);
-
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
-                Constants.ON_CLICK);
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
-
-        // suspend link
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
-                + "second:container:actions:actionRepeater:0:action:action",
-                Constants.ON_CLICK);
-
-        TESTER.assertInfoMessages("Operation executed successfully");
-        TESTER.cleanupFeedbackMessages();
-
-        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell",
 "SUCCESS");
-
-        TESTER.executeAjaxEvent(TAB_PANEL
-                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
-                Constants.ON_CLICK);
-
-        component = findComponentByProp("resource",
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
-                + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
-
-        component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath() + 
":cells:1:cell:check");
-        assertEquals(Status.SUSPENDED, 
StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
-        assertEquals(resource, 
StatusBean.class.cast(component.getDefaultModelObject()).getResource());
-
-        // re-activate
-        TESTER.clickLink("body:realmsLI:realms");
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
-
-        component = findComponentByProp("username", CONTAINER
-                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
-        assertNotNull(component);
-
-        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
-        // enable
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
-                + "action:action");
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", WebMarkupContainer.class);
-
-        formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
-                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
-        assertNotNull(formTester);
-
-        formTester.select("checkgroup", index);
-
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
-                Constants.ON_CLICK);
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
-
-        // suspend link
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
-                + "second:container:actions:actionRepeater:1:action:action",
-                Constants.ON_CLICK);
-
-        TESTER.assertInfoMessages("Operation executed successfully");
-        TESTER.cleanupFeedbackMessages();
-
-        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell",
 "SUCCESS");
-
-        TESTER.executeAjaxEvent(TAB_PANEL
-                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
-                Constants.ON_CLICK);
-
-        component = findComponentByProp("resource",
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
-                + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
-
-        component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath() + 
":cells:1:cell:check");
-        assertEquals(Status.ACTIVE, 
StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
-        assertEquals(resource, 
StatusBean.class.cast(component.getDefaultModelObject()).getResource());
-
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:dialog:footer:buttons:0:button",
-                Constants.ON_CLICK);
-    }
-
-    @Test
-    public void groupResourceBulkAction() {
-        TESTER.clickLink("body:realmsLI:realms");
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:2:link");
-
-        Component component = findComponentByProp("name", CONTAINER
-                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"director");
-        assertNotNull(component);
-
-        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
-        // manage resource
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:6:"
-                + "action:action");
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", WebMarkupContainer.class);
-
-        TESTER.clickLink(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:"
-                + 
"container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
-                + "toolbars:1:headers:2:header:orderByLink", true);
-
-        component = findComponentByProp("resource",
-                TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", "resource-ldap");
-        assertNotNull(component);
-
-        FormTester formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
-                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
-        assertNotNull(formTester);
-
-        formTester.select("checkgroup", 0);
-
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
-                Constants.ON_CLICK);
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
-
-        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:2:outer:"
-                + 
"form:content:status:secondLevelContainer:second:container:selectedObjects", 
"resource-ldap"));
-    }
-
-    @Test
-    public void printerResourceBulkAction() {
-        TESTER.clickLink("body:realmsLI:realms");
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:3:link");
-
-        Component component = findComponentByProp("key", CONTAINER
-                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
-                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
-        assertNotNull(component);
-
-        TESTER.executeAjaxEvent(component.getPageRelativePath(), 
Constants.ON_CLICK);
-        // manage resource
-        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:2:"
-                + "action:action");
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", WebMarkupContainer.class);
-
-        TESTER.clickLink(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:"
-                + 
"container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
-                + "toolbars:1:headers:2:header:orderByLink", true);
-
-        component = findComponentByProp("resource",
-                TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
-                + "checkgroup:dataTable", "resource-db-scripted");
-        assertNotNull(component);
-
-        FormTester formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
-                + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
-        assertNotNull(formTester);
-
-        formTester.select("checkgroup", 0);
-
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
-                Constants.ON_CLICK);
-
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
-                + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
-
-        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:2:outer:"
-                + 
"form:content:status:secondLevelContainer:second:container:selectedObjects", 
"resource-db-scripted"));
-    }
-
-    @Test
-    public void executePropagationTask() {
-        TESTER.clickLink("body:topologyLI:topology");
-
-        Component component = findComponentByProp("key", "body:resources", 
"resource-testdb");
-        assertNotNull(component);
-        TESTER.executeAjaxEvent(component.getPageRelativePath() + ":res", 
Constants.ON_CLICK);
-        
TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:propagation");
-
-        FormTester formTester = TESTER.newFormTester(
-                
"body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:first:container:"
-                + "content:searchContainer:resultTable:tablePanel:groupForm");
-        assertNotNull(formTester);
-
-        formTester.select("checkgroup", 0);
-
-        
TESTER.executeAjaxEvent("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:"
-                + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
-                Constants.ON_CLICK);
-
-        
TESTER.assertComponent("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:secondLevelContainer:"
-                + "second:container:selectedObjects:body:rows:1:cells:1:cell", 
Label.class);
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
index 81a0356..8ab5b6f 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
@@ -80,7 +80,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
     }
 
     @Test
-    public void resourceBulkAction() {
+    public void resourceBatchAction() {
         Component component = findComponentByProp("key", "body:resources", 
"ws-target-resource-1");
         assertNotNull(component);
         TESTER.executeAjaxEvent(component.getPageRelativePath() + ":res", 
Constants.ON_CLICK);

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
index 1c3eba7..7ec16f1 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
@@ -48,7 +48,6 @@ import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.AnyTypeTO;
-import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.MembershipTO;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.PlainSchemaTO;
@@ -524,7 +523,7 @@ public class AuthenticationITCase extends AbstractITCase {
         // 2. unlink the resource from the created user
         DeassociationPatch deassociationPatch = new 
DeassociationPatch.Builder().key(user.getKey()).
                 
action(ResourceDeassociationAction.UNLINK).resource(RESOURCE_NAME_TESTDB).build();
-        
assertNotNull(userService.deassociate(deassociationPatch).readEntity(BulkActionResult.class));
+        
assertNotNull(parseBatchResponse(userService.deassociate(deassociationPatch)));
 
         // 3. change password on Syncope
         UserPatch userPatch = new UserPatch();

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
index 172d18c..aaa26fc 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
@@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
+import java.io.IOException;
 import java.security.AccessControlException;
 import java.util.Collections;
 import java.util.List;
@@ -56,7 +57,6 @@ import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.AnyTypeTO;
 import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.DerSchemaTO;
@@ -76,12 +76,12 @@ import org.apache.syncope.common.lib.to.TypeExtensionTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.common.lib.types.BulkMembersActionType;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.PatchOperation;
-import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
+import org.apache.syncope.common.lib.types.ExecStatus;
+import org.apache.syncope.common.lib.types.ProvisionAction;
 import org.apache.syncope.common.lib.types.ResourceAssociationAction;
 import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
 import org.apache.syncope.common.lib.types.SchemaType;
@@ -312,7 +312,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void unlink() {
+    public void unlink() throws IOException {
         GroupTO actual = createGroup(getSampleTO("unlink")).getEntity();
         assertNotNull(actual);
 
@@ -321,7 +321,7 @@ public class GroupITCase extends AbstractITCase {
         DeassociationPatch deassociationPatch = new 
DeassociationPatch.Builder().key(actual.getKey()).
                 
action(ResourceDeassociationAction.UNLINK).resource(RESOURCE_NAME_LDAP).build();
 
-        
assertNotNull(groupService.deassociate(deassociationPatch).readEntity(BulkActionResult.class));
+        
assertNotNull(parseBatchResponse(groupService.deassociate(deassociationPatch)));
 
         actual = groupService.read(actual.getKey());
         assertNotNull(actual);
@@ -331,7 +331,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void link() {
+    public void link() throws IOException {
         GroupTO groupTO = getSampleTO("link");
         groupTO.getResources().clear();
 
@@ -348,7 +348,7 @@ public class GroupITCase extends AbstractITCase {
         AssociationPatch associationPatch = new 
AssociationPatch.Builder().key(actual.getKey()).
                 
action(ResourceAssociationAction.LINK).resource(RESOURCE_NAME_LDAP).build();
 
-        
assertNotNull(groupService.associate(associationPatch).readEntity(BulkActionResult.class));
+        
assertNotNull(parseBatchResponse(groupService.associate(associationPatch)));
 
         actual = groupService.read(actual.getKey());
         assertFalse(actual.getResources().isEmpty());
@@ -362,7 +362,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void unassign() {
+    public void unassign() throws IOException {
         GroupTO groupTO = null;
 
         try {
@@ -377,7 +377,7 @@ public class GroupITCase extends AbstractITCase {
             deassociationPatch.setAction(ResourceDeassociationAction.UNASSIGN);
             deassociationPatch.getResources().add(RESOURCE_NAME_LDAP);
 
-            
assertNotNull(groupService.deassociate(deassociationPatch).readEntity(BulkActionResult.class));
+            
assertNotNull(parseBatchResponse(groupService.deassociate(deassociationPatch)));
 
             groupTO = groupService.read(groupTO.getKey());
             assertNotNull(groupTO);
@@ -397,7 +397,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void assign() {
+    public void assign() throws IOException {
         GroupTO groupTO = getSampleTO("assign");
         groupTO.getResources().clear();
 
@@ -415,7 +415,7 @@ public class GroupITCase extends AbstractITCase {
             AssociationPatch associationPatch = new 
AssociationPatch.Builder().key(groupTO.getKey()).
                     
action(ResourceAssociationAction.ASSIGN).resource(RESOURCE_NAME_LDAP).build();
 
-            
assertNotNull(groupService.associate(associationPatch).readEntity(BulkActionResult.class));
+            
assertNotNull(parseBatchResponse(groupService.associate(associationPatch)));
 
             groupTO = groupService.read(groupTO.getKey());
             assertFalse(groupTO.getResources().isEmpty());
@@ -429,7 +429,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void deprovision() {
+    public void deprovision() throws IOException {
         GroupTO groupTO = null;
 
         try {
@@ -442,7 +442,7 @@ public class GroupITCase extends AbstractITCase {
             DeassociationPatch deassociationPatch = new 
DeassociationPatch.Builder().key(groupTO.getKey()).
                     
action(ResourceDeassociationAction.DEPROVISION).resource(RESOURCE_NAME_LDAP).build();
 
-            
assertNotNull(groupService.deassociate(deassociationPatch).readEntity(BulkActionResult.class));
+            
assertNotNull(parseBatchResponse(groupService.deassociate(deassociationPatch)));
 
             groupTO = groupService.read(groupTO.getKey());
             assertNotNull(groupTO);
@@ -462,7 +462,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void provision() {
+    public void provision() throws IOException {
         GroupTO groupTO = getSampleTO("provision");
         groupTO.getResources().clear();
 
@@ -480,7 +480,7 @@ public class GroupITCase extends AbstractITCase {
             AssociationPatch associationPatch = new 
AssociationPatch.Builder().key(groupTO.getKey()).
                     
action(ResourceAssociationAction.PROVISION).resource(RESOURCE_NAME_LDAP).build();
 
-            
assertNotNull(groupService.associate(associationPatch).readEntity(BulkActionResult.class));
+            
assertNotNull(parseBatchResponse(groupService.associate(associationPatch)));
 
             groupTO = groupService.read(groupTO.getKey());
             assertTrue(groupTO.getResources().isEmpty());
@@ -495,7 +495,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void deprovisionUnlinked() {
+    public void deprovisionUnlinked() throws IOException {
         GroupTO groupTO = getSampleTO("deprovision");
         groupTO.getResources().clear();
 
@@ -513,7 +513,7 @@ public class GroupITCase extends AbstractITCase {
             AssociationPatch associationPatch = new 
AssociationPatch.Builder().key(groupTO.getKey()).
                     
action(ResourceAssociationAction.PROVISION).resource(RESOURCE_NAME_LDAP).build();
 
-            
assertNotNull(groupService.associate(associationPatch).readEntity(BulkActionResult.class));
+            
assertNotNull(parseBatchResponse(groupService.associate(associationPatch)));
 
             groupTO = groupService.read(groupTO.getKey());
             assertTrue(groupTO.getResources().isEmpty());
@@ -524,7 +524,7 @@ public class GroupITCase extends AbstractITCase {
             DeassociationPatch deassociationPatch = new 
DeassociationPatch.Builder().key(groupTO.getKey()).
                     
action(ResourceDeassociationAction.DEPROVISION).resource(RESOURCE_NAME_LDAP).build();
 
-            
assertNotNull(groupService.deassociate(deassociationPatch).readEntity(BulkActionResult.class));
+            
assertNotNull(parseBatchResponse(groupService.deassociate(deassociationPatch)));
 
             groupTO = groupService.read(groupTO.getKey());
             assertNotNull(groupTO);
@@ -776,7 +776,7 @@ public class GroupITCase extends AbstractITCase {
             assertNotNull(result);
             assertEquals(1, result.getPropagationStatuses().size());
             assertEquals(RESOURCE_NAME_LDAP, 
result.getPropagationStatuses().get(0).getResource());
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
+            assertEquals(ExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
             group = result.getEntity();
 
             // 2. update succeeds
@@ -789,7 +789,7 @@ public class GroupITCase extends AbstractITCase {
             assertNotNull(result);
             assertEquals(1, result.getPropagationStatuses().size());
             assertEquals(RESOURCE_NAME_LDAP, 
result.getPropagationStatuses().get(0).getResource());
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
+            assertEquals(ExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
             group = result.getEntity();
 
             // 3. set capability override with only search allowed, but not 
enable
@@ -811,7 +811,7 @@ public class GroupITCase extends AbstractITCase {
             assertNotNull(result);
             assertEquals(1, result.getPropagationStatuses().size());
             assertEquals(RESOURCE_NAME_LDAP, 
result.getPropagationStatuses().get(0).getResource());
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
+            assertEquals(ExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
             group = result.getEntity();
 
             // 5. enable capability override
@@ -833,7 +833,7 @@ public class GroupITCase extends AbstractITCase {
             assertNotNull(result);
             assertEquals(1, result.getPropagationStatuses().size());
             assertEquals(RESOURCE_NAME_LDAP, 
result.getPropagationStatuses().get(0).getResource());
-            assertEquals(PropagationTaskExecStatus.NOT_ATTEMPTED, 
result.getPropagationStatuses().get(0).getStatus());
+            assertEquals(ExecStatus.NOT_ATTEMPTED, 
result.getPropagationStatuses().get(0).getStatus());
         } finally {
             ldap.getCapabilitiesOverride().clear();
             ldap.setOverrideCapabilities(false);
@@ -874,7 +874,7 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
-    public void bulkMembersAction() throws InterruptedException {
+    public void provisionMembers() throws InterruptedException {
         // 1. create group without resources
         GroupTO groupTO = getBasicSampleTO("forProvision");
         groupTO = createGroup(groupTO).getEntity();
@@ -893,7 +893,7 @@ public class GroupITCase extends AbstractITCase {
 
         PropagationStatus propStatus = 
groupUpdateResult.getPropagationStatuses().get(0);
         assertEquals(RESOURCE_NAME_LDAP, propStatus.getResource());
-        assertEquals(PropagationTaskExecStatus.SUCCESS, 
propStatus.getStatus());
+        assertEquals(ExecStatus.SUCCESS, propStatus.getStatus());
 
         // 4. verify that the user above is not found on LDAP
         try {
@@ -904,8 +904,8 @@ public class GroupITCase extends AbstractITCase {
         }
 
         try {
-            // 5. bulk provision group members
-            ExecTO exec = groupService.bulkMembersAction(groupTO.getKey(), 
BulkMembersActionType.PROVISION);
+            // 5. provision group members
+            ExecTO exec = groupService.provisionMembers(groupTO.getKey(), 
ProvisionAction.PROVISION);
             assertNotNull(exec.getRefKey());
 
             int i = 0;

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
index 9e524da..d51dca1 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
@@ -33,7 +33,6 @@ import org.apache.syncope.common.lib.patch.DeassociationPatch;
 import org.apache.syncope.common.lib.patch.MembershipPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.ExecTO;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.to.ItemTO;
@@ -47,7 +46,7 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.PatchOperation;
-import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
+import org.apache.syncope.common.lib.types.ExecStatus;
 import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
@@ -263,7 +262,7 @@ public class MembershipITCase extends AbstractITCase {
             patch.setKey(user.getKey());
             patch.setAction(ResourceDeassociationAction.UNLINK);
             patch.getResources().add(newResource.getKey());
-            
assertNotNull(userService.deassociate(patch).readEntity(BulkActionResult.class));
+            assertNotNull(parseBatchResponse(userService.deassociate(patch)));
 
             userService.delete(user.getKey());
 
@@ -278,7 +277,7 @@ public class MembershipITCase extends AbstractITCase {
 
             ExecTO execution = AbstractTaskITCase.execProvisioningTask(
                     taskService, TaskType.PULL, newTask.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             // 5. verify that pulled user has
             PagedResult<UserTO> users = userService.search(new 
AnyQuery.Builder().

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
index 9a11031..6480700 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
@@ -46,7 +46,7 @@ import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.LoggerType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
-import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
+import org.apache.syncope.common.lib.types.ExecStatus;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.syncope.common.lib.types.PullMode;
 import org.apache.syncope.common.lib.types.TaskType;
@@ -206,7 +206,7 @@ public class MultitenancyITCase extends AbstractITCase {
             // verify execution status
             String status = execution.getStatus();
             assertNotNull(status);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(status));
+            assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(status));
 
             // verify that pulled user is found
             PagedResult<UserTO> matchingUsers = 
adminClient.getService(UserService.class).search(new AnyQuery.Builder().

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
index 4e009af..d9060fc 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
@@ -23,19 +23,20 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
+import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.SerializationUtils;
+import org.apache.syncope.client.lib.batch.BatchRequest;
 import org.apache.syncope.common.lib.patch.AttrPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.to.TaskTO;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.PropagationTaskTO;
@@ -52,6 +53,7 @@ import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.rest.api.beans.ExecuteQuery;
 import org.apache.syncope.common.rest.api.beans.ExecQuery;
 import org.apache.syncope.common.rest.api.beans.TaskQuery;
+import org.apache.syncope.common.rest.api.service.TaskService;
 import org.junit.jupiter.api.Test;
 
 public class PropagationTaskITCase extends AbstractTaskITCase {
@@ -92,9 +94,9 @@ public class PropagationTaskITCase extends AbstractTaskITCase 
{
     }
 
     @Test
-    public void bulkAction() {
+    public void batch() throws IOException {
         // create user with testdb resource
-        UserTO userTO = UserITCase.getUniqueSampleTO("taskb...@apache.org");
+        UserTO userTO = UserITCase.getUniqueSampleTO("taskba...@apache.org");
         userTO.getResources().add(RESOURCE_NAME_TESTDB);
         userTO = createUser(userTO).getEntity();
 
@@ -104,13 +106,16 @@ public class PropagationTaskITCase extends 
AbstractTaskITCase {
                         getResult());
         assertFalse(tasks.isEmpty());
 
-        BulkAction bulkAction = new BulkAction();
-        bulkAction.setType(BulkAction.Type.DELETE);
-        tasks.forEach(taskTO -> bulkAction.getTargets().add(taskTO.getKey()));
+        BatchRequest batchRequest = adminClient.batch();
 
-        taskService.bulk(bulkAction);
+        TaskService batchTaskService = 
batchRequest.getService(TaskService.class);
+        tasks.forEach(task -> batchTaskService.delete(TaskType.PROPAGATION, 
task.getKey()));
 
-        assertFalse(taskService.search(new 
TaskQuery.Builder(TaskType.PROPAGATION).page(1).size(100).build()).
+        Response response = batchRequest.commit().getResponse();
+        parseBatchResponse(response);
+
+        assertFalse(taskService.search(
+                new 
TaskQuery.Builder(TaskType.PROPAGATION).page(1).size(100).build()).
                 getResult().containsAll(tasks));
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index a0a6f9d..c5c90e51 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -77,7 +77,7 @@ import 
org.apache.syncope.common.lib.types.ConnectorCapability;
 import org.apache.syncope.common.lib.types.ImplementationEngine;
 import org.apache.syncope.common.lib.types.ImplementationType;
 import org.apache.syncope.common.lib.types.PolicyType;
-import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
+import org.apache.syncope.common.lib.types.ExecStatus;
 import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
 import org.apache.syncope.common.lib.types.PullMode;
 import org.apache.syncope.common.lib.types.ResourceOperation;
@@ -238,7 +238,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertNotNull(usersPre);
 
             ExecTO exec = execProvisioningTask(taskService, TaskType.PULL, 
PULL_TASK_KEY, 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(exec.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(exec.getStatus()));
 
             LOG.debug("Execution of task {}:\n{}", PULL_TASK_KEY, exec);
 
@@ -328,7 +328,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         try {
             ExecTO execution = execProvisioningTask(
                     taskService, TaskType.PULL, 
"83f7e85d-9774-43fe-adba-ccd856312994", 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             userTO = userService.read("testuser1");
             assertNotNull(userTO);
@@ -341,7 +341,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             // re-execute the same PullTask: now user must be active
             execution = execProvisioningTask(
                     taskService, TaskType.PULL, 
"83f7e85d-9774-43fe-adba-ccd856312994", 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             userTO = userService.read("testuser1");
             assertNotNull(userTO);
@@ -364,7 +364,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
                 taskService, TaskType.PULL, 
"1e419ca4-ea81-4493-a14f-28b90113686d", 50, false);
 
         // 1. verify execution status
-        assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+        assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
         // 2. verify that pulled group is found
         PagedResult<GroupTO> matchingGroups = groupService.search(new 
AnyQuery.Builder().realm(
@@ -575,7 +575,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
             // 3. exec task
             ExecTO execution = execProvisioningTask(taskService, 
TaskType.PULL, task.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             // 4. verify that only enabled user was pulled
             userTO = userService.read("user2");
@@ -657,7 +657,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
                     + "false, 'synctokenwitherro...@syncope.apache.org', 
'2015-05-23 13:53:24.293')");
 
             ExecTO exec = execProvisioningTask(taskService, TaskType.PULL, 
pullTask.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(exec.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(exec.getStatus()));
 
             resForTest = resourceService.read(resForTest.getKey());
             
assertTrue(resForTest.getProvision(AnyTypeKind.USER.name()).get().getSyncToken().contains("2014-05-23"));
@@ -667,7 +667,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
                     + "WHERE ID=1041");
 
             exec = execProvisioningTask(taskService, TaskType.PULL, 
pullTask.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(exec.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(exec.getStatus()));
 
             resForTest = resourceService.read(resForTest.getKey());
             
assertTrue(resForTest.getProvision(AnyTypeKind.USER.name()).get().getSyncToken().contains("2016-05-23"));
@@ -719,7 +719,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         try {
             // 3. execute the pull task and verify that:
             ExecTO execution = execProvisioningTask(taskService, 
TaskType.PULL, pullTask.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             // 3a. user was not pulled
             try {
@@ -824,7 +824,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertFalse(((UserTO) 
actual.getTemplates().get(AnyTypeKind.USER.name())).getMemberships().isEmpty());
 
             ExecTO execution = execProvisioningTask(taskService, 
TaskType.PULL, actual.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             userTO = userService.read("testuser2");
             assertNotNull(userTO);
@@ -954,13 +954,13 @@ public class PullTaskITCase extends AbstractTaskITCase {
         try {
             assertNotNull(userTO);
             assertEquals(1, result.getPropagationStatuses().size());
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
+            assertEquals(ExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
 
             ExecTO taskExecTO = execProvisioningTask(
                     taskService, TaskType.PULL, 
"986867e2-993b-430e-8feb-aa9abb4c1dcd", 50, false);
 
             assertNotNull(taskExecTO.getStatus());
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(taskExecTO.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(taskExecTO.getStatus()));
 
             userTO = userService.read(userTO.getKey());
             assertNotNull(userTO);
@@ -1066,7 +1066,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         assertEquals(actual.getJobDelegate(), pullTask.getJobDelegate());
 
         ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, 
pullTask.getKey(), 50, false);
-        assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+        assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
         // 5. Test the pulled user
         Pair<Map<String, Set<String>>, UserTO> self = 
clientFactory.create(user.getUsername(), newCleanPassword).self();
@@ -1151,7 +1151,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertNotNull(pullTask);
 
             ExecTO execution = execProvisioningTask(taskService, 
TaskType.PULL, pullTask.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             // 7. Test the pulled user
             self = clientFactory.create(user.getUsername(), 
oldCleanPassword).self();
@@ -1211,7 +1211,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
             // 3. exec the pull task
             ExecTO execution = execProvisioningTask(taskService, 
TaskType.PULL, pullTask.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             // the user is successfully pulled...
             user = userService.read("pullFromLDAP");
@@ -1247,7 +1247,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
             // 5. exec the pull task again
             execution = execProvisioningTask(taskService, TaskType.PULL, 
pullTask.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(execution.getStatus()));
 
             // the internal is updated...
             user = userService.read("pullFromLDAP");

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
index eaf6d4d..da4570b 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
@@ -51,7 +51,7 @@ import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.ImplementationType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.MatchingRule;
-import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
+import org.apache.syncope.common.lib.types.ExecStatus;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.lib.types.TraceLevel;
@@ -340,7 +340,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
         assertNotNull(pushTask);
 
         ExecTO exec = execProvisioningTask(taskService, TaskType.PUSH, 
pushTask.getKey(), 50, false);
-        assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(exec.getStatus()));
+        assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
 
         // 2. check
         assertNotNull(getLdapRemoteObject(RESOURCE_LDAP_ADMIN_DN, 
RESOURCE_LDAP_ADMIN_PWD, "ou=odd,o=isp"));
@@ -428,7 +428,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
 
             // execute the new task
             ExecTO exec = execProvisioningTask(taskService, TaskType.PUSH, 
push.getKey(), 50, false);
-            assertEquals(PropagationTaskExecStatus.SUCCESS, 
PropagationTaskExecStatus.valueOf(exec.getStatus()));
+            assertEquals(ExecStatus.SUCCESS, 
ExecStatus.valueOf(exec.getStatus()));
         } finally {
             groupService.delete(groupTO.getKey());
             if (newResourceTO != null) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
index 1799e88..f62f2f9 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
@@ -41,7 +41,7 @@ import 
org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.ImplementationEngine;
 import org.apache.syncope.common.lib.types.ImplementationType;
 import org.apache.syncope.common.lib.types.PolicyType;
-import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
+import org.apache.syncope.common.lib.types.ExecStatus;
 import org.apache.syncope.common.rest.api.RESTHeaders;
 import org.apache.syncope.common.rest.api.service.RealmService;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
@@ -229,7 +229,7 @@ public class RealmITCase extends AbstractITCase {
         assertNotNull(result);
         assertEquals(1, result.getPropagationStatuses().size());
         assertEquals(RESOURCE_NAME_LDAP_ORGUNIT, 
result.getPropagationStatuses().get(0).getResource());
-        assertEquals(PropagationTaskExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
+        assertEquals(ExecStatus.SUCCESS, 
result.getPropagationStatuses().get(0).getStatus());
 
         ProvisioningResult<RealmTO> resultChild = realmService.create("/test", 
childRealm).readEntity(
                 new GenericType<ProvisioningResult<RealmTO>>() {
@@ -237,7 +237,7 @@ public class RealmITCase extends AbstractITCase {
         assertNotNull(resultChild);
         assertEquals(1, resultChild.getPropagationStatuses().size());
         assertEquals(RESOURCE_NAME_LDAP_ORGUNIT, 
resultChild.getPropagationStatuses().get(0).getResource());
-        assertEquals(PropagationTaskExecStatus.SUCCESS, 
resultChild.getPropagationStatuses().get(0).getStatus());
+        assertEquals(ExecStatus.SUCCESS, 
resultChild.getPropagationStatuses().get(0).getStatus());
 
         ProvisioningResult<RealmTO> resultDescendant = 
realmService.create("/test/child", descendantRealm).readEntity(
                 new GenericType<ProvisioningResult<RealmTO>>() {
@@ -245,7 +245,7 @@ public class RealmITCase extends AbstractITCase {
         assertNotNull(resultDescendant);
         assertEquals(1, resultDescendant.getPropagationStatuses().size());
         assertEquals(RESOURCE_NAME_LDAP_ORGUNIT, 
resultDescendant.getPropagationStatuses().get(0).getResource());
-        assertEquals(PropagationTaskExecStatus.SUCCESS, 
resultDescendant.getPropagationStatuses().get(0).getStatus());
+        assertEquals(ExecStatus.SUCCESS, 
resultDescendant.getPropagationStatuses().get(0).getStatus());
 
         // 3. check on LDAP
         assertNotNull(

http://git-wip-us.apache.org/repos/asf/syncope/blob/34a2fdbb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
index 09f7b02..d8c5d27 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
@@ -36,7 +36,6 @@ import org.apache.commons.io.IOUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.report.AuditReportletConf;
 import org.apache.syncope.common.lib.report.UserReportletConf;
-import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.log.LoggerTO;
 import org.apache.syncope.common.lib.to.ExecTO;
 import org.apache.syncope.common.lib.to.ImplementationTO;
@@ -51,7 +50,8 @@ import org.apache.syncope.common.lib.types.LoggerType;
 import org.apache.syncope.common.lib.types.ReportExecExportFormat;
 import org.apache.syncope.common.lib.types.ReportExecStatus;
 import org.apache.syncope.common.rest.api.RESTHeaders;
-import org.apache.syncope.common.rest.api.beans.BulkExecDeleteQuery;
+import org.apache.syncope.common.rest.api.batch.BatchResponseItem;
+import org.apache.syncope.common.rest.api.beans.ExecDeleteQuery;
 import org.apache.syncope.common.rest.api.beans.ExecuteQuery;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.fit.AbstractITCase;
@@ -279,7 +279,7 @@ public class ReportITCase extends AbstractITCase {
     }
 
     @Test
-    public void deleteExecutions() {
+    public void deleteExecutions() throws IOException {
         Date start = new Date();
         try {
             Thread.sleep(1000);
@@ -302,13 +302,12 @@ public class ReportITCase extends AbstractITCase {
         }
         Date end = new Date();
 
-        BulkActionResult result = reportService.deleteExecutions(
-                new 
BulkExecDeleteQuery.Builder().key(reportTO.getKey()).startedAfter(start).endedBefore(end).build());
-        assertNotNull(result);
-
-        assertEquals(1, result.getResults().size());
-        assertEquals(execKey, result.getResults().keySet().iterator().next());
-        assertEquals(BulkActionResult.Status.SUCCESS, 
result.getResults().entrySet().iterator().next().getValue());
+        Response response = reportService.deleteExecutions(
+                new 
ExecDeleteQuery.Builder().key(reportTO.getKey()).startedAfter(start).endedBefore(end).build());
+        List<BatchResponseItem> batchResponseItems = 
parseBatchResponse(response);
+        assertEquals(1, batchResponseItems.size());
+        assertEquals(execKey, 
batchResponseItems.get(0).getHeaders().get(RESTHeaders.RESOURCE_KEY).get(0));
+        assertEquals(Response.Status.OK.getStatusCode(), 
batchResponseItems.get(0).getStatus());
     }
 
     @Test

Reply via email to