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 2016/04/18 10:05:53 UTC

[1/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors

Repository: syncope
Updated Branches:
  refs/heads/master a25e923bc -> 1735c44c1


http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
index 557b4f1..88ae5b2 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
@@ -70,7 +70,7 @@ public class AnyObjectsITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:3:cell:panelClone:cloneLink");
 
-        FormTester formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        FormTester formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
 
         formTester.submit("buttons:cancel");
@@ -87,38 +87,38 @@ public class AnyObjectsITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:3:cell:panelEdit:editLink");
 
-        wicketTester.assertComponent(tabPanel + "modal:form:content:form:view:status:resources:firstLevelContainer:"
-                + "first:container:content:group:beans:0:fields:0", ListItem.class);
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:0:outer:form:content:form:view:status:"
+                + "resources:firstLevelContainer:first:container:content:group:beans:0:fields:0", ListItem.class);
 
-        FormTester formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        FormTester formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
         wicketTester.cleanupFeedbackMessages();
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:finish");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.assertComponent(tabPanel
-                + "modal:form:content:customResultBody:resources:firstLevelContainer:first:container:content:"
-                + "group:beans:0:fields:0:field", Label.class);
+                + "outerObjectsRepeater:0:outer:form:content:customResultBody:resources:"
+                + "firstLevelContainer:first:container:content:group:beans:0:fields:0:field", Label.class);
 
-        wicketTester.clickLink(tabPanel + "modal:form:content:action:panelClose:closeLink");
+        wicketTester.clickLink(tabPanel + "outerObjectsRepeater:0:outer:form:content:action:panelClose:closeLink");
 
         component = findComponentByProp("key", searchResultContainer
                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 1L);

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypeClassesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypeClassesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypeClassesITCase.java
index e1c0697..eeeeaf9 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypeClassesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypeClassesITCase.java
@@ -47,12 +47,11 @@ public class AnyTypeClassesITCase extends AbstractTypesITCase {
 
         wicketTester.assertComponent(
                 result.getPageRelativePath() + ":cells:6:cell:panelEdit:editLink", IndicatingAjaxLink.class);
-
-        wicketTester.clickLink(
-                result.getPageRelativePath() + ":cells:6:cell:panelEdit:editLink");
+        
+        wicketTester.clickLink(result.getPageRelativePath() + ":cells:6:cell:panelEdit:editLink");
 
         wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", BaseModal.class);
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", BaseModal.class);
     }
 
     @Test
