[SYNCOPE-156] merge confirmation on resource/connector deletion
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/2a7cf5ae Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/2a7cf5ae Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/2a7cf5ae Branch: refs/heads/master Commit: 2a7cf5aebc31752501bc2ba88e8b0cd41138ae02 Parents: 21262a6 Author: fmartelli <[email protected]> Authored: Wed Sep 30 13:59:18 2015 +0200 Committer: fmartelli <[email protected]> Committed: Wed Sep 30 13:59:18 2015 +0200 ---------------------------------------------------------------------- .../client/console/SyncopeConsoleSession.java | 4 +++ .../syncope/client/console/pages/BasePage.java | 2 +- .../client/console/panels/ConnectorModal.java | 8 ++--- .../console/panels/ResourceMappingPanel.java | 35 +++++++------------- .../client/console/panels/ResourceModal.java | 8 ++--- .../client/console/rest/BaseRestClient.java | 10 ++++++ .../console/rest/ConnectorRestClient.java | 9 +++-- .../client/console/rest/ResourceRestClient.java | 7 ++-- .../console/topology/TopologyNodePanel.java | 4 +++ .../console/panels/ResourceMappingPanel.html | 10 +++--- 10 files changed, 57 insertions(+), 40 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java index 8d71645..f48611f 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java @@ -222,4 +222,8 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession { return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale); } + + public MediaType getMediaType() { + return clientFactory.getContentType().getMediaType(); + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java index 622d204..bcbd3bf 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java @@ -183,7 +183,7 @@ public class BasePage extends AbstractBasePage implements IAjaxIndicatorAware { * @param modal window * @param container container */ - public void setWindowClosedCallback(final BaseModal modal, final WebMarkupContainer container) { + public void setWindowClosedCallback(final BaseModal<?> modal, final WebMarkupContainer container) { modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { private static final long serialVersionUID = 8804221891699487139L; http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java index 95f013f..349560c 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java @@ -151,12 +151,12 @@ public class ConnectorModal extends AbstractResourceModal { try { if (connInstanceTO.getKey() == 0) { - connectorRestClient.create(connInstanceTO); + final ConnInstanceTO actual = connectorRestClient.create(connInstanceTO); send(pageRef.getPage(), Broadcast.BREADTH, new CreateEvent( - connInstanceTO.getKey(), - connInstanceTO.getDisplayName(), + actual.getKey(), + actual.getDisplayName(), TopologyNode.Kind.CONNECTOR, - URI.create(connInstanceTO.getLocation()).toASCIIString(), + URI.create(actual.getLocation()).toASCIIString(), target)); } else { connectorRestClient.update(connInstanceTO); http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java index 7a7295a..cdc3fc0 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.client.console.panels; +import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -28,8 +29,9 @@ import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.commons.JexlHelpUtils; import org.apache.syncope.client.console.rest.ConnectorRestClient; import org.apache.syncope.client.console.rest.SchemaRestClient; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDecoratedCheckbox; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel; @@ -41,12 +43,10 @@ import org.apache.syncope.common.lib.to.ProvisionTO; import org.apache.syncope.common.lib.to.ResourceTO; import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.ConnConfProperty; +import org.apache.syncope.common.lib.types.Entitlement; import org.apache.syncope.common.lib.types.IntMappingType; import org.apache.syncope.common.lib.types.MappingPurpose; -import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.attributes.AjaxCallListener; -import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.form.AjaxButton; @@ -231,12 +231,15 @@ public class ResourceMappingPanel extends Panel { entity = mapItem.getIntMappingType().getAnyTypeKind(); } - item.add(new AjaxDecoratedCheckbox("toRemove", new Model<>(Boolean.FALSE)) { + final ActionLinksPanel.Builder<Serializable> actions = ActionLinksPanel.builder( + getPage().getPageReference()); - private static final long serialVersionUID = 7170946748485726506L; + actions.add(new ActionLink<Serializable>() { + + private static final long serialVersionUID = -3722207913631435501L; @Override - protected void onUpdate(final AjaxRequestTarget target) { + public void onClick(final AjaxRequestTarget target, final Serializable ignore) { int index = -1; for (int i = 0; i < getMapping().getItems().size() && index == -1; i++) { if (mapItem.equals(getMapping().getItems().get(i))) { @@ -250,23 +253,9 @@ public class ResourceMappingPanel extends Panel { target.add(ResourceMappingPanel.this); } } + }, ActionLink.ActionType.DELETE, Entitlement.RESOURCE_UPDATE); - @Override - protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) { - super.updateAjaxAttributes(attributes); - - AjaxCallListener ajaxCallListener = new AjaxCallListener() { - - private static final long serialVersionUID = 7160235486520935153L; - - @Override - public CharSequence getPrecondition(final Component component) { - return "if (!confirm('" + getString("confirmDelete") + "')) return false;"; - } - }; - attributes.getAjaxCallListeners().add(ajaxCallListener); - } - }); + item.add(actions.build("toRemove")); final AjaxDropDownChoicePanel<String> intAttrNames = new AjaxDropDownChoicePanel<>( "intAttrNames", http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java index 1f9ae6b..7ea5e96 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java @@ -233,12 +233,12 @@ public class ResourceModal extends AbstractResourceModal { } else { try { if (createFlag) { - resourceRestClient.create(resourceTO); + final ResourceTO actual = resourceRestClient.create(resourceTO); send(pageRef.getPage(), Broadcast.BREADTH, new CreateEvent( - resourceTO.getKey(), - resourceTO.getKey(), + actual.getKey(), + actual.getKey(), TopologyNode.Kind.RESOURCE, - resourceTO.getConnector(), + actual.getConnector(), target)); } else { resourceRestClient.update(resourceTO); http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java index 0e6fe2c..650818b 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java @@ -19,9 +19,12 @@ package org.apache.syncope.client.console.rest; import java.io.Serializable; +import java.net.URI; +import org.apache.cxf.jaxrs.client.WebClient; import org.apache.syncope.client.console.SyncopeConsoleSession; import org.apache.syncope.client.lib.SyncopeClient; import org.apache.syncope.common.lib.search.OrderByClauseBuilder; +import org.apache.syncope.common.rest.api.service.JAXRSService; import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,4 +63,11 @@ public abstract class BaseRestClient implements Serializable { return builder.build(); } + + protected <E extends JAXRSService, T> T getObject(final E service, final URI location, final Class<T> resultClass) { + WebClient webClient = WebClient.fromClient(WebClient.client(service)); + webClient.accept(SyncopeConsoleSession.get().getMediaType()).to(location.toASCIIString(), false); + + return webClient.get(resultClass); + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java index d3d18c8..2414070 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.ws.rs.core.Response; import org.apache.syncope.client.console.SyncopeConsoleSession; import org.apache.syncope.common.lib.SyncopeClientException; import org.apache.syncope.common.lib.to.BulkAction; @@ -56,11 +57,15 @@ public class ConnectorRestClient extends BaseRestClient { return connectors; } - public void create(final ConnInstanceTO connectorTO) { + public ConnInstanceTO create(final ConnInstanceTO connectorTO) { Set<ConnConfProperty> filteredConf = filterProperties(connectorTO.getConfiguration()); connectorTO.getConfiguration().clear(); connectorTO.getConfiguration().addAll(filteredConf); - getService(ConnectorService.class).create(connectorTO); + + final ConnectorService service = getService(ConnectorService.class); + final Response response = service.create(connectorTO); + + return getObject(service, response.getLocation(), ConnInstanceTO.class); } /** http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java index 5efa119..3a99c1d 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java @@ -19,6 +19,7 @@ package org.apache.syncope.client.console.rest; import java.util.List; +import javax.ws.rs.core.Response; import org.apache.syncope.client.console.SyncopeConsoleSession; import org.apache.syncope.common.lib.SyncopeClientException; import org.apache.syncope.common.lib.to.BulkAction; @@ -53,8 +54,10 @@ public class ResourceRestClient extends BaseRestClient { return resources; } - public void create(final ResourceTO resourceTO) { - getService(ResourceService.class).create(resourceTO); + public ResourceTO create(final ResourceTO resourceTO) { + final ResourceService service = getService(ResourceService.class); + final Response response = service.create(resourceTO); + return getObject(service, response.getLocation(), ResourceTO.class); } public ResourceTO read(final String name) { http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java index 9545c31..ff40a8f 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java @@ -30,6 +30,7 @@ import org.apache.syncope.client.console.panels.ResourceModal; import org.apache.syncope.client.console.rest.ConnectorRestClient; import org.apache.syncope.client.console.rest.ResourceRestClient; import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxLink; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.confirmation.ConfirmationModalBehavior; import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.SyncopeClientException; import org.apache.syncope.common.lib.to.ConnInstanceTO; @@ -176,6 +177,7 @@ public class TopologyNodePanel extends Panel implements IAjaxIndicatorAware { } }; fragment.add(delete); + delete.add(new ConfirmationModalBehavior()); MetaDataRoleAuthorizationStrategy.authorize(delete, ENABLE, Entitlement.CONNECTOR_DELETE); @@ -257,6 +259,8 @@ public class TopologyNodePanel extends Panel implements IAjaxIndicatorAware { }; fragment.add(delete); + delete.add(new ConfirmationModalBehavior()); + MetaDataRoleAuthorizationStrategy.authorize(delete, ENABLE, Entitlement.RESOURCE_DELETE); final AjaxLink<String> edit = new ClearIndicatingAjaxLink<String>("edit", pageRef) { http://git-wip-us.apache.org/repos/asf/syncope/blob/2a7cf5ae/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html index ccedbb8..7623837 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html @@ -25,7 +25,6 @@ under the License. wicket:id="mappingContainer"> <tbody> <tr> - <th><wicket:message key="delete"/></th> <th><wicket:message key="entity"/></th> <th><wicket:message key="intMappingTypes"/></th> <th><wicket:message key="intAttrNames"/></th> @@ -46,12 +45,10 @@ under the License. <th><wicket:message key="connObjectKey"/></th> <th><label wicket:id="passwordLabel"/></th> <th><wicket:message key="purpose"/></th> + <th><i class="fa fa-trash"></i></th> </tr> <tr wicket:id="mappings"> <td> - <input type="checkbox" class="text ui-widget-content ui-corner-all" wicket:id="toRemove"/> - </td> - <td> <span wicket:id="entities">[entities]</span> </td> <td> @@ -77,6 +74,11 @@ under the License. <span wicket:id="purposeActions">[purpose]</span> </div> </td> + <td> + <div style="margin: 10px 0px 10px 0px"> + <span wicket:id="toRemove"/> + </div> + </td> </tr> </tbody>
