You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2013/03/14 17:51:14 UTC
svn commit: r1456529 - in /syncope/trunk:
client/src/main/java/org/apache/syncope/client/services/proxy/
common/src/main/java/org/apache/syncope/common/services/
console/src/main/java/org/apache/syncope/console/pages/
console/src/main/java/org/apache/s...
Author: fmartelli
Date: Thu Mar 14 16:51:13 2013
New Revision: 1456529
URL: http://svn.apache.org/r1456529
Log:
SYNCOPE-198: provided table implementation and bulk actions for resources and connectors
Modified:
syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ConnectorServiceProxy.java
syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ResourceServiceProxy.java
syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ConnectorService.java
syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ResourceService.java
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ResourceRestClient.java
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Resources.html
syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java
syncope/trunk/console/src/test/java/org/apache/syncope/console/ResourceTestITCase.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ConnectorServiceImpl.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ResourceServiceImpl.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ResourceTestITCase.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
Modified: syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ConnectorServiceProxy.java
URL: http://svn.apache.org/viewvc/syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ConnectorServiceProxy.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ConnectorServiceProxy.java (original)
+++ syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ConnectorServiceProxy.java Thu Mar 14 16:51:13 2013
@@ -24,6 +24,8 @@ import java.util.Arrays;
import java.util.List;
import javax.ws.rs.core.Response;
import org.apache.syncope.common.services.ConnectorService;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnBundleTO;
import org.apache.syncope.common.to.ConnInstanceTO;
import org.apache.syncope.common.to.SchemaTO;
@@ -119,4 +121,9 @@ public class ConnectorServiceProxy exten
public void reload() {
getRestTemplate().postForLocation(baseUrl + "connector/reload", null);
}
+
+ @Override
+ public BulkActionRes bulkAction(final BulkAction bulkAction) {
+ return getRestTemplate().postForObject(baseUrl + "connector/bulk", bulkAction, BulkActionRes.class);
+ }
}
Modified: syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ResourceServiceProxy.java
URL: http://svn.apache.org/viewvc/syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ResourceServiceProxy.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ResourceServiceProxy.java (original)
+++ syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/ResourceServiceProxy.java Thu Mar 14 16:51:13 2013
@@ -31,6 +31,8 @@ import javax.ws.rs.core.Response;
import org.apache.syncope.common.SyncopeConstants;
import org.apache.syncope.common.services.ResourceService;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnObjectTO;
import org.apache.syncope.common.to.PropagationActionClassTO;
import org.apache.syncope.common.to.ResourceTO;
@@ -110,4 +112,9 @@ public class ResourceServiceProxy extend
return getRestTemplate().postForObject(baseUrl + "resource/check.json", resourceTO, Boolean.class).
booleanValue();
}
+
+ @Override
+ public BulkActionRes bulkAction(final BulkAction bulkAction) {
+ return getRestTemplate().postForObject(baseUrl + "resource/bulk", bulkAction, BulkActionRes.class);
+ }
}
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ConnectorService.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ConnectorService.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ConnectorService.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ConnectorService.java Thu Mar 14 16:51:13 2013
@@ -29,6 +29,8 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnBundleTO;
import org.apache.syncope.common.to.ConnInstanceTO;
import org.apache.syncope.common.to.SchemaTO;
@@ -124,4 +126,8 @@ public interface ConnectorService {
@POST
@Path("reload")
void reload();
+
+ @POST
+ @Path("bulk")
+ BulkActionRes bulkAction(BulkAction bulkAction);
}
\ No newline at end of file
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ResourceService.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ResourceService.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ResourceService.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/services/ResourceService.java Thu Mar 14 16:51:13 2013
@@ -28,7 +28,8 @@ import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
-
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnObjectTO;
import org.apache.syncope.common.to.PropagationActionClassTO;
import org.apache.syncope.common.to.ResourceTO;
@@ -106,4 +107,7 @@ public interface ResourceService {
@Path("{resourceName}")
void update(@PathParam("resourceName") String resourceName, ResourceTO resourceTO);
+ @POST
+ @Path("bulk")
+ BulkActionRes bulkAction(BulkAction bulkAction);
}
Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java Thu Mar 14 16:51:13 2013
@@ -19,6 +19,7 @@
package org.apache.syncope.console.pages;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -28,6 +29,8 @@ import org.apache.syncope.common.validat
import org.apache.syncope.console.commons.Constants;
import org.apache.syncope.console.commons.PreferenceManager;
import org.apache.syncope.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.console.pages.panels.AbstractSearchResultPanel;
+import org.apache.syncope.console.pages.panels.AjaxDataTablePanel;
import org.apache.syncope.console.rest.ConnectorRestClient;
import org.apache.syncope.console.rest.ResourceRestClient;
import org.apache.syncope.console.wicket.ajax.markup.html.ClearIndicatingAjaxLink;
@@ -42,12 +45,13 @@ import org.apache.wicket.ajax.attributes
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.event.IEvent;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
-import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -58,7 +62,7 @@ import org.apache.wicket.markup.repeater
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
@@ -151,11 +155,12 @@ public class Resources extends BasePage
}
private void setupResources() {
- List<IColumn> columns = new ArrayList<IColumn>();
+ List<IColumn<ResourceTO, String>> columns = new ArrayList<IColumn<ResourceTO, String>>();
- columns.add(new PropertyColumn(new ResourceModel("name"), "name", "name"));
+ columns.add(new PropertyColumn(new StringResourceModel("name", this, null), "name", "name"));
- columns.add(new AbstractColumn<ResourceTO, String>(new ResourceModel("connector", "connector")) {
+ columns.add(new AbstractColumn<ResourceTO, String>(
+ new StringResourceModel("connector", this, null, "connector")) {
private static final long serialVersionUID = 8263694778917279290L;
@@ -196,12 +201,12 @@ public class Resources extends BasePage
}
});
- columns.add(new PropertyColumn(new ResourceModel("propagationPrimary"), "propagationPrimary",
- "propagationPrimary"));
- columns.add(new PropertyColumn(new ResourceModel("propagationPriority"), "propagationPriority",
- "propagationPriority"));
+ columns.add(new PropertyColumn(new StringResourceModel(
+ "propagationPrimary", this, null), "propagationPrimary", "propagationPrimary"));
+ columns.add(new PropertyColumn(new StringResourceModel(
+ "propagationPriority", this, null), "propagationPriority", "propagationPriority"));
- columns.add(new AbstractColumn<ResourceTO, String>(new ResourceModel("actions", "")) {
+ columns.add(new AbstractColumn<ResourceTO, String>(new StringResourceModel("actions", this, null, "")) {
private static final long serialVersionUID = 2054811145491901166L;
@@ -266,8 +271,16 @@ public class Resources extends BasePage
}
});
- final AjaxFallbackDefaultDataTable table = new AjaxFallbackDefaultDataTable("resourceDatatable", columns,
- new ResourcesProvider(), resourcePaginatorRows);
+ final AjaxDataTablePanel<ResourceTO, String> table = new AjaxDataTablePanel<ResourceTO, String>(
+ "resourceDatatable",
+ columns,
+ (ISortableDataProvider<ResourceTO, String>) new ResourcesProvider(),
+ resourcePaginatorRows,
+ Arrays.asList(new ActionLink.ActionType[]{ActionLink.ActionType.DELETE}),
+ resourceRestClient,
+ "name",
+ "Resources",
+ getPageReference());
resourceContainer = new WebMarkupContainer("resourceContainer");
resourceContainer.add(table);
@@ -339,19 +352,19 @@ public class Resources extends BasePage
}
private void setupConnectors() {
- List<IColumn> columns = new ArrayList<IColumn>();
+ List<IColumn<ConnInstanceTO, String>> columns = new ArrayList<IColumn<ConnInstanceTO, String>>();
- columns.add(new PropertyColumn(new ResourceModel("id"), "id", "id"));
-
- columns.add(new PropertyColumn(new ResourceModel("name"), "connectorName", "connectorName"));
-
- columns.add(new PropertyColumn(new ResourceModel("displayName"), "displayName", "displayName"));
-
- columns.add(new PropertyColumn(new ResourceModel("version"), "version", "version"));
-
- columns.add(new PropertyColumn(new ResourceModel("bundleName"), "bundleName", "bundleName"));
-
- columns.add(new AbstractColumn<ConnInstanceTO, String>(new ResourceModel("actions", "")) {
+ columns.add(new PropertyColumn(
+ new StringResourceModel("id", this, null), "id", "id"));
+ columns.add(new PropertyColumn(
+ new StringResourceModel("name", this, null), "connectorName", "connectorName"));
+ columns.add(new PropertyColumn(
+ new StringResourceModel("displayName", this, null), "displayName", "displayName"));
+ columns.add(new PropertyColumn(
+ new StringResourceModel("version", this, null), "version", "version"));
+ columns.add(new PropertyColumn(
+ new StringResourceModel("bundleName", this, null), "bundleName", "bundleName"));
+ columns.add(new AbstractColumn<ConnInstanceTO, String>(new StringResourceModel("actions", this, null, "")) {
private static final long serialVersionUID = 2054811145491901166L;
@@ -413,8 +426,16 @@ public class Resources extends BasePage
}
});
- final AjaxFallbackDefaultDataTable table = new AjaxFallbackDefaultDataTable("connectorDatatable", columns,
- new ConnectorsProvider(), connectorPaginatorRows);
+ final AjaxDataTablePanel<ConnInstanceTO, String> table = new AjaxDataTablePanel<ConnInstanceTO, String>(
+ "connectorDatatable",
+ columns,
+ (ISortableDataProvider<ConnInstanceTO, String>) new ConnectorsProvider(),
+ connectorPaginatorRows,
+ Arrays.asList(new ActionLink.ActionType[]{ActionLink.ActionType.DELETE}),
+ connectorRestClient,
+ "id",
+ "Connectors",
+ getPageReference());
connectorContainer = new WebMarkupContainer("connectorContainer");
connectorContainer.add(table);
@@ -579,4 +600,12 @@ public class Resources extends BasePage
return connectorRestClient.getAllConnectors();
}
}
+
+ @Override
+ public void onEvent(final IEvent<?> event) {
+ if (event.getPayload() instanceof AbstractSearchResultPanel.EventDataWrapper) {
+ ((AbstractSearchResultPanel.EventDataWrapper) event.getPayload()).getTarget().add(resourceContainer);
+ ((AbstractSearchResultPanel.EventDataWrapper) event.getPayload()).getTarget().add(connectorContainer);
+ }
+ }
}
\ No newline at end of file
Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java Thu Mar 14 16:51:13 2013
@@ -170,4 +170,8 @@ public class AjaxDataTablePanel<T, S> ex
public final long getPageCount() {
return dataTable.getPageCount();
}
+
+ public void setItemsPerPage(final int resourcePaginatorRows) {
+ dataTable.setItemsPerPage(resourcePaginatorRows);
+ }
}
Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java Thu Mar 14 16:51:13 2013
@@ -25,6 +25,8 @@ import java.util.List;
import java.util.Set;
import org.apache.syncope.common.services.ConnectorService;
import org.apache.syncope.common.services.ResourceService;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnBundleTO;
import org.apache.syncope.common.to.ConnInstanceTO;
import org.apache.syncope.common.to.ResourceTO;
@@ -192,4 +194,8 @@ public class ConnectorRestClient extends
public void reload() {
getService(ConnectorService.class).reload();
}
+
+ public BulkActionRes bulkAction(final BulkAction action) {
+ return getService(ConnectorService.class).bulkAction(action);
+ }
}
Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ResourceRestClient.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ResourceRestClient.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ResourceRestClient.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ResourceRestClient.java Thu Mar 14 16:51:13 2013
@@ -18,11 +18,11 @@
*/
package org.apache.syncope.console.rest;
-import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-
import org.apache.syncope.common.services.ResourceService;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.PropagationActionClassTO;
import org.apache.syncope.common.to.ResourceTO;
import org.apache.syncope.common.util.CollectionWrapper;
@@ -83,4 +83,8 @@ public class ResourceRestClient extends
public void delete(final String name) {
getService(ResourceService.class).delete(name);
}
+
+ public BulkActionRes bulkAction(final BulkAction action) {
+ return getService(ResourceService.class).bulkAction(action);
+ }
}
Modified: syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Resources.html
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Resources.html?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Resources.html (original)
+++ syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Resources.html Thu Mar 14 16:51:13 2013
@@ -28,8 +28,7 @@ under the License.
<div id="tabs-1">
<div id="users-contain" class="ui-widget" style="width:inherit">
<span wicket:id="resourceContainer">
- <table class="ui-widget ui-widget-content table-hover"
- wicket:id="resourceDatatable"/>
+ <span wicket:id="resourceDatatable">[resources]</span>
</span>
<span style="float:right">
@@ -51,8 +50,7 @@ under the License.
<div id="tabs-2">
<div id="users-contain" class="ui-widget" style="width:inherit">
<span wicket:id="connectorContainer">
- <table class="ui-widget ui-widget-content table-hover"
- wicket:id="connectorDatatable"/>
+ <span wicket:id="connectorDatatable">[connectors]</span>
</span>
<span style="float:right">
Modified: syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java (original)
+++ syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java Thu Mar 14 16:51:13 2013
@@ -49,7 +49,7 @@ public class ConnInstanceTestITCase exte
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='tabs']\");", "30000");
selenium.click("//div[3]/ul/li[2]/a");
- selenium.click("//tr[4]/td[6]/div/span[9]/a");
+ selenium.click("//tr[4]/td[7]/div/span[9]/a");
selenium.waitForCondition(""
+ "selenium.isElementPresent(\"//div[2]/form/div[2]/div/div/div[3]/div[2]/span/select\");", "30000");
@@ -70,7 +70,7 @@ public class ConnInstanceTestITCase exte
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='tabs']\");", "30000");
selenium.click("//div[3]/ul/li[2]/a");
- selenium.click("//tr[4]/td[6]/div/span[11]/a");
+ selenium.click("//tr[4]/td[7]/div/span[11]/a");
assertTrue(selenium.getConfirmation().matches("^Do you really want to delete the selected item[\\s\\S]$"));
@@ -85,7 +85,7 @@ public class ConnInstanceTestITCase exte
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='tabs']\");", "30000");
selenium.click("//div[3]/ul/li[2]/a");
- selenium.click("//tr[2]/td[6]/div/span[9]/a");
+ selenium.click("//tr[2]/td[7]/div/span[9]/a");
selenium.waitForCondition(
"selenium.isElementPresent(\"//select[@name='version:dropDownChoiceField']\");", "30000");
Modified: syncope/trunk/console/src/test/java/org/apache/syncope/console/ResourceTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/test/java/org/apache/syncope/console/ResourceTestITCase.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/console/src/test/java/org/apache/syncope/console/ResourceTestITCase.java (original)
+++ syncope/trunk/console/src/test/java/org/apache/syncope/console/ResourceTestITCase.java Thu Mar 14 16:51:13 2013
@@ -42,7 +42,7 @@ public class ResourceTestITCase extends
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='tabs']\");", "30000");
- selenium.click("//td[5]/div/span[9]/a");
+ selenium.click("//td[6]/div/span[9]/a");
selenium.waitForCondition("selenium.isElementPresent("
+ "\"//form/div[3]/div/span/div/div/div/label[text()='Name']\");", "30000");
@@ -64,7 +64,7 @@ public class ResourceTestITCase extends
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='tabs']\");", "30000");
- selenium.click("//tr[3]/td[5]/div/span[11]/a");
+ selenium.click("//tr[3]/td[6]/div/span[11]/a");
assertTrue(selenium.getConfirmation().matches("^Do you really want to delete the selected item[\\s\\S]$"));
}
@@ -75,7 +75,7 @@ public class ResourceTestITCase extends
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='tabs']\");", "30000");
- selenium.click("//td[5]/div/span[9]/a");
+ selenium.click("//td[6]/div/span[9]/a");
selenium.waitForCondition("selenium.isElementPresent("
+ "\"//form/div[3]/div/span/div/div/div/label[text()='Name']\");", "30000");
@@ -97,7 +97,7 @@ public class ResourceTestITCase extends
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='tabs']\");", "30000");
- selenium.click("//*[@id=\"users-contain\"]//*[div=\"ws-target-resource-delete\"]/../td[5]/div/span[9]/a");
+ selenium.click("//*[@id=\"users-contain\"]//*[div=\"ws-target-resource-delete\"]/../td[6]/div/span[9]/a");
selenium.waitForCondition("selenium.isElementPresent("
+ "\"//form/div[3]/div/span/div/div/div/label[text()='Name']\");", "30000");
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java Thu Mar 14 16:51:13 2013
@@ -25,6 +25,8 @@ import java.util.Locale;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnBundleTO;
import org.apache.syncope.common.to.ConnInstanceTO;
import org.apache.syncope.common.types.AuditElements.Category;
@@ -393,4 +395,28 @@ public class ConnInstanceController exte
auditManager.audit(Category.connector, ConnectorSubCategory.reload, Result.success,
"Successfully reloaded all connector bundles and instances");
}
+
+ @PreAuthorize("hasRole('CONNECTOR_DELETE') and #bulkAction.operation == #bulkAction.operation.DELETE")
+ @RequestMapping(method = RequestMethod.POST, value = "/bulk")
+ public BulkActionRes bulkAction(@RequestBody final BulkAction bulkAction) {
+ LOG.debug("Bulk action '{}' called on '{}'", bulkAction.getOperation(), bulkAction.getTargets());
+
+ BulkActionRes res = new BulkActionRes();
+
+ switch (bulkAction.getOperation()) {
+ case DELETE:
+ for (String id : bulkAction.getTargets()) {
+ try {
+ res.add(delete(Long.valueOf(id)).getId(), BulkActionRes.Status.SUCCESS);
+ } catch (Exception e) {
+ LOG.error("Error performing delete for connector {}", id, e);
+ res.add(id, BulkActionRes.Status.FAILURE);
+ }
+ }
+ break;
+ default:
+ }
+
+ return res;
+ }
}
\ No newline at end of file
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java Thu Mar 14 16:51:13 2013
@@ -23,6 +23,8 @@ import java.util.Set;
import javax.persistence.EntityExistsException;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnObjectTO;
import org.apache.syncope.common.to.ResourceTO;
import org.apache.syncope.common.types.AttributableType;
@@ -299,4 +301,28 @@ public class ResourceController extends
return new ModelAndView().addObject(result);
}
+
+ @PreAuthorize("hasRole('RESOURCE_DELETE') and #bulkAction.operation == #bulkAction.operation.DELETE")
+ @RequestMapping(method = RequestMethod.POST, value = "/bulk")
+ public BulkActionRes bulkAction(@RequestBody final BulkAction bulkAction) {
+ LOG.debug("Bulk action '{}' called on '{}'", bulkAction.getOperation(), bulkAction.getTargets());
+
+ BulkActionRes res = new BulkActionRes();
+
+ switch (bulkAction.getOperation()) {
+ case DELETE:
+ for (String name : bulkAction.getTargets()) {
+ try {
+ res.add(delete(name).getName(), BulkActionRes.Status.SUCCESS);
+ } catch (Exception e) {
+ LOG.error("Error performing delete for resource {}", name, e);
+ res.add(name, BulkActionRes.Status.FAILURE);
+ }
+ }
+ break;
+ default:
+ }
+
+ return res;
+ }
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ConnectorServiceImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ConnectorServiceImpl.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ConnectorServiceImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ConnectorServiceImpl.java Thu Mar 14 16:51:13 2013
@@ -25,6 +25,8 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.syncope.common.SyncopeConstants;
import org.apache.syncope.common.services.ConnectorService;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnBundleTO;
import org.apache.syncope.common.to.ConnInstanceTO;
import org.apache.syncope.common.to.SchemaTO;
@@ -111,4 +113,9 @@ public class ConnectorServiceImpl implem
public void reload() {
connInstanceController.reload();
}
+
+ @Override
+ public BulkActionRes bulkAction(final BulkAction bulkAction) {
+ return connInstanceController.bulkAction(bulkAction);
+ }
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ResourceServiceImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ResourceServiceImpl.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ResourceServiceImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/services/ResourceServiceImpl.java Thu Mar 14 16:51:13 2013
@@ -27,6 +27,8 @@ import javax.ws.rs.core.UriInfo;
import org.apache.syncope.common.SyncopeConstants;
import org.apache.syncope.common.services.ResourceService;
+import org.apache.syncope.common.to.BulkAction;
+import org.apache.syncope.common.to.BulkActionRes;
import org.apache.syncope.common.to.ConnObjectTO;
import org.apache.syncope.common.to.PropagationActionClassTO;
import org.apache.syncope.common.to.ResourceTO;
@@ -100,4 +102,9 @@ public class ResourceServiceImpl impleme
public void setUriInfo(final UriInfo ui) {
this.uriInfo = ui;
}
+
+ @Override
+ public BulkActionRes bulkAction(final BulkAction bulkAction) {
+ return resourceController.bulkAction(bulkAction);
+ }
}
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java Thu Mar 14 16:51:13 2013
@@ -23,17 +23,20 @@ import static org.junit.Assert.assertFal
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.ws.rs.core.Response;
import org.apache.commons.io.IOUtils;
+import org.apache.syncope.common.to.BulkAction;
import org.apache.syncope.common.to.ConnBundleTO;
import org.apache.syncope.common.to.ConnInstanceTO;
import org.apache.syncope.common.to.MappingItemTO;
@@ -646,4 +649,45 @@ public class ConnInstanceTestITCase exte
public void reload() {
connectorService.reload();
}
+
+ @Test
+ public void bulkAction() {
+ final BulkAction bulkAction = new BulkAction();
+ bulkAction.setOperation(BulkAction.Type.DELETE);
+
+ ConnInstanceTO conn = connectorService.read(101L);
+
+ conn.setId(0);
+ conn.setDisplayName("forBulk1");
+
+ bulkAction.addTarget(String.valueOf(
+ getObject(connectorService.create(conn), ConnInstanceTO.class, connectorService).getId()));
+
+ conn.setDisplayName("forBulk2");
+
+ bulkAction.addTarget(String.valueOf(
+ getObject(connectorService.create(conn), ConnInstanceTO.class, connectorService).getId()));
+
+
+ Iterator<String> iter = bulkAction.getTargets().iterator();
+
+ assertNotNull(connectorService.read(Long.valueOf(iter.next())));
+ assertNotNull(connectorService.read(Long.valueOf(iter.next())));
+
+ connectorService.bulkAction(bulkAction);
+
+ iter = bulkAction.getTargets().iterator();
+
+ try {
+ connectorService.read(Long.valueOf(iter.next()));
+ fail();
+ } catch (SyncopeClientCompositeErrorException e) {
+ }
+
+ try {
+ connectorService.read(Long.valueOf(iter.next()));
+ fail();
+ } catch (SyncopeClientCompositeErrorException e) {
+ }
+ }
}
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ResourceTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ResourceTestITCase.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ResourceTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ResourceTestITCase.java Thu Mar 14 16:51:13 2013
@@ -32,6 +32,7 @@ import java.util.List;
import java.util.Set;
import javax.ws.rs.core.Response;
+import org.apache.syncope.common.to.BulkAction;
import org.apache.syncope.common.to.MappingItemTO;
import org.apache.syncope.common.to.MappingTO;
@@ -410,6 +411,35 @@ public class ResourceTestITCase extends
}
}
+ @Test
+ public void bulkAction() {
+ resourceService.create(buildResourceTO("forBulk1"));
+ resourceService.create(buildResourceTO("forBulk2"));
+
+ assertNotNull(resourceService.read("forBulk1"));
+ assertNotNull(resourceService.read("forBulk2"));
+
+ final BulkAction bulkAction = new BulkAction();
+ bulkAction.setOperation(BulkAction.Type.DELETE);
+
+ bulkAction.addTarget(String.valueOf("forBulk1"));
+ bulkAction.addTarget(String.valueOf("forBulk2"));
+
+ resourceService.bulkAction(bulkAction);
+
+ try {
+ resourceService.read("forBulk1");
+ fail();
+ } catch (SyncopeClientCompositeErrorException e) {
+ }
+
+ try {
+ resourceService.read("forBulk2");
+ fail();
+ } catch (SyncopeClientCompositeErrorException e) {
+ }
+ }
+
private ResourceTO buildResourceTO(String resourceName) {
ResourceTO resourceTO = new ResourceTO();
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java?rev=1456529&r1=1456528&r2=1456529&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Thu Mar 14 16:51:13 2013
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -35,6 +36,7 @@ import org.apache.syncope.common.search.
import org.apache.syncope.common.search.NodeCond;
import org.apache.syncope.common.services.InvalidSearchConditionException;
import org.apache.syncope.common.to.AttributeTO;
+import org.apache.syncope.common.to.BulkAction;
import org.apache.syncope.common.to.JobClassTO;
import org.apache.syncope.common.to.MembershipTO;
import org.apache.syncope.common.to.NotificationTO;
@@ -883,6 +885,34 @@ public class TaskTestITCase extends Abst
}
}
+ @Test
+ public void bulkAction() {
+ final List<PropagationTaskTO> before = (List<PropagationTaskTO>) taskService.list(TaskType.PROPAGATION);
+
+ // create user with testdb resource
+ final UserTO userTO = UserTestITCase.getUniqueSampleTO("taskBulk@apache.org");
+ userTO.addResource("resource-testdb");
+ createUser(userTO);
+
+ final List<PropagationTaskTO> after =
+ new ArrayList<PropagationTaskTO>((List<PropagationTaskTO>) taskService.list(TaskType.PROPAGATION));
+
+ after.removeAll(before);
+
+ assertFalse(after.isEmpty());
+
+ final BulkAction bulkAction = new BulkAction();
+ bulkAction.setOperation(BulkAction.Type.DELETE);
+
+ for (TaskTO taskTO : after) {
+ bulkAction.addTarget(String.valueOf(taskTO.getId()));
+ }
+
+ taskService.bulkAction(bulkAction);
+
+ assertFalse(taskService.list(TaskType.PROPAGATION).containsAll(after));
+ }
+
/**
* remove initial and synchronized users to make test re-runnable
*/