syncope-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fmarte...@apache.org
Subject [7/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors
Date Mon, 18 Apr 2016 08:05:59 GMT
[SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/1735c44c
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/1735c44c
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/1735c44c

Branch: refs/heads/master
Commit: 1735c44c19226d4f2351befa1efec60d9796d98a
Parents: a25e923
Author: fmartelli <fabio.martelli@gmail.com>
Authored: Mon Apr 18 10:05:28 2016 +0200
Committer: fmartelli <fabio.martelli@gmail.com>
Committed: Mon Apr 18 10:05:28 2016 +0200

----------------------------------------------------------------------
 .../MailTemplateDirectoryPanel.java             |   9 +-
 .../NotificationDirectoryPanel.java             |   7 +
 .../console/panels/AbstractConnConfPanel.java   | 102 ---
 .../console/panels/AbstractResourceModal.java   | 125 ----
 .../console/panels/AnyDirectoryPanel.java       |   6 +
 .../console/panels/ConnCapabilitiesPanel.java   |  47 --
 .../console/panels/ConnectorConfPanel.java      |  80 ---
 .../console/panels/ConnectorDetailsPanel.java   | 157 -----
 .../client/console/panels/ConnectorModal.java   | 194 ------
 .../client/console/panels/DirectoryPanel.java   |  32 +-
 .../panels/ResourceConnCapabilitiesPanel.java   |  71 --
 .../console/panels/ResourceConnConfPanel.java   |  87 ---
 .../console/panels/ResourceDetailsPanel.java    | 136 ----
 .../console/panels/ResourceMappingPanel.java    | 642 -------------------
 .../client/console/panels/ResourceModal.java    | 304 ---------
 .../console/panels/ResourceSecurityPanel.java   | 137 ----
 .../console/panels/RoleDirectoryPanel.java      |   3 +-
 .../client/console/panels/TogglePanel.java      |  42 +-
 .../client/console/topology/Topology.java       |   2 +-
 .../console/topology/TopologyNodePanel.java     |   5 +-
 .../console/topology/TopologyTogglePanel.java   |  60 +-
 .../markup/html/bootstrap/dialog/BaseModal.java |   4 +-
 .../html/list/ConnConfPropertyListView.java     |  11 +
 .../client/console/wizards/AjaxWizard.java      |   6 +-
 .../console/wizards/AjaxWizardBuilder.java      |  50 +-
 .../client/console/wizards/WizardMgtPanel.java  |  96 ++-
 .../client/console/wizards/any/AuxClasses.java  |   3 +-
 .../provision/ProvisionWizardBuilder.java       | 253 --------
 .../resources/AbstractConnConfPanel.java        |  73 +++
 .../AbstractResourceWizardBuilder.java          |  82 +++
 .../wizards/resources/CapabilitiesPanel.java    |  43 ++
 .../resources/ConnCapabilitiesPanel.java        |  35 +
 .../wizards/resources/ConnectorConfPanel.java   | 117 ++++
 .../resources/ConnectorDetailsPanel.java        | 155 +++++
 .../resources/ConnectorWizardBuilder.java       | 145 +++++
 .../resources/ProvisionWizardBuilder.java       | 252 ++++++++
 .../ResourceConnCapabilitiesPanel.java          |  68 ++
 .../resources/ResourceConnConfPanel.java        | 123 ++++
 .../wizards/resources/ResourceDetailsPanel.java | 130 ++++
 .../wizards/resources/ResourceMappingPanel.java | 642 +++++++++++++++++++
 .../resources/ResourceProvisionPanel.java       | 118 ++++
 .../resources/ResourceSecurityPanel.java        | 137 ++++
 .../resources/ResourceWizardBuilder.java        | 144 +++++
 .../META-INF/resources/css/syncopeConsole.css   |  22 +-
 .../console/panels/AbstractConnConfPanel.html   |  33 -
 .../console/panels/AbstractResourceModal.html   |  23 -
 .../console/panels/ConnCapabilitiesPanel.html   |  23 -
 .../console/panels/ConnectorDetailsPanel.html   |  61 --
 .../console/panels/ConnectorModal.properties    |  45 --
 .../console/panels/ConnectorModal_it.properties |  45 --
 .../panels/ConnectorModal_pt_BR.properties      |  45 --
 .../console/panels/ConnectorModal_ru.properties |  73 ---
 .../panels/ResourceConnCapabilitiesPanel.html   |  29 -
 .../ResourceConnCapabilitiesPanel.properties    |  17 -
 .../ResourceConnCapabilitiesPanel_it.properties |  17 -
 ...sourceConnCapabilitiesPanel_pt_BR.properties |  17 -
 .../ResourceConnCapabilitiesPanel_ru.properties |  19 -
 .../console/panels/ResourceDetailsPanel.html    |  66 --
 .../console/panels/ResourceMappingPanel.html    |  86 ---
 .../console/panels/ResourceModal.properties     |  68 --
 .../console/panels/ResourceModal_it.properties  |  67 --
 .../panels/ResourceModal_pt_BR.properties       |  67 --
 .../console/panels/ResourceModal_ru.properties  | 115 ----
 .../console/panels/ResourceSecurityPanel.html   |  33 -
 .../panels/ResourceSecurityPanel.properties     |  19 -
 .../panels/ResourceSecurityPanel_it.properties  |  19 -
 .../ResourceSecurityPanel_pt_BR.properties      |  19 -
 .../panels/ResourceSecurityPanel_ru.properties  |  23 -
 .../client/console/panels/TogglePanel.html      |   9 +-
 .../client/console/wizards/WizardMgtPanel.html  |   7 +-
 .../ProvisionWizardBuilder$AuxClasses.html      |  23 -
 ...ProvisionWizardBuilder$AuxClasses.properties |  20 -
 ...visionWizardBuilder$AuxClasses_it.properties |  19 -
 ...ionWizardBuilder$AuxClasses_pt_BR.properties |  20 -
 .../ProvisionWizardBuilder$ConnObjectLink.html  |  30 -
 ...isionWizardBuilder$ConnObjectLink.properties |  20 -
 ...onWizardBuilder$ConnObjectLink_it.properties |  20 -
 ...izardBuilder$ConnObjectLink_pt_BR.properties |  20 -
 .../ProvisionWizardBuilder$Mapping.html         |  23 -
 .../ProvisionWizardBuilder$Mapping.properties   |  20 -
 ...ProvisionWizardBuilder$Mapping_it.properties |  19 -
 ...visionWizardBuilder$Mapping_pt_BR.properties |  20 -
 .../ProvisionWizardBuilder$ObjectType.html      |  31 -
 ...ProvisionWizardBuilder$ObjectType.properties |  24 -
 ...visionWizardBuilder$ObjectType_it.properties |  23 -
 ...ionWizardBuilder$ObjectType_pt_BR.properties |  23 -
 .../resources/AbstractConnConfPanel.html        |  36 ++
 .../resources/AbstractConnConfPanel.properties  |  18 +
 .../AbstractConnConfPanel_it.properties         |  18 +
 .../AbstractConnConfPanel_pt_BR.properties      |  18 +
 .../AbstractConnConfPanel_ru.properties         |  21 +
 .../wizards/resources/CapabilitiesPanel.html    |  23 +
 .../resources/ConnCapabilitiesPanel.html        |  23 +
 .../resources/ConnCapabilitiesPanel.properties  |  17 +
 .../ConnCapabilitiesPanel_it.properties         |  17 +
 .../ConnCapabilitiesPanel_pt_BR.properties      |  17 +
 .../ConnCapabilitiesPanel_ru.properties         |  19 +
 .../resources/ConnectorDetailsPanel.html        |  61 ++
 .../resources/ConnectorDetailsPanel.properties  |  26 +
 .../ConnectorDetailsPanel_it.properties         |  26 +
 .../ConnectorDetailsPanel_pt_BR.properties      |  26 +
 .../ConnectorDetailsPanel_ru.properties         |  37 ++
 .../ProvisionWizardBuilder$AuxClasses.html      |  23 +
 ...ProvisionWizardBuilder$AuxClasses.properties |  20 +
 ...visionWizardBuilder$AuxClasses_it.properties |  19 +
 ...ionWizardBuilder$AuxClasses_pt_BR.properties |  20 +
 .../ProvisionWizardBuilder$ConnObjectLink.html  |  30 +
 ...isionWizardBuilder$ConnObjectLink.properties |  20 +
 ...onWizardBuilder$ConnObjectLink_it.properties |  20 +
 ...izardBuilder$ConnObjectLink_pt_BR.properties |  20 +
 .../ProvisionWizardBuilder$Mapping.html         |  23 +
 .../ProvisionWizardBuilder$Mapping.properties   |  20 +
 ...ProvisionWizardBuilder$Mapping_it.properties |  19 +
 ...visionWizardBuilder$Mapping_pt_BR.properties |  20 +
 .../ProvisionWizardBuilder$ObjectType.html      |  31 +
 ...ProvisionWizardBuilder$ObjectType.properties |  24 +
 ...visionWizardBuilder$ObjectType_it.properties |  23 +
 ...ionWizardBuilder$ObjectType_pt_BR.properties |  23 +
 .../ResourceConnCapabilitiesPanel.html          |  29 +
 .../ResourceConnCapabilitiesPanel.properties    |  18 +
 .../ResourceConnCapabilitiesPanel_it.properties |  18 +
 ...sourceConnCapabilitiesPanel_pt_BR.properties |  18 +
 .../ResourceConnCapabilitiesPanel_ru.properties |  20 +
 .../wizards/resources/ResourceDetailsPanel.html |  63 ++
 .../resources/ResourceDetailsPanel.properties   |  26 +
 .../ResourceDetailsPanel_it.properties          |  26 +
 .../ResourceDetailsPanel_pt_BR.properties       |  26 +
 .../ResourceDetailsPanel_ru.properties          |  35 +
 .../wizards/resources/ResourceMappingPanel.html |  86 +++
 .../resources/ResourceProvisionPanel.html       |  23 +
 .../resources/ResourceProvisionPanel.properties |  41 ++
 .../ResourceProvisionPanel_it.properties        |  41 ++
 .../ResourceProvisionPanel_pt_BR.properties     |  41 ++
 .../ResourceProvisionPanel_ru.properties        |  65 ++
 .../resources/ResourceSecurityPanel.html        |  33 +
 .../resources/ResourceSecurityPanel.properties  |  19 +
 .../ResourceSecurityPanel_it.properties         |  19 +
 .../ResourceSecurityPanel_pt_BR.properties      |  19 +
 .../ResourceSecurityPanel_ru.properties         |  23 +
 .../fit/console/AbstractTypesITCase.java        |  40 +-
 .../syncope/fit/console/AnyObjectsITCase.java   |  22 +-
 .../fit/console/AnyTypeClassesITCase.java       |  21 +-
 .../syncope/fit/console/AnyTypesITCase.java     |  22 +-
 .../syncope/fit/console/BulkActionITCase.java   |  66 +-
 .../fit/console/DisplayAttributesITCase.java    |   9 +-
 .../syncope/fit/console/GroupsITCase.java       |  32 +-
 .../fit/console/NotificationsITCase.java        |  27 +-
 .../syncope/fit/console/ParametersITCase.java   |  14 +-
 .../fit/console/RelationshipTypeITCase.java     |   7 +-
 .../apache/syncope/fit/console/RolesITCase.java |  14 +-
 .../syncope/fit/console/SchemasITCase.java      |  23 +-
 .../fit/console/SecurityQuestionsITCase.java    |  15 +-
 .../syncope/fit/console/TopologyITCase.java     |  53 +-
 .../apache/syncope/fit/console/UsersITCase.java |  32 +-
 154 files changed, 4168 insertions(+), 4033 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
index d440141..86be57d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.notifications;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -34,6 +35,7 @@ import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.rest.NotificationRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 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.wizards.AbstractModalPanelBuilder;
@@ -58,10 +60,15 @@ public class MailTemplateDirectoryPanel
 
     private static final long serialVersionUID = -3789392431954221446L;
 
+    protected final BaseModal<Serializable> utilityModal = new BaseModal<>("outer");
+
     public MailTemplateDirectoryPanel(final String id, final PageReference pageReference) {
         super(id, pageReference, true);
         disableCheckBoxes();
 
+        addOuterObject(utilityModal);
+        setWindowClosedReloadCallback(utilityModal);
+
         modal.size(Modal.Size.Small);
         modal.addSumbitButton();
         setFooterVisibility(true);
@@ -132,7 +139,7 @@ public class MailTemplateDirectoryPanel
                                         model.getObject().getKey(), MailTemplateFormat.TEXT);
                         content.setContent(
                                 restClient.readTemplateFormat(model.getObject().getKey(), MailTemplateFormat.TEXT));
-                        
+
                         utilityModal.setFormModel(content);
                         utilityModal.header(new ResourceModel("mail.template.text", "TEXT Content"));
                         utilityModal.setContent(new MailTemplateContentModal(utilityModal, content, pageRef));

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
index f35f109..a7aab9d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.notifications;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -34,6 +35,7 @@ import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.rest.NotificationRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.CollectionPropertyColumn;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 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.wizards.AjaxWizard;
@@ -57,10 +59,15 @@ public class NotificationDirectoryPanel
 
     private static final long serialVersionUID = -3789392431954221446L;
 
+    protected final BaseModal<Serializable> utilityModal = new BaseModal<>("outer");
+
     public NotificationDirectoryPanel(final String id, final PageReference pageReference) {
         super(id, pageReference, true);
         disableCheckBoxes();
 
+        addOuterObject(utilityModal);
+        setWindowClosedReloadCallback(utilityModal);
+
         modal.size(Modal.Size.Large);
         altDefaultModal.size(Modal.Size.Large);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractConnConfPanel.java
deleted file mode 100644
index e726642..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractConnConfPanel.java
+++ /dev/null
@@ -1,102 +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.client.console.panels;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-import org.apache.syncope.client.console.wicket.markup.html.list.ConnConfPropertyListView;
-import org.apache.syncope.common.lib.AbstractBaseBean;
-import org.apache.syncope.common.lib.types.ConnConfProperty;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxButton;
-import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
-
-public abstract class AbstractConnConfPanel<T extends AbstractBaseBean> extends Panel {
-
-    private static final long serialVersionUID = -2025535531121434050L;
-
-    protected final WebMarkupContainer propertiesContainer;
-
-    protected final AjaxButton check;
-
-    protected final IModel<T> model;
-
-    public AbstractConnConfPanel(final String id, final IModel<T> model) {
-        super(id, model);
-        this.model = model;
-        setOutputMarkupId(true);
-
-        propertiesContainer = new WebMarkupContainer("connectorPropertiesContainer");
-        propertiesContainer.setOutputMarkupId(true);
-        add(propertiesContainer);
-
-        check = new IndicatingAjaxButton("check", new ResourceModel("check")) {
-
-            private static final long serialVersionUID = -7978723352517770644L;
-
-            @Override
-            public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-                check(target);
-            }
-        };
-        propertiesContainer.add(check);
-    }
-
-    protected void setConfPropertyListView(final String modelExpression, final boolean withOverridable) {
-        propertiesContainer.add(new ConnConfPropertyListView(
-                "connectorProperties",
-                new PropertyModel<List<ConnConfProperty>>(model.getObject(), modelExpression) {
-
-            private static final long serialVersionUID = -7809699384012595307L;
-
-            @Override
-            public List<ConnConfProperty> getObject() {
-                final List<ConnConfProperty> res = new ArrayList<>((Set<ConnConfProperty>) super.getObject());
-
-                // re-order properties
-                Collections.sort(res, new Comparator<ConnConfProperty>() {
-
-                    @Override
-                    public int compare(final ConnConfProperty left, final ConnConfProperty right) {
-                        if (left == null) {
-                            return -1;
-                        } else {
-                            return left.compareTo(right);
-                        }
-                    }
-                });
-
-                return res;
-            }
-        }, withOverridable).setOutputMarkupId(true));
-    }
-
-    protected abstract void check(final AjaxRequestTarget taget);
-
-    protected abstract List<ConnConfProperty> getConnProperties(final T instance);
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java
deleted file mode 100644
index 875f090..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java
+++ /dev/null
@@ -1,125 +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.client.console.panels;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.topology.TopologyNode;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal.ModalEvent;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
-import org.apache.wicket.extensions.markup.html.tabs.ITab;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.Form;
-
-/**
- * Modal window with Resource form.
- *
- * @param <T>
- */
-public abstract class AbstractResourceModal<T extends Serializable> extends AbstractModalPanel<T> {
-
-    private static final long serialVersionUID = 1734415311027284221L;
-
-    protected final List<ITab> tabs;
-
-    public AbstractResourceModal(final BaseModal<T> modal, final PageReference pageRef) {
-        super(modal, pageRef);
-
-        this.tabs = new ArrayList<>();
-        add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", tabs));
-    }
-
-    private class AjaxBootstrapTabbedPanel<T extends ITab>
-            extends de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel<T> {
-
-        private static final long serialVersionUID = 1L;
-
-        AjaxBootstrapTabbedPanel(final String id, final List<T> tabs) {
-            super(id, tabs);
-        }
-
-        @Override
-        protected WebMarkupContainer newLink(final String linkId, final int index) {
-            return new AjaxSubmitLink(linkId) {
-
-                private static final long serialVersionUID = 530608535790823587L;
-
-                @Override
-                protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-                    setSelectedTab(index);
-                    if (target != null) {
-                        target.add(AjaxBootstrapTabbedPanel.this);
-                    }
-                    onAjaxUpdate(target);
-                }
-
-                @Override
-                protected void onError(final AjaxRequestTarget target, final Form<?> form) {
-                    SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
-                }
-            };
-        }
-
-    }
-
-    public static class CreateEvent extends ModalEvent {
-
-        private final Serializable key;
-
-        private final String displayName;
-
-        private final Serializable parent;
-
-        private final TopologyNode.Kind kind;
-
-        public CreateEvent(
-                final Serializable key,
-                final String displayName,
-                final TopologyNode.Kind kind,
-                final Serializable parent,
-                final AjaxRequestTarget target) {
-            super(target);
-            this.key = key;
-            this.displayName = displayName;
-            this.kind = kind;
-            this.parent = parent;
-        }
-
-        public Serializable getKey() {
-            return key;
-        }
-
-        public String getDisplayName() {
-            return displayName;
-        }
-
-        public TopologyNode.Kind getKind() {
-            return kind;
-        }
-
-        public Serializable getParent() {
-            return parent;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index e8c1306..4c2d7bf 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -31,6 +31,7 @@ import org.apache.syncope.client.console.commons.status.ConnObjectWrapper;
 import org.apache.syncope.client.console.commons.status.StatusBean;
 import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
 import org.apache.syncope.client.console.rest.SchemaRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wizards.any.AnyHandler;
 import org.apache.syncope.client.console.wizards.any.StatusPanel;
@@ -70,12 +71,17 @@ public abstract class AnyDirectoryPanel<T extends AnyTO>
      */
     protected final String type;
 
+    protected final BaseModal<Serializable> utilityModal = new BaseModal<>("outer");
+
     protected AnyDirectoryPanel(final String id, final Builder<T> builder) {
         super(id, builder);
         this.realm = builder.realm;
         this.type = builder.type;
         this.fiql = builder.fiql;
 
+        addOuterObject(utilityModal);
+        setWindowClosedReloadCallback(utilityModal);
+
         modal.size(Modal.Size.Large);
         altDefaultModal.size(Modal.Size.Large);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.java
deleted file mode 100644
index 3fa735b..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.java
+++ /dev/null
@@ -1,47 +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.client.console.panels;
-
-import java.util.Arrays;
-import java.util.List;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
-import org.apache.syncope.common.lib.types.ConnectorCapability;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.util.ListModel;
-
-public class ConnCapabilitiesPanel extends Panel {
-
-    private static final long serialVersionUID = -2025535531121434050L;
-
-    public ConnCapabilitiesPanel(final String id, final PropertyModel<List<ConnectorCapability>> model) {
-        super(id, model);
-        setOutputMarkupId(true);
-
-        AjaxPalettePanel<ConnectorCapability> capabilitiesPalette =
-                new AjaxPalettePanel.Builder<ConnectorCapability>().
-                setAllowMoveAll(true).
-                build("capabilitiesPalette",
-                        model,
-                        new ListModel<>(Arrays.asList(ConnectorCapability.values())));
-        capabilitiesPalette.hideLabel();
-        capabilitiesPalette.setOutputMarkupId(true);
-        add(capabilitiesPalette);
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorConfPanel.java
deleted file mode 100644
index a443cd6..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorConfPanel.java
+++ /dev/null
@@ -1,80 +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.client.console.panels;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
-import org.apache.syncope.common.lib.to.ConnBundleTO;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.common.lib.types.ConnConfPropSchema;
-import org.apache.syncope.common.lib.types.ConnConfProperty;
-import org.apache.wicket.model.IModel;
-
-public abstract class ConnectorConfPanel extends AbstractConnConfPanel<ConnInstanceTO> {
-
-    private static final long serialVersionUID = -2025535531121434050L;
-
-    private final List<ConnBundleTO> bundles;
-
-    public ConnectorConfPanel(final String id, final IModel<ConnInstanceTO> model, final List<ConnBundleTO> bundles) {
-        super(id, model);
-        this.bundles = bundles;
-
-        List<ConnConfProperty> properties = getConnProperties(model.getObject());
-        model.getObject().getConf().clear();
-        model.getObject().getConf().addAll(properties);
-
-        setConfPropertyListView("conf", true);
-    }
-
-    /**
-     * Get available configuration properties.
-     *
-     * @param instance connector instance.
-     * @return configuration properties.
-     */
-    @Override
-    protected final List<ConnConfProperty> getConnProperties(final ConnInstanceTO instance) {
-        return CollectionUtils.collect(
-                ConnectorModal.getBundle(instance, bundles).getProperties(),
-                new Transformer<ConnConfPropSchema, ConnConfProperty>() {
-
-            @Override
-            public ConnConfProperty transform(final ConnConfPropSchema key) {
-                final ConnConfProperty property = new ConnConfProperty();
-                property.setSchema(key);
-
-                if (instance.getKey() != null
-                        && instance.getConfMap().containsKey(key.getName())
-                        && instance.getConfMap().get(key.getName()).getValues() != null) {
-
-                    property.getValues().addAll(instance.getConfMap().get(key.getName()).getValues());
-                    property.setOverridable(instance.getConfMap().get(key.getName()).isOverridable());
-                }
-
-                if (property.getValues().isEmpty() && !key.getDefaultValues().isEmpty()) {
-                    property.getValues().addAll(key.getDefaultValues());
-                }
-                return property;
-            }
-        }, new ArrayList<ConnConfProperty>());
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
deleted file mode 100644
index 39c56bd..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
+++ /dev/null
@@ -1,157 +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.client.console.panels;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.collections4.Transformer;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSpinnerFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
-import org.apache.syncope.common.lib.to.ConnBundleTO;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.common.lib.to.ConnPoolConfTO;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-
-public class ConnectorDetailsPanel extends Panel {
-
-    private static final long serialVersionUID = -2435937897614232137L;
-
-    public ConnectorDetailsPanel(
-            final String id, final IModel<ConnInstanceTO> model, final List<ConnBundleTO> bundles) {
-
-        super(id, model);
-        setOutputMarkupId(true);
-
-        AjaxTextFieldPanel displayName = new AjaxTextFieldPanel(
-                "displayName", "displayName", new PropertyModel<String>(model.getObject(), "displayName"), false);
-        displayName.setOutputMarkupId(true);
-        displayName.addRequiredLabel();
-        add(displayName);
-
-        AjaxTextFieldPanel location = new AjaxTextFieldPanel(
-                "location", "location", new PropertyModel<String>(model.getObject(), "location"), false);
-        location.addRequiredLabel();
-        location.setOutputMarkupId(true);
-        location.setEnabled(false);
-        add(location);
-
-        final AjaxDropDownChoicePanel<String> bundleName = new AjaxDropDownChoicePanel<>(
-                "bundleName",
-                "bundleName",
-                new PropertyModel<String>(model.getObject(), "bundleName"), false);
-        ((DropDownChoice<String>) bundleName.getField()).setNullValid(true);
-        bundleName.setChoices(CollectionUtils.collect(bundles, new Transformer<ConnBundleTO, String>() {
-
-            @Override
-            public String transform(final ConnBundleTO input) {
-                return input.getBundleName();
-            }
-        }, new ArrayList<String>()));
-        bundleName.addRequiredLabel();
-        bundleName.setOutputMarkupId(true);
-        bundleName.setEnabled(model.getObject().getKey() == null || model.getObject().getKey() == 0);
-        bundleName.getField().setOutputMarkupId(true);
-        add(bundleName);
-
-        final AjaxDropDownChoicePanel<String> version = new AjaxDropDownChoicePanel<>(
-                "version", "version", new PropertyModel<String>(model.getObject(), "version"), false);
-        version.setChoices(getVersions(model.getObject(), bundles));
-        version.addRequiredLabel();
-        version.setEnabled(model.getObject().getBundleName() != null);
-        version.setOutputMarkupId(true);
-        version.getField().setOutputMarkupId(true);
-        add(version);
-
-        bundleName.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-            private static final long serialVersionUID = -1107858522700306810L;
-
-            @Override
-            protected void onUpdate(final AjaxRequestTarget target) {
-                ((DropDownChoice<String>) bundleName.getField()).setNullValid(false);
-                version.setEnabled(true);
-
-                List<String> versions = getVersions(model.getObject(), bundles);
-                if (versions.size() == 1) {
-                    model.getObject().setVersion(versions.get(0));
-                    version.getField().setModelObject(versions.get(0));
-                }
-                version.setChoices(versions);
-
-                target.add(version);
-            }
-        });
-
-        if (model.getObject().getPoolConf() == null) {
-            model.getObject().setPoolConf(new ConnPoolConfTO());
-        }
-
-        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
-                "connRequestTimeout", "connRequestTimeout", Integer.class,
-                new PropertyModel<Integer>(model, "connRequestTimeout")));
-
-        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
-                "poolMaxObjects", "poolMaxObjects", Integer.class,
-                new PropertyModel<Integer>(model.getObject().getPoolConf(), "maxObjects")));
-
-        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
-                "poolMinIdle", "poolMinIdle", Integer.class,
-                new PropertyModel<Integer>(model.getObject().getPoolConf(), "minIdle")));
-
-        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
-                "poolMaxIdle", "poolMaxIdle", Integer.class,
-                new PropertyModel<Integer>(model.getObject().getPoolConf(), "maxIdle")));
-
-        add(new AjaxSpinnerFieldPanel.Builder<Long>().min(0L).max(Long.MAX_VALUE).build(
-                "poolMaxWait", "poolMaxWait", Long.class,
-                new PropertyModel<Long>(model.getObject().getPoolConf(), "maxWait")));
-
-        add(new AjaxSpinnerFieldPanel.Builder<Long>().min(0L).max(Long.MAX_VALUE).build(
-                "poolMinEvictableIdleTime", "poolMinEvictableIdleTime", Long.class,
-                new PropertyModel<Long>(model.getObject().getPoolConf(), "minEvictableIdleTimeMillis")));
-    }
-
-    private List<String> getVersions(final ConnInstanceTO connInstanceTO, final List<ConnBundleTO> bundles) {
-        return new ArrayList<>(CollectionUtils.collect(
-                CollectionUtils.select(bundles, new Predicate<ConnBundleTO>() {
-
-                    @Override
-                    public boolean evaluate(final ConnBundleTO object) {
-                        return object.getLocation().equals(connInstanceTO.getLocation())
-                                && object.getBundleName().equals(connInstanceTO.getBundleName());
-                    }
-                }), new Transformer<ConnBundleTO, String>() {
-
-            @Override
-            public String transform(final ConnBundleTO input) {
-                return input.getVersion();
-            }
-        }, new HashSet<String>()));
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/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
deleted file mode 100644
index 4ebfdc0..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java
+++ /dev/null
@@ -1,194 +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.client.console.panels;
-
-import java.io.Serializable;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.rest.ConnectorRestClient;
-import org.apache.syncope.client.console.topology.TopologyNode;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.ConnBundleTO;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.common.lib.types.ConnectorCapability;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.event.Broadcast;
-import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
-import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
-
-/**
- * Modal window with Connector form.
- */
-public class ConnectorModal extends AbstractResourceModal<Serializable> {
-
-    private static final long serialVersionUID = -2025535531121434050L;
-
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
-    private final List<ConnBundleTO> bundles;
-
-    public ConnectorModal(
-            final BaseModal<Serializable> modal,
-            final PageReference pageRef,
-            final IModel<ConnInstanceTO> model) {
-
-        super(modal, pageRef);
-
-        this.bundles = CollectionUtils.select(connectorRestClient.getAllBundles(), new Predicate<ConnBundleTO>() {
-
-            @Override
-            public boolean evaluate(final ConnBundleTO object) {
-                return object.getLocation().equals(model.getObject().getLocation());
-            }
-        }, new ArrayList<ConnBundleTO>());
-
-        //--------------------------------
-        // Connector details
-        //--------------------------------
-        tabs.add(new AbstractTab(new ResourceModel("general")) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new ConnectorDetailsPanel(panelId, model, bundles);
-            }
-        });
-        //--------------------------------
-
-        //--------------------------------
-        // Connector configuration
-        //--------------------------------
-        tabs.add(new AbstractTab(new ResourceModel("configuration")) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new ConnectorConfPanel(panelId, model, bundles) {
-
-                    private static final long serialVersionUID = -5886691077681158494L;
-
-                    @Override
-                    protected void check(final AjaxRequestTarget target) {
-                        if (connectorRestClient.check(model.getObject())) {
-                            info(getString(Constants.OPERATION_SUCCEEDED));
-                        } else {
-                            error(getString("error_connection"));
-                        }
-                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
-                    }
-
-                    @Override
-                    protected void onComponentTag(final ComponentTag tag) {
-                        tag.append("class", "scrollable-tab-content", " ");
-                    }
-
-                };
-            }
-        });
-        //--------------------------------
-
-        //--------------------------------
-        // Connector capabilities
-        //--------------------------------
-        tabs.add(new AbstractTab(new ResourceModel("capabilities")) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new ConnCapabilitiesPanel(
-                        panelId, new PropertyModel<List<ConnectorCapability>>(model.getObject(), "capabilities"));
-            }
-        });
-        //--------------------------------
-    }
-
-    @Override
-    public void onError(final AjaxRequestTarget target, final Form<?> form) {
-        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
-    }
-
-    @Override
-    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-        final ConnInstanceTO connInstanceTO = (ConnInstanceTO) form.getModelObject();
-
-        final ConnBundleTO bundleTO = ConnectorModal.getBundle(connInstanceTO, bundles);
-
-        connInstanceTO.setConnectorName(bundleTO.getConnectorName());
-        connInstanceTO.setBundleName(bundleTO.getBundleName());
-        connInstanceTO.setVersion(bundleTO.getVersion());
-
-        // Reset pool configuration if all fields are null
-        if (connInstanceTO.getPoolConf() != null
-                && connInstanceTO.getPoolConf().getMaxIdle() == null
-                && connInstanceTO.getPoolConf().getMaxObjects() == null
-                && connInstanceTO.getPoolConf().getMaxWait() == null
-                && connInstanceTO.getPoolConf().getMinEvictableIdleTimeMillis() == null
-                && connInstanceTO.getPoolConf().getMinIdle() == null) {
-
-            connInstanceTO.setPoolConf(null);
-        }
-
-        try {
-            if (connInstanceTO.getKey() == null || connInstanceTO.getKey() == 0) {
-                final ConnInstanceTO actual = connectorRestClient.create(connInstanceTO);
-                send(pageRef.getPage(), Broadcast.BREADTH, new CreateEvent(
-                        actual.getKey(),
-                        actual.getDisplayName(),
-                        TopologyNode.Kind.CONNECTOR,
-                        URI.create(actual.getLocation()).toASCIIString(),
-                        target));
-            } else {
-                connectorRestClient.update(connInstanceTO);
-            }
-            modal.close(target);
-            info(getString(Constants.OPERATION_SUCCEEDED));
-        } catch (Exception e) {
-            LOG.error("Failure managing {}", connInstanceTO, e);
-            error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
-        }
-        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
-    }
-
-    protected static ConnBundleTO getBundle(final ConnInstanceTO connInstanceTO, final List<ConnBundleTO> bundles) {
-        return IterableUtils.find(bundles, new Predicate<ConnBundleTO>() {
-
-            @Override
-            public boolean evaluate(final ConnBundleTO bundle) {
-                return bundle.getBundleName().equals(connInstanceTO.getBundleName())
-                        && bundle.getVersion().equals(connInstanceTO.getVersion());
-            }
-        });
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
index b2b3b7f..bd2e3f1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
@@ -35,7 +35,6 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.event.IEvent;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
@@ -96,6 +95,10 @@ public abstract class DirectoryPanel<
 
     protected String itemKeyFieldName = "key";
 
+    protected final BaseModal<W> altDefaultModal = new BaseModal<>("outer");
+
+    protected final BaseModal<W> displayAttributeModal = new BaseModal<>("outer");
+
     /**
      * Create simple unfiltered search result panel.
      * Use the available builder for powerfull configuration options.
@@ -128,6 +131,9 @@ public abstract class DirectoryPanel<
         super(id, wizardInModal);
         setOutputMarkupId(true);
 
+        addOuterObject(altDefaultModal);
+        addOuterObject(displayAttributeModal);
+
         this.page = (BasePage) builder.getPageRef().getPage();
 
         this.filtered = builder.filtered;
@@ -146,11 +152,9 @@ public abstract class DirectoryPanel<
         setWindowClosedReloadCallback(modal);
         setWindowClosedReloadCallback(altDefaultModal);
         setWindowClosedReloadCallback(displayAttributeModal);
-        setWindowClosedReloadCallback(utilityModal);
 
         altDefaultModal.size(Modal.Size.Medium);
         displayAttributeModal.size(Modal.Size.Medium);
-        utilityModal.size(Modal.Size.Large);
     }
 
     protected abstract DP dataProvider();
@@ -261,22 +265,12 @@ public abstract class DirectoryPanel<
         super.onEvent(event);
     }
 
-    protected void setWindowClosedReloadCallback(final BaseModal<?> modal) {
-        modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
-
-            private static final long serialVersionUID = 8804221891699487139L;
-
-            @Override
-            public void onClose(final AjaxRequestTarget target) {
-                modal.show(false);
-
-                final EventDataWrapper data = new EventDataWrapper();
-                data.setTarget(target);
-                data.setRows(rows);
-
-                send(getParent(), Broadcast.BREADTH, data);
-            }
-        });
+    @Override
+    protected void customActionOnCloseCallback(final AjaxRequestTarget target) {
+        final EventDataWrapper data = new EventDataWrapper();
+        data.setTarget(target);
+        data.setRows(rows);
+        send(getParent(), Broadcast.BREADTH, data);
     }
 
     public static class EventDataWrapper {

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.java
deleted file mode 100644
index 0f73261..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.java
+++ /dev/null
@@ -1,71 +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.client.console.panels;
-
-import java.util.List;
-import java.util.Set;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.common.lib.types.ConnectorCapability;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
-
-public class ResourceConnCapabilitiesPanel extends Panel {
-
-    private static final long serialVersionUID = -114632577031611754L;
-
-    public ResourceConnCapabilitiesPanel(
-            final String id, final IModel<ResourceTO> model, final Set<ConnectorCapability> connectorCapabilities) {
-
-        super(id, model);
-        setOutputMarkupId(true);
-
-        if (!model.getObject().isOverrideCapabilities() && model.getObject().getCapabilitiesOverride().isEmpty()) {
-            model.getObject().getCapabilitiesOverride().addAll(connectorCapabilities);
-        }
-
-        final ConnCapabilitiesPanel connCapabilitiesPanel = new ConnCapabilitiesPanel(
-                "capabilitiesOverride",
-                new PropertyModel<List<ConnectorCapability>>(model.getObject(), "capabilitiesOverride"));
-        connCapabilitiesPanel.setEnabled(model.getObject().isOverrideCapabilities());
-        add(connCapabilitiesPanel);
-
-        final AjaxCheckBoxPanel overrideCapabilities = new AjaxCheckBoxPanel(
-                "overrideCapabilities",
-                new ResourceModel("overrideCapabilities", "overrideCapabilities").getObject(),
-                new PropertyModel<Boolean>(model, "overrideCapabilities"));
-        overrideCapabilities.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-            private static final long serialVersionUID = -1107858522700306810L;
-
-            @Override
-            protected void onUpdate(final AjaxRequestTarget target) {
-                connCapabilitiesPanel.setEnabled(overrideCapabilities.getField().getModelObject());
-                target.add(ResourceConnCapabilitiesPanel.this);
-            }
-        });
-        add(overrideCapabilities);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
deleted file mode 100644
index 50a9ff3..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
+++ /dev/null
@@ -1,87 +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.client.console.panels;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.syncope.client.console.rest.ConnectorRestClient;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.common.lib.types.ConnConfProperty;
-import org.apache.wicket.model.IModel;
-
-public abstract class ResourceConnConfPanel extends AbstractConnConfPanel<ResourceTO> {
-
-    private static final long serialVersionUID = -7982691107029848579L;
-
-    private final ConnectorRestClient restClient = new ConnectorRestClient();
-
-    private final boolean createFlag;
-
-    public ResourceConnConfPanel(final String id, final IModel<ResourceTO> model, final boolean createFlag) {
-        super(id, model);
-
-        this.createFlag = createFlag;
-
-        final List<ConnConfProperty> confOverride = getConnProperties(model.getObject());
-        model.getObject().getConfOverride().clear();
-        model.getObject().getConfOverride().addAll(confOverride);
-
-        setConfPropertyListView("confOverride", false);
-
-        check.setEnabled(!confOverride.isEmpty());
-        check.setVisible(!confOverride.isEmpty());
-    }
-
-    /**
-     * Get overridable properties.
-     *
-     * @param resourceTO resource instance.
-     * @return overridable properties.
-     */
-    @Override
-    protected final List<ConnConfProperty> getConnProperties(final ResourceTO resourceTO) {
-        List<ConnConfProperty> props = new ArrayList<>();
-
-        if (resourceTO.getConnector() != null && resourceTO.getConnector() > 0) {
-            for (ConnConfProperty property : restClient.read(resourceTO.getConnector()).getConf()) {
-                if (property.isOverridable()) {
-                    props.add(property);
-                }
-            }
-        }
-        if (createFlag || resourceTO.getConfOverride().isEmpty()) {
-            resourceTO.getConfOverride().clear();
-        } else {
-            Map<String, ConnConfProperty> valuedProps = new HashMap<>();
-            for (ConnConfProperty prop : resourceTO.getConfOverride()) {
-                valuedProps.put(prop.getSchema().getName(), prop);
-            }
-
-            for (int i = 0; i < props.size(); i++) {
-                if (valuedProps.containsKey(props.get(i).getSchema().getName())) {
-                    props.set(i, valuedProps.get(props.get(i).getSchema().getName()));
-                }
-            }
-        }
-
-        return props;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
deleted file mode 100644
index 117888d..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
+++ /dev/null
@@ -1,136 +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.client.console.panels;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSpinnerFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
-import org.apache.syncope.client.console.wizards.any.AnnotatedBeanPanel;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.common.lib.types.TraceLevel;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
-import org.apache.wicket.model.util.ListModel;
-
-public class ResourceDetailsPanel extends Panel {
-
-    private static final long serialVersionUID = -7982691107029848579L;
-
-    private final IModel<List<String>> propagationActionsClasses = new LoadableDetachableModel<List<String>>() {
-
-        private static final long serialVersionUID = 5275935387613157437L;
-
-        @Override
-        protected List<String> load() {
-            return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getPropagationActions());
-        }
-    };
-
-    public ResourceDetailsPanel(
-            final String id,
-            final IModel<ResourceTO> model,
-            final boolean createFlag) {
-
-        super(id);
-        setOutputMarkupId(true);
-
-        final WebMarkupContainer container = new WebMarkupContainer("container");
-        container.setOutputMarkupId(true);
-        container.setRenderBodyOnly(true);
-        add(container);
-
-        container.add(new AjaxTextFieldPanel(
-                "name",
-                new ResourceModel("name", "name").
-                getObject(),
-                new PropertyModel<String>(model, "key"),
-                false).addRequiredLabel().setEnabled(createFlag));
-
-        container.add(new AjaxCheckBoxPanel(
-                "enforceMandatoryCondition",
-                new ResourceModel("enforceMandatoryCondition", "enforceMandatoryCondition").getObject(),
-                new PropertyModel<Boolean>(model, "enforceMandatoryCondition"),
-                false));
-
-        container.add(new AjaxSpinnerFieldPanel.Builder<Integer>().build(
-                "propagationPriority",
-                "propagationPriority",
-                Integer.class,
-                new PropertyModel<Integer>(model, "propagationPriority")));
-
-        container.add(new AjaxCheckBoxPanel("randomPwdIfNotProvided",
-                new ResourceModel("randomPwdIfNotProvided", "randomPwdIfNotProvided").getObject(),
-                new PropertyModel<Boolean>(model, "randomPwdIfNotProvided"),
-                false));
-
-        container.add(new AjaxPalettePanel.Builder<String>().
-                setAllowMoveAll(true).setAllowOrder(true).
-                build("propagationActionsClassNames",
-                        new PropertyModel<List<String>>(model, "propagationActionsClassNames"),
-                        new ListModel<>(propagationActionsClasses.getObject())).
-                setOutputMarkupId(true));
-
-        container.add(new AjaxDropDownChoicePanel<>(
-                "createTraceLevel",
-                new ResourceModel("createTraceLevel", "createTraceLevel").getObject(),
-                new PropertyModel<TraceLevel>(model, "createTraceLevel"),
-                false).
-                setChoices(Arrays.asList(TraceLevel.values())));
-
-        container.add(new AjaxDropDownChoicePanel<>(
-                "updateTraceLevel",
-                new ResourceModel("updateTraceLevel", "updateTraceLevel").getObject(),
-                new PropertyModel<TraceLevel>(model, "updateTraceLevel"),
-                false).
-                setChoices(Arrays.asList(TraceLevel.values())));
-
-        container.add(new AjaxDropDownChoicePanel<>(
-                "deleteTraceLevel",
-                new ResourceModel("deleteTraceLevel", "deleteTraceLevel").getObject(),
-                new PropertyModel<TraceLevel>(model, "deleteTraceLevel"),
-                false).
-                setChoices(Arrays.asList(TraceLevel.values())));
-
-        container.add(new AjaxDropDownChoicePanel<>(
-                "pullTraceLevel",
-                new ResourceModel("pullTraceLevel", "pullTraceLevel").getObject(),
-                new PropertyModel<TraceLevel>(model, "pullTraceLevel"),
-                false).
-                setChoices(Arrays.asList(TraceLevel.values())));
-
-        container.add(new AjaxTextFieldPanel(
-                "connector",
-                new ResourceModel("connector", "connector").getObject(),
-                new Model<>(model.getObject().getConnectorDisplayName()),
-                false).addRequiredLabel().setEnabled(false));
-
-        add(new AnnotatedBeanPanel("systeminformation", model.getObject()).setRenderBodyOnly(true));
-    }
-}


Mime
View raw message