@@ -63,14 +62,16 @@ public class AnyTypeClassesITCase extends AbstractTypesITCase {
         wicketTester.clickLink("body:content:tabbedPanel:panel:container:content:add");
 
         wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", Modal.class);
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", Modal.class);
 
-        final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        final FormTester formTester
+                = wicketTester.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:anyTypeClassDetailsPanel:form:key:textField", anyTypeClassTest);
         formTester.setValue(
                 "content:anyTypeClassDetailsPanel:form:container:derSchemas:paletteField:recorder", "mderiveddata");
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.clearFeedbackMessages();
@@ -102,11 +103,13 @@ public class AnyTypeClassesITCase extends AbstractTypesITCase {
                 DATATABLE_PATH
                 + ":tablePanel:groupForm:checkgroup:dataTable:body:rows:1:cells:6:cell:panelEdit:editLink");
 
-        final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        final FormTester formTester
+                = wicketTester.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue(
                 "content:anyTypeClassDetailsPanel:form:container:plainSchemas:paletteField:recorder", plainSchema);
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypesITCase.java
index fc07ea5..40ffdf3 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyTypesITCase.java
@@ -53,8 +53,7 @@ public class AnyTypesITCase extends AbstractTypesITCase {
         wicketTester.clickLink(
                 result.getPageRelativePath() + ":cells:4:cell:panelEdit:editLink");
 
-        wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", BaseModal.class);
+        wicketTester.assertComponent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", BaseModal.class);
     }
 
     @Test
@@ -64,15 +63,15 @@ public class AnyTypesITCase extends AbstractTypesITCase {
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:container:content:add");
 
-        wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", Modal.class);
 
-        final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        final FormTester formTester = wicketTester.newFormTester(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:anyTypeDetailsPanel:container:form:key:textField", anyTypeTest);
-        formTester.setValue(
-                "content:anyTypeDetailsPanel:container:form:classes:paletteField:recorder", "csv");
+        formTester.setValue("content:anyTypeDetailsPanel:container:form:classes:paletteField:recorder", "csv");
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.clearFeedbackMessages();
@@ -102,12 +101,13 @@ public class AnyTypesITCase extends AbstractTypesITCase {
                 DATATABLE_PATH
                 + ":tablePanel:groupForm:checkgroup:dataTable:body:rows:1:cells:4:cell:panelEdit:editLink");
 
-        final FormTester formTester =
-                wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        final FormTester formTester = wicketTester.newFormTester(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue(
                 "content:anyTypeDetailsPanel:container:form:classes:paletteField:recorder", name + ",minimal group");
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
index 3ecf4d3..fcce73f 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
@@ -79,31 +79,31 @@ public class BulkActionITCase extends AbstractConsoleITCase {
         wicketTester.clickLink(component.getPageRelativePath()
                 + ":cells:6:cell:panelManageResources:manageResourcesLink");
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
         component = findComponentByProp("resourceName",
-                tabPanel + "alternativeDefaultModal:form:content:status:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", "resource-csv");
         assertNotNull(component);
 
         FormTester formTester = wicketTester.newFormTester(
-                tabPanel + "alternativeDefaultModal:form:content:status:firstLevelContainer:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:firstLevelContainer:"
                 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", 1);
 
-        wicketTester.executeAjaxEvent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.executeAjaxEvent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
                 Constants.ON_CLICK);
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "secondLevelContainer:second:container", WebMarkupContainer.class);
 
-        assertNotNull(findComponentByProp("resourceName", tabPanel + "alternativeDefaultModal:"
+        assertNotNull(findComponentByProp("resourceName", tabPanel + "outerObjectsRepeater:1:outer:"
                 + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-csv"));
     }
 
@@ -120,29 +120,29 @@ public class BulkActionITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:6:cell:panelEnable:enableLink");
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
         FormTester formTester = wicketTester.newFormTester(
-                tabPanel + "alternativeDefaultModal:form:content:status:firstLevelContainer:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:firstLevelContainer:"
                 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", 2);
 
-        wicketTester.executeAjaxEvent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.executeAjaxEvent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
                 Constants.ON_CLICK);
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "secondLevelContainer:second:container", WebMarkupContainer.class);
 
-        wicketTester.executeAjaxEvent(tabPanel + "alternativeDefaultModal:form:content:"
+        wicketTester.executeAjaxEvent(tabPanel + "outerObjectsRepeater:1:outer:form:content:"
                 + "status:secondLevelContainer:second:container:actions:panelSuspend:suspendLink",
                 Constants.ON_CLICK);
 
-        wicketTester.assertLabel(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertLabel(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:3:cell", "SUCCESS");
 
         // re-activate
@@ -155,29 +155,29 @@ public class BulkActionITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:6:cell:panelEnable:enableLink");
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
         formTester = wicketTester.newFormTester(
-                tabPanel + "alternativeDefaultModal:form:content:status:firstLevelContainer:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:firstLevelContainer:"
                 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", 2);
 
-        wicketTester.executeAjaxEvent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.executeAjaxEvent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
                 Constants.ON_CLICK);
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "secondLevelContainer:second:container", WebMarkupContainer.class);
 
-        wicketTester.executeAjaxEvent(tabPanel + "alternativeDefaultModal:form:content:"
+        wicketTester.executeAjaxEvent(tabPanel + "outerObjectsRepeater:1:outer:form:content:"
                 + "status:secondLevelContainer:second:container:actions:panelReactivate:reactivateLink",
                 Constants.ON_CLICK);
 
-        wicketTester.assertLabel(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertLabel(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:3:cell", "SUCCESS");
     }
 
@@ -193,35 +193,35 @@ public class BulkActionITCase extends AbstractConsoleITCase {
         wicketTester.clickLink(component.getPageRelativePath()
                 + ":cells:4:cell:panelManageResources:manageResourcesLink");
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
-        wicketTester.clickLink(tabPanel + "alternativeDefaultModal:form:content:status:firstLevelContainer:first:"
+        wicketTester.clickLink(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:firstLevelContainer:first:"
                 + "container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
                 + "toolbars:1:headers:2:header:orderByLink", true);
 
         component = findComponentByProp("resourceName",
-                tabPanel + "alternativeDefaultModal:form:content:status:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", "ws-target-resource-1");
         assertNotNull(component);
 
         FormTester formTester = wicketTester.newFormTester(
-                tabPanel + "alternativeDefaultModal:form:content:status:firstLevelContainer:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:firstLevelContainer:"
                 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", 7);
 
-        wicketTester.executeAjaxEvent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.executeAjaxEvent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
                 Constants.ON_CLICK);
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "secondLevelContainer:second:container", WebMarkupContainer.class);
 
-        assertNotNull(findComponentByProp("resourceName", tabPanel + "alternativeDefaultModal:"
+        assertNotNull(findComponentByProp("resourceName", tabPanel + "outerObjectsRepeater:1:outer:"
                 + "form:content:status:secondLevelContainer:second:container:selectedObjects", "ws-target-resource-1"));
     }
 
@@ -237,35 +237,35 @@ public class BulkActionITCase extends AbstractConsoleITCase {
         wicketTester.clickLink(component.getPageRelativePath()
                 + ":cells:3:cell:panelManageResources:manageResourcesLink");
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
-        wicketTester.clickLink(tabPanel + "alternativeDefaultModal:form:content:status:firstLevelContainer:first:"
+        wicketTester.clickLink(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:firstLevelContainer:first:"
                 + "container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
                 + "toolbars:1:headers:2:header:orderByLink", true);
 
         component = findComponentByProp("resourceName",
-                tabPanel + "alternativeDefaultModal:form:content:status:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", "ws-target-resource-1");
         assertNotNull(component);
 
         FormTester formTester = wicketTester.newFormTester(
-                tabPanel + "alternativeDefaultModal:form:content:status:firstLevelContainer:"
+                tabPanel + "outerObjectsRepeater:1:outer:form:content:status:firstLevelContainer:"
                 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", 7);
 
-        wicketTester.executeAjaxEvent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.executeAjaxEvent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
                 Constants.ON_CLICK);
 
-        wicketTester.assertComponent(tabPanel + "alternativeDefaultModal:form:content:status:"
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:1:outer:form:content:status:"
                 + "secondLevelContainer:second:container", WebMarkupContainer.class);
 
-        assertNotNull(findComponentByProp("resourceName", tabPanel + "alternativeDefaultModal:"
+        assertNotNull(findComponentByProp("resourceName", tabPanel + "outerObjectsRepeater:1:outer:"
                 + "form:content:status:secondLevelContainer:second:container:selectedObjects", "ws-target-resource-1"));
     }
 
@@ -276,7 +276,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
         Component component = findComponentByProp("key", "body:resources", "resource-testdb");
         assertNotNull(component);
         wicketTester.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
-        wicketTester.clickLink("body:toggle:togglePanelContainer:container:actions:propagation");
+        wicketTester.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:propagation");
 
         FormTester formTester = wicketTester.newFormTester(
                 "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:first:container:"

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/DisplayAttributesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/DisplayAttributesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/DisplayAttributesITCase.java
index 8ddaaad..7627467 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/DisplayAttributesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/DisplayAttributesITCase.java
@@ -45,7 +45,7 @@ public class DisplayAttributesITCase extends AbstractConsoleITCase {
                 + "toolbars:1:headers:3:header:label:panelChangeView:changeViewLink");
 
         wicketTester.assertComponent(
-                "body:content:body:tabbedPanel:panel:searchResult:displayAttributeModal", Modal.class);
+                "body:content:body:tabbedPanel:panel:searchResult:outerObjectsRepeater:2:outer", Modal.class);
     }
 
     @Test
@@ -57,15 +57,16 @@ public class DisplayAttributesITCase extends AbstractConsoleITCase {
                 + "toolbars:1:headers:3:header:label:panelChangeView:changeViewLink");
 
         wicketTester.assertComponent(
-                "body:content:body:tabbedPanel:panel:searchResult:displayAttributeModal", Modal.class);
+                "body:content:body:tabbedPanel:panel:searchResult:outerObjectsRepeater:2:outer", Modal.class);
 
         final FormTester formTester = wicketTester.newFormTester(
-                "body:content:body:tabbedPanel:panel:searchResult:displayAttributeModal:form");
+                "body:content:body:tabbedPanel:panel:searchResult:outerObjectsRepeater:2:outer:form");
 
         formTester.setValue("content:container:details:paletteField:recorder", "status");
 
         wicketTester.clickLink(
-                "body:content:body:tabbedPanel:panel:searchResult:displayAttributeModal:dialog:footer:inputs:0:submit");
+                "body:content:body:tabbedPanel:panel:searchResult:outerObjectsRepeater:2:outer:dialog:footer:"
+                + "inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.clearFeedbackMessages();

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
index 4a13b3d..9153cde 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
@@ -69,11 +69,12 @@ public class GroupsITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:4:cell:panelClone:cloneLink");
 
-        wicketTester.assertComponent(tabPanel + "modal:form:content:form:view:name:textField", TextField.class);
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:0:outer:form:content:form:view:name:textField",
+                TextField.class);
 
-        FormTester formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        FormTester formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
-
+        
         formTester.submit("buttons:cancel");
     }
 
@@ -88,48 +89,49 @@ public class GroupsITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:4:cell:panelEdit:editLink");
 
-        wicketTester.assertComponent(tabPanel + "modal:form:content:form:view:name:textField", TextField.class);
+        wicketTester.assertComponent(tabPanel + "outerObjectsRepeater:0:outer:form:content:form:view:name:textField",
+                TextField.class);
 
-        FormTester formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        FormTester formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
 
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:finish");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.assertComponent(tabPanel
-                + "modal:form:content:customResultBody:resources:firstLevelContainer:first:container:content:"
-                + "group:beans:0:fields:0:field", Label.class);
+                + "outerObjectsRepeater:0:outer:form:content:customResultBody:resources:firstLevelContainer:first:"
+                + "container:content:group:beans:0:fields:0:field", Label.class);
 
-        wicketTester.clickLink(tabPanel + "modal:form:content:action:panelClose:closeLink");
+        wicketTester.clickLink(tabPanel + "outerObjectsRepeater:0:outer:form:content:action:panelClose:closeLink");
 
         component = findComponentByProp("name", searchResultContainer
                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "root");

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/NotificationsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/NotificationsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/NotificationsITCase.java
index 4b079df..72ed660 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/NotificationsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/NotificationsITCase.java
@@ -36,17 +36,17 @@ public class NotificationsITCase extends AbstractConsoleITCase {
     private void createNotification(final String sender, final String subject) {
         wicketTester.clickLink("body:content:tabbedPanel:panel:container:content:add");
 
-        wicketTester.assertComponent("body:content:tabbedPanel:panel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", Modal.class);
 
-        FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        FormTester formTester = wicketTester.newFormTester(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
 
         // -------------------------------
         // generate event to populate recipientAttrName
         // -------------------------------
         formTester.setValue("content:form:view:recipientAttrType:dropDownChoiceField", "3");
-        wicketTester.executeAjaxEvent(
-                "body:content:tabbedPanel:panel:modal:form:content:form:view:recipientAttrType:dropDownChoiceField",
-                Constants.ON_CHANGE);
+        wicketTester.executeAjaxEvent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form:content:"
+                + "form:view:recipientAttrType:dropDownChoiceField", Constants.ON_CHANGE);
         // -------------------------------
 
         formTester.select("content:form:view:recipientAttrType:dropDownChoiceField", 3);
@@ -61,13 +61,13 @@ public class NotificationsITCase extends AbstractConsoleITCase {
         formTester.submit("content:form:buttons:next");
         wicketTester.assertNoErrorMessage();
 
-        formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
 
         // -------------------------------
         // generate event to populate eventsPanel
         // -------------------------------
         formTester.setValue("content:form:view:eventSelection:categoryContainer:category:dropDownChoiceField", "0");
-        wicketTester.executeAjaxEvent("body:content:tabbedPanel:panel:modal:form:"
+        wicketTester.executeAjaxEvent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form:"
                 + "content:form:view:eventSelection:categoryContainer:category:dropDownChoiceField",
                 Constants.ON_CHANGE);
         // -------------------------------
@@ -76,7 +76,7 @@ public class NotificationsITCase extends AbstractConsoleITCase {
         // select event template
         // -------------------------------
         formTester.setValue("content:form:view:eventSelection:eventsContainer:eventsPanel:successGroup", "check0");
-        wicketTester.executeAjaxEvent("body:content:tabbedPanel:panel:modal:form:content:"
+        wicketTester.executeAjaxEvent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form:content:"
                 + "form:view:eventSelection:eventsContainer:eventsPanel:successGroup",
                 Constants.ON_CLICK);
         // -------------------------------
@@ -88,15 +88,15 @@ public class NotificationsITCase extends AbstractConsoleITCase {
         formTester.submit("content:form:buttons:next");
         wicketTester.assertNoErrorMessage();
 
-        formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         wicketTester.cleanupFeedbackMessages();
         formTester.submit("content:form:buttons:next");
         wicketTester.assertNoErrorMessage();
         wicketTester.assertNoInfoMessage();
 
-        formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
-        wicketTester.executeAjaxEvent("body:content:tabbedPanel:panel:modal:form:content:form:view:staticRecipients:"
-                + "multiValueContainer:innerForm:content:panelPlus:add", Constants.ON_CLICK);
+        formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
+        wicketTester.executeAjaxEvent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form:content:form:"
+                + "view:staticRecipients:multiValueContainer:innerForm:content:panelPlus:add", Constants.ON_CLICK);
         formTester.setValue("content:form:view:staticRecipients:multiValueContainer:innerForm:content:view:0:panel:"
                 + "textField", "recipient@syncope.org");
         formTester.setValue("content:form:view:selfAsRecipient:checkboxField", true);
@@ -135,7 +135,8 @@ public class NotificationsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink(
                 result.getPageRelativePath() + ":cells:7:cell:panelEdit:editLink");
 
-        FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        FormTester formTester = wicketTester.newFormTester(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.submit("content:form:buttons:finish");
 
         wicketTester.assertInfoMessages("Operation executed successfully");

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java
index aca1a43..c0ebf94 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java
@@ -50,12 +50,13 @@ public class ParametersITCase extends AbstractConsoleITCase {
         wicketTester.assertComponent("body:content:parametersPanel", WebMarkupContainer.class);
 
         wicketTester.clickLink("body:content:parametersPanel:container:content:add");
-        wicketTester.assertComponent("body:content:parametersPanel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:parametersPanel:outerObjectsRepeater:0:outer", Modal.class);
 
-        FormTester formTester = wicketTester.newFormTester("body:content:parametersPanel:modal:form");
+        FormTester formTester
+                = wicketTester.newFormTester("body:content:parametersPanel:outerObjectsRepeater:0:outer:form");
         formTester.submit("content:parametersCreateWizardPanel:form:buttons:next");
 
-        formTester = wicketTester.newFormTester("body:content:parametersPanel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:parametersPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:parametersCreateWizardPanel:form:view:content:schema:textField", "testParam");
         formTester.setValue("content:parametersCreateWizardPanel:form:view:content:attrs:0:panel:textField", "test");
 
@@ -92,12 +93,13 @@ public class ParametersITCase extends AbstractConsoleITCase {
         wicketTester.assertComponent("body:content:parametersPanel", WebMarkupContainer.class);
 
         wicketTester.clickLink("body:content:parametersPanel:container:content:add");
-        wicketTester.assertComponent("body:content:parametersPanel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:parametersPanel:outerObjectsRepeater:0:outer", Modal.class);
 
-        FormTester formTester = wicketTester.newFormTester("body:content:parametersPanel:modal:form");
+        FormTester formTester
+                = wicketTester.newFormTester("body:content:parametersPanel:outerObjectsRepeater:0:outer:form");
         formTester.submit("content:parametersCreateWizardPanel:form:buttons:next");
 
-        formTester = wicketTester.newFormTester("body:content:parametersPanel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:parametersPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:parametersCreateWizardPanel:form:view:content:schema:textField", "deleteParam");
         formTester.setValue("content:parametersCreateWizardPanel:form:view:content:attrs:0:panel:textField", "test");
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RelationshipTypeITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RelationshipTypeITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RelationshipTypeITCase.java
index 2df31fa..08cbf32 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RelationshipTypeITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RelationshipTypeITCase.java
@@ -51,7 +51,7 @@ public class RelationshipTypeITCase extends AbstractTypesITCase {
                 result.getPageRelativePath() + ":cells:3:cell:panelEdit:editLink");
 
         wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", BaseModal.class);
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", BaseModal.class);
     }
 
     @Test
@@ -84,11 +84,12 @@ public class RelationshipTypeITCase extends AbstractTypesITCase {
                 + ":tablePanel:groupForm:checkgroup:dataTable:body:rows:1:cells:3:cell:panelEdit:editLink");
 
         final FormTester formTester =
-                wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+                wicketTester.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue(
                 "content:relationshipTypeDetails:container:form:description:textField", "new description");
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
index 5a1c851..da619e1 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
@@ -35,18 +35,18 @@ public class RolesITCase extends AbstractConsoleITCase {
     private void createRole(final String name) {
         wicketTester.clickLink("body:content:rolesPanel:container:content:add");
 
-        wicketTester.assertComponent("body:content:rolesPanel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:rolesPanel:outerObjectsRepeater:0:outer", Modal.class);
 
-        FormTester formTester = wicketTester.newFormTester("body:content:rolesPanel:modal:form");
+        FormTester formTester = wicketTester.newFormTester("body:content:rolesPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:form:view:key:textField", name);
         formTester.submit("content:form:buttons:next");
 
-        formTester = wicketTester.newFormTester("body:content:rolesPanel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:rolesPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:form:view:entitlements:paletteField:recorder",
                 "WORKFLOW_DEF_READ,NOTIFICATION_UPDATE,RELATIONSHIPTYPE_READ,RELATIONSHIPTYPE_LIST");
         formTester.submit("content:form:buttons:next");
 
-        formTester = wicketTester.newFormTester("body:content:rolesPanel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:rolesPanel:outerObjectsRepeater:0:outer:form");
         formTester.submit("content:form:buttons:finish");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
@@ -85,16 +85,16 @@ public class RolesITCase extends AbstractConsoleITCase {
         wicketTester.clickLink(
                 result.getPageRelativePath() + ":cells:4:cell:panelEdit:editLink");
 
-        FormTester formTester = wicketTester.newFormTester("body:content:rolesPanel:modal:form");
+        FormTester formTester = wicketTester.newFormTester("body:content:rolesPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:form:view:key:textField", "updateRole");
         formTester.submit("content:form:buttons:next");
 
-        formTester = wicketTester.newFormTester("body:content:rolesPanel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:rolesPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:form:view:entitlements:paletteField:recorder",
                 "WORKFLOW_DEF_READ,NOTIFICATION_UPDATE");
         formTester.submit("content:form:buttons:next");
 
-        formTester = wicketTester.newFormTester("body:content:rolesPanel:modal:form");
+        formTester = wicketTester.newFormTester("body:content:rolesPanel:outerObjectsRepeater:0:outer:form");
         formTester.submit("content:form:buttons:finish");
 
         wicketTester.assertInfoMessages("Operation executed successfully");

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SchemasITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SchemasITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SchemasITCase.java
index 2175ad2..d6b8add 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SchemasITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SchemasITCase.java
@@ -55,7 +55,7 @@ public class SchemasITCase extends AbstractTypesITCase {
 
         wicketTester.assertComponent(
                 "body:content:tabbedPanel:"
-                + "panel:accordionPanel:tabs:0:body:content:modal:"
+                + "panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:"
                 + "form:content:kindForm:kind:dropDownChoiceField", DropDownChoice.class);
     }
 
@@ -66,15 +66,16 @@ public class SchemasITCase extends AbstractTypesITCase {
                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:container:content:add");
 
         wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:modal", Modal.class);
+                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer",
+                Modal.class);
 
         final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:"
-                + "accordionPanel:tabs:0:body:content:modal:form");
+                + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:details:form:key:textField", "zBoolean");
         formTester.setValue("content:details:form:type:dropDownChoiceField", "3");
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:"
-                + "accordionPanel:tabs:0:body:content:modal:dialog:footer:inputs:0:submit");
+                + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
 
@@ -96,15 +97,16 @@ public class SchemasITCase extends AbstractTypesITCase {
 
         wicketTester.assertComponent(
                 "body:content:tabbedPanel:"
-                + "panel:accordionPanel:tabs:0:body:content:modal:"
+                + "panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:"
                 + "form:content:kindForm:kind:dropDownChoiceField", DropDownChoice.class);
 
         FormTester formTester = wicketTester.newFormTester(
-                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:modal:form");
+                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:details:form:multivalue:checkboxField", "true");
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:"
-                + "accordionPanel:tabs:0:body:content:modal:dialog:footer:inputs:0:submit", true);
+                + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit",
+                true);
 
         wicketTester.assertInfoMessages("Operation executed successfully");
     }
@@ -118,15 +120,16 @@ public class SchemasITCase extends AbstractTypesITCase {
                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:container:content:add");
 
         wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:modal", Modal.class);
+                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer",
+                Modal.class);
 
         final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:"
-                + "accordionPanel:tabs:0:body:content:modal:form");
+                + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:details:form:key:textField", schemaName);
         formTester.setValue("content:details:form:type:dropDownChoiceField", "0");
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:"
-                + "accordionPanel:tabs:0:body:content:modal:dialog:footer:inputs:0:submit");
+                + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
 
         wicketTester.assertInfoMessages("Operation executed successfully");;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
index a3bb92d..d6bc897 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
@@ -38,14 +38,15 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:securityQuestionPanel:container:content:add");
 
         wicketTester.assertComponent(
-                "body:content:securityQuestionPanel:modal", Modal.class);
+                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer", Modal.class);
 
-        FormTester formTester = wicketTester.newFormTester("body:content:securityQuestionPanel"
-                + ":modal:form");
+        FormTester formTester
+                = wicketTester.newFormTester("body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:securityQuestionDetailsPanel:container:form:content:textField",
                 name);
 
-        wicketTester.clickLink("body:content:securityQuestionPanel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
         wicketTester.cleanupFeedbackMessages();
@@ -90,11 +91,13 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(result.getPageRelativePath() + ":cells:3:cell:panelEdit:editLink");
 
-        FormTester formTester = wicketTester.newFormTester("body:content:securityQuestionPanel:modal:form");
+        FormTester formTester
+                = wicketTester.newFormTester("body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:securityQuestionDetailsPanel:container:form:content:textField",
                 "What's your favorite car?");
 
-        wicketTester.clickLink("body:content:securityQuestionPanel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
         wicketTester.cleanupFeedbackMessages();

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
index edfcf04..89a2e3e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
@@ -48,18 +48,26 @@ public class TopologyITCase extends AbstractConsoleITCase {
     public void showTopologyToggleMenu() {
         wicketTester.clickLink("body:topologyLI:topology");
         wicketTester.executeAjaxEvent("body:resources:2:resources:0:res", Constants.ON_CLICK);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:delete", AjaxLink.class);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:edit", AjaxLink.class);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:propagation", AjaxLink.class);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:pull",
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:delete",
+                AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:edit",
+                AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:propagation",
+                AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:pull",
+                AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:push",
                 AjaxLink.class);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:push", AjaxLink.class);
         wicketTester.executeAjaxEvent("body:syncope", Constants.ON_CLICK);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:tasks", AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:tasks",
+                AjaxLink.class);
         wicketTester.executeAjaxEvent("body:conns:0:conns:3:conn", Constants.ON_CLICK);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:create", AjaxLink.class);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:delete", AjaxLink.class);
-        wicketTester.assertComponent("body:toggle:togglePanelContainer:container:actions:edit", AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:create",
+                AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:delete",
+                AjaxLink.class);
+        wicketTester.assertComponent("body:toggle:container:content:togglePanelContainer:container:actions:edit",
+                AjaxLink.class);
     }
 
     @Test
@@ -69,20 +77,19 @@ public class TopologyITCase extends AbstractConsoleITCase {
         Component component = findComponentByProp("key", "body:resources", "ws-target-resource-1");
         assertNotNull(component);
         wicketTester.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
-        wicketTester.clickLink("body:toggle:togglePanelContainer:container:actions:edit");
+        wicketTester.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:edit");
 
-        wicketTester.clickLink(
-                "body:toggle:outerObjectsRepeater:0:outer:form:content:tabbedPanel:tabs-container:tabs:1:link");
+        FormTester formTester = wicketTester.newFormTester("body:toggle:outerObjectsRepeater:0:outer:form");
+        formTester.submit("content:form:buttons:next");
 
-        wicketTester.clickLink("body:toggle:outerObjectsRepeater:0:outer:form:content:tabbedPanel:panel:container:"
+        wicketTester.clickLink("body:toggle:outerObjectsRepeater:0:outer:form:content:form:view:provision:container:"
                 + "content:group:beans:0:actions:panelMapping:mappingLink");
 
-        FormTester formTester = wicketTester.newFormTester(
-                "body:toggle:outerObjectsRepeater:0:outer:form:content:tabbedPanel:panel:container:"
-                + "content:wizard:form");
+        formTester = wicketTester.newFormTester("body:toggle:outerObjectsRepeater:0:outer:form:content:form:view:"
+                + "provision:container:content:wizard:form");
         formTester.submit("buttons:next");
 
-        wicketTester.assertComponent("body:toggle:outerObjectsRepeater:0:outer:form:content:tabbedPanel:panel:"
+        wicketTester.assertComponent("body:toggle:outerObjectsRepeater:0:outer:form:content:form:view:provision:"
                 + "container:content:wizard:form:view:mapping:mappingContainer:mappings:1", WebMarkupContainer.class);
     }
 
@@ -93,13 +100,13 @@ public class TopologyITCase extends AbstractConsoleITCase {
         Component component = findComponentByProp("key", "body:resources", "resource-testdb");
         assertNotNull(component);
         wicketTester.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
-        wicketTester.clickLink("body:toggle:togglePanelContainer:container:actions:pull");
+        wicketTester.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:pull");
         wicketTester.clickLink("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:"
                 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:"
                 + "body:rows:1:cells:10:cell:panelExecute:executeLink");
-        wicketTester.clickLink(
-                "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:first:"
-                + "container:content:startAt:togglePanelContainer:startAtForm:startAt");
+
+        wicketTester.clickLink("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:first:"
+                + "container:content:startAt:container:content:togglePanelContainer:startAtForm:startAt");
         wicketTester.assertInfoMessages("Operation executed successfully");
     }
 
@@ -110,7 +117,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
         Component component = findComponentByProp("key", "body:resources", "resource-ldap");
         assertNotNull(component);
         wicketTester.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
-        wicketTester.clickLink("body:toggle:togglePanelContainer:container:actions:push");
+        wicketTester.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:push");
         wicketTester.clickLink("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:"
                 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:"
                 + "body:rows:1:cells:9:cell:panelEdit:editLink");
@@ -129,7 +136,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
     public void createSchedTask() {
         wicketTester.clickLink("body:topologyLI:topology");
         wicketTester.executeAjaxEvent("body:syncope", Constants.ON_CLICK);
-        wicketTester.clickLink("body:toggle:togglePanelContainer:container:actions:tasks");
+        wicketTester.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:tasks");
         wicketTester.clickLink(
                 "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:first:"
                 + "container:content:add");

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
index 7420257..c58c61a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
@@ -84,9 +84,11 @@ public class UsersITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:6:cell:panelClone:cloneLink");
 
-        wicketTester.assertComponent(tabPanel + "modal:form:content:form:view:username:textField", TextField.class);
+        wicketTester.
+                assertComponent(tabPanel + "outerObjectsRepeater:0:outer:form:content:form:view:username:textField",
+                        TextField.class);
 
-        FormTester formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        FormTester formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
 
         formTester.submit("buttons:cancel");
@@ -103,48 +105,50 @@ public class UsersITCase extends AbstractConsoleITCase {
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:6:cell:panelEdit:editLink");
 
-        wicketTester.assertComponent(tabPanel + "modal:form:content:form:view:username:textField", TextField.class);
+        wicketTester.
+                assertComponent(tabPanel + "outerObjectsRepeater:0:outer:form:content:form:view:username:textField",
+                        TextField.class);
 
-        FormTester formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        FormTester formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
 
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
-        formTester = wicketTester.newFormTester(tabPanel + "modal:form:content:form");
+        formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
         formTester.submit("buttons:finish");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.assertComponent(tabPanel
-                + "modal:form:content:customResultBody:resources:firstLevelContainer:first:container:content:"
-                + "group:beans:0:fields:1:field", Label.class);
+                + "outerObjectsRepeater:0:outer:form:content:customResultBody:resources:firstLevelContainer:first:"
+                + "container:content:group:beans:0:fields:1:field", Label.class);
 
-        wicketTester.clickLink(tabPanel + "modal:form:content:action:panelClose:closeLink");
+        wicketTester.clickLink(tabPanel + "outerObjectsRepeater:0:outer:form:content:action:panelClose:closeLink");
 
         component = findComponentByProp("username", searchResultContainer
                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "puccini");


[7/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors

Posted by fm...@apache.org.
[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 <fa...@gmail.com>
Authored: Mon Apr 18 10:05:28 2016 +0200
Committer: fmartelli <fa...@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));
-    }
-}


[6/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/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
deleted file mode 100644
index 30188f9..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
+++ /dev/null
@@ -1,642 +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 de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.syncope.client.console.commons.ConnIdSpecialAttributeName;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
-import org.apache.syncope.client.console.rest.AnyTypeRestClient;
-import org.apache.syncope.client.console.rest.ConnectorRestClient;
-import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
-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.AjaxDropDownChoicePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.MappingPurposePanel;
-import org.apache.syncope.common.lib.to.AnyTypeClassTO;
-import org.apache.syncope.common.lib.to.AnyTypeTO;
-import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.common.lib.to.MappingItemTO;
-import org.apache.syncope.common.lib.to.MappingTO;
-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.IntMappingType;
-import org.apache.syncope.common.lib.types.MappingPurpose;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-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.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
-
-/**
- * Resource mapping panel.
- */
-public class ResourceMappingPanel extends Panel {
-
-    private static final long serialVersionUID = -7982691107029848579L;
-
-    /**
-     * Mapping field style sheet.
-     */
-    private static final String DEF_FIELD_STYLE = "";
-
-    /**
-     * Any type rest client.
-     */
-    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
-    /**
-     * Any type class rest client.
-     */
-    private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
-
-    /**
-     * ConnInstance rest client.
-     */
-    private final ConnectorRestClient connRestClient = new ConnectorRestClient();
-
-    /**
-     * Resource schema name.
-     */
-    private final List<String> schemaNames;
-
-    private final Label passwordLabel;
-
-    /**
-     * Add mapping button.
-     */
-    private final AjaxButton addMappingBtn;
-
-    /**
-     * All mappings.
-     */
-    private final ListView<MappingItemTO> mappings;
-
-    /**
-     * External resource to be updated.
-     */
-    private final ResourceTO resourceTO;
-
-    /**
-     * External resource provisioning configuration instance to be updated.
-     */
-    private final ProvisionTO provisionTO;
-
-    /**
-     * Mapping container.
-     */
-    private final WebMarkupContainer mappingContainer;
-
-    private MappingTO getMapping() {
-        if (provisionTO.getMapping() == null) {
-            provisionTO.setMapping(new MappingTO());
-        }
-
-        return provisionTO.getMapping();
-    }
-
-    /**
-     * Attribute Mapping Panel.
-     *
-     * @param id panel id
-     * @param resourceTO external resource to be updated.
-     * @param provisionTO external resource provisioning configuration instance.
-     */
-    public ResourceMappingPanel(final String id, final ResourceTO resourceTO, final ProvisionTO provisionTO) {
-        super(id);
-        setOutputMarkupId(true);
-
-        this.resourceTO = resourceTO;
-        this.provisionTO = provisionTO == null ? new ProvisionTO() : provisionTO;
-
-        this.mappingContainer = new WebMarkupContainer("mappingContainer");
-        this.mappingContainer.setOutputMarkupId(true);
-        add(this.mappingContainer);
-
-        if (resourceTO.getConnector() != null && resourceTO.getConnector() > 0) {
-            schemaNames = getSchemaNames(resourceTO.getConnector(), resourceTO.getConfOverride());
-            setEnabled();
-        } else {
-            schemaNames = Collections.<String>emptyList();
-        }
-
-        mappingContainer.add(Constants.getJEXLPopover(this, TooltipConfig.Placement.bottom));
-
-        passwordLabel = new Label("passwordLabel", new ResourceModel("password"));
-        mappingContainer.add(passwordLabel);
-
-        Collections.sort(getMapping().getItems(), new Comparator<MappingItemTO>() {
-
-            @Override
-            public int compare(final MappingItemTO left, final MappingItemTO right) {
-                int compared;
-                if (left == null && right == null) {
-                    compared = 0;
-                } else if (left == null) {
-                    compared = 1;
-                } else if (right == null) {
-                    compared = -1;
-                } else if (left.getPurpose() == MappingPurpose.BOTH && right.getPurpose() != MappingPurpose.BOTH) {
-                    compared = -1;
-                } else if (left.getPurpose() != MappingPurpose.BOTH && right.getPurpose() == MappingPurpose.BOTH) {
-                    compared = 1;
-                } else if (left.getPurpose() == MappingPurpose.PROPAGATION
-                        && (right.getPurpose() == MappingPurpose.PULL
-                        || right.getPurpose() == MappingPurpose.NONE)) {
-                    compared = -1;
-                } else if (left.getPurpose() == MappingPurpose.PULL
-                        && right.getPurpose() == MappingPurpose.PROPAGATION) {
-                    compared = 1;
-                } else if (left.getPurpose() == MappingPurpose.PULL
-                        && right.getPurpose() == MappingPurpose.NONE) {
-                    compared = -1;
-                } else if (left.getPurpose() == MappingPurpose.NONE
-                        && right.getPurpose() != MappingPurpose.NONE) {
-                    compared = 1;
-                } else if (left.isConnObjectKey()) {
-                    compared = -1;
-                } else if (right.isConnObjectKey()) {
-                    compared = 1;
-                } else if (left.isPassword()) {
-                    compared = -1;
-                } else if (right.isPassword()) {
-                    compared = 1;
-                } else {
-                    compared = left.getIntAttrName().compareTo(right.getIntAttrName());
-                }
-                return compared;
-            }
-        });
-
-        mappings = new ListView<MappingItemTO>("mappings", getMapping().getItems()) {
-
-            private static final long serialVersionUID = 4949588177564901031L;
-
-            @Override
-            protected void populateItem(final ListItem<MappingItemTO> item) {
-                final MappingItemTO mapItem = item.getModelObject();
-                if (mapItem.getPurpose() == null) {
-                    mapItem.setPurpose(MappingPurpose.BOTH);
-                }
-
-                AnyTypeKind entity = null;
-                if (provisionTO.getAnyType().equals(AnyTypeKind.GROUP.name())) {
-                    // support for clone
-                    entity = AnyTypeKind.GROUP;
-                } else if (mapItem.getIntMappingType() != null) {
-                    entity = mapItem.getIntMappingType().getAnyTypeKind();
-                }
-
-                // it will happen just in case of clone to create a new mapping for group object
-                if (mapItem.getIntMappingType() != null && mapItem.getIntMappingType().getAnyTypeKind() != entity) {
-                    mapItem.setIntMappingType(null);
-                    mapItem.setIntAttrName(null);
-                }
-
-                //--------------------------------
-                // Entity
-                // -------------------------------
-                final AjaxDropDownChoicePanel<AnyTypeKind> entitiesPanel = new AjaxDropDownChoicePanel<>(
-                        "entities",
-                        new ResourceModel("entities", "entities").getObject(),
-                        new Model<>(entity));
-
-                entitiesPanel.hideLabel();
-                entitiesPanel.setChoices(provisionTO.getAnyType().equals(AnyTypeKind.GROUP.name())
-                        ? Collections.<AnyTypeKind>singletonList(AnyTypeKind.GROUP)
-                        : Arrays.asList(AnyTypeKind.values()));
-
-                entitiesPanel.setStyleSheet(false, DEF_FIELD_STYLE);
-                item.add(entitiesPanel);
-                // -------------------------------
-
-                //--------------------------------
-                // Internal attribute type
-                // -------------------------------
-                final List<IntMappingType> attrTypes = new ArrayList<>(getAttributeTypes(entity));
-                final AjaxDropDownChoicePanel<IntMappingType> intMappingTypes = new AjaxDropDownChoicePanel<>(
-                        "intMappingTypes",
-                        new ResourceModel("intMappingTypes", "intMappingTypes").getObject(),
-                        new PropertyModel<IntMappingType>(mapItem, "intMappingType"),
-                        false);
-                intMappingTypes.setNullValid(true).setRequired(true).hideLabel();
-                intMappingTypes.setChoices(attrTypes);
-                item.add(intMappingTypes);
-                // -------------------------------
-
-                //--------------------------------
-                // Internal attribute
-                // -------------------------------
-                final AjaxDropDownChoicePanel<String> intAttrNames = new AjaxDropDownChoicePanel<>(
-                        "intAttrNames",
-                        getString("intAttrNames"),
-                        new PropertyModel<String>(mapItem, "intAttrName"),
-                        false);
-                intAttrNames.setChoices(Collections.<String>emptyList());
-                intAttrNames.setNullValid(true).setRequired(true).hideLabel();
-                item.add(intAttrNames);
-                // -------------------------------
-
-                //--------------------------------
-                // External attribute
-                // -------------------------------
-                final AjaxTextFieldPanel extAttrNames = new AjaxTextFieldPanel(
-                        "extAttrName",
-                        new ResourceModel("extAttrNames", "extAttrNames").getObject(),
-                        new PropertyModel<String>(mapItem, "extAttrName"));
-                extAttrNames.setChoices(schemaNames);
-
-                boolean required = !mapItem.isPassword();
-                extAttrNames.setRequired(required).hideLabel();
-                extAttrNames.setEnabled(required);
-                item.add(extAttrNames);
-                // -------------------------------
-
-                //--------------------------------
-                // Mandatory
-                // -------------------------------
-                final AjaxTextFieldPanel mandatory = new AjaxTextFieldPanel(
-                        "mandatoryCondition",
-                        new ResourceModel("mandatoryCondition", "mandatoryCondition").getObject(),
-                        new PropertyModel<String>(mapItem, "mandatoryCondition"));
-                mandatory.hideLabel();
-                mandatory.setChoices(Arrays.asList(new String[] { "true", "false" }));
-                item.add(mandatory);
-                // -------------------------------
-
-                //--------------------------------
-                // Connector object key
-                // -------------------------------
-                final AjaxCheckBoxPanel connObjectKey = new AjaxCheckBoxPanel(
-                        "connObjectKey",
-                        new ResourceModel("connObjectKey", "connObjectKey").getObject(),
-                        new PropertyModel<Boolean>(mapItem, "connObjectKey"), false);
-                connObjectKey.hideLabel();
-                item.add(connObjectKey);
-                // -------------------------------
-
-                //--------------------------------
-                // Password
-                // -------------------------------
-                final AjaxCheckBoxPanel password = new AjaxCheckBoxPanel(
-                        "password",
-                        new ResourceModel("password", "password").getObject(),
-                        new PropertyModel<Boolean>(mapItem, "password"), false);
-                item.add(password.hideLabel());
-                // -------------------------------
-
-                //--------------------------------
-                // Purpose
-                // -------------------------------
-                final WebMarkupContainer purpose = new WebMarkupContainer("purpose");
-                purpose.setOutputMarkupId(Boolean.TRUE);
-
-                final MappingPurposePanel panel = new MappingPurposePanel(
-                        "purposeActions", new PropertyModel<MappingPurpose>(mapItem, "purpose"), purpose);
-
-                purpose.add(panel.setRenderBodyOnly(true));
-                item.add(purpose);
-                // -------------------------------
-
-                //--------------------------------
-                // Remove
-                // -------------------------------
-                final ActionLinksPanel.Builder<Serializable> actions = ActionLinksPanel.builder();
-                actions.add(new ActionLink<Serializable>() {
-
-                    private static final long serialVersionUID = -3722207913631435501L;
-
-                    @Override
-                    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))) {
-                                index = i;
-                            }
-                        }
-
-                        if (index != -1) {
-                            getMapping().getItems().remove(index);
-                            item.getParent().removeAll();
-                            target.add(ResourceMappingPanel.this);
-                        }
-                    }
-                }, ActionLink.ActionType.DELETE, StandardEntitlement.RESOURCE_UPDATE);
-                item.add(actions.build("toRemove"));
-                // -------------------------------
-
-                entitiesPanel.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                    private static final long serialVersionUID = -1107858522700306810L;
-
-                    @Override
-                    protected void onUpdate(final AjaxRequestTarget target) {
-                        attrTypes.clear();
-                        attrTypes.addAll(getAttributeTypes(entitiesPanel.getModelObject()));
-                        intMappingTypes.setChoices(attrTypes);
-
-                        intAttrNames.setChoices(Collections.<String>emptyList());
-
-                        target.add(intMappingTypes);
-                        target.add(intAttrNames);
-                    }
-                });
-
-                intMappingTypes.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                    private static final long serialVersionUID = -1107858522700306810L;
-
-                    @Override
-                    protected void onUpdate(final AjaxRequestTarget target) {
-                        setAttrNames(intMappingTypes.getModelObject(), intAttrNames);
-                        target.add(intAttrNames);
-
-                        setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password);
-                        target.add(connObjectKey);
-                    }
-                });
-
-                intAttrNames.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                    private static final long serialVersionUID = -1107858522700306810L;
-
-                    @Override
-                    protected void onUpdate(final AjaxRequestTarget target) {
-                    }
-                });
-
-                connObjectKey.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                    private static final long serialVersionUID = -1107858522700306810L;
-
-                    @Override
-                    protected void onUpdate(final AjaxRequestTarget target) {
-                        if (connObjectKey.getModelObject()) {
-                            mapItem.setMandatoryCondition("true");
-                            mandatory.setEnabled(false);
-                        } else {
-                            mapItem.setMandatoryCondition("false");
-                            mandatory.setEnabled(true);
-                        }
-                        target.add(mandatory);
-                    }
-                });
-
-                password.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                    private static final long serialVersionUID = -1107858522700306810L;
-
-                    @Override
-                    protected void onUpdate(final AjaxRequestTarget target) {
-                        extAttrNames.setEnabled(!mapItem.isConnObjectKey() && !password.getModelObject());
-                        extAttrNames.setModelObject(password.getModelObject()
-                                ? ConnIdSpecialAttributeName.PASSWORD : extAttrNames.getModelObject());
-                        extAttrNames.setRequired(!password.getModelObject());
-                        target.add(extAttrNames);
-
-                        setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password);
-                        target.add(connObjectKey);
-                    }
-                });
-
-                setAttrNames(mapItem.getIntMappingType(), intAttrNames);
-                setConnObjectKey(mapItem.getIntMappingType(), connObjectKey, password);
-
-                if (!AnyTypeKind.USER.name().equals(provisionTO.getAnyType())) {
-                    password.setVisible(false);
-
-                    // Changes required by clone ....
-                    extAttrNames.setEnabled(!mapItem.isConnObjectKey());
-                    if (mapItem.isPassword()) {
-                        // re-enable if and only if cloned objec mapping item was a password
-                        intAttrNames.setEnabled(true);
-                    }
-                    mapItem.setPassword(false);
-                }
-            }
-        };
-
-        mappings.setReuseItems(true);
-        mappingContainer.add(mappings);
-
-        addMappingBtn = new IndicatingAjaxButton("addMappingBtn", new ResourceModel("add")) {
-
-            private static final long serialVersionUID = -4804368561204623354L;
-
-            @Override
-            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-                getMapping().getItems().add(new MappingItemTO());
-                target.add(ResourceMappingPanel.this);
-            }
-        };
-        addMappingBtn.setDefaultFormProcessing(false);
-        addMappingBtn.setEnabled(resourceTO.getConnector() != null && resourceTO.getConnector() > 0);
-        mappingContainer.add(addMappingBtn);
-    }
-
-    @Override
-    protected void onBeforeRender() {
-        super.onBeforeRender();
-        passwordLabel.setVisible(AnyTypeKind.USER.name().equals(this.provisionTO.getAnyType()));
-    }
-
-    private List<String> getSchemaNames(final Long connectorId, final Set<ConnConfProperty> conf) {
-        final ConnInstanceTO connInstanceTO = new ConnInstanceTO();
-        connInstanceTO.setKey(connectorId);
-        connInstanceTO.getConf().addAll(conf);
-
-        // SYNCOPE-156: use provided info to give schema names (and type!) by ObjectClass
-        ConnIdObjectClassTO clazz = IterableUtils.find(
-                connRestClient.buildObjectClassInfo(connInstanceTO, true), new Predicate<ConnIdObjectClassTO>() {
-
-            @Override
-            public boolean evaluate(final ConnIdObjectClassTO object) {
-                return object.getType().equalsIgnoreCase(ResourceMappingPanel.this.provisionTO.getObjectClass());
-            }
-        });
-
-        return clazz == null ? new ArrayList<String>()
-                : IterableUtils.toList(IterableUtils.filteredIterable(clazz.getAttributes(), new Predicate<String>() {
-
-                    @Override
-                    public boolean evaluate(final String object) {
-                        return !(ConnIdSpecialAttributeName.NAME.equals(object)
-                                || ConnIdSpecialAttributeName.ENABLE.equals(object)
-                                || ConnIdSpecialAttributeName.PASSWORD.equals(object));
-                    }
-                }));
-    }
-
-    private void setEnabled() {
-        ConnInstanceTO connInstanceTO = new ConnInstanceTO();
-        connInstanceTO.setKey(resourceTO.getConnector());
-        connInstanceTO.getConf().addAll(resourceTO.getConfOverride());
-
-        boolean enabled = provisionTO != null;
-
-        this.mappingContainer.setEnabled(enabled);
-        this.mappingContainer.setVisible(enabled);
-
-        if (!enabled) {
-            getMapping().getItems().clear();
-            getMapping().setConnObjectLink(null);
-        }
-    }
-
-    /**
-     * Set attribute names for a drop down choice list.
-     *
-     * @param type attribute type.
-     * @param toBeUpdated drop down choice to be updated.
-     */
-    private void setAttrNames(final IntMappingType type, final AjaxDropDownChoicePanel<String> toBeUpdated) {
-        toBeUpdated.setRequired(true);
-        toBeUpdated.setEnabled(true);
-
-        if (type == null || type.getAnyTypeKind() == null) {
-            toBeUpdated.setChoices(Collections.<String>emptyList());
-        } else {
-            AnyTypeTO anyTypeTO = anyTypeRestClient.read(provisionTO.getAnyType());
-
-            List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
-            anyTypeClassTOs.addAll(anyTypeClassRestClient.list(anyTypeTO.getClasses()));
-            for (String auxClass : provisionTO.getAuxClasses()) {
-                anyTypeClassTOs.add(anyTypeClassRestClient.read(auxClass));
-            }
-
-            List<String> choices;
-            switch (type) {
-                case UserPlainSchema:
-                case GroupPlainSchema:
-                case AnyObjectPlainSchema:
-                    final Set<String> plains = new HashSet<>();
-                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
-                        plains.addAll(anyTypeClassTO.getPlainSchemas());
-                    }
-                    choices = new ArrayList<>(plains);
-                    break;
-
-                case UserDerivedSchema:
-                case GroupDerivedSchema:
-                case AnyObjectDerivedSchema:
-                    final Set<String> deriveds = new HashSet<>();
-                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
-                        deriveds.addAll(anyTypeClassTO.getDerSchemas());
-                    }
-                    choices = new ArrayList<>(deriveds);
-                    break;
-
-                case UserVirtualSchema:
-                case GroupVirtualSchema:
-                case AnyObjectVirtualSchema:
-                    final Set<String> virtuals = new HashSet<>();
-                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
-                        virtuals.addAll(anyTypeClassTO.getVirSchemas());
-                    }
-                    choices = new ArrayList<>(virtuals);
-                    break;
-
-                case UserKey:
-                case Password:
-                case Username:
-                case GroupKey:
-                case GroupName:
-                case AnyObjectKey:
-                default:
-                    toBeUpdated.setRequired(false);
-                    toBeUpdated.setEnabled(false);
-                    choices = Collections.<String>emptyList();
-            }
-            Collections.sort(choices);
-            toBeUpdated.setChoices(choices);
-        }
-    }
-
-    /**
-     * Enable/Disable connObjectKey checkbox.
-     *
-     * @param type attribute type.
-     * @param connObjectKey connObjectKey checkbox.
-     * @param password password checkbox.
-     */
-    private void setConnObjectKey(
-            final IntMappingType type, final AjaxCheckBoxPanel connObjectKey, final AjaxCheckBoxPanel password) {
-
-        if (type != null && type.getAnyTypeKind() != null) {
-            switch (type) {
-                case UserVirtualSchema:
-                case GroupVirtualSchema:
-                case AnyObjectVirtualSchema:
-                // Virtual connObjectKey is not permitted
-                case Password:
-                    // connObjectKey cannot be derived from password.
-                    connObjectKey.setReadOnly(true);
-                    connObjectKey.setModelObject(false);
-                    break;
-
-                default:
-                    if (password.getModelObject()) {
-                        connObjectKey.setReadOnly(true);
-                        connObjectKey.setModelObject(false);
-                    } else {
-                        connObjectKey.setReadOnly(false);
-                    }
-            }
-        }
-    }
-
-    /**
-     * Get all attribute types from a selected attribute type.
-     *
-     * @param kind entity.
-     * @return all attribute types.
-     */
-    private List<IntMappingType> getAttributeTypes(final AnyTypeKind kind) {
-        final List<IntMappingType> res = new ArrayList<>();
-
-        if (kind != null) {
-            res.addAll(IntMappingType.getAttributeTypes(kind));
-        }
-
-        return res;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/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
deleted file mode 100644
index 11c7468..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
+++ /dev/null
@@ -1,304 +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.Collection;
-import java.util.List;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.IteratorUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.lang3.SerializationUtils;
-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.rest.ResourceRestClient;
-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.form.ActionLink;
-import org.apache.syncope.client.console.wizards.AjaxWizard;
-import org.apache.syncope.client.console.wizards.provision.ProvisionWizardBuilder;
-import org.apache.syncope.common.lib.to.MappingItemTO;
-import org.apache.syncope.common.lib.to.ProvisionTO;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
-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.ResourceModel;
-
-/**
- * Modal window with Resource form.
- *
- * @param <T>
- */
-public class ResourceModal<T extends Serializable> extends AbstractResourceModal<T> {
-
-    private static final long serialVersionUID = 1734415311027284221L;
-
-    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
-
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
-    private final boolean createFlag;
-
-    public ResourceModal(
-            final BaseModal<T> modal,
-            final PageReference pageRef,
-            final IModel<ResourceTO> model,
-            final boolean createFlag) {
-
-        super(modal, pageRef);
-        this.createFlag = createFlag;
-
-        //--------------------------------
-        // Resource details panel
-        //--------------------------------
-        tabs.add(new AbstractTab(new ResourceModel("general")) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new ResourceDetailsPanel(panelId, model, createFlag);
-            }
-        });
-        //--------------------------------
-
-        //--------------------------------
-        // Resource provision panels
-        //--------------------------------
-        final ListViewPanel.Builder<ProvisionTO> builder = new ListViewPanel.Builder<ProvisionTO>(ProvisionTO.class,
-                pageRef) {
-
-            private static final long serialVersionUID = 4907732721283972943L;
-
-            @Override
-            protected ProvisionTO getActualItem(final ProvisionTO item, final List<ProvisionTO> list) {
-                return item == null
-                        ? null
-                        : IteratorUtils.find(list.iterator(), new Predicate<ProvisionTO>() {
-
-                            @Override
-                            public boolean evaluate(final ProvisionTO in) {
-                                return ((item.getKey() == null && in.getKey() == null)
-                                        || (in.getKey() != null && in.getKey().equals(item.getKey())))
-                                        && ((item.getAnyType() == null && in.getAnyType() == null)
-                                        || (in.getAnyType() != null && in.getAnyType().equals(item.getAnyType())));
-                            }
-                        });
-            }
-        };
-
-        builder.setItems(model.getObject().getProvisions());
-        builder.includes("anyType", "objectClass", "auxClasses");
-        builder.setReuseItem(false);
-
-        builder.
-                addAction(new ActionLink<ProvisionTO>() {
-
-                    private static final long serialVersionUID = -3722207913631435504L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
-                        send(pageRef.getPage(), Broadcast.DEPTH,
-                                new AjaxWizard.NewItemActionEvent<>(provisionTO, 2, target));
-                    }
-                }, ActionLink.ActionType.MAPPING, StandardEntitlement.RESOURCE_UPDATE).
-                addAction(new ActionLink<ProvisionTO>() {
-
-                    private static final long serialVersionUID = -3722207913631435524L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
-                        provisionTO.setSyncToken(null);
-                        send(pageRef.getPage(), Broadcast.DEPTH, new ListViewPanel.ListViewReload(target));
-                    }
-                }, ActionLink.ActionType.RESET_TIME, StandardEntitlement.RESOURCE_UPDATE).
-                addAction(new ActionLink<ProvisionTO>() {
-
-                    private static final long serialVersionUID = -3722207913631435534L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
-                        final ProvisionTO clone = SerializationUtils.clone(provisionTO);
-                        clone.setKey(0L);
-                        clone.setAnyType(null);
-                        clone.setObjectClass(null);
-                        send(pageRef.getPage(), Broadcast.DEPTH, new AjaxWizard.NewItemActionEvent<>(clone, target));
-                    }
-                }, ActionLink.ActionType.CLONE, StandardEntitlement.RESOURCE_CREATE).
-                addAction(new ActionLink<ProvisionTO>() {
-
-                    private static final long serialVersionUID = -3722207913631435544L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
-                        model.getObject().getProvisions().remove(provisionTO);
-                        send(pageRef.getPage(), Broadcast.DEPTH, new ListViewPanel.ListViewReload(target));
-                    }
-                }, ActionLink.ActionType.DELETE, StandardEntitlement.RESOURCE_DELETE);
-
-        builder.addNewItemPanelBuilder(new ProvisionWizardBuilder(model.getObject(), pageRef));
-
-        tabs.add(new AbstractTab(new ResourceModel("provisions")) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return builder.build(panelId);
-            }
-        });
-        //--------------------------------
-
-        //--------------------------------
-        // Resource connector configuration panel
-        //--------------------------------
-        tabs.add(new AbstractTab(new ResourceModel("connectorProperties")) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                final ResourceConnConfPanel panel = new ResourceConnConfPanel(panelId, model, createFlag) {
-
-                    private static final long serialVersionUID = -1128269449868933504L;
-
-                    @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", " ");
-                    }
-                };
-                MetaDataRoleAuthorizationStrategy.authorize(panel, ENABLE, StandardEntitlement.CONNECTOR_READ);
-                return panel;
-            }
-        });
-        //--------------------------------
-
-        //--------------------------------
-        // Resource connector capabilities panel
-        //--------------------------------
-        tabs.add(new AbstractTab(new ResourceModel("connectorCapabilities")) {
-
-            private static final long serialVersionUID = -6815067322125799251L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                ResourceConnCapabilitiesPanel panel = new ResourceConnCapabilitiesPanel(
-                        panelId,
-                        model,
-                        connectorRestClient.read(model.getObject().getConnector()).getCapabilities());
-                MetaDataRoleAuthorizationStrategy.authorize(panel, ENABLE, StandardEntitlement.CONNECTOR_READ);
-                return panel;
-            }
-        });
-        //--------------------------------
-
-        //--------------------------------
-        // Resource security panel
-        //--------------------------------
-        tabs.add(new AbstractTab(new ResourceModel("security")) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new ResourceSecurityPanel(panelId, model);
-            }
-        });
-        //--------------------------------
-    }
-
-    @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 ResourceTO resourceTO = (ResourceTO) form.getDefaultModelObject();
-
-        boolean connObjectKeyError = false;
-
-        final Collection<ProvisionTO> provisions = new ArrayList<>(resourceTO.getProvisions());
-
-        for (ProvisionTO provision : provisions) {
-            if (provision != null) {
-                if (provision.getMapping() == null || provision.getMapping().getItems().isEmpty()) {
-                    resourceTO.getProvisions().remove(provision);
-                } else {
-                    long uConnObjectKeyCount = IterableUtils.countMatches(
-                            provision.getMapping().getItems(), new Predicate<MappingItemTO>() {
-
-                        @Override
-                        public boolean evaluate(final MappingItemTO item) {
-                            return item.isConnObjectKey();
-                        }
-                    });
-
-                    connObjectKeyError = uConnObjectKeyCount != 1;
-                }
-            }
-        }
-
-        if (connObjectKeyError) {
-            error(getString("connObjectKeyValidation"));
-        } else {
-            try {
-                if (createFlag) {
-                    final ResourceTO actual = resourceRestClient.create(resourceTO);
-                    send(pageRef.getPage(), Broadcast.BREADTH, new CreateEvent(
-                            actual.getKey(),
-                            actual.getKey(),
-                            TopologyNode.Kind.RESOURCE,
-                            actual.getConnector(),
-                            target));
-                } else {
-                    resourceRestClient.update(resourceTO);
-                }
-
-                info(getString(Constants.OPERATION_SUCCEEDED));
-                modal.close(target);
-            } catch (Exception e) {
-                LOG.error("Failure managing {}", resourceTO, e);
-                error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
-            }
-        }
-        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java
deleted file mode 100644
index 25e22ce..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java
+++ /dev/null
@@ -1,137 +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.Map;
-import org.apache.syncope.client.console.rest.PolicyRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.PolicyRenderer;
-import org.apache.syncope.common.lib.policy.AbstractPolicyTO;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.common.lib.types.PolicyType;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-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.LoadableDetachableModel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
-
-public class ResourceSecurityPanel extends Panel {
-
-    private static final long serialVersionUID = -7982691107029848579L;
-
-    private final PolicyRestClient policyRestClient = new PolicyRestClient();
-
-    private final IModel<Map<Long, String>> passwordPolicies = new LoadableDetachableModel<Map<Long, String>>() {
-
-        private static final long serialVersionUID = 5275935387613157437L;
-
-        @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
-            for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PASSWORD)) {
-                res.put(policyTO.getKey(), policyTO.getDescription());
-            }
-            return res;
-        }
-    };
-
-    private final IModel<Map<Long, String>> accountPolicies = new LoadableDetachableModel<Map<Long, String>>() {
-
-        private static final long serialVersionUID = -2012833443695917883L;
-
-        @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
-            for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.ACCOUNT)) {
-                res.put(policyTO.getKey(), policyTO.getDescription());
-            }
-            return res;
-        }
-    };
-
-    private final IModel<Map<Long, String>> pullPolicies = new LoadableDetachableModel<Map<Long, String>>() {
-
-        private static final long serialVersionUID = -2012833443695917883L;
-
-        @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
-            for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PULL)) {
-                res.put(policyTO.getKey(), policyTO.getDescription());
-            }
-            return res;
-        }
-    };
-
-    public ResourceSecurityPanel(final String id, final IModel<ResourceTO> model) {
-        super(id);
-        setOutputMarkupId(true);
-
-        final WebMarkupContainer container = new WebMarkupContainer("container");
-        container.setOutputMarkupId(true);
-        container.setRenderBodyOnly(true);
-        add(container);
-
-        // -------------------------------
-        // Password policy selection
-        // -------------------------------
-        AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<>(
-                "passwordPolicy",
-                new ResourceModel("passwordPolicy", "passwordPolicy").getObject(),
-                new PropertyModel<Long>(model, "passwordPolicy"),
-                false);
-        passwordPolicy.setChoiceRenderer(new PolicyRenderer(passwordPolicies));
-        passwordPolicy.setChoices(new ArrayList<>(passwordPolicies.getObject().keySet()));
-        ((DropDownChoice<?>) passwordPolicy.getField()).setNullValid(true);
-        container.add(passwordPolicy);
-        // -------------------------------
-
-        // -------------------------------
-        // Account policy selection
-        // -------------------------------
-        AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<>(
-                "accountPolicy",
-                new ResourceModel("accountPolicy", "accountPolicy").getObject(),
-                new PropertyModel<Long>(model, "accountPolicy"),
-                false);
-        accountPolicy.setChoiceRenderer(new PolicyRenderer(accountPolicies));
-        accountPolicy.setChoices(new ArrayList<>(accountPolicies.getObject().keySet()));
-        ((DropDownChoice<?>) accountPolicy.getField()).setNullValid(true);
-        container.add(accountPolicy);
-        // -------------------------------
-
-        // -------------------------------
-        // Pull policy selection
-        // -------------------------------
-        AjaxDropDownChoicePanel<Long> pullPolicy = new AjaxDropDownChoicePanel<>(
-                "pullPolicy",
-                new ResourceModel("pullPolicy", "pullPolicy").getObject(),
-                new PropertyModel<Long>(model, "pullPolicy"),
-                false);
-        pullPolicy.setChoiceRenderer(new PolicyRenderer(pullPolicies));
-        pullPolicy.setChoices(new ArrayList<>(pullPolicies.getObject().keySet()));
-        ((DropDownChoice<?>) pullPolicy.getField()).setNullValid(true);
-        container.add(pullPolicy);
-        // -------------------------------
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
index cbb5809..755ed04 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
@@ -75,7 +75,8 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleHandler, Role
     protected List<IColumn<RoleTO, String>> getColumns() {
         final List<IColumn<RoleTO, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<RoleTO, String>(new ResourceModel("key"), "key", "key"));
+        columns.add(new PropertyColumn<RoleTO, String>(
+                new ResourceModel("key"), "key", "key"));
         columns.add(new PropertyColumn<RoleTO, String>(
                 new ResourceModel("entitlements", "Entitlements"), null, "entitlements"));
         columns.add(new PropertyColumn<RoleTO, String>(

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
index 8280e58..84a4745 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
@@ -19,20 +19,15 @@
 package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.Panel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,7 +36,7 @@ import org.slf4j.LoggerFactory;
  *
  * @param <T>
  */
-public abstract class TogglePanel<T extends Serializable> extends Panel {
+public abstract class TogglePanel<T extends Serializable> extends WizardMgtPanel<T> {
 
     private static final long serialVersionUID = -2025535531121434056L;
 
@@ -59,15 +54,14 @@ public abstract class TogglePanel<T extends Serializable> extends Panel {
 
     private final Label header;
 
-    private List<Component> outerObjects = new ArrayList<>();
-
     public TogglePanel(final String id) {
-        super(id);
+        super(id, true);
         setRenderBodyOnly(true);
         setOutputMarkupId(true);
+        disableContainerAutoRefresh();
 
         container = new WebMarkupContainer("togglePanelContainer");
-        add(container.setMarkupId(id));
+        super.addInnerObject(container.setMarkupId(id));
 
         header = new Label("label", StringUtils.EMPTY);
         header.setOutputMarkupId(true);
@@ -96,31 +90,6 @@ public abstract class TogglePanel<T extends Serializable> extends Panel {
                 // do nothing
             }
         }));
-
-        add(new ListView<Component>("outerObjectsRepeater", outerObjects) {
-
-            private static final long serialVersionUID = -9180479401817023838L;
-
-            @Override
-            protected void populateItem(final ListItem<Component> item) {
-                item.add(item.getModelObject());
-            }
-
-        });
-
-    }
-
-    /**
-     * Add object outside the main container.
-     * Use this method just to be not influenced by specific inner object css'.
-     * Be sure to provide <tt>outer</tt> as id.
-     *
-     * @param childs components to be added.
-     * @return the current panel instance.
-     */
-    public TogglePanel<T> addOuterObject(final Component... childs) {
-        outerObjects.addAll(Arrays.asList(childs));
-        return this;
     }
 
     /**
@@ -129,6 +98,7 @@ public abstract class TogglePanel<T extends Serializable> extends Panel {
      * @param childs components to be added.
      * @return the current panel instance.
      */
+    @Override
     public TogglePanel<T> addInnerObject(final Component... childs) {
         container.addOrReplace(childs);
         return this;

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
index 8a7e64e..6f7210a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
@@ -32,7 +32,7 @@ import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.panels.AbstractResourceModal.CreateEvent;
+import org.apache.syncope.client.console.wizards.resources.AbstractResourceWizardBuilder.CreateEvent;
 import org.apache.syncope.client.console.rest.BaseRestClient;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.ResourceRestClient;

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/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 b83fae2..7e82c3e 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
@@ -38,10 +38,7 @@ public class TopologyNodePanel extends Panel implements IAjaxIndicatorAware {
 
     }
 
-    public TopologyNodePanel(
-            final String id,
-            final TopologyNode node) {
-
+    public TopologyNodePanel(final String id, final TopologyNode node) {
         super(id);
 
         final String resourceName = node.getDisplayName().length() > 14

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index bb75836..0c83e9b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -25,8 +25,8 @@ 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.panels.ConnObjects;
-import org.apache.syncope.client.console.panels.ConnectorModal;
-import org.apache.syncope.client.console.panels.ResourceModal;
+import org.apache.syncope.client.console.wizards.resources.ConnectorWizardBuilder;
+import org.apache.syncope.client.console.wizards.resources.ResourceWizardBuilder;
 import org.apache.syncope.client.console.panels.TogglePanel;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.ResourceRestClient;
@@ -36,6 +36,7 @@ import org.apache.syncope.client.console.tasks.SchedTasks;
 import org.apache.syncope.client.console.tasks.PullTasks;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.IndicatingOnConfirmAjaxLink;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
@@ -63,20 +64,15 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
     private final WebMarkupContainer container;
 
-    private final PageReference pageRef;
-
-    protected final BaseModal<Serializable> resourceModal;
-
     protected final BaseModal<Serializable> taskModal;
 
     public TopologyTogglePanel(final String id, final PageReference pageRef) {
         super(id);
         this.pageRef = pageRef;
 
-        resourceModal = new BaseModal<>("outer");
-        resourceModal.addSumbitButton();
-        resourceModal.size(Modal.Size.Large);
-        addOuterObject(resourceModal);
+        modal.size(Modal.Size.Large);
+        setFooterVisibility(false);
+        setWindowClosedReloadCallback(modal);
 
         taskModal = new BaseModal<>("outer");
         taskModal.size(Modal.Size.Large);
@@ -155,16 +151,17 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
                 modelObject.setLocation(node.getKey().toString());
 
                 final IModel<ConnInstanceTO> model = new CompoundPropertyModel<>(modelObject);
-                resourceModal.setFormModel(model);
+                modal.setFormModel(model);
 
-                target.add(resourceModal.setContent(new ConnectorModal(resourceModal, pageRef, model)));
+                target.add(modal.setContent(new ConnectorWizardBuilder(modelObject, pageRef).
+                        build(BaseModal.CONTENT_ID, AjaxWizard.Mode.CREATE)));
 
-                resourceModal.header(new Model<>(MessageFormat.format(getString("connector.new"), node.getKey())));
+                modal.header(new Model<>(MessageFormat.format(getString("connector.new"), node.getKey())));
 
                 MetaDataRoleAuthorizationStrategy.
-                        authorize(resourceModal.addSumbitButton(), ENABLE, StandardEntitlement.CONNECTOR_CREATE);
+                        authorize(modal.getForm(), ENABLE, StandardEntitlement.CONNECTOR_CREATE);
 
-                resourceModal.show(true);
+                modal.show(true);
             }
         };
         fragment.add(create);
@@ -208,16 +205,17 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
                 modelObject.setConnectorDisplayName(node.getDisplayName());
 
                 final IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject);
-                resourceModal.setFormModel(model);
+                modal.setFormModel(model);
 
-                target.add(resourceModal.setContent(new ResourceModal<>(resourceModal, pageRef, model, true)));
+                target.add(modal.setContent(new ResourceWizardBuilder(modelObject, pageRef).
+                        build(BaseModal.CONTENT_ID, AjaxWizard.Mode.CREATE)));
 
-                resourceModal.header(new Model<>(MessageFormat.format(getString("resource.new"), node.getKey())));
+                modal.header(new Model<>(MessageFormat.format(getString("resource.new"), node.getKey())));
 
                 MetaDataRoleAuthorizationStrategy.
-                        authorize(resourceModal.addSumbitButton(), ENABLE, StandardEntitlement.RESOURCE_CREATE);
+                        authorize(modal.getForm(), ENABLE, StandardEntitlement.RESOURCE_CREATE);
 
-                resourceModal.show(true);
+                modal.show(true);
             }
         };
         MetaDataRoleAuthorizationStrategy.authorize(create, ENABLE, StandardEntitlement.RESOURCE_CREATE);
@@ -232,16 +230,17 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
                 final ConnInstanceTO modelObject = connectorRestClient.read(Long.class.cast(node.getKey()));
 
                 final IModel<ConnInstanceTO> model = new CompoundPropertyModel<>(modelObject);
-                resourceModal.setFormModel(model);
+                modal.setFormModel(model);
 
-                target.add(resourceModal.setContent(new ConnectorModal(resourceModal, pageRef, model)));
+                target.add(modal.setContent(new ConnectorWizardBuilder(modelObject, pageRef).
+                        build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT)));
 
-                resourceModal.header(new Model<>(MessageFormat.format(getString("connector.edit"), node.getKey())));
+                modal.header(new Model<>(MessageFormat.format(getString("connector.edit"), node.getKey())));
 
                 MetaDataRoleAuthorizationStrategy.
-                        authorize(resourceModal.addSumbitButton(), ENABLE, StandardEntitlement.CONNECTOR_UPDATE);
+                        authorize(modal.getForm(), ENABLE, StandardEntitlement.CONNECTOR_UPDATE);
 
-                resourceModal.show(true);
+                modal.show(true);
             }
         };
         MetaDataRoleAuthorizationStrategy.authorize(edit, ENABLE, StandardEntitlement.CONNECTOR_UPDATE);
