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/21 18:07:40 UTC

syncope git commit: [SYNCOPE-817] fixes connector creation wizard

Repository: syncope
Updated Branches:
  refs/heads/master a7666a3f9 -> 0139df768


[SYNCOPE-817] fixes connector creation wizard


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

Branch: refs/heads/master
Commit: 0139df76876234e593b8592502bcd476db50b407
Parents: a7666a3
Author: fmartelli <fa...@gmail.com>
Authored: Thu Apr 21 18:06:54 2016 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Apr 21 18:06:54 2016 +0200

----------------------------------------------------------------------
 .../console/topology/TopologyTogglePanel.java   | 25 ++++++++++++
 .../html/list/ConnConfPropertyListView.java     |  4 +-
 .../client/console/wizards/AjaxWizard.java      | 20 ++++++++-
 .../console/wizards/AjaxWizardBuilder.java      |  5 ++-
 .../wizards/resources/ConnectorConfPanel.java   | 43 +++++++-------------
 .../resources/ProvisionWizardBuilder.java       |  5 +++
 .../resources/ResourceProvisionPanel.java       | 24 ++++++++---
 .../resources/ResourceWizardBuilder.java        |  1 -
 .../console/topology/TopologyTogglePanel.html   |  1 +
 .../topology/TopologyTogglePanel.properties     |  1 +
 .../topology/TopologyTogglePanel_it.properties  |  3 +-
 .../TopologyTogglePanel_pt_BR.properties        |  3 +-
 .../topology/TopologyTogglePanel_ru.properties  | 35 ++++++++--------
 .../syncope/fit/console/TopologyITCase.java     | 12 +++---
 14 files changed, 116 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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 2f405c7..77ef7b9 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
@@ -37,6 +37,7 @@ 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.client.console.wizards.resources.ResourceProvisionPanel;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
@@ -297,6 +298,30 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
         MetaDataRoleAuthorizationStrategy.authorize(edit, ENABLE, StandardEntitlement.RESOURCE_UPDATE);
         fragment.add(edit);
 
