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 2015/10/30 12:42:18 UTC

[11/28] syncope git commit: [SYNCOPE-156] merge confirmation on resource/connector deletion

[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 <fa...@gmail.com>
Authored: Wed Sep 30 13:59:18 2015 +0200
Committer: fmartelli <fa...@gmail.com>
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>