@@ -282,16 +281,17 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
                 ResourceTO modelObject = resourceRestClient.read(node.getKey().toString());
 
                 IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject);
-                resourceModal.setFormModel(model);
+                modal.setFormModel(model);
 
-                target.add(resourceModal.setContent(new ResourceModal<>(resourceModal, pageRef, model, false)));
+                target.add(modal.setContent(new ResourceWizardBuilder(modelObject, pageRef).
+                        build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT)));
 
-                resourceModal.header(new Model<>(MessageFormat.format(getString("resource.edit"), node.getKey())));
+                modal.header(new Model<>(MessageFormat.format(getString("resource.edit"), node.getKey())));
 
                 MetaDataRoleAuthorizationStrategy.
-                        authorize(resourceModal.addSumbitButton(), ENABLE, StandardEntitlement.RESOURCE_UPDATE);
+                        authorize(modal.getForm(), ENABLE, StandardEntitlement.RESOURCE_UPDATE);
 
-                resourceModal.show(true);
+                modal.show(true);
             }
         };
         MetaDataRoleAuthorizationStrategy.authorize(edit, ENABLE, StandardEntitlement.RESOURCE_UPDATE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
index 5041f1c..e49b1cf 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
@@ -229,7 +229,9 @@ public class BaseModal<T extends Serializable> extends Modal<T> {
     /**
      * Generic modal event.
      */
-    public static class ModalEvent {
+    public static class ModalEvent implements Serializable {
+
+        private static final long serialVersionUID = 2668922412196063559L;
 
         /**
          * Request target.

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
index 6710f73..1334bba 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
@@ -36,6 +36,8 @@ import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.PasswordTextField;
@@ -184,4 +186,13 @@ public class ConnConfPropertyListView extends ListView<ConnConfProperty> {
             }
         };
     }
+
+    @Override
+    public void renderHead(final IHeaderResponse response) {
+        super.renderHead(response);
+        if (getModelObject().isEmpty()) {
+            response.render(OnDomReadyHeaderItem.forScript(
+                    String.format("$('#emptyPlaceholder').append(\"%s\")", getString("property.empty.list"))));
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
index a03ccf5..94874b2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
@@ -96,7 +96,7 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
 
     protected abstract void onCancelInternal();
 
-    protected abstract Serializable onApplyInternal();
+    protected abstract Serializable onApplyInternal(final AjaxRequestTarget target);
 
     /**
      * @see org.apache.wicket.extensions.wizard.Wizard#onCancel()
@@ -121,7 +121,7 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
     public final void onFinish() {
         final AjaxRequestTarget target = RequestCycle.get().find(AjaxRequestTarget.class);
         try {
-            final Serializable res = onApplyInternal();
+            final Serializable res = onApplyInternal(target);
             send(AjaxWizard.this, Broadcast.BUBBLE, new NewItemFinishEvent<>(item, target).setResult(res));
         } catch (Exception e) {
             LOG.error("Wizard error on finish", e);
@@ -252,7 +252,7 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
 
     @Override
     public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-        onApplyInternal();
+        onApplyInternal(target);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
index 3240a6b..050797d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
@@ -20,12 +20,16 @@ package org.apache.syncope.client.console.wizards;
 
 import java.io.Serializable;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.extensions.wizard.WizardModel;
 
 public abstract class AjaxWizardBuilder<T extends Serializable> extends AbstractModalPanelBuilder<T> {
 
     private static final long serialVersionUID = 5241745929825564456L;
 
+    protected AjaxWizard.Mode mode = AjaxWizard.Mode.CREATE;
+
     /**
      * Construct.
      *
@@ -66,6 +70,8 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
      * @return wizard.
      */
     public AjaxWizard<T> build(final String id, final AjaxWizard.Mode mode) {
+        this.mode = mode;
+
         // ge the specified item if available
         final T modelObject = newModelObject();
 
@@ -79,11 +85,51 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
             }
 
             @Override
-            protected Serializable onApplyInternal() {
-                return AjaxWizardBuilder.this.onApplyInternal(modelObject);
+            protected Serializable onApplyInternal(final AjaxRequestTarget target) {
+                final Serializable res = AjaxWizardBuilder.this.onApplyInternal(modelObject);
+
+                Serializable payload;
+                switch (mode) {
+                    case CREATE:
+                        payload = getCreateCustomPayloadEvent(res, target);
+                        break;
+                    case EDIT:
+                        payload = getEditCustomPayloadEvent(res, target);
+                        break;
+                    default:
+                        payload = null;
+                }
+
+                if (payload != null) {
+                    send(pageRef.getPage(), Broadcast.BUBBLE, payload);
+                }
+
+                return res;
             }
         };
     }
 
     protected abstract WizardModel buildModelSteps(final T modelObject, final WizardModel wizardModel);
+
+    /**
+     * Override to send custom events after create.
+     *
+     * @param afterObject after applied changes object.
+     * @param target
+     * @return payload to be sent.
+     */
+    protected Serializable getCreateCustomPayloadEvent(final Serializable afterObject, final AjaxRequestTarget target) {
+        return null;
+    }
+
+    /**
+     * Override to send custom events after edit.
+     *
+     * @param afterObject after applied changes object.
+     * @param target
+     * @return payload to be sent.
+     */
+    protected Serializable getEditCustomPayloadEvent(final Serializable afterObject, final AjaxRequestTarget target) {
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
index 49a1180..2a61de7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
@@ -19,6 +19,9 @@
 package org.apache.syncope.client.console.wizards;
 
 import java.io.Serializable;
+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.commons.Constants;
 import org.apache.syncope.client.console.panels.ModalPanel;
@@ -30,11 +33,13 @@ import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.event.IEvent;
 import org.apache.wicket.event.IEventSource;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.CompoundPropertyModel;
@@ -56,6 +61,8 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
 
     private final boolean wizardInModal;
 
+    private boolean containerAutoRefresh = true;
+
     protected PageReference pageRef;
 
     protected final AjaxLink<?> addAjaxLink;
@@ -68,7 +75,9 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
 
     protected boolean showResultPage = false;
 
-    protected final BaseModal<T> modal = new BaseModal<T>("modal") {
+    private final List<Component> outerObjects = new ArrayList<>();
+
+    protected final BaseModal<T> modal = new BaseModal<T>("outer") {
 
         private static final long serialVersionUID = 389935548143327858L;
 
@@ -80,12 +89,6 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
 
     };
 
-    protected final BaseModal<T> altDefaultModal = new BaseModal<>("alternativeDefaultModal");
-
-    protected final BaseModal<T> displayAttributeModal = new BaseModal<>("displayAttributeModal");
-
-    protected final BaseModal<Serializable> utilityModal = new BaseModal<>("utilityModal");
-
     protected WizardMgtPanel(final String id) {
         this(id, false);
     }
@@ -97,14 +100,11 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
         this.actualId = wizardInModal ? BaseModal.CONTENT_ID : WIZARD_ID;
         this.wizardInModal = wizardInModal;
 
-        super.add(modal);
-        super.add(altDefaultModal);
-        super.add(displayAttributeModal);
-        super.add(utilityModal);
+        outerObjects.add(modal);
 
         container = new WebMarkupContainer("container");
         container.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true);
-        super.add(container);
+        add(container);
 
         initialFragment = new Fragment("content", "default", this);
         container.addOrReplace(initialFragment);
@@ -122,6 +122,17 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
         addAjaxLink.setEnabled(false);
         addAjaxLink.setVisible(false);
         initialFragment.addOrReplace(addAjaxLink);
+
+        add(new ListView<Component>("outerObjectsRepeater", outerObjects) {
+
+            private static final long serialVersionUID = -9180479401817023838L;
+
+            @Override
+            protected void populateItem(final ListItem<Component> item) {
+                item.add(item.getModelObject());
+            }
+
+        });
     }
 
     @Override
@@ -195,11 +206,18 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
                 }
             }
 
-            target.add(container);
+            if (containerAutoRefresh) {
+                target.add(container);
+            }
         }
         super.onEvent(event);
     }
 