+        AjaxLink<String> provision = new IndicatingAjaxLink<String>("provision") {
+
+            private static final long serialVersionUID = 3776750333491622263L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                ResourceTO modelObject = resourceRestClient.read(node.getKey().toString());
+
+                IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject);
+                taskModal.setFormModel(model);
+
+                target.add(taskModal.setContent(new ResourceProvisionPanel(taskModal, modelObject, pageRef)));
+
+                taskModal.header(new Model<>(MessageFormat.format(getString("resource.edit"), node.getKey())));
+
+                MetaDataRoleAuthorizationStrategy.
+                        authorize(taskModal.getForm(), ENABLE, StandardEntitlement.RESOURCE_UPDATE);
+
+                taskModal.show(true);
+            }
+        };
+        MetaDataRoleAuthorizationStrategy.authorize(edit, ENABLE, StandardEntitlement.RESOURCE_UPDATE);
+        fragment.add(provision);
+
         AjaxLink<String> explore = new IndicatingAjaxLink<String>("explore") {
 
             private static final long serialVersionUID = 3776750333491622263L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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 1334bba..e744f4e 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
@@ -104,9 +104,9 @@ public class ConnConfPropertyListView extends ListView<ConnConfProperty> {
                 field = new AjaxSpinnerFieldPanel.Builder<>().build("panel", label, numberClass, new Model<Number>());
                 required = property.getSchema().isRequired();
             } else if (ClassUtils.isAssignable(Boolean.class, propertySchemaClass)) {
-                field = new AjaxCheckBoxPanel("panel", label, new Model<Boolean>(), false);
+                field = new AjaxCheckBoxPanel("panel", label, new Model<Boolean>());
             } else {
-                field = new AjaxTextFieldPanel("panel", label, new Model<String>(), false);
+                field = new AjaxTextFieldPanel("panel", label, new Model<String>());
                 required = property.getSchema().isRequired();
             }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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 94874b2..86c491c 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
@@ -26,6 +26,7 @@ import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.event.IEventSink;
 import org.apache.wicket.extensions.wizard.IWizardModel;
 import org.apache.wicket.extensions.wizard.IWizardStep;
 import org.apache.wicket.extensions.wizard.Wizard;
@@ -54,6 +55,8 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
 
     private final Mode mode;
 
+    private IEventSink eventSink = null;
+
     /**
      * Construct.
      *
@@ -76,6 +79,11 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
         init(model);
     }
 
+    protected AjaxWizard<T> setEventSink(final IEventSink eventSink) {
+        this.eventSink = eventSink;
+        return this;
+    }
+
     @Override
     protected void init(final IWizardModel wizardModel) {
         super.init(wizardModel);
@@ -106,7 +114,11 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
         final AjaxRequestTarget target = RequestCycle.get().find(AjaxRequestTarget.class);
         try {
             onCancelInternal();
-            send(AjaxWizard.this, Broadcast.BUBBLE, new NewItemCancelEvent<>(item, target));
+            if (eventSink == null) {
+                send(AjaxWizard.this, Broadcast.BUBBLE, new NewItemCancelEvent<>(item, target));
+            } else {
+                send(eventSink, Broadcast.EXACT, new NewItemCancelEvent<>(item, target));
+            }
         } catch (Exception e) {
             LOG.warn("Wizard error on cancel", e);
             error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
@@ -122,7 +134,11 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
         final AjaxRequestTarget target = RequestCycle.get().find(AjaxRequestTarget.class);
         try {
             final Serializable res = onApplyInternal(target);
-            send(AjaxWizard.this, Broadcast.BUBBLE, new NewItemFinishEvent<>(item, target).setResult(res));
+            if (eventSink == null) {
+                send(AjaxWizard.this, Broadcast.BUBBLE, new NewItemFinishEvent<>(item, target).setResult(res));
+            } else {
+                send(eventSink, Broadcast.EXACT, new NewItemFinishEvent<>(item, target).setResult(res));
+            }
         } catch (Exception e) {
             LOG.error("Wizard error on finish", e);
             error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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 050797d..c509856 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
@@ -22,6 +22,7 @@ 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.event.IEventSink;
 import org.apache.wicket.extensions.wizard.WizardModel;
 
 public abstract class AjaxWizardBuilder<T extends Serializable> extends AbstractModalPanelBuilder<T> {
@@ -30,6 +31,8 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
 
     protected AjaxWizard.Mode mode = AjaxWizard.Mode.CREATE;
 
+    protected IEventSink eventSink = null;
+
     /**
      * Construct.
      *
@@ -106,7 +109,7 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
 
                 return res;
             }
-        };
+        }.setEventSink(eventSink);
     }
 
     protected abstract WizardModel buildModelSteps(final T modelObject, final WizardModel wizardModel);

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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
index 722ddfa..56bfd7f 100644
--- 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
@@ -22,7 +22,6 @@ 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;
@@ -30,7 +29,6 @@ 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> {
 
@@ -48,34 +46,24 @@ public abstract class ConnectorConfPanel extends AbstractConnConfPanel<ConnInsta
 
             @Override
             protected List<ConnConfProperty> load() {
-                List<ConnConfProperty> properties = getConnProperties(connInstanceTO);
-                connInstanceTO.getConf().clear();
-                connInstanceTO.getConf().addAll(properties);
+                List<ConnConfProperty> properties = getConnProperties(ConnectorConfPanel.this.modelObject);
+                ConnectorConfPanel.this.modelObject.getConf().clear();
 
-                return new PropertyModel<List<ConnConfProperty>>(modelObject, "conf") {
-
-                    private static final long serialVersionUID = -7809699384012595307L;
+                // re-order properties
+                Collections.sort(properties, new Comparator<ConnConfProperty>() {
 
                     @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;
+                    public int compare(final ConnConfProperty left, final ConnConfProperty right) {
+                        if (left == null) {
+                            return -1;
+                        } else {
+                            return left.compareTo(right);
+                        }
                     }
-                }.getObject();
+                });
+
+                ConnectorConfPanel.this.modelObject.getConf().addAll(properties);
+                return properties;
             }
         };
 
@@ -99,8 +87,7 @@ public abstract class ConnectorConfPanel extends AbstractConnConfPanel<ConnInsta
                 final ConnConfProperty property = new ConnConfProperty();
                 property.setSchema(key);
 
-                if (instance.getKey() != null
-                        && instance.getConfMap().containsKey(key.getName())
+                if (instance.getConfMap().containsKey(key.getName())
                         && instance.getConfMap().get(key.getName()).getValues() != null) {
 
                     property.getValues().addAll(instance.getConfMap().get(key.getName()).getValues());

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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
index c5a81bc..6aafbfa 100644
--- 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
@@ -41,6 +41,7 @@ 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.event.IEventSink;
 import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -236,6 +237,10 @@ public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> imple
         this.resourceTO = resurceTO;
     }
 
+    public void setEventSink(final IEventSink eventSink) {
+        this.eventSink = eventSink;
+    }
+    
     @Override
     protected WizardModel buildModelSteps(final ProvisionTO modelObject, final WizardModel wizardModel) {
         wizardModel.add(new ObjectType(modelObject));

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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
index a6e4470..5aa7d74 100644
--- 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
@@ -18,29 +18,37 @@
  */
 package org.apache.syncope.client.console.wizards.resources;
 
+import java.io.Serializable;
 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.AbstractModalPanel;
 import org.apache.syncope.client.console.panels.ListViewPanel;
+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.WizardMgtPanel;
 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 {
+public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
 
     private static final long serialVersionUID = -7982691107029848579L;
 
-    public ResourceProvisionPanel(final ResourceTO resourceTO, final PageReference pageRef) {
-        super();
+    public ResourceProvisionPanel(
+            final BaseModal<Serializable> modal,
+            final ResourceTO resourceTO,
+            final PageReference pageRef) {
+        super(modal, pageRef);
         setOutputMarkupId(true);
 
+        final ProvisionWizardBuilder wizard = new ProvisionWizardBuilder(resourceTO, pageRef);
+
         final ListViewPanel.Builder<ProvisionTO> builder = new ListViewPanel.Builder<ProvisionTO>(
                 ProvisionTO.class, pageRef) {
 
@@ -112,7 +120,11 @@ public class ResourceProvisionPanel extends WizardStep {
                     }
                 }, ActionLink.ActionType.DELETE, StandardEntitlement.RESOURCE_DELETE);
 
-        builder.addNewItemPanelBuilder(new ProvisionWizardBuilder(resourceTO, pageRef));
-        add(builder.build("provision"));
+        builder.addNewItemPanelBuilder(wizard);
+
+        final WizardMgtPanel<ProvisionTO> list = builder.build("provision");
+        wizard.setEventSink(list);
+
+        add(list);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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
index 03c1fec..195dbf8 100644
--- 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
@@ -65,7 +65,6 @@ public class ResourceWizardBuilder extends AbstractResourceWizardBuilder<Resourc
     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;

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
index 26b96c7..602aec8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
@@ -36,6 +36,7 @@ under the License.
         <ul class="menu">
           <li><i class="fa fa-minus"></i><a href="#" wicket:id="delete"><wicket:message key="resource.menu.remove"/></a></li>
           <li><i class="fa fa-pencil"></i><a href="#" wicket:id="edit"><wicket:message key="resource.menu.edit"/></a></li>
+          <li><i class="fa fa-pencil"></i><a href="#" wicket:id="provision"><wicket:message key="resource.menu.provision"/></a></li>
           <li><i class="fa fa-search"></i><a href="#" wicket:id="explore"><wicket:message key="resource.menu.explore"/></a></li>
           <li><i class="fa fa-arrow-right"></i><a href="#" wicket:id="propagation"><wicket:message key="task.propagation.list"/></a></li>
           <li><i class="fa fa-chevron-circle-left"></i><a href="#" wicket:id="pull"><wicket:message key="task.pull.list"/></a></li>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
index d36837e..cf6482d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
@@ -25,6 +25,7 @@ resource.edit=Edit resource {0}
 resource.menu.add=Add new resource
 resource.menu.remove=Remove resource
 resource.menu.edit=Edit resource
+resource.menu.provision=Edit provision rules
 resource.menu.explore=Explore resource
 
 task.custom.list=Custom tasks

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
index f89a848..d83598b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
@@ -25,10 +25,11 @@ resource.edit=Modifica risorsa {0}
 resource.menu.add=Aggiungi nuova risorsa
 resource.menu.remove=Rimuovi risorsa
 resource.menu.edit=Modifica risorsa
+resource.menu.provision=Modifica regole di provisioning
+resource.menu.explore=Esplora risorsa
 
 task.custom.list=Task personalizzati
 task.propagation.list=Task di propagazione
 task.pull.list=Pull task
 task.push.list=Push task
-resource.menu.explore=Esplora risorsa
 resource.explore.list=Esplora ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
index f44b440..7608438 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
@@ -25,10 +25,11 @@ resource.edit=Alterar recurso {0}
 resource.menu.add=Adicionar novo recurso
 resource.menu.remove=Retire recurso
 resource.menu.edit=Alterar recurso
+resource.menu.provision=Alterar regras de provision
+resource.menu.explore=Explorar recurso
 
 task.custom.list=Custom tasks
 task.propagation.list=Propagation tasks
 task.pull.list=Pull tasks
 task.push.list=Push tasks
-resource.menu.explore=Explorar recurso
 resource.explore.list=Explorar ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
index 97db59c..161d803 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
@@ -15,39 +15,40 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# connector.new=Добавить коннектор
+# connector.new=\u00d0\u0094\u00d0\u00be\u00d0\u00b1\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080
 connector.new=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440
-# connector.edit=Изменить коннектор {0}
+# connector.edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080 {0}
 connector.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 {0}
-# connector.menu.add=Добавить коннектор
+# connector.menu.add=\u00d0\u0094\u00d0\u00be\u00d0\u00b1\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080
 connector.menu.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440
-# connector.menu.remove=Удалить коннектор
+# connector.menu.remove=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080
 connector.menu.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440
-# connector.menu.edit=Изменить коннектор
+# connector.menu.edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080
 connector.menu.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440
 
-# resource.new=Создать ресурс
+# resource.new=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081
 resource.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441
-# resource.edit=Изменить ресурс {0}
+# resource.edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081 {0}
 resource.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441 {0}
-# resource.menu.add=Создать ресурс
+# resource.menu.add=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081
 resource.menu.add=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441
-# resource.menu.remove=Удалить ресурс
+# resource.menu.remove=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081
 resource.menu.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441
-# resource.menu.edit=Изменить ресурс
+# resource.menu.edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081
 resource.menu.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441
-# resource.menu.explore=Просмотр ресурса
+resource.menu.provision=Edit provision rules
+# resource.menu.explore=\u00d0\u009f\u00d1\u0080\u00d0\u00be\u00d1\u0081\u00d0\u00bc\u00d0\u00be\u00d1\u0082\u00d1\u0080 \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081\u00d0\u00b0
 resource.menu.explore=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u0430
 
-# task.generic.list=Общие задачи
+# task.generic.list=\u00d0\u009e\u00d0\u00b1\u00d1\u0089\u00d0\u00b8\u00d0\u00b5 \u00d0\u00b7\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8
 # task.generic.list=\u041e\u0431\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438
-# task.custom.list=Пользовательские задачи
+# task.custom.list=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d1\u0081\u00d0\u00ba\u00d0\u00b8\u00d0\u00b5 \u00d0\u00b7\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8
 task.custom.list=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438
-# task.propagation.list=Задачи выполнения действий
+# task.propagation.list=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \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
 task.propagation.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
-# task.pull.list=Задачи получения данных
+# task.pull.list=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \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
 task.pull.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445
-# task.push.list=Задачи передачи данных
+# task.push.list=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d1\u0085
 task.push.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445
-# resource.explore.list=Просмотр ${key}
+# resource.explore.list=\u00d0\u009f\u00d1\u0080\u00d0\u00be\u00d1\u0081\u00d0\u00bc\u00d0\u00be\u00d1\u0082\u00d1\u0080 ${key}
 resource.explore.list=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0139df76/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 89a2e3e..ba28f31 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
@@ -77,19 +77,17 @@ 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:container:content:togglePanelContainer:container:actions:edit");
+        wicketTester.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:provision");
 
-        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:form:view:provision:container:"
+        
+        wicketTester.clickLink("body:toggle:outerObjectsRepeater:1:outer:form:content:provision:container:"
                 + "content:group:beans:0:actions:panelMapping:mappingLink");
 
-        formTester = wicketTester.newFormTester("body:toggle:outerObjectsRepeater:0:outer:form:content:form:view:"
+        FormTester formTester = wicketTester.newFormTester("body:toggle:outerObjectsRepeater:1:outer:form:content:"
                 + "provision:container:content:wizard:form");
         formTester.submit("buttons:next");
 
-        wicketTester.assertComponent("body:toggle:outerObjectsRepeater:0:outer:form:content:form:view:provision:"
+        wicketTester.assertComponent("body:toggle:outerObjectsRepeater:1:outer:form:content:provision:"
                 + "container:content:wizard:form:view:mapping:mappingContainer:mappings:1", WebMarkupContainer.class);
     }