+    protected final WizardMgtPanel<T> disableContainerAutoRefresh() {
+        containerAutoRefresh = false;
+        return this;
+    }
+
     /*
      * Override this method to specify your custom result body panel.
      */
@@ -211,13 +229,27 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
         };
     }
 
-    @Override
-    public Component add(final Behavior... behaviors) {
-        return super.add(behaviors);
+    /**
+     * Add object inside the main container.
+     *
+     * @param childs components to be added.
+     * @return the current panel instance.
+     */
+    public MarkupContainer addInnerObject(final Component... childs) {
+        return initialFragment.add(childs);
     }
 
-    public final MarkupContainer addInnerObject(final Component childs) {
-        return initialFragment.add(childs);
+    /**
+     * Add object outside the main container.
+     * Use this method just to be not influenced by specific inner object css'.
+     * Be sure to provide <tt>outer</tt> as id.
+     *
+     * @param childs components to be added.
+     * @return the current panel instance.
+     */
+    public final WizardMgtPanel<T> addOuterObject(final Component... childs) {
+        outerObjects.addAll(Arrays.asList(childs));
+        return this;
     }
 
     public <B extends AbstractModalPanelBuilder<T>> WizardMgtPanel<T> setPageRef(final PageReference pageRef) {
@@ -253,6 +285,32 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
     }
 
     /**
+     * Set window close callback for the given modal.
+     *
+     * @param modal target modal.
+     */
+    protected final 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);
+                customActionOnCloseCallback(target);
+            }
+        });
+    }
+
+    /**
+     * Custom action to perform on close callback.
+     *
+     * @param target Ajax request target.
+     */
+    protected void customActionOnCloseCallback(final AjaxRequestTarget target) {
+    }
+
+    /**
      * PanelInWizard abstract builder.
      *
      * @param <T> list item reference type.

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
index 3d67497..5115a99 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
@@ -126,8 +126,7 @@ public class AuxClasses extends WizardStep {
                 }
             }).hideLabel().setOutputMarkupId(true));
 
-            final ArrayList<String> dynamics = CollectionUtils.collect(dyngroups,
-                    new Transformer<Long, String>() {
+            final ArrayList<String> dynamics = CollectionUtils.collect(dyngroups, new Transformer<Long, String>() {
 
                 @Override
                 public String transform(final Long input) {


[3/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
deleted file mode 100644
index 515975c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
+++ /dev/null
@@ -1,67 +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.
-general=Dettagli Risorsa
-provisions=Provisioning
-umapping=Mapping utenti
-connectorProperties=Propriet\u00e0\u00a0Connettore
-security=Sicurezza
-required_alert=Tutti i campi sono richiesti
-connector=Connettore
-existing_resources=Risorse esistenti
-action=Azione
-edit_attribute=Modifica risorsa
-title=Risorsa
-extAttrNames=Attributi esterni
-intMappingTypes=Tipo mapping interno
-entity=Entit&agrave;
-groupSchema=Schema Gruppo
-connObjectKey=ConnObjectKey
-mandatoryCondition=Obbligatorio
-password=Password
-purpose=Scopo
-mappingUserSchema=Mapping User Schema
-mappingGroupSchema=Mapping Group Schema
-delete=Rimuovi
-intAttrNames=Attributi interni
-enforceMandatoryCondition=Abilita mandatory condition
-fieldName=Nome campo
-
-connObjectKeyValidation=Deve essere definito esattamente un ConnObjectKey
-propagationMode=Modalit\u00e0 di propagazione
-connObjectLink=ConnObjectLink
-enable=Abilita
-
-createTraceLevel=Livello di tracciamento delle creazioni
-updateTraceLevel=Livello di tracciamento degli aggiornamenti
-deleteTraceLevel=Livello di tracciamento delle cancellazioni
-pullTraceLevel=Livello di tracciamento delle pull
-propagationPriority=Priorit\u00e0 in propagazione
-
-success_connection=Connessione avvenuta con successo
-error_connection=Connessione non riuscita
-check=Verifica connessione
-propagationActionsClassNames=Azioni di Propagazione
-gmapping=Mapping gruppi
-new=Nuova risorsa
-randomPwdIfNotProvided=Genera password casuali se mancanti
-
-anyType=Oggetto
-objectClass=Classe
-__ACCOUNT__=ACCOUNT
-__GROUP__=GROUP
-connectorCapabilities=Capabilitiey Connettore
-auxClasses=Classi Ausiliarie

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
deleted file mode 100644
index a73218f..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
+++ /dev/null
@@ -1,67 +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.
-general=Detalhes de Recursos
-provisions=Provisioning
-umapping=Mapeamento de usu\u00e1rios
-connectorProperties=Propriedades do Conector
-security=Seguran\u00e7a
-required_alert=Todos os campos deste formul\u00e1rio s\u00e3o obrigat\u00f3rios
-connector=Conector
-existing_resources=Recursos Existentes
-action=A\u00e7\u00e3o
-edit_attribute=Alterar Recurso
-title=Recurso
-extAttrNames=Atributos Externos
-intMappingTypes=Tipos internos de mapeamentos
-entity=Entidade
-groupSchema=Esquema de Grupo
-connObjectKey=ConnObjectKey
-mandatoryCondition=Obrigat\u00f3rio
-password=Senha
-purpose=Prop\u00f3sito
-mappingUserSchema=Esquema de mapeamento de usu\u00e1rio
-mappingGroupSchema=Esquema de mapeamento de grupo
-delete=Excluir
-intAttrNames=Atributos internos
-enforceMandatoryCondition=Aplicar condi\u00e7\u00e3o obrigat\u00f3ria
-fieldName=Nome do Campo
-
-connObjectKeyValidation=Precisa ser exatamente um ConnObjectKey
-propagationMode=Modo de propaga\u00e7\u00e3o
-connObjectLink=ConnObjectLink
-enable=Habilitado
-
-createTraceLevel=Criar n\u00edvel de trace
-updateTraceLevel=Atualizar n\u00edvel de trace
-deleteTraceLevel=Excluir n\u00edvel de trace
-pullTraceLevel=N\u00edvel de trace de pull
-propagationPriority=Prioridade de propaga\u00e7\u00e3o
-
-success_connection=Conex\u00e3o com sucesso
-error_connection=Conex\u00e3o sem sucesso
-check=Verificar a conex\u00e3o
-propagationActionsClassNames=A\u00e7\u00f5es de Propaga\u00e7\u00e3o
-gmapping=Mapeamento de grupos
-new=Novo recurso
-randomPwdIfNotProvided=Gerar senhas aleat\u00f3rias quando n\u00e3o houver
-
-anyType=Objeto
-objectClass=Classe
-__ACCOUNT__=ACCOUNT
-__GROUP__=GROUP
-connectorCapabilities=Capacidades do Conector
-auxClasses=Classes Auxiliares

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_ru.properties
deleted file mode 100644
index 48b790f..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_ru.properties
+++ /dev/null
@@ -1,115 +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.
-# general=Сведения о ресурсе
-general=\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0435
-# provisions=Предоставление ресурса
-provisions=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430
-# connectorProperties=Настройки коннектора
-connectorProperties=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430
-# security=Настройки безопасности
-security=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438
-
-# umapping=Маппинг для учетных записей
-umapping=\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0434\u043b\u044f \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439
-# required_alert=Все поля обязательны для заполнения
-required_alert=\u0412\u0441\u0435 \u043f\u043e\u043b\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
-# connector=Коннектор
-connector=\u041a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440
-# existing_resources=Существующие ресурсы
-existing_resources=\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b
-# action=Действие
-action=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435
-# edit_attribute=Изменить ресурс
-edit_attribute=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441
-# title=Ресурс
-title=\u0420\u0435\u0441\u0443\u0440\u0441
-# extAttrNames=Внешние атрибуты
-extAttrNames=\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-# intMappingTypes=Тип внутреннего маппинга
-intMappingTypes=\u0422\u0438\u043f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430
-# entity=Объект
-entity=\u041e\u0431\u044a\u0435\u043a\u0442
-# groupSchema=Атрибут группы
-groupSchema=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u0433\u0440\u0443\u043f\u043f\u044b
-# connObjectKey=Ключевой атрибут ресурса
-connObjectKey=\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u0430
-# mandatoryCondition=Обязательный
-mandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439
-# password=Пароль
-password=\u041f\u0430\u0440\u043e\u043b\u044c
-# purpose=Назначение
-purpose=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
-# mappingUserSchema=Маппинг атрибутов учетной записи
-mappingUserSchema=\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438
-# mappingGroupSchema=Маппинг атрибутов группы
-mappingGroupSchema=\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0433\u0440\u0443\u043f\u043f\u044b
-# delete=Удалить
-delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-# intAttrNames=Внутренние атрибуты
-intAttrNames=\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-# enforceMandatoryCondition=Обязательный (принудительно)
-enforceMandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e)
-# fieldName=Название поля
-fieldName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f
-
-# connObjectKeyValidation=Ключевой объект может быть только один
-connObjectKeyValidation=\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d
-# propagationMode=Режим выполнения действий
-propagationMode=\u0420\u0435\u0436\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
-# connObjectLink=Критерий совпадения
-connObjectLink=\u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f
-# enable=Включить
-enable=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c
-
-# createTraceLevel=Уровень логирования действий по Созданию объектов
-createTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
-# updateTraceLevel=Уровень логирования действий по Обновлению объектов
-updateTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
-# deleteTraceLevel=Уровень логирования действий по Удалению объектов
-deleteTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
-# pullTraceLevel=Уровень логирования получения данных
-pullTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445
-# propagationPriority=Приоритет выполнения действий
-propagationPriority=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
-
-# success_connection=Подключение выполнено успешно
-success_connection=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e
-# error_connection=Во время подключения произошла ошибка
-error_connection=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430
-# check=Проверить подключение
-check=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435
-# propagationActionsClassNames=Выполняемые действия
-propagationActionsClassNames=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-# gmapping=Маппинг для групп
-gmapping=\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f
-# new=Создать ресурс
-new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441
-# randomPwdIfNotProvided=Сгенерировать случайный пароль, если он не задан
-randomPwdIfNotProvided=\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0437\u0430\u0434\u0430\u043d
-
-# anyType=Тип объекта
-anyType=\u0422\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430
-# objectClass=Класс объекта
-objectClass=\u041a\u043b\u0430\u0441\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430
-# __ACCOUNT__=УЧЕТНАЯ ЗАПИСЬ
-__ACCOUNT__=\u0423\u0427\u0415\u0422\u041d\u0410\u042f \u0417\u0410\u041f\u0418\u0421\u042c
-# __GROUP__=ГРУППА
-__GROUP__=\u0413\u0420\u0423\u041f\u041f\u0410
-# connectorCapabilities=Действия коннектора
-connectorCapabilities=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430
-# auxClasses=Вспомогательные классы
-auxClasses=\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.html
deleted file mode 100644
index 5177e26..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.html
+++ /dev/null
@@ -1,33 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <div wicket:id="container" class="summarize">
-      <span wicket:id="accountPolicy">
-        [panel for dynamic input type markup]
-      </span>
-      <span wicket:id="passwordPolicy">
-        [panel for dynamic input type markup]
-      </span>
-      <span wicket:id="pullPolicy">
-        [panel for dynamic input type markup]
-      </span>
-    </div>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.properties
deleted file mode 100644
index 0d2d9c4..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel.properties
+++ /dev/null
@@ -1,19 +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.
-passwordPolicy=Password Policy
-accountPolicy=Account Policy
-pullPolicy=Pull Policy

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_it.properties
deleted file mode 100644
index 0d2d9c4..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_it.properties
+++ /dev/null
@@ -1,19 +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.
-passwordPolicy=Password Policy
-accountPolicy=Account Policy
-pullPolicy=Pull Policy

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_pt_BR.properties
deleted file mode 100644
index 48e925f..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_pt_BR.properties
+++ /dev/null
@@ -1,19 +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.
-passwordPolicy=Pol\u00edtica de Senha
-accountPolicy=Pol\u00edtica de Conta
-pullPolicy=Pol\u00edtica de Pull

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_ru.properties
deleted file mode 100644
index 841ebd6..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceSecurityPanel_ru.properties
+++ /dev/null
@@ -1,23 +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.
-#
-# passwordPolicy = Политика паролей
-passwordPolicy = \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u0430\u0440\u043e\u043b\u0435\u0439
-# accountPolicy = Политика учетных записей
-accountPolicy = \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439
-# pullPolicy=Политика получения данных
-pullPolicy=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/TogglePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/TogglePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TogglePanel.html
index a8c6fab..eea4fe7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/TogglePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TogglePanel.html
@@ -85,7 +85,7 @@ under the License.
       }
     </style>
   </wicket:head>
-  <wicket:panel>
+  <wicket:extend>
     <div wicket:id="togglePanelContainer" class="topology-menu inactive-topology-menu">
       <div class="header">
         <div class="label">
@@ -97,10 +97,5 @@ under the License.
       </div>
       <wicket:child/>
     </div>
-
-    <span wicket:id="outerObjectsRepeater">
-      <div wicket:id="outer"/>
-    </span>
-
-  </wicket:panel>
+  </wicket:extend>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/WizardMgtPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/WizardMgtPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/WizardMgtPanel.html
index cdbfa80..5b82975 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/WizardMgtPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/WizardMgtPanel.html
@@ -39,9 +39,8 @@ under the License.
       </wicket:enclosure>
     </wicket:fragment>
 
-    <div wicket:id="modal"/>
-    <div wicket:id="alternativeDefaultModal"/>
-    <div wicket:id="displayAttributeModal"/>
-    <div wicket:id="utilityModal"/>
+    <span wicket:id="outerObjectsRepeater">
+      <div wicket:id="outer"/>
+    </span>
   </wicket:panel>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.html
deleted file mode 100644
index 9b03dd7..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.html
+++ /dev/null
@@ -1,23 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="auxClasses"/>
-  </wicket:panel>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties
deleted file mode 100644
index 8223360..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties
+++ /dev/null
@@ -1,20 +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.
-
-auxClasses.title=Auxiliary Classes
-auxClasses.summary=
-

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties
deleted file mode 100644
index 372ef2d..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties
+++ /dev/null
@@ -1,19 +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.
-
-auxClasses.title=Classi Ausiliarie
-auxClasses.summary=

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
deleted file mode 100644
index 0946b9d..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
+++ /dev/null
@@ -1,20 +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.
-
-auxClasses.title=Classes Auxiliares
-auxClasses.summary=
-

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html
deleted file mode 100644
index 643dc1c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html
+++ /dev/null
@@ -1,30 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="connObjectLinkContainer">
-      <div class="form-group">
-        <span wicket:id="connObjectLinkCheckbox">[connObjectLinkCheckbox]</span>
-      </div>
-      <div class="form-group">
-        <span wicket:id="connObjectLink">[connObjectLink]</span>
-      </div>
-    </span>
-  </wicket:panel>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties
deleted file mode 100644
index dad26b4..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties
+++ /dev/null
@@ -1,20 +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.
-
-link.title=Connector object link (if required)
-link.summary=
-connObjectLinkCheckbox=Use ConnObjectLink

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties
deleted file mode 100644
index cf74d19..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties
+++ /dev/null
@@ -1,20 +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.
-
-link.title=Connector object link (se necessario)
-link.summary=
-connObjectLinkCheckbox=Usa ConnObjectLink

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
deleted file mode 100644
index 305b0b7..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
+++ /dev/null
@@ -1,20 +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.
-
-link.title=Connector object link (se necess\u00e1rio)
-link.summary=
-connObjectLinkCheckbox=Usar ConnObjectLink

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.html
deleted file mode 100644
index 11b1a52..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.html
+++ /dev/null
@@ -1,23 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="mapping" />
-  </wicket:panel>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties
deleted file mode 100644
index 99d1add..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties
+++ /dev/null
@@ -1,20 +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.
-
-mapping.title=Mapping
-mapping.summary=
-

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties
deleted file mode 100644
index fde5de0..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties
+++ /dev/null
@@ -1,19 +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.
-
-mapping.title=Mapping
-mapping.summary=

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties
deleted file mode 100644
index 99d1add..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties
+++ /dev/null
@@ -1,20 +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.
-
-mapping.title=Mapping
-mapping.summary=
-

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
deleted file mode 100644
index 1b951d3..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
+++ /dev/null
@@ -1,31 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <div wicket:id="container">
-      <div class="form-group">
-        <span wicket:id="type"/>
-      </div>
-      <div class="form-group">
-        <label>Object Class</label>
-        <input type="text" placeholder="Object Class ..." class="form-control"  wicket:id="class">
-      </div>
-    </div>
-  </wicket:panel>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.properties
deleted file mode 100644
index b20d6ba..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.properties
+++ /dev/null
@@ -1,24 +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.
-
-type.title=Specify the type of the provisioning object
-type.summary=
-
-type=Type
-type.Required=Type is required
-class.Required=Object class is required
-

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_it.properties
deleted file mode 100644
index e29b214..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_it.properties
+++ /dev/null
@@ -1,23 +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.
-
-type.title=Specify the type of the provisioning object
-type.summary=
-
-type=Type
-type.Required=Type is required
-class.Required=Object class is required

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_pt_BR.properties
deleted file mode 100644
index e29b214..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType_pt_BR.properties
+++ /dev/null
@@ -1,23 +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.
-
-type.title=Specify the type of the provisioning object
-type.summary=
-
-type=Type
-type.Required=Type is required
-class.Required=Object class is required

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.html
new file mode 100644
index 0000000..94e4361
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.html
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div id="emptyPlaceholder"/>
+    <span wicket:id="connectorPropertiesContainer">
+      <div class="pull-right">
+        <a style="position: fixed; top: 70px; right:60px;" wicket:id="check"  href="#">
+          <i class="fa fa-heartbeat fa-2x"></i>
+        </a>
+      </div>
+
+      <div class="inner-scrollable-tab-content">
+        <div class="form-group" wicket:id="connectorProperties">
+          <span wicket:id="panel">[panel]</span>
+        </div>
+      </div>
+    </span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.properties
new file mode 100644
index 0000000..abd1449
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.properties
@@ -0,0 +1,18 @@
+# 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.
+check=Check connection
+property.empty.list=No connector configuraton property available

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_it.properties
new file mode 100644
index 0000000..75979ae
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_it.properties
@@ -0,0 +1,18 @@
+# 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.
+check=Verifica connessione
+property.empty.list=Nessuna propriet\u00e0 di connettore disponibile

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_pt_BR.properties
new file mode 100644
index 0000000..221a3b9
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# 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.
+check=Verificar a Conex\u00e3o
+property.empty.list=No connector configuraton property available

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_ru.properties
new file mode 100644
index 0000000..cb72f38
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel_ru.properties
@@ -0,0 +1,21 @@
+# 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.
+
+# check=\u00d0\u009f\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b5\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d0\u00be\u00d0\u00b4\u00d0\u00ba\u00d0\u00bb\u00d1\u008e\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+check=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435
+# attribute.empty.list=\u00d0\u0092\u00d0\u00b8\u00d1\u0080\u00d1\u0082\u00d1\u0083\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b5 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d1\u008b \u00d0\u00be\u00d1\u0082\u00d1\u0081\u00d1\u0083\u00d1\u0082\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d1\u0083\u00d1\u008e\u00d1\u0082
+property.empty.list=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.html
new file mode 100644
index 0000000..1b3ad2a
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.html
@@ -0,0 +1,23 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="capabilities"/> 
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.html
new file mode 100644
index 0000000..1b3ad2a
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.html
@@ -0,0 +1,23 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="capabilities"/> 
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.properties
new file mode 100644
index 0000000..2b83bdc
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.properties
@@ -0,0 +1,17 @@
+# 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.
+capabilities=Capabilities

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_it.properties
new file mode 100644
index 0000000..352c488
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_it.properties
@@ -0,0 +1,17 @@
+# 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.
+capabilities=Capability

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_pt_BR.properties
new file mode 100644
index 0000000..3566999
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_pt_BR.properties
@@ -0,0 +1,17 @@
+# 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.
+capabilities=Capacidades

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_ru.properties
new file mode 100644
index 0000000..75e02ae
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel_ru.properties
@@ -0,0 +1,19 @@
+# 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.
+
+# capabilities=\u00d0\u0094\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u008f
+capabilities=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html
new file mode 100644
index 0000000..87fc624
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html
@@ -0,0 +1,61 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <head>
+    <title>Connector details panel</title>
+  </head>
+  <body>
+    <wicket:panel>
+      <div class="form-group">
+        <span wicket:id="displayName">[displayName]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="location">[location]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="bundleName">[bundleName]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="version">[version]</span>
+      </div>
+
+      <div class="form-group" style="padding: 30px 0px 0px 0px">
+        <table class="table">
+          <tbody>
+            <tr>
+              <td><span wicket:id="connRequestTimeout">[connRequestTimeout]</span></td>
+              <td><span wicket:id="poolMaxObjects">[poolMaxObjects]</span></td>
+            </tr>
+            <tr>
+              <td><span wicket:id="poolMinIdle">[poolMinIdle]</span></td>
+              <td><span wicket:id="poolMaxIdle">[poolMaxIdle]</span></td>
+            </tr>
+            <tr>
+              <td><span wicket:id="poolMaxWait">[poolMaxWait]</span></td>
+              <td><span wicket:id="poolMinEvictableIdleTime">[poolMinEvictableIdleTime]</span></td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+    </wicket:panel>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties
new file mode 100644
index 0000000..6c11adc
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties
@@ -0,0 +1,26 @@
+# 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.
+displayName=Display name
+location=Location
+bundleName=Bundle
+version=Version
+connRequestTimeout=Request timeout (sec)
+poolMaxObjects=Max objects (idle+active)
+poolMinIdle=Min idle objects
+poolMaxIdle=Max idle objects
+poolMaxWait=Max waiting time (msec)
+poolMinEvictableIdleTime=Min eviction time (msec)

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties
new file mode 100644
index 0000000..ed69987
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties
@@ -0,0 +1,26 @@
+# 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.
+displayName=Nome visualizzato
+location=Posizione
+bundleName=Bundle
+version=Versione
+connRequestTimeout=Timeout richiesta (sec)
+poolMaxObjects=Max oggetti (attivi e non)
+poolMinIdle=Max oggetti attivi
+poolMaxIdle=Max oggetti inattivi
+poolMaxWait=Tempo max attesa
+poolMinEvictableIdleTime=Tempo min espulsione

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties
new file mode 100644
index 0000000..a2915b1
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties
@@ -0,0 +1,26 @@
+# 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.
+displayName=Mostrar Nome
+location=Localiza\u00e7\u00e3o
+bundleName=Bundle
+version=Vers\u00e3o
+connRequestTimeout=Timeout da Requisi\u00e7\u00e3o (seg)
+poolMaxObjects=Max objects (idle+active)
+poolMinIdle=Min idle objects
+poolMaxIdle=Max idle objects
+poolMaxWait=Max waiting time (msec)
+poolMinEvictableIdleTime=Min eviction time (msec)

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties
new file mode 100644
index 0000000..b3d8221
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties
@@ -0,0 +1,37 @@
+# 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.
+
+# displayName=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+displayName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
+# location=\u00d0\u00a0\u00d0\u00b0\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00be\u00d0\u00b6\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+location=\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
+# bundleName=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bf\u00d0\u00b0\u00d0\u00ba\u00d0\u00b5\u00d1\u0082\u00d0\u00b0
+bundleName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430
+# version=\u00d0\u0092\u00d0\u00b5\u00d1\u0080\u00d1\u0081\u00d0\u00b8\u00d1\u008f
+version=\u0412\u0435\u0440\u0441\u0438\u044f
+# connRequestTimeout=\u00d0\u00a2\u00d0\u00b0\u00d0\u00b9\u00d0\u00bc\u00d0\u00b0\u00d1\u0083\u00d1\u0082 \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d1\u0081\u00d0\u00b0 (\u00d1\u0081\u00d0\u00b5\u00d0\u00ba)
+connRequestTimeout=\u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0441\u0435\u043a)
+# poolMaxObjects=\u00d0\u009c\u00d0\u00b0\u00d0\u00ba\u00d1\u0081\u00d0\u00b8\u00d0\u00bc\u00d1\u0083\u00d0\u00bc \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2 (\u00d0\u00b2 \u00d0\u00be\u00d0\u00b6\u00d0\u00b8\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b8 + \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d1\u008b\u00d0\u00b5)
+poolMaxObjects=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 + \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435)
+# poolMinIdle=\u00d0\u009c\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d0\u00bc\u00d1\u0083\u00d0\u00bc \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2 \u00d0\u00b2 \u00d0\u00be\u00d0\u00b6\u00d0\u00b8\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b8
+poolMinIdle=\u041c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438
+# poolMaxIdle=\u00d0\u009c\u00d0\u00b0\u00d0\u00ba\u00d1\u0081\u00d0\u00b8\u00d0\u00bc\u00d1\u0083\u00d0\u00bc \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2 \u00d0\u00b2 \u00d0\u00be\u00d0\u00b6\u00d0\u00b8\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b8
+poolMaxIdle=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438
+# poolMaxWait=\u00d0\u009c\u00d0\u00b0\u00d0\u00ba\u00d1\u0081\u00d0\u00b8\u00d0\u00bc\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be\u00d0\u00b5 \u00d0\u00b2\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d1\u008f \u00d0\u00be\u00d0\u00b6\u00d0\u00b8\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f (\u00d0\u00bc\u00d1\u0081)
+poolMaxWait=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (\u043c\u0441)
+# poolMinEvictableIdleTime=\u00d0\u009c\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d0\u00bc\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be\u00d0\u00b5 \u00d0\u00b2\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d1\u008f \u00d0\u00be\u00d0\u00b6\u00d0\u00b8\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f (\u00d0\u00bc\u00d1\u0081)
+poolMinEvictableIdleTime=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (\u043c\u0441)

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.html
new file mode 100644
index 0000000..9b03dd7
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.html
@@ -0,0 +1,23 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="auxClasses"/>
+  </wicket:panel>
+</html>
\ No newline at end of file


[5/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
deleted file mode 100644
index c2f7653..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
+++ /dev/null
@@ -1,253 +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.wizards.provision;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-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.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.panels.ProvisionAuxClassesPanel;
-import org.apache.syncope.client.console.panels.ResourceMappingPanel;
-import org.apache.syncope.client.console.rest.AnyTypeRestClient;
-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.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;
-import org.apache.syncope.client.console.wizards.AjaxWizardBuilder;
-import org.apache.syncope.common.lib.EntityTOUtils;
-import org.apache.syncope.common.lib.to.AnyTypeTO;
-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.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.wizard.WizardModel;
-import org.apache.wicket.extensions.wizard.WizardStep;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.TextField;
-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.StringResourceModel;
-
-public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> implements Serializable {
-
-    private static final long serialVersionUID = 3739399543837732640L;
-
-    private final ResourceTO resourceTO;
-
-    private final LoadableDetachableModel<List<String>> anyTypes = new LoadableDetachableModel<List<String>>() {
-
-        private static final long serialVersionUID = 5275935387613157437L;
-
-        @Override
-        protected List<String> load() {
-            final List<String> currentlyAdded = new ArrayList<>();
-
-            CollectionUtils.collect(resourceTO.getProvisions(), new Transformer<ProvisionTO, String>() {
-
-                @Override
-                public String transform(final ProvisionTO provisionTO) {
-                    return provisionTO.getAnyType();
-                }
-            }, currentlyAdded);
-
-            final List<String> res = new ArrayList<>();
-
-            CollectionUtils.filter(CollectionUtils.collect(new AnyTypeRestClient().list(),
-                    EntityTOUtils.<String, AnyTypeTO>keyTransformer(), res),
-                    new Predicate<String>() {
-
-                @Override
-                public boolean evaluate(final String key) {
-                    return !currentlyAdded.contains(key);
-                }
-            });
-
-            return res;
-        }
-    };
-
-    /**
-     * The object type specification step.
-     */
-    private final class ObjectType extends WizardStep {
-
-        private static final long serialVersionUID = -1657800545799468278L;
-
-        private static final String ACCOUNT = "__ACCOUNT__";
-
-        private static final String GROUP = "__GROUP__";
-
-        ObjectType(final ProvisionTO item) {
-            super(new ResourceModel("type.title", StringUtils.EMPTY),
-                    new ResourceModel("type.summary", StringUtils.EMPTY), new Model<>(item));
-
-            final WebMarkupContainer container = new WebMarkupContainer("container");
-            container.setOutputMarkupId(true);
-            add(container);
-
-            final FieldPanel<String> type = new AjaxDropDownChoicePanel<>(
-                    "type", "type", new PropertyModel<String>(item, "anyType"), false).
-                    setChoices(anyTypes).
-                    setStyleSheet("form-control").
-                    setRequired(true);
-            container.add(type);
-
-            final FormComponent<String> clazz = new TextField<>(
-                    "class", new PropertyModel<String>(item, "objectClass")).setRequired(true);
-            container.add(clazz);
-
-            type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                private static final long serialVersionUID = -1107858522700306810L;
-
-                @Override
-                protected void onUpdate(final AjaxRequestTarget target) {
-                    if (AnyTypeKind.USER.name().equals(type.getModelObject())) {
-                        clazz.setModelObject(ACCOUNT);
-                        target.add(container);
-                    } else if (AnyTypeKind.GROUP.name().equals(type.getModelObject())) {
-                        clazz.setModelObject(GROUP);
-                        target.add(container);
-                    }
-                }
-            });
-        }
-    }
-
-    /**
-     * AuxClasses definition step.
-     */
-    private final class AuxClasses extends WizardStep {
-
-        private static final long serialVersionUID = 5315236191866427500L;
-
-        AuxClasses(final ProvisionTO item) {
-            setTitleModel(new ResourceModel("auxClasses.title"));
-            setSummaryModel(new StringResourceModel("auxClasses.summary", this, new Model<>(item)));
-
-            add(new ProvisionAuxClassesPanel("auxClasses", item));
-        }
-    }
-
-    /**
-     * Mapping definition step.
-     */
-    private final class Mapping extends WizardStep {
-
-        private static final long serialVersionUID = 3454904947720856253L;
-
-        Mapping(final ProvisionTO item) {
-            setTitleModel(new ResourceModel("mapping.title"));
-            setSummaryModel(new StringResourceModel("mapping.summary", this, new Model<>(item)));
-
-            add(new ResourceMappingPanel("mapping", resourceTO, item));
-        }
-    }
-
-    /**
-     * AccountLink specification step.
-     */
-    private final class ConnObjectLink extends WizardStep {
-
-        private static final long serialVersionUID = 2359955465172450478L;
-
-        ConnObjectLink(final ProvisionTO item) {
-            super(new ResourceModel("link.title", StringUtils.EMPTY),
-                    new ResourceModel("link.summary", StringUtils.EMPTY));
-
-            final WebMarkupContainer connObjectLinkContainer = new WebMarkupContainer("connObjectLinkContainer");
-            connObjectLinkContainer.setOutputMarkupId(true);
-            add(connObjectLinkContainer);
-
-            boolean connObjectLinkEnabled = false;
-            if (StringUtils.isNotBlank(item.getMapping().getConnObjectLink())) {
-                connObjectLinkEnabled = true;
-            }
-
-            final AjaxCheckBoxPanel connObjectLinkCheckbox = new AjaxCheckBoxPanel(
-                    "connObjectLinkCheckbox",
-                    new ResourceModel("connObjectLinkCheckbox", "connObjectLinkCheckbox").getObject(),
-                    new Model<>(connObjectLinkEnabled),
-                    false);
-            connObjectLinkCheckbox.setEnabled(true);
-
-            connObjectLinkContainer.add(connObjectLinkCheckbox);
-
-            final AjaxTextFieldPanel connObjectLink = new AjaxTextFieldPanel(
-                    "connObjectLink",
-                    new ResourceModel("connObjectLink", "connObjectLink").getObject(),
-                    new PropertyModel<String>(item.getMapping(), "connObjectLink"),
-                    false);
-            connObjectLink.setEnabled(connObjectLinkEnabled);
-            connObjectLinkContainer.add(connObjectLink);
-
-            connObjectLinkCheckbox.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                private static final long serialVersionUID = -1107858522700306810L;
-
-                @Override
-                protected void onUpdate(final AjaxRequestTarget target) {
-                    if (connObjectLinkCheckbox.getModelObject()) {
-                        connObjectLink.setEnabled(Boolean.TRUE);
-                        connObjectLink.setModelObject("");
-                    } else {
-                        connObjectLink.setEnabled(Boolean.FALSE);
-                        connObjectLink.setModelObject("");
-                    }
-
-                    target.add(connObjectLink);
-                }
-            });
-        }
-    }
-
-    /**
-     * Construct.
-     *
-     * @param resurceTO external resource to be updated.
-     * @param pageRef Caller page reference.
-     */
-    public ProvisionWizardBuilder(final ResourceTO resurceTO, final PageReference pageRef) {
-        super(new ProvisionTO(), pageRef);
-        this.resourceTO = resurceTO;
-    }
-
-    @Override
-    protected WizardModel buildModelSteps(final ProvisionTO modelObject, final WizardModel wizardModel) {
-        wizardModel.add(new ObjectType(modelObject));
-        wizardModel.add(new AuxClasses(modelObject));
-        wizardModel.add(new Mapping(modelObject));
-        wizardModel.add(new ConnObjectLink(modelObject));
-        return wizardModel;
-    }
-
-    @Override
-    protected Serializable onApplyInternal(final ProvisionTO modelObject) {
-        return modelObject;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
new file mode 100644
index 0000000..78d1066
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
@@ -0,0 +1,73 @@
+/*
+ * 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.wizards.resources;
+
+import java.util.List;
+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.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
+
+public abstract class AbstractConnConfPanel<T extends AbstractBaseBean> extends WizardStep {
+
+    private static final long serialVersionUID = -2025535531121434050L;
+
+    protected final WebMarkupContainer propertiesContainer;
+
+    protected final AjaxButton check;
+
+    protected final T modelObject;
+
+    public AbstractConnConfPanel(final T model) {
+        super();
+        this.modelObject = 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 IModel<List<ConnConfProperty>> model, final boolean withOverridable) {
+        propertiesContainer.add(new ConnConfPropertyListView(
+                "connectorProperties", model, 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/wizards/resources/AbstractResourceWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractResourceWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractResourceWizardBuilder.java
new file mode 100644
index 0000000..bdd6caf
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractResourceWizardBuilder.java
@@ -0,0 +1,82 @@
+/*
+ * 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.wizards.resources;
+
+import java.io.Serializable;
+import org.apache.syncope.client.console.topology.TopologyNode;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal.ModalEvent;
+import org.apache.syncope.client.console.wizards.AjaxWizardBuilder;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+
+/**
+ * Modal window with Resource form.
+ *
+ * @param <T>
+ */
+public abstract class AbstractResourceWizardBuilder<T extends Serializable> extends AjaxWizardBuilder<Serializable> {
+
+    private static final long serialVersionUID = 1734415311027284221L;
+
+    public AbstractResourceWizardBuilder(final T modelObject, final PageReference pageRef) {
+        super(modelObject, pageRef);
+    }
+
+    public static class CreateEvent extends ModalEvent {
+
+        private static final long serialVersionUID = -4488921035707289039L;
+
+        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/wizards/resources/CapabilitiesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.java
new file mode 100644
index 0000000..9dad020
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.java
@@ -0,0 +1,43 @@
+/*
+ * 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.wizards.resources;
+
+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 CapabilitiesPanel extends Panel {
+
+    private static final long serialVersionUID = -2025535531121434050L;
+
+    public CapabilitiesPanel(final PropertyModel<List<ConnectorCapability>> model) {
+        super("capabilities");
+        setOutputMarkupId(true);
+
+        AjaxPalettePanel<ConnectorCapability> capabilitiesPalette = new AjaxPalettePanel.Builder<ConnectorCapability>().
+                setAllowMoveAll(true).
+                build("capabilities", model, new ListModel<>(Arrays.asList(ConnectorCapability.values())));
+        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/wizards/resources/ConnCapabilitiesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.java
new file mode 100644
index 0000000..d82fb95
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnCapabilitiesPanel.java
@@ -0,0 +1,35 @@
+/*
+ * 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.wizards.resources;
+
+import java.util.List;
+import org.apache.syncope.common.lib.types.ConnectorCapability;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.model.PropertyModel;
+
+public class ConnCapabilitiesPanel extends WizardStep {
+
+    private static final long serialVersionUID = -2025535531121434050L;
+
+    public ConnCapabilitiesPanel(final PropertyModel<List<ConnectorCapability>> model) {
+        super();
+        setOutputMarkupId(true);
+        add(new CapabilitiesPanel(model));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
new file mode 100644
index 0000000..722ddfa
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
@@ -0,0 +1,117 @@
+/*
+ * 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.wizards.resources;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+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.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
+
+public abstract class ConnectorConfPanel extends AbstractConnConfPanel<ConnInstanceTO> {
+
+    private static final long serialVersionUID = -2025535531121434050L;
+
+    private final List<ConnBundleTO> bundles;
+
+    public ConnectorConfPanel(final ConnInstanceTO connInstanceTO, final List<ConnBundleTO> bundles) {
+        super(connInstanceTO);
+        this.bundles = bundles;
+
+        LoadableDetachableModel<List<ConnConfProperty>> model = new LoadableDetachableModel<List<ConnConfProperty>>() {
+
+            private static final long serialVersionUID = -2965284931860212687L;
+
+            @Override
+            protected List<ConnConfProperty> load() {
+                List<ConnConfProperty> properties = getConnProperties(connInstanceTO);
+                connInstanceTO.getConf().clear();
+                connInstanceTO.getConf().addAll(properties);
+
+                return new PropertyModel<List<ConnConfProperty>>(modelObject, "conf") {
+
+                    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;
+                    }
+                }.getObject();
+            }
+        };
+
+        setConfPropertyListView(model, true);
+    }
+
+    /**
+     * Get available configuration properties.
+     *
+     * @param instance connector instance.
+     * @return configuration properties.
+     */
+    @Override
+    protected final List<ConnConfProperty> getConnProperties(final ConnInstanceTO instance) {
+        return CollectionUtils.collect(
+                ConnectorWizardBuilder.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/wizards/resources/ConnectorDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
new file mode 100644
index 0000000..28fda4a
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
@@ -0,0 +1,155 @@
+/*
+ * 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.wizards.resources;
+
+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.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.model.PropertyModel;
+
+public class ConnectorDetailsPanel extends WizardStep {
+
+    private static final long serialVersionUID = -2435937897614232137L;
+
+    public ConnectorDetailsPanel(final ConnInstanceTO connInstanceTO, final List<ConnBundleTO> bundles) {
+
+        super();
+        setOutputMarkupId(true);
+
+        AjaxTextFieldPanel displayName = new AjaxTextFieldPanel(
+                "displayName", "displayName", new PropertyModel<String>(connInstanceTO, "displayName"), false);
+        displayName.setOutputMarkupId(true);
+        displayName.addRequiredLabel();
+        add(displayName);
+
+        AjaxTextFieldPanel location = new AjaxTextFieldPanel(
+                "location", "location", new PropertyModel<String>(connInstanceTO, "location"), false);
+        location.addRequiredLabel();
+        location.setOutputMarkupId(true);
+        location.setEnabled(false);
+        add(location);
+
+        final AjaxDropDownChoicePanel<String> bundleName = new AjaxDropDownChoicePanel<>(
+                "bundleName",
+                "bundleName",
+                new PropertyModel<String>(connInstanceTO, "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(connInstanceTO.getKey() == null || connInstanceTO.getKey() == 0);
+        bundleName.getField().setOutputMarkupId(true);
+        add(bundleName);
+
+        final AjaxDropDownChoicePanel<String> version = new AjaxDropDownChoicePanel<>(
+                "version", "version", new PropertyModel<String>(connInstanceTO, "version"), false);
+        version.setChoices(getVersions(connInstanceTO, bundles));
+        version.addRequiredLabel();
+        version.setEnabled(connInstanceTO.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(connInstanceTO, bundles);
+                if (versions.size() == 1) {
+                    connInstanceTO.setVersion(versions.get(0));
+                    version.getField().setModelObject(versions.get(0));
+                }
+                version.setChoices(versions);
+
+                target.add(version);
+            }
+        });
+
+        if (connInstanceTO.getPoolConf() == null) {
+            connInstanceTO.setPoolConf(new ConnPoolConfTO());
+        }
+
+        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
+                "connRequestTimeout", "connRequestTimeout", Integer.class,
+                new PropertyModel<Integer>(connInstanceTO, "connRequestTimeout")));
+
+        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
+                "poolMaxObjects", "poolMaxObjects", Integer.class,
+                new PropertyModel<Integer>(connInstanceTO.getPoolConf(), "maxObjects")));
+
+        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
+                "poolMinIdle", "poolMinIdle", Integer.class,
+                new PropertyModel<Integer>(connInstanceTO.getPoolConf(), "minIdle")));
+
+        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).max(Integer.MAX_VALUE).build(
+                "poolMaxIdle", "poolMaxIdle", Integer.class,
+                new PropertyModel<Integer>(connInstanceTO.getPoolConf(), "maxIdle")));
+
+        add(new AjaxSpinnerFieldPanel.Builder<Long>().min(0L).max(Long.MAX_VALUE).build(
+                "poolMaxWait", "poolMaxWait", Long.class,
+                new PropertyModel<Long>(connInstanceTO.getPoolConf(), "maxWait")));
+
+        add(new AjaxSpinnerFieldPanel.Builder<Long>().min(0L).max(Long.MAX_VALUE).build(
+                "poolMinEvictableIdleTime", "poolMinEvictableIdleTime", Long.class,
+                new PropertyModel<Long>(connInstanceTO.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/wizards/resources/ConnectorWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
new file mode 100644
index 0000000..4c41f6c
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
@@ -0,0 +1,145 @@
+/*
+ * 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.wizards.resources;
+
+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.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.wizards.AjaxWizard;
+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.extensions.wizard.WizardModel;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.model.PropertyModel;
+
+/**
+ * Modal window with Connector form.
+ */
+public class ConnectorWizardBuilder extends AbstractResourceWizardBuilder<ConnInstanceTO> {
+
+    private static final long serialVersionUID = -2025535531121434050L;
+
+    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
+
+    private final List<ConnBundleTO> bundles;
+
+    public ConnectorWizardBuilder(final ConnInstanceTO defaultItem, final PageReference pageRef) {
+        super(defaultItem, pageRef);
+        this.bundles = CollectionUtils.select(connectorRestClient.getAllBundles(), new Predicate<ConnBundleTO>() {
+
+            @Override
+            public boolean evaluate(final ConnBundleTO object) {
+                return object.getLocation().equals(defaultItem.getLocation());
+            }
+        }, new ArrayList<ConnBundleTO>());
+    }
+
+    @Override
+    protected WizardModel buildModelSteps(final Serializable modelObject, final WizardModel wizardModel) {
+        final ConnInstanceTO connInstanceTO = ConnInstanceTO.class.cast(modelObject);
+        wizardModel.add(new ConnectorDetailsPanel(connInstanceTO, bundles));
+        wizardModel.add(new ConnectorConfPanel(connInstanceTO, bundles) {
+
+            private static final long serialVersionUID = -5886691077681158494L;
+
+            @Override
+            protected void check(final AjaxRequestTarget target) {
+                if (connectorRestClient.check(modelObject)) {
+                    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", " ");
+            }
+
+        });
+        wizardModel.add(new ConnCapabilitiesPanel(
+                new PropertyModel<List<ConnectorCapability>>(connInstanceTO, "capabilities")));
+        return wizardModel;
+    }
+
+    @Override
+    protected Serializable onApplyInternal(final Serializable modelObject) {
+        final ConnInstanceTO connInstanceTO = ConnInstanceTO.class.cast(modelObject);
+        final ConnBundleTO bundleTO = ConnectorWizardBuilder.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);
+        }
+
+        final ConnInstanceTO res;
+        if (mode == AjaxWizard.Mode.CREATE) {
+            res = connectorRestClient.create(connInstanceTO);
+        } else {
+            connectorRestClient.update(connInstanceTO);
+            res = connInstanceTO;
+        }
+
+        return res;
+    }
+
+    @Override
+    protected Serializable getCreateCustomPayloadEvent(final Serializable afterObject, final AjaxRequestTarget target) {
+        final ConnInstanceTO actual = ConnInstanceTO.class.cast(afterObject);
+        return new CreateEvent(
+                actual.getKey(),
+                actual.getDisplayName(),
+                TopologyNode.Kind.CONNECTOR,
+                URI.create(actual.getLocation()).toASCIIString(),
+                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/wizards/resources/ProvisionWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
new file mode 100644
index 0000000..87963db
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
@@ -0,0 +1,252 @@
+/*
+ * 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.wizards.resources;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+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.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.ProvisionAuxClassesPanel;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+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.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;
+import org.apache.syncope.client.console.wizards.AjaxWizardBuilder;
+import org.apache.syncope.common.lib.EntityTOUtils;
+import org.apache.syncope.common.lib.to.AnyTypeTO;
+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.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.markup.html.form.TextField;
+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.StringResourceModel;
+
+public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> implements Serializable {
+
+    private static final long serialVersionUID = 3739399543837732640L;
+
+    private final ResourceTO resourceTO;
+
+    private final LoadableDetachableModel<List<String>> anyTypes = new LoadableDetachableModel<List<String>>() {
+
+        private static final long serialVersionUID = 5275935387613157437L;
+
+        @Override
+        protected List<String> load() {
+            final List<String> currentlyAdded = new ArrayList<>();
+
+            CollectionUtils.collect(resourceTO.getProvisions(), new Transformer<ProvisionTO, String>() {
+
+                @Override
+                public String transform(final ProvisionTO provisionTO) {
+                    return provisionTO.getAnyType();
+                }
+            }, currentlyAdded);
+
+            final List<String> res = new ArrayList<>();
+
+            CollectionUtils.filter(CollectionUtils.collect(new AnyTypeRestClient().list(),
+                    EntityTOUtils.<String, AnyTypeTO>keyTransformer(), res),
+                    new Predicate<String>() {
+
+                @Override
+                public boolean evaluate(final String key) {
+                    return !currentlyAdded.contains(key);
+                }
+            });
+
+            return res;
+        }
+    };
+
+    /**
+     * The object type specification step.
+     */
+    private final class ObjectType extends WizardStep {
+
+        private static final long serialVersionUID = -1657800545799468278L;
+
+        private static final String ACCOUNT = "__ACCOUNT__";
+
+        private static final String GROUP = "__GROUP__";
+
+        ObjectType(final ProvisionTO item) {
+            super(new ResourceModel("type.title", StringUtils.EMPTY),
+                    new ResourceModel("type.summary", StringUtils.EMPTY), new Model<>(item));
+
+            final WebMarkupContainer container = new WebMarkupContainer("container");
+            container.setOutputMarkupId(true);
+            add(container);
+
+            final FieldPanel<String> type = new AjaxDropDownChoicePanel<>(
+                    "type", "type", new PropertyModel<String>(item, "anyType"), false).
+                    setChoices(anyTypes).
+                    setStyleSheet("form-control").
+                    setRequired(true);
+            container.add(type);
+
+            final FormComponent<String> clazz = new TextField<>(
+                    "class", new PropertyModel<String>(item, "objectClass")).setRequired(true);
+            container.add(clazz);
+
+            type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                private static final long serialVersionUID = -1107858522700306810L;
+
+                @Override
+                protected void onUpdate(final AjaxRequestTarget target) {
+                    if (AnyTypeKind.USER.name().equals(type.getModelObject())) {
+                        clazz.setModelObject(ACCOUNT);
+                        target.add(container);
+                    } else if (AnyTypeKind.GROUP.name().equals(type.getModelObject())) {
+                        clazz.setModelObject(GROUP);
+                        target.add(container);
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * AuxClasses definition step.
+     */
+    private final class AuxClasses extends WizardStep {
+
+        private static final long serialVersionUID = 5315236191866427500L;
+
+        AuxClasses(final ProvisionTO item) {
+            setTitleModel(new ResourceModel("auxClasses.title"));
+            setSummaryModel(new StringResourceModel("auxClasses.summary", this, new Model<>(item)));
+
+            add(new ProvisionAuxClassesPanel("auxClasses", item));
+        }
+    }
+
+    /**
+     * Mapping definition step.
+     */
+    private final class Mapping extends WizardStep {
+
+        private static final long serialVersionUID = 3454904947720856253L;
+
+        Mapping(final ProvisionTO item) {
+            setTitleModel(new ResourceModel("mapping.title"));
+            setSummaryModel(new StringResourceModel("mapping.summary", this, new Model<>(item)));
+
+            add(new ResourceMappingPanel("mapping", resourceTO, item));
+        }
+    }
+
+    /**
+     * AccountLink specification step.
+     */
+    private final class ConnObjectLink extends WizardStep {
+
+        private static final long serialVersionUID = 2359955465172450478L;
+
+        ConnObjectLink(final ProvisionTO item) {
+            super(new ResourceModel("link.title", StringUtils.EMPTY),
+                    new ResourceModel("link.summary", StringUtils.EMPTY));
+
+            final WebMarkupContainer connObjectLinkContainer = new WebMarkupContainer("connObjectLinkContainer");
+            connObjectLinkContainer.setOutputMarkupId(true);
+            add(connObjectLinkContainer);
+
+            boolean connObjectLinkEnabled = false;
+            if (StringUtils.isNotBlank(item.getMapping().getConnObjectLink())) {
+                connObjectLinkEnabled = true;
+            }
+
+            final AjaxCheckBoxPanel connObjectLinkCheckbox = new AjaxCheckBoxPanel(
+                    "connObjectLinkCheckbox",
+                    new ResourceModel("connObjectLinkCheckbox", "connObjectLinkCheckbox").getObject(),
+                    new Model<>(connObjectLinkEnabled),
+                    false);
+            connObjectLinkCheckbox.setEnabled(true);
+
+            connObjectLinkContainer.add(connObjectLinkCheckbox);
+
+            final AjaxTextFieldPanel connObjectLink = new AjaxTextFieldPanel(
+                    "connObjectLink",
+                    new ResourceModel("connObjectLink", "connObjectLink").getObject(),
+                    new PropertyModel<String>(item.getMapping(), "connObjectLink"),
+                    false);
+            connObjectLink.setEnabled(connObjectLinkEnabled);
+            connObjectLinkContainer.add(connObjectLink);
+
+            connObjectLinkCheckbox.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                private static final long serialVersionUID = -1107858522700306810L;
+
+                @Override
+                protected void onUpdate(final AjaxRequestTarget target) {
+                    if (connObjectLinkCheckbox.getModelObject()) {
+                        connObjectLink.setEnabled(Boolean.TRUE);
+                        connObjectLink.setModelObject("");
+                    } else {
+                        connObjectLink.setEnabled(Boolean.FALSE);
+                        connObjectLink.setModelObject("");
+                    }
+
+                    target.add(connObjectLink);
+                }
+            });
+        }
+    }
+
+    /**
+     * Construct.
+     *
+     * @param resurceTO external resource to be updated.
+     * @param pageRef Caller page reference.
+     */
+    public ProvisionWizardBuilder(final ResourceTO resurceTO, final PageReference pageRef) {
+        super(new ProvisionTO(), pageRef);
+        this.resourceTO = resurceTO;
+    }
+
+    @Override
+    protected WizardModel buildModelSteps(final ProvisionTO modelObject, final WizardModel wizardModel) {
+        wizardModel.add(new ObjectType(modelObject));
+        wizardModel.add(new AuxClasses(modelObject));
+        wizardModel.add(new Mapping(modelObject));
+        wizardModel.add(new ConnObjectLink(modelObject));
+        return wizardModel;
+    }
+
+    @Override
+    protected Serializable onApplyInternal(final ProvisionTO modelObject) {
+        return modelObject;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.java
new file mode 100644
index 0000000..5f6073b
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.java
@@ -0,0 +1,68 @@
+/*
+ * 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.wizards.resources;
+
+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.extensions.wizard.WizardStep;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.ResourceModel;
+
+public class ResourceConnCapabilitiesPanel extends WizardStep {
+
+    private static final long serialVersionUID = -114632577031611754L;
+
+    public ResourceConnCapabilitiesPanel(
+            final ResourceTO resourceTO, final Set<ConnectorCapability> connectorCapabilities) {
+        super();
+        setOutputMarkupId(true);
+
+        if (!resourceTO.isOverrideCapabilities() && resourceTO.getCapabilitiesOverride().isEmpty()) {
+            resourceTO.getCapabilitiesOverride().addAll(connectorCapabilities);
+        }
+
+        final CapabilitiesPanel connCapabilitiesPanel = new CapabilitiesPanel(
+                new PropertyModel<List<ConnectorCapability>>(resourceTO, "capabilitiesOverride"));
+        connCapabilitiesPanel.setEnabled(resourceTO.isOverrideCapabilities());
+        add(connCapabilitiesPanel);
+
+        final AjaxCheckBoxPanel overrideCapabilities = new AjaxCheckBoxPanel(
+                "overrideCapabilities",
+                new ResourceModel("overrideCapabilities", "overrideCapabilities").getObject(),
+                new PropertyModel<Boolean>(resourceTO, "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/wizards/resources/ResourceConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
new file mode 100644
index 0000000..b8be9a6
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
@@ -0,0 +1,123 @@
+/*
+ * 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.wizards.resources;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+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.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
+
+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 ResourceTO resourceTO, final boolean createFlag) {
+        super(resourceTO);
+        this.createFlag = createFlag;
+
+        LoadableDetachableModel<List<ConnConfProperty>> model = new LoadableDetachableModel<List<ConnConfProperty>>() {
+
+            private static final long serialVersionUID = -2965284931860212687L;
+
+            @Override
+            protected List<ConnConfProperty> load() {
+                final List<ConnConfProperty> confOverride = getConnProperties(resourceTO);
+                resourceTO.getConfOverride().clear();
+                resourceTO.getConfOverride().addAll(confOverride);
+
+                return new PropertyModel<List<ConnConfProperty>>(modelObject, "confOverride") {
+
+                    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;
+                    }
+                }.getObject();
+            }
+        };
+
+        setConfPropertyListView(model, true);
+
+        check.setEnabled(!model.getObject().isEmpty());
+        check.setVisible(!model.getObject().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/wizards/resources/ResourceDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
new file mode 100644
index 0000000..7435a30
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
@@ -0,0 +1,130 @@
+/*
+ * 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.wizards.resources;
+
+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.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.TraceLevel;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+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 WizardStep {
+
+    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 ResourceTO resourceTO, final boolean createFlag) {
+
+        super();
+        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>(resourceTO, "key"),
+                false).addRequiredLabel().setEnabled(createFlag));
+
+        container.add(new AjaxCheckBoxPanel(
+                "enforceMandatoryCondition",
+                new ResourceModel("enforceMandatoryCondition", "enforceMandatoryCondition").getObject(),
+                new PropertyModel<Boolean>(resourceTO, "enforceMandatoryCondition"),
+                false));
+
+        container.add(new AjaxSpinnerFieldPanel.Builder<Integer>().build(
+                "propagationPriority",
+                "propagationPriority",
+                Integer.class,
+                new PropertyModel<Integer>(resourceTO, "propagationPriority")));
+
+        container.add(new AjaxCheckBoxPanel("randomPwdIfNotProvided",
+                new ResourceModel("randomPwdIfNotProvided", "randomPwdIfNotProvided").getObject(),
+                new PropertyModel<Boolean>(resourceTO, "randomPwdIfNotProvided"),
+                false));
+
+        container.add(new AjaxPalettePanel.Builder<String>().
+                setAllowMoveAll(true).setAllowOrder(true).
+                build("propagationActionsClassNames",
+                        new PropertyModel<List<String>>(resourceTO, "propagationActionsClassNames"),
+                        new ListModel<>(propagationActionsClasses.getObject())).
+                setOutputMarkupId(true));
+
+        container.add(new AjaxDropDownChoicePanel<>(
+                "createTraceLevel",
+                new ResourceModel("createTraceLevel", "createTraceLevel").getObject(),
+                new PropertyModel<TraceLevel>(resourceTO, "createTraceLevel"),
+                false).
+                setChoices(Arrays.asList(TraceLevel.values())));
+
+        container.add(new AjaxDropDownChoicePanel<>(
+                "updateTraceLevel",
+                new ResourceModel("updateTraceLevel", "updateTraceLevel").getObject(),
+                new PropertyModel<TraceLevel>(resourceTO, "updateTraceLevel"),
+                false).
+                setChoices(Arrays.asList(TraceLevel.values())));
+
+        container.add(new AjaxDropDownChoicePanel<>(
+                "deleteTraceLevel",
+                new ResourceModel("deleteTraceLevel", "deleteTraceLevel").getObject(),
+                new PropertyModel<TraceLevel>(resourceTO, "deleteTraceLevel"),
+                false).
+                setChoices(Arrays.asList(TraceLevel.values())));
+
+        container.add(new AjaxDropDownChoicePanel<>(
+                "pullTraceLevel",
+                new ResourceModel("pullTraceLevel", "pullTraceLevel").getObject(),
+                new PropertyModel<TraceLevel>(resourceTO, "pullTraceLevel"),
+                false).
+                setChoices(Arrays.asList(TraceLevel.values())));
+
+        container.add(new AjaxTextFieldPanel(
+                "connector",
+                new ResourceModel("connector", "connector").getObject(),
+                new Model<>(resourceTO.getConnectorDisplayName()),
+                false).addRequiredLabel().setEnabled(false));
+    }
+}


[4/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
new file mode 100644
index 0000000..281b0b7
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
@@ -0,0 +1,642 @@
+/*
+ * 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.wizards.resources;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.client.console.commons.ConnIdSpecialAttributeName;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.rest.ConnectorRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
+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.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.MappingPurposePanel;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.AnyTypeTO;
+import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
+import org.apache.syncope.common.lib.to.ConnInstanceTO;
+import org.apache.syncope.common.lib.to.MappingItemTO;
+import org.apache.syncope.common.lib.to.MappingTO;
+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.IntMappingType;
+import org.apache.syncope.common.lib.types.MappingPurpose;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+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.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.ResourceModel;
+
+/**
+ * Resource mapping panel.
+ */
+public class ResourceMappingPanel extends Panel {
+
+    private static final long serialVersionUID = -7982691107029848579L;
+
+    /**
+     * Mapping field style sheet.
+     */
+    private static final String DEF_FIELD_STYLE = "";
+
+    /**
+     * Any type rest client.
+     */
+    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
+
+    /**
+     * Any type class rest client.
+     */
+    private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
+
+    /**
+     * ConnInstance rest client.
+     */
+    private final ConnectorRestClient connRestClient = new ConnectorRestClient();
+
+    /**
+     * Resource schema name.
+     */
+    private final List<String> schemaNames;
+
+    private final Label passwordLabel;
+
+    /**
+     * Add mapping button.
+     */
+    private final AjaxButton addMappingBtn;
+
+    /**
+     * All mappings.
+     */
+    private final ListView<MappingItemTO> mappings;
+
+    /**
+     * External resource to be updated.
+     */
+    private final ResourceTO resourceTO;
+
+    /**
+     * External resource provisioning configuration instance to be updated.
+     */
+    private final ProvisionTO provisionTO;
+
+    /**
+     * Mapping container.
+     */
+    private final WebMarkupContainer mappingContainer;
+
+    private MappingTO getMapping() {
+        if (provisionTO.getMapping() == null) {
+            provisionTO.setMapping(new MappingTO());
+        }
+
+        return provisionTO.getMapping();
+    }
+
+    /**
+     * Attribute Mapping Panel.
+     *
+     * @param id panel id
+     * @param resourceTO external resource to be updated.
+     * @param provisionTO external resource provisioning configuration instance.
+     */
+    public ResourceMappingPanel(final String id, final ResourceTO resourceTO, final ProvisionTO provisionTO) {
+        super(id);
+        setOutputMarkupId(true);
+
+        this.resourceTO = resourceTO;
+        this.provisionTO = provisionTO == null ? new ProvisionTO() : provisionTO;
+
+        this.mappingContainer = new WebMarkupContainer("mappingContainer");
+        this.mappingContainer.setOutputMarkupId(true);
+        add(this.mappingContainer);
+
+        if (resourceTO.getConnector() != null && resourceTO.getConnector() > 0) {
+            schemaNames = getSchemaNames(resourceTO.getConnector(), resourceTO.getConfOverride());
+            setEnabled();
+        } else {
+            schemaNames = Collections.<String>emptyList();
+        }
+
+        mappingContainer.add(Constants.getJEXLPopover(this, TooltipConfig.Placement.bottom));
+
+        passwordLabel = new Label("passwordLabel", new ResourceModel("password"));
+        mappingContainer.add(passwordLabel);
+
+        Collections.sort(getMapping().getItems(), new Comparator<MappingItemTO>() {
+
+            @Override
+            public int compare(final MappingItemTO left, final MappingItemTO right) {
+                int compared;
+                if (left == null && right == null) {
+                    compared = 0;
+                } else if (left == null) {
+                    compared = 1;
+                } else if (right == null) {
+                    compared = -1;
+                } else if (left.getPurpose() == MappingPurpose.BOTH && right.getPurpose() != MappingPurpose.BOTH) {
+                    compared = -1;
+                } else if (left.getPurpose() != MappingPurpose.BOTH && right.getPurpose() == MappingPurpose.BOTH) {
+                    compared = 1;
+                } else if (left.getPurpose() == MappingPurpose.PROPAGATION
+                        && (right.getPurpose() == MappingPurpose.PULL
+                        || right.getPurpose() == MappingPurpose.NONE)) {
+                    compared = -1;
+                } else if (left.getPurpose() == MappingPurpose.PULL
+                        && right.getPurpose() == MappingPurpose.PROPAGATION) {
+                    compared = 1;
+                } else if (left.getPurpose() == MappingPurpose.PULL
+                        && right.getPurpose() == MappingPurpose.NONE) {
+                    compared = -1;
+                } else if (left.getPurpose() == MappingPurpose.NONE
+                        && right.getPurpose() != MappingPurpose.NONE) {
+                    compared = 1;
+                } else if (left.isConnObjectKey()) {
+                    compared = -1;
+                } else if (right.isConnObjectKey()) {
+                    compared = 1;
+                } else if (left.isPassword()) {
+                    compared = -1;
+                } else if (right.isPassword()) {
+                    compared = 1;
+                } else {
+                    compared = left.getIntAttrName().compareTo(right.getIntAttrName());
+                }
+                return compared;
+            }
+        });
+
+        mappings = new ListView<MappingItemTO>("mappings", getMapping().getItems()) {
+
+            private static final long serialVersionUID = 4949588177564901031L;
+
+            @Override
+            protected void populateItem(final ListItem<MappingItemTO> item) {
+                final MappingItemTO mapItem = item.getModelObject();
+                if (mapItem.getPurpose() == null) {
+                    mapItem.setPurpose(MappingPurpose.BOTH);
+                }
+
+                AnyTypeKind entity = null;
+                if (provisionTO.getAnyType().equals(AnyTypeKind.GROUP.name())) {
+                    // support for clone
+                    entity = AnyTypeKind.GROUP;
+                } else if (mapItem.getIntMappingType() != null) {
+                    entity = mapItem.getIntMappingType().getAnyTypeKind();
+                }
+
+                // it will happen just in case of clone to create a new mapping for group object
+                if (mapItem.getIntMappingType() != null && mapItem.getIntMappingType().getAnyTypeKind() != entity) {
+                    mapItem.setIntMappingType(null);
+                    mapItem.setIntAttrName(null);
+                }
+
+                //--------------------------------
+                // Entity
+                // -------------------------------
+                final AjaxDropDownChoicePanel<AnyTypeKind> entitiesPanel = new AjaxDropDownChoicePanel<>(
+                        "entities",
+                        new ResourceModel("entities", "entities").getObject(),
+                        new Model<>(entity));
+
+                entitiesPanel.hideLabel();
+                entitiesPanel.setChoices(provisionTO.getAnyType().equals(AnyTypeKind.GROUP.name())
+                        ? Collections.<AnyTypeKind>singletonList(AnyTypeKind.GROUP)
+                        : Arrays.asList(AnyTypeKind.values()));
+
+                entitiesPanel.setStyleSheet(false, DEF_FIELD_STYLE);
+                item.add(entitiesPanel);
+                // -------------------------------
+
+                //--------------------------------
+                // Internal attribute type
+                // -------------------------------
+                final List<IntMappingType> attrTypes = new ArrayList<>(getAttributeTypes(entity));
+                final AjaxDropDownChoicePanel<IntMappingType> intMappingTypes = new AjaxDropDownChoicePanel<>(
+                        "intMappingTypes",
+                        new ResourceModel("intMappingTypes", "intMappingTypes").getObject(),
+                        new PropertyModel<IntMappingType>(mapItem, "intMappingType"),
+                        false);
+                intMappingTypes.setNullValid(true).setRequired(true).hideLabel();
+                intMappingTypes.setChoices(attrTypes);
+                item.add(intMappingTypes);
+                // -------------------------------
+
+                //--------------------------------
+                // Internal attribute
+                // -------------------------------
+                final AjaxDropDownChoicePanel<String> intAttrNames = new AjaxDropDownChoicePanel<>(
+                        "intAttrNames",
+                        getString("intAttrNames"),
+                        new PropertyModel<String>(mapItem, "intAttrName"),
+                        false);
+                intAttrNames.setChoices(Collections.<String>emptyList());
+                intAttrNames.setNullValid(true).setRequired(true).hideLabel();
+                item.add(intAttrNames);
+                // -------------------------------
+
+                //--------------------------------
+                // External attribute
+                // -------------------------------
+                final AjaxTextFieldPanel extAttrNames = new AjaxTextFieldPanel(
+                        "extAttrName",
+                        new ResourceModel("extAttrNames", "extAttrNames").getObject(),
+                        new PropertyModel<String>(mapItem, "extAttrName"));
+                extAttrNames.setChoices(schemaNames);
+
+                boolean required = !mapItem.isPassword();
+                extAttrNames.setRequired(required).hideLabel();
+                extAttrNames.setEnabled(required);
+                item.add(extAttrNames);
+                // -------------------------------
+
+                //--------------------------------
+                // Mandatory
+                // -------------------------------
+                final AjaxTextFieldPanel mandatory = new AjaxTextFieldPanel(
+                        "mandatoryCondition",
+                        new ResourceModel("mandatoryCondition", "mandatoryCondition").getObject(),
+                        new PropertyModel<String>(mapItem, "mandatoryCondition"));
+                mandatory.hideLabel();
+                mandatory.setChoices(Arrays.asList(new String[] { "true", "false" }));
+                item.add(mandatory);
+                // -------------------------------
+
+                //--------------------------------
+                // Connector object key
+                // -------------------------------
+                final AjaxCheckBoxPanel connObjectKey = new AjaxCheckBoxPanel(
+                        "connObjectKey",
+                        new ResourceModel("connObjectKey", "connObjectKey").getObject(),
+                        new PropertyModel<Boolean>(mapItem, "connObjectKey"), false);
+                connObjectKey.hideLabel();
+                item.add(connObjectKey);
+                // -------------------------------
+
+                //--------------------------------
+                // Password
+                // -------------------------------
+                final AjaxCheckBoxPanel password = new AjaxCheckBoxPanel(
+                        "password",
+                        new ResourceModel("password", "password").getObject(),
+                        new PropertyModel<Boolean>(mapItem, "password"), false);
+                item.add(password.hideLabel());
+                // -------------------------------
+
+                //--------------------------------
+                // Purpose
+                // -------------------------------
+                final WebMarkupContainer purpose = new WebMarkupContainer("purpose");
+                purpose.setOutputMarkupId(Boolean.TRUE);
+
+                final MappingPurposePanel panel = new MappingPurposePanel(
+                        "purposeActions", new PropertyModel<MappingPurpose>(mapItem, "purpose"), purpose);
+
+                purpose.add(panel.setRenderBodyOnly(true));
+                item.add(purpose);
+                // -------------------------------
+
+                //--------------------------------
+                // Remove
+                // -------------------------------
+                final ActionLinksPanel.Builder<Serializable> actions = ActionLinksPanel.builder();
+                actions.add(new ActionLink<Serializable>() {
+
+                    private static final long serialVersionUID = -3722207913631435501L;
+
+                    @Override
+                    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))) {
+                                index = i;
+                            }
+                        }
+
+                        if (index != -1) {
+                            getMapping().getItems().remove(index);
+                            item.getParent().removeAll();
+                            target.add(ResourceMappingPanel.this);
+                        }
+                    }
+                }, ActionLink.ActionType.DELETE, StandardEntitlement.RESOURCE_UPDATE);
+                item.add(actions.build("toRemove"));
+                // -------------------------------
+
+                entitiesPanel.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                    private static final long serialVersionUID = -1107858522700306810L;
+
+                    @Override
+                    protected void onUpdate(final AjaxRequestTarget target) {
+                        attrTypes.clear();
+                        attrTypes.addAll(getAttributeTypes(entitiesPanel.getModelObject()));
+                        intMappingTypes.setChoices(attrTypes);
+
+                        intAttrNames.setChoices(Collections.<String>emptyList());
+
+                        target.add(intMappingTypes);
+                        target.add(intAttrNames);
+                    }
+                });
+
+                intMappingTypes.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                    private static final long serialVersionUID = -1107858522700306810L;
+
+                    @Override
+                    protected void onUpdate(final AjaxRequestTarget target) {
+                        setAttrNames(intMappingTypes.getModelObject(), intAttrNames);
+                        target.add(intAttrNames);
+
+                        setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password);
+                        target.add(connObjectKey);
+                    }
+                });
+
+                intAttrNames.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                    private static final long serialVersionUID = -1107858522700306810L;
+
+                    @Override
+                    protected void onUpdate(final AjaxRequestTarget target) {
+                    }
+                });
+
+                connObjectKey.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                    private static final long serialVersionUID = -1107858522700306810L;
+
+                    @Override
+                    protected void onUpdate(final AjaxRequestTarget target) {
+                        if (connObjectKey.getModelObject()) {
+                            mapItem.setMandatoryCondition("true");
+                            mandatory.setEnabled(false);
+                        } else {
+                            mapItem.setMandatoryCondition("false");
+                            mandatory.setEnabled(true);
+                        }
+                        target.add(mandatory);
+                    }
+                });
+
+                password.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                    private static final long serialVersionUID = -1107858522700306810L;
+
+                    @Override
+                    protected void onUpdate(final AjaxRequestTarget target) {
+                        extAttrNames.setEnabled(!mapItem.isConnObjectKey() && !password.getModelObject());
+                        extAttrNames.setModelObject(password.getModelObject()
+                                ? ConnIdSpecialAttributeName.PASSWORD : extAttrNames.getModelObject());
+                        extAttrNames.setRequired(!password.getModelObject());
+                        target.add(extAttrNames);
+
+                        setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password);
+                        target.add(connObjectKey);
+                    }
+                });
+
+                setAttrNames(mapItem.getIntMappingType(), intAttrNames);
+                setConnObjectKey(mapItem.getIntMappingType(), connObjectKey, password);
+
+                if (!AnyTypeKind.USER.name().equals(provisionTO.getAnyType())) {
+                    password.setVisible(false);
+
+                    // Changes required by clone ....
+                    extAttrNames.setEnabled(!mapItem.isConnObjectKey());
+                    if (mapItem.isPassword()) {
+                        // re-enable if and only if cloned objec mapping item was a password
+                        intAttrNames.setEnabled(true);
+                    }
+                    mapItem.setPassword(false);
+                }
+            }
+        };
+
+        mappings.setReuseItems(true);
+        mappingContainer.add(mappings);
+
+        addMappingBtn = new IndicatingAjaxButton("addMappingBtn", new ResourceModel("add")) {
+
+            private static final long serialVersionUID = -4804368561204623354L;
+
+            @Override
+            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+                getMapping().getItems().add(new MappingItemTO());
+                target.add(ResourceMappingPanel.this);
+            }
+        };
+        addMappingBtn.setDefaultFormProcessing(false);
+        addMappingBtn.setEnabled(resourceTO.getConnector() != null && resourceTO.getConnector() > 0);
+        mappingContainer.add(addMappingBtn);
+    }
+
+    @Override
+    protected void onBeforeRender() {
+        super.onBeforeRender();
+        passwordLabel.setVisible(AnyTypeKind.USER.name().equals(this.provisionTO.getAnyType()));
+    }
+
+    private List<String> getSchemaNames(final Long connectorId, final Set<ConnConfProperty> conf) {
+        final ConnInstanceTO connInstanceTO = new ConnInstanceTO();
+        connInstanceTO.setKey(connectorId);
+        connInstanceTO.getConf().addAll(conf);
+
+        // SYNCOPE-156: use provided info to give schema names (and type!) by ObjectClass
+        ConnIdObjectClassTO clazz = IterableUtils.find(
+                connRestClient.buildObjectClassInfo(connInstanceTO, true), new Predicate<ConnIdObjectClassTO>() {
+
+            @Override
+            public boolean evaluate(final ConnIdObjectClassTO object) {
+                return object.getType().equalsIgnoreCase(ResourceMappingPanel.this.provisionTO.getObjectClass());
+            }
+        });
+
+        return clazz == null ? new ArrayList<String>()
+                : IterableUtils.toList(IterableUtils.filteredIterable(clazz.getAttributes(), new Predicate<String>() {
+
+                    @Override
+                    public boolean evaluate(final String object) {
+                        return !(ConnIdSpecialAttributeName.NAME.equals(object)
+                                || ConnIdSpecialAttributeName.ENABLE.equals(object)
+                                || ConnIdSpecialAttributeName.PASSWORD.equals(object));
+                    }
+                }));
+    }
+
+    private void setEnabled() {
+        ConnInstanceTO connInstanceTO = new ConnInstanceTO();
+        connInstanceTO.setKey(resourceTO.getConnector());
+        connInstanceTO.getConf().addAll(resourceTO.getConfOverride());
+
+        boolean enabled = provisionTO != null;
+
+        this.mappingContainer.setEnabled(enabled);
+        this.mappingContainer.setVisible(enabled);
+
+        if (!enabled) {
+            getMapping().getItems().clear();
+            getMapping().setConnObjectLink(null);
+        }
+    }
+
+    /**
+     * Set attribute names for a drop down choice list.
+     *
+     * @param type attribute type.
+     * @param toBeUpdated drop down choice to be updated.
+     */
+    private void setAttrNames(final IntMappingType type, final AjaxDropDownChoicePanel<String> toBeUpdated) {
+        toBeUpdated.setRequired(true);
+        toBeUpdated.setEnabled(true);
+
+        if (type == null || type.getAnyTypeKind() == null) {
+            toBeUpdated.setChoices(Collections.<String>emptyList());
+        } else {
+            AnyTypeTO anyTypeTO = anyTypeRestClient.read(provisionTO.getAnyType());
+
+            List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
+            anyTypeClassTOs.addAll(anyTypeClassRestClient.list(anyTypeTO.getClasses()));
+            for (String auxClass : provisionTO.getAuxClasses()) {
+                anyTypeClassTOs.add(anyTypeClassRestClient.read(auxClass));
+            }
+
+            List<String> choices;
+            switch (type) {
+                case UserPlainSchema:
+                case GroupPlainSchema:
+                case AnyObjectPlainSchema:
+                    final Set<String> plains = new HashSet<>();
+                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
+                        plains.addAll(anyTypeClassTO.getPlainSchemas());
+                    }
+                    choices = new ArrayList<>(plains);
+                    break;
+
+                case UserDerivedSchema:
+                case GroupDerivedSchema:
+                case AnyObjectDerivedSchema:
+                    final Set<String> deriveds = new HashSet<>();
+                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
+                        deriveds.addAll(anyTypeClassTO.getDerSchemas());
+                    }
+                    choices = new ArrayList<>(deriveds);
+                    break;
+
+                case UserVirtualSchema:
+                case GroupVirtualSchema:
+                case AnyObjectVirtualSchema:
+                    final Set<String> virtuals = new HashSet<>();
+                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
+                        virtuals.addAll(anyTypeClassTO.getVirSchemas());
+                    }
+                    choices = new ArrayList<>(virtuals);
+                    break;
+
+                case UserKey:
+                case Password:
+                case Username:
+                case GroupKey:
+                case GroupName:
+                case AnyObjectKey:
+                default:
+                    toBeUpdated.setRequired(false);
+                    toBeUpdated.setEnabled(false);
+                    choices = Collections.<String>emptyList();
+            }
+            Collections.sort(choices);
+            toBeUpdated.setChoices(choices);
+        }
+    }
+
+    /**
+     * Enable/Disable connObjectKey checkbox.
+     *
+     * @param type attribute type.
+     * @param connObjectKey connObjectKey checkbox.
+     * @param password password checkbox.
+     */
+    private void setConnObjectKey(
+            final IntMappingType type, final AjaxCheckBoxPanel connObjectKey, final AjaxCheckBoxPanel password) {
+
+        if (type != null && type.getAnyTypeKind() != null) {
+            switch (type) {
+                case UserVirtualSchema:
+                case GroupVirtualSchema:
+                case AnyObjectVirtualSchema:
+                // Virtual connObjectKey is not permitted
+                case Password:
+                    // connObjectKey cannot be derived from password.
+                    connObjectKey.setReadOnly(true);
+                    connObjectKey.setModelObject(false);
+                    break;
+
+                default:
+                    if (password.getModelObject()) {
+                        connObjectKey.setReadOnly(true);
+                        connObjectKey.setModelObject(false);
+                    } else {
+                        connObjectKey.setReadOnly(false);
+                    }
+            }
+        }
+    }
+
+    /**
+     * Get all attribute types from a selected attribute type.
+     *
+     * @param kind entity.
+     * @return all attribute types.
+     */
+    private List<IntMappingType> getAttributeTypes(final AnyTypeKind kind) {
+        final List<IntMappingType> res = new ArrayList<>();
+
+        if (kind != null) {
+            res.addAll(IntMappingType.getAttributeTypes(kind));
+        }
+
+        return res;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
new file mode 100644
index 0000000..67aaf9b
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
@@ -0,0 +1,118 @@
+/*
+ * 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.wizards.resources;
+
+import java.util.List;
+import org.apache.commons.collections4.IteratorUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.commons.lang3.SerializationUtils;
+import org.apache.syncope.client.console.panels.ListViewPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.common.lib.to.ProvisionTO;
+import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.extensions.wizard.WizardStep;
+
+public class ResourceProvisionPanel extends WizardStep {
+
+    private static final long serialVersionUID = -7982691107029848579L;
+
+    public ResourceProvisionPanel(final ResourceTO resourceTO, final PageReference pageRef) {
+        super();
+        setOutputMarkupId(true);
+
+        final ListViewPanel.Builder<ProvisionTO> builder = new ListViewPanel.Builder<ProvisionTO>(
+                ProvisionTO.class, pageRef) {
+
+            private static final long serialVersionUID = 4907732721283972943L;
+
+            @Override
+            protected ProvisionTO getActualItem(final ProvisionTO item, final List<ProvisionTO> list) {
+                return item == null
+                        ? null
+                        : IteratorUtils.find(list.iterator(), new Predicate<ProvisionTO>() {
+
+                            @Override
+                            public boolean evaluate(final ProvisionTO in) {
+                                return ((item.getKey() == null && in.getKey() == null)
+                                        || (in.getKey() != null && in.getKey().equals(item.getKey())))
+                                        && ((item.getAnyType() == null && in.getAnyType() == null)
+                                        || (in.getAnyType() != null && in.getAnyType().equals(item.getAnyType())));
+                            }
+                        });
+            }
+        };
+
+        builder.setItems(resourceTO.getProvisions());
+        builder.includes("anyType", "objectClass", "auxClasses");
+        builder.setReuseItem(false);
+
+        builder.
+                addAction(new ActionLink<ProvisionTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435504L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
+                        send(pageRef.getPage(), Broadcast.DEPTH,
+                                new AjaxWizard.NewItemActionEvent<>(provisionTO, 2, target));
+                    }
+                }, ActionLink.ActionType.MAPPING, StandardEntitlement.RESOURCE_UPDATE).
+                addAction(new ActionLink<ProvisionTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435524L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
+                        provisionTO.setSyncToken(null);
+                        send(pageRef.getPage(), Broadcast.DEPTH, new ListViewPanel.ListViewReload(target));
+                    }
+                }, ActionLink.ActionType.RESET_TIME, StandardEntitlement.RESOURCE_UPDATE).
+                addAction(new ActionLink<ProvisionTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435534L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
+                        final ProvisionTO clone = SerializationUtils.clone(provisionTO);
+                        clone.setKey(0L);
+                        clone.setAnyType(null);
+                        clone.setObjectClass(null);
+                        send(pageRef.getPage(), Broadcast.DEPTH, new AjaxWizard.NewItemActionEvent<>(clone, target));
+                    }
+                }, ActionLink.ActionType.CLONE, StandardEntitlement.RESOURCE_CREATE).
+                addAction(new ActionLink<ProvisionTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435544L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
+                        resourceTO.getProvisions().remove(provisionTO);
+                        send(pageRef.getPage(), Broadcast.DEPTH, new ListViewPanel.ListViewReload(target));
+                    }
+                }, ActionLink.ActionType.DELETE, StandardEntitlement.RESOURCE_DELETE);
+
+        builder.addNewItemPanelBuilder(new ProvisionWizardBuilder(resourceTO, pageRef));
+        add(builder.build("provision"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
new file mode 100644
index 0000000..1661893
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
@@ -0,0 +1,137 @@
+/*
+ * 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.wizards.resources;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.syncope.client.console.rest.PolicyRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.PolicyRenderer;
+import org.apache.syncope.common.lib.policy.AbstractPolicyTO;
+import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.PolicyType;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.ResourceModel;
+
+public class ResourceSecurityPanel extends WizardStep {
+
+    private static final long serialVersionUID = -7982691107029848579L;
+
+    private final PolicyRestClient policyRestClient = new PolicyRestClient();
+
+    private final IModel<Map<Long, String>> passwordPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+
+        private static final long serialVersionUID = 5275935387613157437L;
+
+        @Override
+        protected Map<Long, String> load() {
+            Map<Long, String> res = new HashMap<>();
+            for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PASSWORD)) {
+                res.put(policyTO.getKey(), policyTO.getDescription());
+            }
+            return res;
+        }
+    };
+
+    private final IModel<Map<Long, String>> accountPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+
+        private static final long serialVersionUID = -2012833443695917883L;
+
+        @Override
+        protected Map<Long, String> load() {
+            Map<Long, String> res = new HashMap<>();
+            for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.ACCOUNT)) {
+                res.put(policyTO.getKey(), policyTO.getDescription());
+            }
+            return res;
+        }
+    };
+
+    private final IModel<Map<Long, String>> pullPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+
+        private static final long serialVersionUID = -2012833443695917883L;
+
+        @Override
+        protected Map<Long, String> load() {
+            Map<Long, String> res = new HashMap<>();
+            for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PULL)) {
+                res.put(policyTO.getKey(), policyTO.getDescription());
+            }
+            return res;
+        }
+    };
+
+    public ResourceSecurityPanel(final ResourceTO resourceTO) {
+        super();
+        setOutputMarkupId(true);
+
+        final WebMarkupContainer container = new WebMarkupContainer("container");
+        container.setOutputMarkupId(true);
+        container.setRenderBodyOnly(true);
+        add(container);
+
+        // -------------------------------
+        // Password policy selection
+        // -------------------------------
+        AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<>(
+                "passwordPolicy",
+                new ResourceModel("passwordPolicy", "passwordPolicy").getObject(),
+                new PropertyModel<Long>(resourceTO, "passwordPolicy"),
+                false);
+        passwordPolicy.setChoiceRenderer(new PolicyRenderer(passwordPolicies));
+        passwordPolicy.setChoices(new ArrayList<>(passwordPolicies.getObject().keySet()));
+        ((DropDownChoice<?>) passwordPolicy.getField()).setNullValid(true);
+        container.add(passwordPolicy);
+        // -------------------------------
+
+        // -------------------------------
+        // Account policy selection
+        // -------------------------------
+        AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<>(
+                "accountPolicy",
+                new ResourceModel("accountPolicy", "accountPolicy").getObject(),
+                new PropertyModel<Long>(resourceTO, "accountPolicy"),
+                false);
+        accountPolicy.setChoiceRenderer(new PolicyRenderer(accountPolicies));
+        accountPolicy.setChoices(new ArrayList<>(accountPolicies.getObject().keySet()));
+        ((DropDownChoice<?>) accountPolicy.getField()).setNullValid(true);
+        container.add(accountPolicy);
+        // -------------------------------
+
+        // -------------------------------
+        // Pull policy selection
+        // -------------------------------
+        AjaxDropDownChoicePanel<Long> pullPolicy = new AjaxDropDownChoicePanel<>(
+                "pullPolicy",
+                new ResourceModel("pullPolicy", "pullPolicy").getObject(),
+                new PropertyModel<Long>(resourceTO, "pullPolicy"),
+                false);
+        pullPolicy.setChoiceRenderer(new PolicyRenderer(pullPolicies));
+        pullPolicy.setChoices(new ArrayList<>(pullPolicies.getObject().keySet()));
+        ((DropDownChoice<?>) pullPolicy.getField()).setNullValid(true);
+        container.add(pullPolicy);
+        // -------------------------------
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
new file mode 100644
index 0000000..e46201f
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
@@ -0,0 +1,144 @@
+/*
+ * 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.wizards.resources;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
+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.rest.ResourceRestClient;
+import org.apache.syncope.client.console.topology.TopologyNode;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.common.lib.to.MappingItemTO;
+import org.apache.syncope.common.lib.to.ProvisionTO;
+import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.model.StringResourceModel;
+
+/**
+ * Resource wizard builder.
+ */
+public class ResourceWizardBuilder extends AbstractResourceWizardBuilder<ResourceTO> {
+
+    private static final long serialVersionUID = 1734415311027284221L;
+
+    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
+
+    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
+
+    private boolean createFlag;
+
+    public ResourceWizardBuilder(final ResourceTO resourceTO, final PageReference pageRef) {
+        super(resourceTO, pageRef);
+    }
+
+    @Override
+    public AjaxWizard<Serializable> build(final AjaxWizard.Mode mode) {
+        this.createFlag = mode == AjaxWizard.Mode.CREATE;
+        return super.build(mode);
+    }
+
+    @Override
+    protected WizardModel buildModelSteps(final Serializable modelObject, final WizardModel wizardModel) {
+        final ResourceTO resourceTO = ResourceTO.class.cast(modelObject);
+        wizardModel.add(new ResourceDetailsPanel(resourceTO, createFlag));
+        wizardModel.add(new ResourceProvisionPanel(resourceTO, pageRef));
+        wizardModel.add(new ResourceConnConfPanel(resourceTO, createFlag) {
+
+            private static final long serialVersionUID = -1128269449868933504L;
+
+            @Override
+            protected void check(final AjaxRequestTarget target) {
+                if (connectorRestClient.check(modelObject)) {
+                    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", " ");
+            }
+
+        });
+        wizardModel.add(new ResourceConnCapabilitiesPanel(
+                resourceTO, connectorRestClient.read(resourceTO.getConnector()).getCapabilities()));
+
+        wizardModel.add(new ResourceSecurityPanel(resourceTO));
+        return wizardModel;
+    }
+
+    @Override
+    protected ResourceTO onApplyInternal(final Serializable modelObject) {
+        final ResourceTO resourceTO = ResourceTO.class.cast(modelObject);
+        boolean connObjectKeyError = false;
+
+        final Collection<ProvisionTO> provisions = new ArrayList<>(resourceTO.getProvisions());
+
+        for (ProvisionTO provision : provisions) {
+            if (provision != null) {
+                if (provision.getMapping() == null || provision.getMapping().getItems().isEmpty()) {
+                    resourceTO.getProvisions().remove(provision);
+                } else {
+                    long uConnObjectKeyCount = IterableUtils.countMatches(
+                            provision.getMapping().getItems(), new Predicate<MappingItemTO>() {
+
+                        @Override
+                        public boolean evaluate(final MappingItemTO item) {
+                            return item.isConnObjectKey();
+                        }
+                    });
+
+                    connObjectKeyError = uConnObjectKeyCount != 1;
+                }
+            }
+        }
+
+        final ResourceTO res;
+        if (connObjectKeyError) {
+            throw new RuntimeException(new StringResourceModel("connObjectKeyValidation").getString());
+        } else if (createFlag) {
+            res = resourceRestClient.create(resourceTO);
+        } else {
+            resourceRestClient.update(resourceTO);
+            res = resourceTO;
+        }
+        return res;
+    }
+
+    @Override
+    protected Serializable getCreateCustomPayloadEvent(final Serializable afterObject, final AjaxRequestTarget target) {
+        final ResourceTO actual = ResourceTO.class.cast(afterObject);
+        return new CreateEvent(
+                actual.getKey(),
+                actual.getKey(),
+                TopologyNode.Kind.RESOURCE,
+                actual.getConnector(),
+                target);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
index 05183af..fb8431a 100644
--- a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
+++ b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
@@ -163,7 +163,14 @@ div.wicket-modal div.w_content_3 {
 
 .scrollable-tab-content {
   overflow-y: auto;
-  max-height: 400px;
+  max-height: 480px;
+}
+
+.inner-scrollable-tab-content {
+  height: 440px;
+  margin-top: 40px;
+  overflow-x: hidden;
+  overflow-y: auto;
 }
 
 a.help {
@@ -229,6 +236,19 @@ a.help span a {
   padding: 0px 5px 0px 5px;
 }
 
+div.wizard-view div.wizard-view{
+  max-height: 380px;
+  height: 380px;
+  overflow-y: auto;
+  overflow-x: hidden;
+  padding: 50px 20px 50px 20px;
+}
+
+.wizard-view .wizard-form{
+  max-height: 450px;
+  height: 450px;
+}
+
 .modal-body .tab-content .wizard-view {
   max-height: 330px !important;
   height: 330px !important;

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractConnConfPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractConnConfPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractConnConfPanel.html
deleted file mode 100644
index 974c9aa..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractConnConfPanel.html
+++ /dev/null
@@ -1,33 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="connectorPropertiesContainer">
-      <div class="form-group" wicket:id="connectorProperties">
-        <span wicket:id="panel">[panel]</span>
-      </div>
-
-      <div>
-        <a style="position: fixed; top: 70px; right:60px;" wicket:id="check"  href="#">
-          <i class="fa fa-heartbeat fa-2x"></i>
-        </a>
-      </div>
-    </span>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractResourceModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractResourceModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractResourceModal.html
deleted file mode 100644
index bd4cd4b..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractResourceModal.html
+++ /dev/null
@@ -1,23 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:extend>
-    <div wicket:id="tabbedPanel"></div>
-  </wicket:extend>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.html
deleted file mode 100644
index ed50fa5..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnCapabilitiesPanel.html
+++ /dev/null
@@ -1,23 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="capabilitiesPalette"/> 
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.html
deleted file mode 100644
index 87fc624..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.html
+++ /dev/null
@@ -1,61 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head>
-    <title>Connector details panel</title>
-  </head>
-  <body>
-    <wicket:panel>
-      <div class="form-group">
-        <span wicket:id="displayName">[displayName]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="location">[location]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="bundleName">[bundleName]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="version">[version]</span>
-      </div>
-
-      <div class="form-group" style="padding: 30px 0px 0px 0px">
-        <table class="table">
-          <tbody>
-            <tr>
-              <td><span wicket:id="connRequestTimeout">[connRequestTimeout]</span></td>
-              <td><span wicket:id="poolMaxObjects">[poolMaxObjects]</span></td>
-            </tr>
-            <tr>
-              <td><span wicket:id="poolMinIdle">[poolMinIdle]</span></td>
-              <td><span wicket:id="poolMaxIdle">[poolMaxIdle]</span></td>
-            </tr>
-            <tr>
-              <td><span wicket:id="poolMaxWait">[poolMaxWait]</span></td>
-              <td><span wicket:id="poolMinEvictableIdleTime">[poolMinEvictableIdleTime]</span></td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-    </wicket:panel>
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal.properties
deleted file mode 100644
index 91dae7b..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal.properties
+++ /dev/null
@@ -1,45 +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.
-general=General
-configuration=Configuration
-capabilities=Capabilities
-
-displayName=Display name
-bundleName=Bundle
-version=Version
-connRequestTimeout=Request timeout (sec)
-action=Action
-edit=Edit
-edit_attribute=Edit attribute
-serviceName=Service name
-endpoint=Endpoint
-title=Connector
-overridable=Overridable
-property=Property
-value=Value
-
-success_connection=Successful connection
-error_connection=Connection failure
-check=Check connection
-location=Location
-poolMaxObjects=Max objects (idle+active)
-poolMinIdle=Min idle objects
-poolMaxIdle=Max idle objects
-poolMaxWait=Max waiting time (msec)
-poolMinEvictableIdleTime=Min eviction time (msec)
-new=New
-connectorName=Connector Bundle

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_it.properties
deleted file mode 100644
index b012649..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_it.properties
+++ /dev/null
@@ -1,45 +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.
-general=Generale
-configuration=Configurazione
-capabilities=Capability
-
-bundleName=Bundle
-version=Versione
-connRequestTimeout=Timeout richiesta (sec)
-action=Azione
-edit=Edit
-edit_attribute=Edit attribute
-serviceName=Nome servizio
-endpoint=Endpoint
-title=Connettore
-displayName=Nome visualizzato
-overridable=Sovrascrivibile
-property=Propriet\u00e0
-value=Valore
-
-success_connection=Connessione avvenuta con successo
-error_connection=Connessione non riuscita
-check=Verifica connessione
-location=Posizione
-poolMaxObjects=Max oggetti (attivi e non)
-poolMinIdle=Max oggetti attivi
-poolMaxIdle=Max oggetti inattivi
-poolMaxWait=Tempo max attesa
-poolMinEvictableIdleTime=Tempo min espulsione
-new=Nuovo
-connectorName=Connector Bundle

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_pt_BR.properties
deleted file mode 100644
index a209703..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_pt_BR.properties
+++ /dev/null
@@ -1,45 +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.
-general=Geral
-configuration=Configura\u00e7\u00e3o
-capabilities=Capacidades
-
-displayName=Mostrar Nome
-bundleName=Bundle
-version=Vers\u00e3o
-connRequestTimeout=Timeout da Requisi\u00e7\u00e3o (seg)
-action=A\u00e7\u00e3o
-edit=Alterar
-edit_attribute=Alterar Atributo
-serviceName=Nome de Servi\u00e7o
-endpoint=Endpoint
-title=Conector
-overridable=Alter\u00e1vel
-property=Propriedade
-value=Valor
-
-success_connection=Sucesso na Conex\u00e3o
-error_connection=Falha na Conex\u00e3o
-check=Verificar a Conex\u00e3o
-location=Localiza\u00e7\u00e3o
-poolMaxObjects=Max objects (idle+active)
-poolMinIdle=Min idle objects
-poolMaxIdle=Max idle objects
-poolMaxWait=Max waiting time (msec)
-poolMinEvictableIdleTime=Min eviction time (msec)
-new=Novo
-connectorName=Connector Bundle

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_ru.properties
deleted file mode 100644
index 8b27977..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnectorModal_ru.properties
+++ /dev/null
@@ -1,73 +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.
-#
-# general=Основное
-general=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435
-# configuration=Конфигурация
-configuration=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f
-# capabilities=Действия
-capabilities=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-
-# displayName=Название
-displayName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
-# bundleName=Название пакета
-bundleName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430
-# version=Версия
-version=\u0412\u0435\u0440\u0441\u0438\u044f
-# connRequestTimeout=Таймаут запроса (сек)
-connRequestTimeout=\u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0441\u0435\u043a)
-# action=Действие
-action=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435
-# edit=Изменить
-edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c
-# edit_attribute=Изменить атрибут
-edit_attribute=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442
-# serviceName=Наименование сервиса
-serviceName=\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430
-# endpoint=Конечная точка подключения
-endpoint=\u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f
-# title=Коннектор
-title=\u041a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440
-# overridable=Переопределяемый
-overridable=\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439
-# property=Параметр
-property=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440
-# value=Значение
-value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435
-
-# success_connection=Подключение выполнено успешно
-success_connection=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e
-# error_connection=Во время подключения произошла ошибка
-error_connection=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430
-# check=Проверить подключение
-check=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435
-# location=Расположение
-location=\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
-# poolMaxObjects=Максимум объектов (в ожидании + активные)
-poolMaxObjects=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 + \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435)
-# poolMinIdle=Минимум объектов в ожидании
-poolMinIdle=\u041c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438
-# poolMaxIdle=Максимум объектов в ожидании
-poolMaxIdle=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438
-# poolMaxWait=Максимальное время ожидания (мс)
-poolMaxWait=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (\u043c\u0441)
-# poolMinEvictableIdleTime=Минимальное время ожидания (мс)
-poolMinEvictableIdleTime=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (\u043c\u0441)
-# new=Создать
-new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c
-# connectorName=Название пакета
-connectorName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.html
deleted file mode 100644
index a37390e..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.html
+++ /dev/null
@@ -1,29 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <div class="form-group">
-      <span wicket:id="overrideCapabilities">[overrideCapabilities]</span>
-    </div>
-
-    <div class="form-group">
-      <span wicket:id="capabilitiesOverride">[capabilitiesOverride]</span>
-    </div>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.properties
deleted file mode 100644
index 7e36b0c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel.properties
+++ /dev/null
@@ -1,17 +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.
-overrideCapabilities=Override Capabilities?

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_it.properties
deleted file mode 100644
index 7e36b0c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_it.properties
+++ /dev/null
@@ -1,17 +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.
-overrideCapabilities=Override Capabilities?

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_pt_BR.properties
deleted file mode 100644
index 7e36b0c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_pt_BR.properties
+++ /dev/null
@@ -1,17 +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.
-overrideCapabilities=Override Capabilities?

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_ru.properties
deleted file mode 100644
index c23bd33..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceConnCapabilitiesPanel_ru.properties
+++ /dev/null
@@ -1,19 +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.
-#
-# overrideCapabilities=Переопределить действия?
-overrideCapabilities=\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f?

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html
deleted file mode 100644
index caefa9a..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html
+++ /dev/null
@@ -1,66 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-
-    <div wicket:id="container" class="summarize">
-      <div class="form-group">
-        <span wicket:id="name">[name]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="connector">[connector]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="enforceMandatoryCondition">[enforceMandatoryCondition]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="propagationPriority">[propagationPriority]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="randomPwdIfNotProvided">[randomPwdIfNotProvided]</span>
-      </div>
-
-      <div class="form-group form-palette">
-        <span wicket:id="propagationActionsClassNames">[propagationActionsClassNames]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="createTraceLevel">[createTraceLevel]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="updateTraceLevel">[updateTraceLevel]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="deleteTraceLevel">[deleteTraceLevel]</span>
-      </div>
-
-      <div class="form-group">
-        <span wicket:id="pullTraceLevel">[pullTraceLevel]</span>
-      </div>
-    </div>
-
-    <span wicket:id="systeminformation">[System Information]</span>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/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
deleted file mode 100644
index 2b717e2..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html
+++ /dev/null
@@ -1,86 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <div class="table-responsive no-padding">
-      <table id="mappings"
-             class="table table-hover"
-             style="font-size: 1em;margin-top:2px;"
-             wicket:id="mappingContainer">
-        <tbody>
-          <tr>
-            <th><wicket:message key="entity"/></th>
-            <th><wicket:message key="intMappingTypes"/></th>
-            <th><wicket:message key="intAttrNames"/></th>
-            <th><wicket:message key="extAttrNames"/></th>
-            <th>
-              <wicket:message key="mandatoryCondition"/>
-              <span id="popover" wicket:id="jexlInfo" class="glyphicon glyphicon-info-sign"></span>
-            </th>
-            <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>
-              <span wicket:id="entities">[entities]</span>
-            </td>
-            <td>
-              <span wicket:id="intMappingTypes">[intMappingTypes]</span>
-            </td>
-            <td>
-              <span wicket:id="intAttrNames">[intAttrNames]</span>
-            </td>
-            <td>
-              <span wicket:id="extAttrName">[extAttrName]</span>
-            </td>
-            <td>
-              <span wicket:id="mandatoryCondition">[mandatoryCondition]</span>
-            </td>
-            <td>
-              <span wicket:id="connObjectKey">[connObjectKey]</span>
-            </td>
-            <td>
-              <span wicket:id="password">[password]</span>
-            </td>
-            <td>
-              <div wicket:id="purpose" style="margin: 10px 0px 10px 0px">
-                <span wicket:id="purposeActions">[purpose]</span>
-              </div>
-            </td>
-            <td>
-              <div style="margin: 10px 0px 10px 0px">
-                <span  wicket:id="toRemove"/>
-              </div>
-            </td>
-          </tr>
-        </tbody>
-
-        <tfoot>
-          <tr>
-            <td colspan="9" style="padding: 5px; text-align: right">
-              <input type="submit" class="btn btn-primary" wicket:id="addMappingBtn" />
-            </td>
-          </tr>
-        </tfoot>
-      </table>
-    </div>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
deleted file mode 100644
index 9a91557..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
+++ /dev/null
@@ -1,68 +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.
-general=Resource details
-provisions=Provisioning
-connectorProperties=Connector Properties
-security=Security
-
-umapping=User mapping
-required_alert=All form fields are required
-connector=Connector
-existing_resources=Existing resources
-action=Action
-edit_attribute=Edit resource
-title=Resource
-extAttrNames=External attributes
-intMappingTypes=Internal mapping types
-entity=Entity
-groupSchema=Group Schema
-connObjectKey=ConnObjectKey
-mandatoryCondition=Mandatory
-password=Password
-purpose=Purpose
-mappingUserSchema=Mapping User Schema
-mappingGroupSchema=Mapping Group Schema
-delete=Delete
-intAttrNames=Internal attributes
-enforceMandatoryCondition=Enforce mandatory condition
-fieldName=Field name
-
-connObjectKeyValidation=There must be exactly one ConnObjectKey
-propagationMode=Propagation mode
-connObjectLink=ConnObjectLink
-enable=Enable
-
-createTraceLevel=Create trace level
-updateTraceLevel=Update trace level
-deleteTraceLevel=Delete trace level
-pullTraceLevel=Pull trace level
-propagationPriority=Propagation priority
-
-success_connection=Successful connection
-error_connection=Connection failure
-check=Check connection
-propagationActionsClassNames=Propagation Actions
-gmapping=Group mapping
-new=New resource
-randomPwdIfNotProvided=Generate random passwords when missing
-
-anyType=Object Type
-objectClass= Object Class
-__ACCOUNT__=ACCOUNT
-__GROUP__=GROUP
-connectorCapabilities=Connector Capabilities
-auxClasses=Auxiliary Classes


[2/7] syncope git commit: [SYNCOPE-156, SYNCOPE-817] provides wizard to manage resources and connectors

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.properties
new file mode 100644
index 0000000..8223360
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses.properties
@@ -0,0 +1,20 @@
+# 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.
+
+auxClasses.title=Auxiliary Classes
+auxClasses.summary=
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_it.properties
new file mode 100644
index 0000000..372ef2d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_it.properties
@@ -0,0 +1,19 @@
+# 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.
+
+auxClasses.title=Classi Ausiliarie
+auxClasses.summary=

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
new file mode 100644
index 0000000..0946b9d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
@@ -0,0 +1,20 @@
+# 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.
+
+auxClasses.title=Classes Auxiliares
+auxClasses.summary=
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.html
new file mode 100644
index 0000000..643dc1c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.html
@@ -0,0 +1,30 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="connObjectLinkContainer">
+      <div class="form-group">
+        <span wicket:id="connObjectLinkCheckbox">[connObjectLinkCheckbox]</span>
+      </div>
+      <div class="form-group">
+        <span wicket:id="connObjectLink">[connObjectLink]</span>
+      </div>
+    </span>
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.properties
new file mode 100644
index 0000000..dad26b4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink.properties
@@ -0,0 +1,20 @@
+# 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.
+
+link.title=Connector object link (if required)
+link.summary=
+connObjectLinkCheckbox=Use ConnObjectLink

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_it.properties
new file mode 100644
index 0000000..cf74d19
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_it.properties
@@ -0,0 +1,20 @@
+# 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.
+
+link.title=Connector object link (se necessario)
+link.summary=
+connObjectLinkCheckbox=Usa ConnObjectLink

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
new file mode 100644
index 0000000..305b0b7
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
@@ -0,0 +1,20 @@
+# 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.
+
+link.title=Connector object link (se necess\u00e1rio)
+link.summary=
+connObjectLinkCheckbox=Usar ConnObjectLink

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.html
new file mode 100644
index 0000000..11b1a52
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.html
@@ -0,0 +1,23 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="mapping" />
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.properties
new file mode 100644
index 0000000..99d1add
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping.properties
@@ -0,0 +1,20 @@
+# 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.
+
+mapping.title=Mapping
+mapping.summary=
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_it.properties
new file mode 100644
index 0000000..fde5de0
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_it.properties
@@ -0,0 +1,19 @@
+# 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.
+
+mapping.title=Mapping
+mapping.summary=

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_pt_BR.properties
new file mode 100644
index 0000000..99d1add
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$Mapping_pt_BR.properties
@@ -0,0 +1,20 @@
+# 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.
+
+mapping.title=Mapping
+mapping.summary=
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.html
new file mode 100644
index 0000000..1b951d3
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.html
@@ -0,0 +1,31 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div wicket:id="container">
+      <div class="form-group">
+        <span wicket:id="type"/>
+      </div>
+      <div class="form-group">
+        <label>Object Class</label>
+        <input type="text" placeholder="Object Class ..." class="form-control"  wicket:id="class">
+      </div>
+    </div>
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.properties
new file mode 100644
index 0000000..b20d6ba
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType.properties
@@ -0,0 +1,24 @@
+# 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.
+
+type.title=Specify the type of the provisioning object
+type.summary=
+
+type=Type
+type.Required=Type is required
+class.Required=Object class is required
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_it.properties
new file mode 100644
index 0000000..e29b214
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_it.properties
@@ -0,0 +1,23 @@
+# 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.
+
+type.title=Specify the type of the provisioning object
+type.summary=
+
+type=Type
+type.Required=Type is required
+class.Required=Object class is required

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_pt_BR.properties
new file mode 100644
index 0000000..e29b214
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder$ObjectType_pt_BR.properties
@@ -0,0 +1,23 @@
+# 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.
+
+type.title=Specify the type of the provisioning object
+type.summary=
+
+type=Type
+type.Required=Type is required
+class.Required=Object class is required

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.html
new file mode 100644
index 0000000..e2da0f2
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.html
@@ -0,0 +1,29 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="overrideCapabilities">[overrideCapabilities]</span>
+    </div>
+
+    <div class="form-group">
+      <span wicket:id="capabilities">[capabilitiesOverride]</span>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.properties
new file mode 100644
index 0000000..cabb722
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel.properties
@@ -0,0 +1,18 @@
+# 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.
+overrideCapabilities=Override Capabilities?
+capabilities=Capabilities

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_it.properties
new file mode 100644
index 0000000..cabb722
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_it.properties
@@ -0,0 +1,18 @@
+# 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.
+overrideCapabilities=Override Capabilities?
+capabilities=Capabilities

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_pt_BR.properties
new file mode 100644
index 0000000..cabb722
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# 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.
+overrideCapabilities=Override Capabilities?
+capabilities=Capabilities

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_ru.properties
new file mode 100644
index 0000000..bba780d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceConnCapabilitiesPanel_ru.properties
@@ -0,0 +1,20 @@
+# 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.
+overrideCapabilities=Override Capabilities?
+
+# connectorCapabilities=\u00d0\u0094\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u008f \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d0\u00b0
+capabilities=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html
new file mode 100644
index 0000000..10b931c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html
@@ -0,0 +1,63 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div wicket:id="container" class="summarize">
+      <div class="form-group">
+        <span wicket:id="name">[name]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="connector">[connector]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="enforceMandatoryCondition">[enforceMandatoryCondition]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="propagationPriority">[propagationPriority]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="randomPwdIfNotProvided">[randomPwdIfNotProvided]</span>
+      </div>
+
+      <div class="form-group form-palette">
+        <span wicket:id="propagationActionsClassNames">[propagationActionsClassNames]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="createTraceLevel">[createTraceLevel]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="updateTraceLevel">[updateTraceLevel]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="deleteTraceLevel">[deleteTraceLevel]</span>
+      </div>
+
+      <div class="form-group">
+        <span wicket:id="pullTraceLevel">[pullTraceLevel]</span>
+      </div>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.properties
new file mode 100644
index 0000000..0d9a7f8
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.properties
@@ -0,0 +1,26 @@
+# 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.
+name=Resource name
+connector=Connector
+enforceMandatoryCondition=Enforce mandatory condition
+propagationPriority=Propagation priority
+randomPwdIfNotProvided=Generate random passwords when missing
+propagationActionsClassNames=Propagation Actions
+createTraceLevel=Create trace level
+updateTraceLevel=Update trace level
+deleteTraceLevel=Delete trace level
+pullTraceLevel=Pull trace level

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_it.properties
new file mode 100644
index 0000000..6587516
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_it.properties
@@ -0,0 +1,26 @@
+# 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.
+name=Nome risorsa
+connector=Connettore
+enforceMandatoryCondition=Abilita mandatory condition
+propagationPriority=Priorit\u00e0 in propagazione
+randomPwdIfNotProvided=Genera password casuali se mancanti
+propagationActionsClassNames=Azioni di Propagazione
+createTraceLevel=Livello di tracciamento delle creazioni
+updateTraceLevel=Livello di tracciamento degli aggiornamenti
+deleteTraceLevel=Livello di tracciamento delle cancellazioni
+pullTraceLevel=Livello di tracciamento delle pull

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_pt_BR.properties
new file mode 100644
index 0000000..b79b395
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_pt_BR.properties
@@ -0,0 +1,26 @@
+# 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.
+name=Nome recurso
+connector=Conector
+enforceMandatoryCondition=Aplicar condi\u00e7\u00e3o obrigat\u00f3ria
+propagationPriority=Prioridade de propaga\u00e7\u00e3o
+randomPwdIfNotProvided=Gerar senhas aleat\u00f3rias quando n\u00e3o houver
+propagationActionsClassNames=A\u00e7\u00f5es de Propaga\u00e7\u00e3o
+createTraceLevel=Criar n\u00edvel de trace
+updateTraceLevel=Atualizar n\u00edvel de trace
+deleteTraceLevel=Excluir n\u00edvel de trace
+pullTraceLevel=N\u00edvel de trace de pull

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_ru.properties
new file mode 100644
index 0000000..91f5d6e
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel_ru.properties
@@ -0,0 +1,35 @@
+# 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.
+name=Nome risorsa
+# connector=\u00d0\u009a\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080
+connector=\u041a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440
+# enforceMandatoryCondition=\u00d0\u009e\u00d0\u00b1\u00d1\u008f\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b9 (\u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00bd\u00d1\u0083\u00d0\u00b4\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be)
+enforceMandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e)
+# propagationPriority=\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d1\u0082 \u00d0\u00b2\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b9
+propagationPriority=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
+# randomPwdIfNotProvided=\u00d0\u00a1\u00d0\u00b3\u00d0\u00b5\u00d0\u00bd\u00d0\u00b5\u00d1\u0080\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d1\u0081\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b0\u00d0\u00b9\u00d0\u00bd\u00d1\u008b\u00d0\u00b9 \u00d0\u00bf\u00d0\u00b0\u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d1\u008c, \u00d0\u00b5\u00d1\u0081\u00d0\u00bb\u00d0\u00b8 \u00d0\u00be\u00d0\u00bd \u00d0\u00bd\u00d0\u00b5 \u00d0\u00b7\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd
+randomPwdIfNotProvided=\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0437\u0430\u0434\u0430\u043d
+# propagationActionsClassNames=\u00d0\u0092\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d1\u008f\u00d0\u00b5\u00d0\u00bc\u00d1\u008b\u00d0\u00b5 \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u008f
+propagationActionsClassNames=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f
+# createTraceLevel=\u00d0\u00a3\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bb\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b9 \u00d0\u00bf\u00d0\u00be \u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008e \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2
+createTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
+# updateTraceLevel=\u00d0\u00a3\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bb\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b9 \u00d0\u00bf\u00d0\u00be \u00d0\u009e\u00d0\u00b1\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008e \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2
+updateTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
+# deleteTraceLevel=\u00d0\u00a3\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bb\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b9 \u00d0\u00bf\u00d0\u00be \u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008e \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2
+deleteTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
+# pullTraceLevel=\u00d0\u00a3\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bb\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d1\u0085
+pullTraceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.html
new file mode 100644
index 0000000..2b717e2
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.html
@@ -0,0 +1,86 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="table-responsive no-padding">
+      <table id="mappings"
+             class="table table-hover"
+             style="font-size: 1em;margin-top:2px;"
+             wicket:id="mappingContainer">
+        <tbody>
+          <tr>
+            <th><wicket:message key="entity"/></th>
+            <th><wicket:message key="intMappingTypes"/></th>
+            <th><wicket:message key="intAttrNames"/></th>
+            <th><wicket:message key="extAttrNames"/></th>
+            <th>
+              <wicket:message key="mandatoryCondition"/>
+              <span id="popover" wicket:id="jexlInfo" class="glyphicon glyphicon-info-sign"></span>
+            </th>
+            <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>
+              <span wicket:id="entities">[entities]</span>
+            </td>
+            <td>
+              <span wicket:id="intMappingTypes">[intMappingTypes]</span>
+            </td>
+            <td>
+              <span wicket:id="intAttrNames">[intAttrNames]</span>
+            </td>
+            <td>
+              <span wicket:id="extAttrName">[extAttrName]</span>
+            </td>
+            <td>
+              <span wicket:id="mandatoryCondition">[mandatoryCondition]</span>
+            </td>
+            <td>
+              <span wicket:id="connObjectKey">[connObjectKey]</span>
+            </td>
+            <td>
+              <span wicket:id="password">[password]</span>
+            </td>
+            <td>
+              <div wicket:id="purpose" style="margin: 10px 0px 10px 0px">
+                <span wicket:id="purposeActions">[purpose]</span>
+              </div>
+            </td>
+            <td>
+              <div style="margin: 10px 0px 10px 0px">
+                <span  wicket:id="toRemove"/>
+              </div>
+            </td>
+          </tr>
+        </tbody>
+
+        <tfoot>
+          <tr>
+            <td colspan="9" style="padding: 5px; text-align: right">
+              <input type="submit" class="btn btn-primary" wicket:id="addMappingBtn" />
+            </td>
+          </tr>
+        </tfoot>
+      </table>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html
new file mode 100644
index 0000000..ef243a8
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html
@@ -0,0 +1,23 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="provision">[PROVISION]</span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.properties
new file mode 100644
index 0000000..b930016
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.properties
@@ -0,0 +1,41 @@
+# 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.
+anyType=Object Type
+objectClass= Object Class
+__ACCOUNT__=ACCOUNT
+__GROUP__=GROUP
+auxClasses=Auxiliary Classes
+
+extAttrNames=External attributes
+intMappingTypes=Internal mapping types
+entity=Entity
+groupSchema=Role Schema
+connObjectKey=Remote Key
+mandatoryCondition=Mandatory
+password=Password
+purpose=Purpose
+mappingUserSchema=Mapping User Schema
+mappingGroupSchema=Mapping Role Schema
+delete=Delete
+intAttrNames=Internal attributes
+enforceMandatoryCondition=Enforce mandatory condition
+fieldName=Field name
+
+connObjectKeyValidation=There must be exactly one AccountId
+propagationMode=Propagation mode
+connObjectLink=Remote ID
+enable=Enable

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties
new file mode 100644
index 0000000..ce5395f
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties
@@ -0,0 +1,41 @@
+# 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.
+anyType=Oggetto
+objectClass=Classe
+__ACCOUNT__=ACCOUNT
+__GROUP__=GROUP
+auxClasses=Classi Ausiliarie
+
+extAttrNames=Attributi esterni
+intMappingTypes=Tipo mapping interno
+entity=Entit&agrave;
+groupSchema=Schema Ruolo
+connObjectKey=Chiave remota
+mandatoryCondition=Obbligatorio
+password=Password
+purpose=Scopo
+mappingUserSchema=Mapping User Schema
+mappingGroupSchema=Mapping Role Schema
+delete=Rimuovi
+intAttrNames=Attributi interni
+enforceMandatoryCondition=Abilita mandatory condition
+fieldName=Nome campo
+
+connObjectKeyValidation=Deve essere definito esattamente un AccountId
+propagationMode=Modalit\u00e0 di propagazione
+connObjectLink=ID Remoto
+enable=Abilita

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties
new file mode 100644
index 0000000..91558a5
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties
@@ -0,0 +1,41 @@
+# 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.
+anyType=Objeto
+objectClass=Classe
+__ACCOUNT__=ACCOUNT
+__GROUP__=GROUP
+auxClasses=Classes Auxiliares
+
+extAttrNames=Atributos Externos
+intMappingTypes=Tipos internos de mapeamentos
+entity=Entidade
+groupSchema=Esquema de Fun\u00e7\u00e3o
+connObjectKey=Remote Key
+mandatoryCondition=Obrigat\u00f3rio
+password=Senha
+purpose=Prop\u00f3sito
+mappingUserSchema=Esquema de mapeamento de usu\u00e1rio
+mappingGroupSchema=Esquema de mapeamento de fun\u00e7\u00e3o
+delete=Excluir
+intAttrNames=Atributos internos
+enforceMandatoryCondition=Aplicar condi\u00e7\u00e3o obrigat\u00f3ria
+fieldName=Nome do Campo
+
+connObjectKeyValidation=Precisa ser exatamente um Identificador de Conta
+propagationMode=Modo de propaga\u00e7\u00e3o
+connObjectLink=Remote ID
+enable=Habilitado

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_ru.properties
new file mode 100644
index 0000000..80dd08f
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_ru.properties
@@ -0,0 +1,65 @@
+# 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.
+
+# anyType=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00b0
+anyType=\u0422\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430
+# objectClass=\u00d0\u009a\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d1\u0081 \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00b0
+objectClass=\u041a\u043b\u0430\u0441\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430
+# __ACCOUNT__=\u00d0\u00a3\u00d0\u00a7\u00d0\u0095\u00d0\u00a2\u00d0\u009d\u00d0\u0090\u00d0\u00af \u00d0\u0097\u00d0\u0090\u00d0\u009f\u00d0\u0098\u00d0\u00a1\u00d0\u00ac
+__ACCOUNT__=\u0423\u0427\u0415\u0422\u041d\u0410\u042f \u0417\u0410\u041f\u0418\u0421\u042c
+# __GROUP__=\u00d0\u0093\u00d0\u00a0\u00d0\u00a3\u00d0\u009f\u00d0\u009f\u00d0\u0090
+__GROUP__=\u0413\u0420\u0423\u041f\u041f\u0410
+# auxClasses=\u00d0\u0092\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b5 \u00d0\u00ba\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d1\u0081\u00d1\u008b
+auxClasses=\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b
+
+# extAttrNames=\u00d0\u0092\u00d0\u00bd\u00d0\u00b5\u00d1\u0088\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d1\u008b
+extAttrNames=\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
+# intMappingTypes=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf \u00d0\u00b2\u00d0\u00bd\u00d1\u0083\u00d1\u0082\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00b3\u00d0\u00be \u00d0\u00bc\u00d0\u00b0\u00d0\u00bf\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b3\u00d0\u00b0
+intMappingTypes=\u0422\u0438\u043f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430
+# entity=\u00d0\u009e\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082
+entity=\u041e\u0431\u044a\u0435\u043a\u0442
+# groupSchema=\u00d0\u0090\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082 \u00d0\u00b3\u00d1\u0080\u00d1\u0083\u00d0\u00bf\u00d0\u00bf\u00d1\u008b
+groupSchema=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u0433\u0440\u0443\u043f\u043f\u044b
+# connObjectKey=\u00d0\u009a\u00d0\u00bb\u00d1\u008e\u00d1\u0087\u00d0\u00b5\u00d0\u00b2\u00d0\u00be\u00d0\u00b9 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082 \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081\u00d0\u00b0
+connObjectKey=\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u0430
+# mandatoryCondition=\u00d0\u009e\u00d0\u00b1\u00d1\u008f\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b9
+mandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439
+# password=\u00d0\u009f\u00d0\u00b0\u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d1\u008c
+password=\u041f\u0430\u0440\u043e\u043b\u044c
+# purpose=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+purpose=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+# mappingUserSchema=\u00d0\u009c\u00d0\u00b0\u00d0\u00bf\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b3 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d0\u00be\u00d0\u00b2 \u00d1\u0083\u00d1\u0087\u00d0\u00b5\u00d1\u0082\u00d0\u00bd\u00d0\u00be\u00d0\u00b9 \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d0\u00b8\u00d1\u0081\u00d0\u00b8
+mappingUserSchema=\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438
+# mappingGroupSchema=\u00d0\u009c\u00d0\u00b0\u00d0\u00bf\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b3 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d0\u00be\u00d0\u00b2 \u00d0\u00b3\u00d1\u0080\u00d1\u0083\u00d0\u00bf\u00d0\u00bf\u00d1\u008b
+mappingGroupSchema=\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0433\u0440\u0443\u043f\u043f\u044b
+# delete=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c
+delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+# intAttrNames=\u00d0\u0092\u00d0\u00bd\u00d1\u0083\u00d1\u0082\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d1\u008b
+intAttrNames=\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
+# enforceMandatoryCondition=\u00d0\u009e\u00d0\u00b1\u00d1\u008f\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b9 (\u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00bd\u00d1\u0083\u00d0\u00b4\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be)
+enforceMandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e)
+# fieldName=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008f
+fieldName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f
+
+# connObjectKeyValidation=\u00d0\u009a\u00d0\u00bb\u00d1\u008e\u00d1\u0087\u00d0\u00b5\u00d0\u00b2\u00d0\u00be\u00d0\u00b9 \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00b5\u00d1\u0082 \u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d1\u008c \u00d1\u0082\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00ba\u00d0\u00be \u00d0\u00be\u00d0\u00b4\u00d0\u00b8\u00d0\u00bd
+connObjectKeyValidation=\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d
+# propagationMode=\u00d0\u00a0\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00b2\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b9
+propagationMode=\u0420\u0435\u0436\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
+# connObjectLink=\u00d0\u009a\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d1\u0080\u00d0\u00b8\u00d0\u00b9 \u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00bf\u00d0\u00b0\u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
+connObjectLink=\u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f
+# enable=\u00d0\u0092\u00d0\u00ba\u00d0\u00bb\u00d1\u008e\u00d1\u0087\u00d0\u00b8\u00d1\u0082\u00d1\u008c
+enable=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.html
new file mode 100644
index 0000000..5177e26
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.html
@@ -0,0 +1,33 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div wicket:id="container" class="summarize">
+      <span wicket:id="accountPolicy">
+        [panel for dynamic input type markup]
+      </span>
+      <span wicket:id="passwordPolicy">
+        [panel for dynamic input type markup]
+      </span>
+      <span wicket:id="pullPolicy">
+        [panel for dynamic input type markup]
+      </span>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.properties
new file mode 100644
index 0000000..0d2d9c4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.properties
@@ -0,0 +1,19 @@
+# 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.
+passwordPolicy=Password Policy
+accountPolicy=Account Policy
+pullPolicy=Pull Policy

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_it.properties
new file mode 100644
index 0000000..0d2d9c4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_it.properties
@@ -0,0 +1,19 @@
+# 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.
+passwordPolicy=Password Policy
+accountPolicy=Account Policy
+pullPolicy=Pull Policy

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_pt_BR.properties
new file mode 100644
index 0000000..48e925f
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_pt_BR.properties
@@ -0,0 +1,19 @@
+# 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.
+passwordPolicy=Pol\u00edtica de Senha
+accountPolicy=Pol\u00edtica de Conta
+pullPolicy=Pol\u00edtica de Pull

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_ru.properties
new file mode 100644
index 0000000..1f96562
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel_ru.properties
@@ -0,0 +1,23 @@
+# 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.
+
+# passwordPolicy = \u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0 \u00d0\u00bf\u00d0\u00b0\u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
+passwordPolicy = \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u0430\u0440\u043e\u043b\u0435\u0439
+# accountPolicy = \u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0 \u00d1\u0083\u00d1\u0087\u00d0\u00b5\u00d1\u0082\u00d0\u00bd\u00d1\u008b\u00d1\u0085 \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d0\u00b8\u00d1\u0081\u00d0\u00b5\u00d0\u00b9
+accountPolicy = \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439
+# pullPolicy=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d1\u0085
+pullPolicy=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445

http://git-wip-us.apache.org/repos/asf/syncope/blob/1735c44c/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
index 0e228db..e2e7d50 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
@@ -24,13 +24,13 @@ import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.Before;
 
-public abstract class AbstractTypesITCase extends AbstractConsoleITCase{
+public abstract class AbstractTypesITCase extends AbstractConsoleITCase {
 
     protected static final String PLAIN_DATATABLE_PATH = "body:content:tabbedPanel:panel:"
             + "accordionPanel:tabs:0:body:content:container:content:searchContainer:resultTable";
 
-    protected static final String DATATABLE_PATH =
-            "body:content:tabbedPanel:panel:container:content:searchContainer:resultTable";
+    protected static final String DATATABLE_PATH
+            = "body:content:tabbedPanel:panel:container:content:searchContainer:resultTable";
 
     @Before
     public void login() {
@@ -79,15 +79,16 @@ public abstract class AbstractTypesITCase extends AbstractConsoleITCase{
                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:container:content:add");
 
         wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:modal", Modal.class);
+                "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer",
+                Modal.class);
 
         final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:"
-                + "accordionPanel:tabs:0:body:content:modal:form");
+                + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:details:form:key:textField", key);
         formTester.setValue("content:details:form:type:dropDownChoiceField", "3");
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:"
-                + "accordionPanel:tabs:0:body:content:modal:dialog:footer:inputs:0:submit");
+                + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
 
         wicketTester.assertInfoMessages("Operation executed successfully");
 
@@ -98,13 +99,14 @@ public abstract class AbstractTypesITCase extends AbstractConsoleITCase{
         browsingToAnyTypeClasses();
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:container:content:add");
-        wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", Modal.class);
 
-        final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        final FormTester formTester = wicketTester.newFormTester(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:anyTypeClassDetailsPanel:form:key:textField", name);
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.clearFeedbackMessages();
@@ -114,13 +116,14 @@ public abstract class AbstractTypesITCase extends AbstractConsoleITCase{
         browsingToAnyTypes();
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:container:content:add");
-        wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", Modal.class);
 
-        final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        final FormTester formTester = wicketTester.newFormTester(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:anyTypeDetailsPanel:container:form:key:textField", name);
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.clearFeedbackMessages();
@@ -131,15 +134,16 @@ public abstract class AbstractTypesITCase extends AbstractConsoleITCase{
 
         wicketTester.clickLink("body:content:tabbedPanel:panel:container:content:add");
 
-        wicketTester.assertComponent(
-                "body:content:tabbedPanel:panel:modal", Modal.class);
+        wicketTester.assertComponent("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", Modal.class);
 
-        final FormTester formTester = wicketTester.newFormTester("body:content:tabbedPanel:panel:modal:form");
+        final FormTester formTester = wicketTester.newFormTester(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:relationshipTypeDetails:container:form:key:textField", name);
         formTester.setValue(
                 "content:relationshipTypeDetails:container:form:description:textField", "test relationshipType");
 
-        wicketTester.clickLink("body:content:tabbedPanel:panel:modal:dialog:footer:inputs:0:submit");
+        wicketTester.clickLink(
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
         wicketTester.assertInfoMessages("Operation executed successfully");
 
         wicketTester.clearFeedbackMessages();