http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
index 40789c7,59ab76f..fe33899
--- 
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
@@@ -20,30 -20,34 +20,19 @@@ package org.apache.syncope.client.conso
  
  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.panels.ModalContent.ModalEvent;
--import org.apache.syncope.client.console.rest.ConnectorRestClient;
- import 
org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal.ModalEvent;
  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.MultiFieldPanel;
  import 
org.apache.syncope.client.console.wicket.markup.html.form.SpinnerFieldPanel;
--import org.apache.syncope.common.lib.to.ConnInstanceTO;
  import org.apache.syncope.common.lib.to.ResourceTO;
- import org.apache.syncope.common.lib.types.PropagationMode;
  import org.apache.syncope.common.lib.types.TraceLevel;
--import org.apache.wicket.ajax.AjaxRequestTarget;
--import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 -import org.apache.wicket.ajax.markup.html.AjaxLink;
--import org.apache.wicket.event.Broadcast;
 -import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
  import org.apache.wicket.markup.html.WebMarkupContainer;
--import org.apache.wicket.markup.html.form.ChoiceRenderer;
 -import org.apache.wicket.markup.html.form.DropDownChoice;
 -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.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.spring.injection.annot.SpringBean;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
@@@ -56,192 -60,240 +45,92 @@@ public class ResourceDetailsPanel exten
       */
      private static final Logger LOG = 
LoggerFactory.getLogger(ResourceDetailsPanel.class);
  
--    @SpringBean
--    private ConnectorRestClient connRestClient;
--
--    private ConnInstanceTO connInstanceTO;
--
--    public ResourceDetailsPanel(final String id, final ResourceTO resourceTO, 
final List<String> actionClassNames,
++    public ResourceDetailsPanel(
++            final String id,
++            final IModel<ResourceTO> model,
++            final List<String> actionClassNames,
              final boolean createFlag) {
  
          super(id);
          setOutputMarkupId(true);
  
 -        final AjaxTextFieldPanel resourceName = new 
AjaxTextFieldPanel("name", new ResourceModel("name", "name").
 -                getObject(), new PropertyModel<String>(resourceTO, "key"));
 +        final WebMarkupContainer container = new 
WebMarkupContainer("container");
 +        container.setOutputMarkupId(true);
 +        container.setRenderBodyOnly(true);
 +        add(container);
  
-         final AjaxTextFieldPanel resourceName = new 
AjaxTextFieldPanel("name", new ResourceModel("name", "name").
-                 getObject(), new PropertyModel<String>(resourceTO, "key"));
- 
--        resourceName.setEnabled(createFlag);
--        resourceName.addRequiredLabel();
-         container.add(resourceName);
 -        add(resourceName);
++        container.add(new AjaxTextFieldPanel(
++                "name",
++                new ResourceModel("name", "name").
++                getObject(),
++                new PropertyModel<String>(model, "key"),
++                false).addRequiredLabel().setEnabled(createFlag));
  
--        final AjaxCheckBoxPanel enforceMandatoryCondition = new 
AjaxCheckBoxPanel("enforceMandatoryCondition",
++        container.add(new AjaxCheckBoxPanel(
++                "enforceMandatoryCondition",
                  new ResourceModel("enforceMandatoryCondition", 
"enforceMandatoryCondition").getObject(),
--                new PropertyModel<Boolean>(resourceTO, 
"enforceMandatoryCondition"));
-         container.add(enforceMandatoryCondition);
 -        add(enforceMandatoryCondition);
 -
 -        final AjaxCheckBoxPanel propagationPrimary = new 
AjaxCheckBoxPanel("propagationPrimary", new ResourceModel(
 -                "propagationPrimary", "propagationPrimary").getObject(), new 
PropertyModel<Boolean>(resourceTO,
 -                        "propagationPrimary"));
 -        add(propagationPrimary);
 -
 -        final SpinnerFieldPanel<Integer> propagationPriority = new 
SpinnerFieldPanel<>("propagationPriority",
 -                "propagationPriority", Integer.class,
 -                new PropertyModel<Integer>(resourceTO, 
"propagationPriority"), null, null);
 -        add(propagationPriority);
 -
 -        final AjaxCheckBoxPanel randomPwdIfNotProvided = new 
AjaxCheckBoxPanel("randomPwdIfNotProvided",
++                new PropertyModel<Boolean>(model, 
"enforceMandatoryCondition"),
++                false));
 +
-         final AjaxCheckBoxPanel propagationPrimary = new 
AjaxCheckBoxPanel("propagationPrimary", new ResourceModel(
-                 "propagationPrimary", "propagationPrimary").getObject(), new 
PropertyModel<Boolean>(resourceTO,
-                         "propagationPrimary"));
-         container.add(propagationPrimary);
++        container.add(new AjaxCheckBoxPanel(
++                "propagationPrimary",
++                new ResourceModel("propagationPrimary", 
"propagationPrimary").getObject(),
++                new PropertyModel<Boolean>(model, "propagationPrimary"),
++                false));
 +
-         final SpinnerFieldPanel<Integer> propagationPriority = new 
SpinnerFieldPanel<>(
++        container.add(new SpinnerFieldPanel<>(
 +                "propagationPriority",
 +                "propagationPriority",
 +                Integer.class,
-                 new PropertyModel<Integer>(resourceTO, 
"propagationPriority"));
-         container.add(propagationPriority);
++                new PropertyModel<Integer>(model, "propagationPriority")));
 +
-         final AjaxDropDownChoicePanel<PropagationMode> propagationMode = new 
AjaxDropDownChoicePanel<>(
-                 "propagationMode", new ResourceModel("propagationMode", 
"propagationMode").getObject(),
-                 new PropertyModel<PropagationMode>(resourceTO, 
"propagationMode"));
-         propagationMode.setChoices(Arrays.asList(PropagationMode.values()));
-         container.add(propagationMode);
- 
-         final AjaxCheckBoxPanel randomPwdIfNotProvided = new 
AjaxCheckBoxPanel("randomPwdIfNotProvided",
++        container.add(new AjaxCheckBoxPanel("randomPwdIfNotProvided",
                  new ResourceModel("randomPwdIfNotProvided", 
"randomPwdIfNotProvided").getObject(),
--                new PropertyModel<Boolean>(resourceTO, 
"randomPwdIfNotProvided"));
-         container.add(randomPwdIfNotProvided);
 -        add(randomPwdIfNotProvided);
--
-         final AjaxDropDownChoicePanel<String> template
-                 = new AjaxDropDownChoicePanel<>("panel", "panel", new 
Model<String>());
-         template.setChoices(actionClassNames);
-         template.setNullValid(true);
-         template.setRequired(true);
 -        final WebMarkupContainer propagationActionsClassNames = new 
WebMarkupContainer("propagationActionsClassNames");
 -        propagationActionsClassNames.setOutputMarkupId(true);
 -        add(propagationActionsClassNames);
 -
 -        final AjaxLink<Void> first = new IndicatingAjaxLink<Void>("first") {
 -
 -            private static final long serialVersionUID = 
-7978723352517770644L;
 -
 -            @Override
 -            public void onClick(final AjaxRequestTarget target) {
 -                
resourceTO.getPropagationActionsClassNames().add(StringUtils.EMPTY);
 -                setVisible(false);
 -                target.add(propagationActionsClassNames);
 -            }
 -        };
 -        first.setOutputMarkupPlaceholderTag(true);
 -        
first.setVisible(resourceTO.getPropagationActionsClassNames().isEmpty());
 -        propagationActionsClassNames.add(first);
 -
 -        final ListView<String> actionsClasses = new 
ListView<String>("actionsClasses",
 -                new PropertyModel<List<String>>(resourceTO, 
"propagationActionsClassNames")) {
 -
 -                    private static final long serialVersionUID = 
9101744072914090143L;
 -
 -                    @Override
 -                    protected void populateItem(final ListItem<String> item) {
 -                        final String className = item.getModelObject();
 -
 -                        final DropDownChoice<String> actionsClass = new 
DropDownChoice<>(
 -                                "actionsClass", new Model<>(className), 
actionClassNames);
 -                        actionsClass.setNullValid(true);
 -                        actionsClass.setRequired(true);
 -                        actionsClass.add(new 
AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) {
 -
 -                            private static final long serialVersionUID = 
-1107858522700306810L;
 -
 -                            @Override
 -                            protected void onUpdate(final AjaxRequestTarget 
target) {
 -                                resourceTO.getPropagationActionsClassNames().
 -                                set(item.getIndex(), 
actionsClass.getModelObject());
 -                            }
 -                        });
 -                        actionsClass.setRequired(true);
 -                        actionsClass.setOutputMarkupId(true);
 -                        actionsClass.setRequired(true);
 -                        item.add(actionsClass);
 -
 -                        final AjaxLink<Void> minus = new 
IndicatingAjaxLink<Void>("drop") {
 -
 -                            private static final long serialVersionUID = 
-7978723352517770644L;
 -
 -                            @Override
 -                            public void onClick(final AjaxRequestTarget 
target) {
 -                                
resourceTO.getPropagationActionsClassNames().remove(className);
 -                                
first.setVisible(resourceTO.getPropagationActionsClassNames().isEmpty());
 -                                target.add(propagationActionsClassNames);
 -                            }
 -                        };
 -                        item.add(minus);
 -
 -                        final AjaxLink<Void> plus = new 
IndicatingAjaxLink<Void>("add") {
 -
 -                            private static final long serialVersionUID = 
-7978723352517770644L;
 -
 -                            @Override
 -                            public void onClick(final AjaxRequestTarget 
target) {
 -                                
resourceTO.getPropagationActionsClassNames().add(StringUtils.EMPTY);
 -                                target.add(propagationActionsClassNames);
 -                            }
 -                        };
 -                        plus.setOutputMarkupPlaceholderTag(true);
 -                        plus.setVisible(item.getIndex() == 
resourceTO.getPropagationActionsClassNames().size() - 1);
 -                        item.add(plus);
 -                    }
 -                };
 -        propagationActionsClassNames.add(actionsClasses);
 -
 -        final AjaxDropDownChoicePanel<TraceLevel> createTraceLevel = new 
AjaxDropDownChoicePanel<>(
 -                "createTraceLevel", new ResourceModel("createTraceLevel", 
"createTraceLevel").getObject(),
 -                new PropertyModel<TraceLevel>(resourceTO, 
"createTraceLevel"));
 -        createTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
 -        add(createTraceLevel);
 -
 -        final AjaxDropDownChoicePanel<TraceLevel> updateTraceLevel = new 
AjaxDropDownChoicePanel<>(
 -                "updateTraceLevel", new ResourceModel("updateTraceLevel", 
"updateTraceLevel").getObject(),
 -                new PropertyModel<TraceLevel>(resourceTO, 
"updateTraceLevel"));
 -        updateTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
 -        add(updateTraceLevel);
 -
 -        final AjaxDropDownChoicePanel<TraceLevel> deleteTraceLevel = new 
AjaxDropDownChoicePanel<>(
 -                "deleteTraceLevel", new ResourceModel("deleteTraceLevel", 
"deleteTraceLevel").getObject(),
 -                new PropertyModel<TraceLevel>(resourceTO, 
"deleteTraceLevel"));
 -        deleteTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
 -        add(deleteTraceLevel);
 -
 -        final AjaxDropDownChoicePanel<TraceLevel> syncTraceLevel = new 
AjaxDropDownChoicePanel<>(
 -                "syncTraceLevel", new ResourceModel("syncTraceLevel", 
"syncTraceLevel").getObject(),
 -                new PropertyModel<TraceLevel>(resourceTO, "syncTraceLevel"));
 -        syncTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
 -        add(syncTraceLevel);
 -
 -        final IModel<List<ConnInstanceTO>> connectors = new 
LoadableDetachableModel<List<ConnInstanceTO>>() {
 -
 -            private static final long serialVersionUID = 5275935387613157437L;
 -
 -            @Override
 -            protected List<ConnInstanceTO> load() {
 -                return connRestClient.getAllConnectors();
 -            }
 -        };
 -
 -        connInstanceTO = getConectorInstanceTO(connectors.getObject(), 
resourceTO);
 -
 -        final AjaxDropDownChoicePanel<ConnInstanceTO> conn = new 
AjaxDropDownChoicePanel<>("connector",
++                new PropertyModel<Boolean>(model, "randomPwdIfNotProvided"),
++                false));
 +
-         final MultiFieldPanel<String> actions = new MultiFieldPanel<>(
++        container.add(new MultiFieldPanel<>(
 +                "actionsClasses",
 +                "actionsClasses",
-                 new PropertyModel<List<String>>(resourceTO, 
"propagationActionsClassNames"),
-                 template, true);
- 
-         container.add(actions);
- 
-         final AjaxDropDownChoicePanel<TraceLevel> createTraceLevel = new 
AjaxDropDownChoicePanel<>(
-                 "createTraceLevel", new ResourceModel("createTraceLevel", 
"createTraceLevel").getObject(),
-                 new PropertyModel<TraceLevel>(resourceTO, 
"createTraceLevel"));
-         createTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
-         container.add(createTraceLevel);
- 
-         final AjaxDropDownChoicePanel<TraceLevel> updateTraceLevel = new 
AjaxDropDownChoicePanel<>(
-                 "updateTraceLevel", new ResourceModel("updateTraceLevel", 
"updateTraceLevel").getObject(),
-                 new PropertyModel<TraceLevel>(resourceTO, 
"updateTraceLevel"));
-         updateTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
-         container.add(updateTraceLevel);
- 
-         final AjaxDropDownChoicePanel<TraceLevel> deleteTraceLevel = new 
AjaxDropDownChoicePanel<>(
-                 "deleteTraceLevel", new ResourceModel("deleteTraceLevel", 
"deleteTraceLevel").getObject(),
-                 new PropertyModel<TraceLevel>(resourceTO, 
"deleteTraceLevel"));
-         deleteTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
-         container.add(deleteTraceLevel);
- 
-         final AjaxDropDownChoicePanel<TraceLevel> syncTraceLevel = new 
AjaxDropDownChoicePanel<>(
-                 "syncTraceLevel", new ResourceModel("syncTraceLevel", 
"syncTraceLevel").getObject(),
-                 new PropertyModel<TraceLevel>(resourceTO, "syncTraceLevel"));
-         syncTraceLevel.setChoices(Arrays.asList(TraceLevel.values()));
-         container.add(syncTraceLevel);
- 
-         final IModel<List<ConnInstanceTO>> connectors = new 
LoadableDetachableModel<List<ConnInstanceTO>>() {
- 
-             private static final long serialVersionUID = 5275935387613157437L;
- 
-             @Override
-             protected List<ConnInstanceTO> load() {
-                 return connRestClient.getAllConnectors();
-             }
-         };
- 
-         connInstanceTO = getConectorInstanceTO(connectors.getObject(), 
resourceTO);
- 
-         final AjaxDropDownChoicePanel<ConnInstanceTO> conn = new 
AjaxDropDownChoicePanel<>("connector",
++                new PropertyModel<List<String>>(model, 
"propagationActionsClassNames"),
++                new AjaxDropDownChoicePanel<>("panel", "panel", new 
Model<String>()).
++                
setChoices(actionClassNames).setNullValid(true).setRequired(true),
++                false));
++
++        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<>(
++                "syncTraceLevel",
++                new ResourceModel("syncTraceLevel", 
"syncTraceLevel").getObject(),
++                new PropertyModel<TraceLevel>(model, "syncTraceLevel"),
++                false).
++                setChoices(Arrays.asList(TraceLevel.values())));
++
++        container.add(new AjaxTextFieldPanel(
++                "connector",
                  new ResourceModel("connector", "connector").getObject(),
--                new PropertyModel<ConnInstanceTO>(this, "connInstanceTO"));
--        conn.setChoices(connectors.getObject());
--        conn.setChoiceRenderer(new 
ChoiceRenderer<ConnInstanceTO>("displayName", "key"));
--
--        conn.getField().setModel(new IModel<ConnInstanceTO>() {
--
--            private static final long serialVersionUID = 
-4202872830392400310L;
 -
 -            @Override
 -            public ConnInstanceTO getObject() {
 -                return connInstanceTO;
 -            }
 -
 -            @Override
 -            public void setObject(final ConnInstanceTO connector) {
 -                resourceTO.setConnector(connector.getKey());
 -                connInstanceTO = connector;
 -            }
 -
 -            @Override
 -            public void detach() {
 -            }
 -        });
 -
 -        conn.addRequiredLabel();
 -        conn.setEnabled(false);
 -
 -        conn.getField().add(new 
AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 -
 -            private static final long serialVersionUID = 
-1107858522700306810L;
 -
 -            @Override
 -            protected void onUpdate(final AjaxRequestTarget target) {
 -                send(getPage(), Broadcast.BREADTH, new 
DetailsModEvent(target));
 -            }
 -        });
 -
 -        add(conn);
 -    }
 -
 -    /**
 -     * Get the connetorTO linked to the resource.
 -     *
 -     * @param connectorTOs list of all connectors.
 -     * @param resourceTO resource.
 -     * @return selected connector instance: in case of no connectors 
available, null; in case of new resource
 -     * specification, the first on connector available
 -     */
 -    private ConnInstanceTO getConectorInstanceTO(final List<ConnInstanceTO> 
connectorTOs, final ResourceTO resourceTO) {
 -        if (connectorTOs.isEmpty()) {
 -            resourceTO.setConnector(null);
 -            return null;
 -        } else {
 -            // use the first element as default
 -            ConnInstanceTO res = connectorTOs.get(0);
 -
 -            for (ConnInstanceTO to : connectorTOs) {
 -                if 
(Long.valueOf(to.getKey()).equals(resourceTO.getConnector())) {
 -                    res = to;
 -                }
 -            }
 -
 -            // in case of no match
 -            resourceTO.setConnector(res.getKey());
 -
 -            return res;
 -        }
 -    }
 -
 -    /**
 -     * Connector instance modification event.
 -     */
 -    public static class DetailsModEvent extends ModalEvent {
++                new 
Model<String>(model.getObject().getConnectorDisplayName()),
++                false).addRequiredLabel().setEnabled(false));
  
-             @Override
-             public ConnInstanceTO getObject() {
-                 return connInstanceTO;
-             }
- 
-             @Override
-             public void setObject(final ConnInstanceTO connector) {
-                 resourceTO.setConnector(connector.getKey());
-                 connInstanceTO = connector;
-             }
- 
-             @Override
-             public void detach() {
-             }
-         });
- 
-         conn.addRequiredLabel();
-         conn.setEnabled(false);
- 
-         conn.getField().add(new 
AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
- 
-             private static final long serialVersionUID = 
-1107858522700306810L;
- 
-             @Override
-             protected void onUpdate(final AjaxRequestTarget target) {
-                 send(getPage(), Broadcast.BREADTH, new 
DetailsModEvent(target));
-             }
-         });
- 
-         container.add(conn);
- 
-         add(new AnnotatedBeanPanel("systeminformation", resourceTO));
-     }
- 
-     /**
-      * Get the connetorTO linked to the resource.
-      *
-      * @param connectorTOs list of all connectors.
-      * @param resourceTO resource.
-      * @return selected connector instance: in case of no connectors 
available, null; in case of new resource
-      * specification, the first on connector available
-      */
-     private ConnInstanceTO getConectorInstanceTO(final List<ConnInstanceTO> 
connectorTOs, final ResourceTO resourceTO) {
-         if (connectorTOs.isEmpty()) {
-             resourceTO.setConnector(null);
-             return null;
-         } else {
-             // use the first element as default
-             ConnInstanceTO res = connectorTOs.get(0);
- 
-             for (ConnInstanceTO to : connectorTOs) {
-                 if 
(Long.valueOf(to.getKey()).equals(resourceTO.getConnector())) {
-                     res = to;
-                 }
-             }
- 
-             // in case of no match
-             resourceTO.setConnector(res.getKey());
- 
-             return res;
-         }
-     }
- 
-     /**
-      * Connector instance modification event.
-      */
-     public static class DetailsModEvent extends ModalEvent {
- 
--        /**
--         * Constructor.
--         *
--         * @param target request target.
--         */
--        public DetailsModEvent(final AjaxRequestTarget target) {
--            super(target);
--        }
++        add(new AnnotatedBeanPanel("systeminformation", model.getObject()));
      }
  }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
index 40cc013,40cc013..46cc21f
--- 
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
@@@ -22,12 -22,12 +22,10 @@@ 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.syncope.client.console.commons.Constants;
  import org.apache.syncope.client.console.commons.JexlHelpUtils;
--import 
org.apache.syncope.client.console.panels.ResourceConnConfPanel.ConnConfModEvent;
  import org.apache.syncope.client.console.rest.ConnectorRestClient;
  import org.apache.syncope.client.console.rest.SchemaRestClient;
  import 
org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
@@@ -52,7 -52,7 +50,6 @@@ import org.apache.wicket.ajax.attribute
  import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
  import org.apache.wicket.ajax.markup.html.AjaxLink;
  import org.apache.wicket.ajax.markup.html.form.AjaxButton;
--import org.apache.wicket.event.IEvent;
  import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
  import org.apache.wicket.markup.html.WebMarkupContainer;
  import org.apache.wicket.markup.html.basic.Label;
@@@ -462,26 -462,26 +459,6 @@@ public class ResourceMappingPanel exten
          }
      }
  
--    @Override
--    public void onEvent(final IEvent<?> event) {
--        if (event.getPayload() instanceof ConnConfModEvent) {
--            final AjaxRequestTarget target = ((ConnConfModEvent) 
event.getPayload()).getTarget();
--
--            final List<ConnConfProperty> conf = ((ConnConfModEvent) 
event.getPayload()).getConfiguration();
--
--            mappings.removeAll();
--
--            addMappingBtn.setEnabled(resourceTO.getConnector() != null && 
resourceTO.getConnector() > 0);
--
--            schemaNames.clear();
--            schemaNames.addAll(getSchemaNames(resourceTO.getConnector(), new 
HashSet<ConnConfProperty>(conf)));
--
--            setEnabled();
--
--            target.add(this);
--        }
--    }
--
      /**
       * Set attribute names for a drop down choice list.
       *

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
index 7b84312,54b22b8..1f9ae6b
--- 
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
@@@ -18,13 -18,8 +18,11 @@@
   */
  package org.apache.syncope.client.console.panels;
  
 +import static org.apache.wicket.Component.ENABLE;
 +
- import 
de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
 +import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.Collection;
- import java.util.List;
  import org.apache.commons.collections4.CollectionUtils;
  import org.apache.commons.collections4.Predicate;
  import org.apache.commons.lang3.SerializationUtils;
@@@ -41,12 -35,14 +39,12 @@@ import org.apache.syncope.common.lib.to
  import org.apache.syncope.common.lib.types.Entitlement;
  import org.apache.wicket.PageReference;
  import org.apache.wicket.ajax.AjaxRequestTarget;
 -import org.apache.wicket.ajax.markup.html.form.AjaxButton;
  import 
org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
  import org.apache.wicket.event.Broadcast;
 -import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
 -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 -import org.apache.wicket.markup.html.WebMarkupContainer;
 +import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
- import org.apache.wicket.extensions.markup.html.tabs.ITab;
  import org.apache.wicket.markup.html.form.Form;
 -import org.apache.wicket.model.CompoundPropertyModel;
 +import org.apache.wicket.markup.html.panel.Panel;
++import org.apache.wicket.model.IModel;
  import org.apache.wicket.model.ResourceModel;
  
  /**
@@@ -56,41 -52,35 +54,38 @@@ public class ResourceModal extends Abst
  
      private static final long serialVersionUID = 1734415311027284221L;
  
 -    @SuppressWarnings({ "unchecked", "rawtypes" })
 +    private final boolean createFlag;
 +
      public ResourceModal(
 -            final ModalWindow window,
 +            final BaseModal<Serializable> modal,
              final PageReference pageRef,
--            final ResourceTO resourceTO,
++            final IModel<ResourceTO> model,
              final boolean createFlag) {
  
 -        super(window, pageRef);
 +        super(modal, pageRef);
  
 -        final Form<ResourceTO> form = new Form<>(FORM);
 -        form.setModel(new CompoundPropertyModel<>(resourceTO));
 +        this.createFlag = createFlag;
  
-         final List<ITab> tabs = new ArrayList<>();
-         add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", tabs));
- 
          //--------------------------------
          // Resource details panel
          //--------------------------------
-         tabs.add(new AbstractTab(new ResourceModel("resource", "resource")) {
 -        form.add(new ResourceDetailsPanel("details", resourceTO,
 -                resourceRestClient.getPropagationActionsClasses(), 
createFlag));
++        tabs.add(new AbstractTab(new ResourceModel("general", "general")) {
 +
 +            private static final long serialVersionUID = 
-5861786415855103549L;
  
 -        form.add(new AnnotatedBeanPanel("systeminformation", resourceTO));
 +            @Override
 +            public Panel getPanel(final String panelId) {
-                 return new ResourceDetailsPanel(panelId, resourceTO,
++                return new ResourceDetailsPanel(panelId, model,
 +                        resourceRestClient.getPropagationActionsClasses(), 
createFlag);
 +            }
 +        });
          //--------------------------------
  
          //--------------------------------
          // Resource provision panels
          //--------------------------------
 -        final WebMarkupContainer provisions = new 
WebMarkupContainer("pcontainer");
 -        form.add(provisions.setOutputMarkupId(true));
 -
          final ListViewPanel.Builder<ProvisionTO> builder = 
ListViewPanel.builder(ProvisionTO.class, pageRef);
--        builder.setItems(resourceTO.getProvisions());
++        builder.setItems(model.getObject().getProvisions());
          builder.includes("anyType", "objectClass");
  
          builder.addAction(new ActionLink<ProvisionTO>() {
@@@ -136,116 -126,121 +131,129 @@@
  
              @Override
              public void onClick(final AjaxRequestTarget target, final 
ProvisionTO provisionTO) {
--                resourceTO.getProvisions().remove(provisionTO);
++                model.getObject().getProvisions().remove(provisionTO);
                  send(pageRef.getPage(), Broadcast.DEPTH,
                          new AjaxWizard.NewItemFinishEvent<ProvisionTO>(null, 
target));
              }
          }, ActionLink.ActionType.DELETE, Entitlement.RESOURCE_DELETE);
  
--        builder.addNewItemPanelBuilder(new ProvisionWizardBuilder("wizard", 
resourceTO, pageRef));
 -        builder.addNotificationPanel(feedbackPanel);
++        builder.addNewItemPanelBuilder(new ProvisionWizardBuilder("wizard", 
model.getObject(), pageRef));
 +        builder.addNotificationPanel(modal.getFeedbackPanel());
  
 -        provisions.add(builder.build("provisions"));
 -        //--------------------------------
 +        tabs.add(new AbstractTab(new ResourceModel("provisions", 
"provisions")) {
  
 -        //--------------------------------
 -        // Resource connector configuration panel
 -        //--------------------------------
 -        ResourceConnConfPanel resourceConnConfPanel = new 
ResourceConnConfPanel("connconf", resourceTO, createFlag);
 -        MetaDataRoleAuthorizationStrategy.authorize(resourceConnConfPanel, 
ENABLE, Entitlement.CONNECTOR_READ);
 -        form.add(resourceConnConfPanel);
 -        //--------------------------------
 +            private static final long serialVersionUID = 
-5861786415855103549L;
  
 +            @Override
 +            public Panel getPanel(final String panelId) {
 +                return builder.build(panelId);
 +            }
 +        });
          //--------------------------------
 -        // Resource security panel
 +
          //--------------------------------
 -        form.add(new ResourceSecurityPanel("security", resourceTO));
 +        // Resource connector configuration panel
          //--------------------------------
 +        tabs.add(new AbstractTab(new ResourceModel("connectorProperties", 
"connectorProperties")) {
  
 -        AjaxButton submit = new IndicatingAjaxButton(APPLY, new 
ResourceModel(SUBMIT, SUBMIT)) {
 -
 -            private static final long serialVersionUID = -958724007591692537L;
 +            private static final long serialVersionUID = 
-5861786415855103549L;
  
              @Override
 -            protected void onSubmit(final AjaxRequestTarget target, final 
Form<?> form) {
 -                final ResourceTO resourceTO = (ResourceTO) 
form.getDefaultModelObject();
 -
 -                boolean connObjectKeyError = false;
 +            public Panel getPanel(final String panelId) {
-                 final ResourceConnConfPanel panel = new 
ResourceConnConfPanel(panelId, resourceTO, createFlag);
++                final ResourceConnConfPanel panel = new 
ResourceConnConfPanel(panelId, model, createFlag) {
+ 
 -                final Collection<ProvisionTO> provisions = new 
ArrayList<>(resourceTO.getProvisions());
++                    private static final long serialVersionUID = 1L;
+ 
 -                for (ProvisionTO provision : provisions) {
 -                    if (provision != null) {
 -                        if (provision.getMapping() == null || 
provision.getMapping().getItems().isEmpty()) {
 -                            resourceTO.getProvisions().remove(provision);
++                    @Override
++                    protected void check(final AjaxRequestTarget target) {
++                        if (connectorRestClient.check(model.getObject())) {
++                            info(getString("success_connection"));
+                         } else {
 -                            int uConnObjectKeyCount = 
CollectionUtils.countMatches(
 -                                    provision.getMapping().getItems(), new 
Predicate<MappingItemTO>() {
 -
 -                                        @Override
 -                                        public boolean evaluate(final 
MappingItemTO item) {
 -                                            return item.isConnObjectKey();
 -                                        }
 -                                    });
 -
 -                            connObjectKeyError = uConnObjectKeyCount != 1;
++                            error(getString("error_connection"));
+                         }
++                        modal.getFeedbackPanel().refresh(target);
+                     }
 -                }
++                };
 +                MetaDataRoleAuthorizationStrategy.authorize(panel, ENABLE, 
Entitlement.CONNECTOR_READ);
 +                return panel;
 +            }
 +        });
 +        //--------------------------------
  
 -                if (connObjectKeyError) {
 -                    error(getString("connObjectKeyValidation"));
 -                    feedbackPanel.refresh(target);
 -                } else {
 -                    try {
 -                        if (createFlag) {
 -                            resourceRestClient.create(resourceTO);
 -                            send(pageRef.getPage(), Broadcast.BREADTH, new 
CreateEvent(
 -                                    resourceTO.getKey(),
 -                                    resourceTO.getKey(),
 -                                    TopologyNode.Kind.RESOURCE,
 -                                    resourceTO.getConnector(),
 -                                    target));
 -                        } else {
 -                            resourceRestClient.update(resourceTO);
 -                        }
 +        //--------------------------------
 +        // Resource security panel
 +        //--------------------------------
 +        tabs.add(new AbstractTab(new ResourceModel("security", "security")) {
  
 -                        if (pageRef.getPage() instanceof AbstractBasePage) {
 -                            ((AbstractBasePage) 
pageRef.getPage()).setModalResult(true);
 -                        }
 -                        window.close(target);
 -                    } catch (Exception e) {
 -                        LOG.error("Failure managing resource {}", resourceTO, 
e);
 -                        error(getString(Constants.ERROR) + ": " + 
e.getMessage());
 -                        feedbackPanel.refresh(target);
 -                    }
 -                }
 -            }
 +            private static final long serialVersionUID = 
-5861786415855103549L;
  
              @Override
 -            protected void onError(final AjaxRequestTarget target, final 
Form<?> form) {
 -                feedbackPanel.refresh(target);
 +            public Panel getPanel(final String panelId) {
-                 return new ResourceSecurityPanel(panelId, resourceTO);
++                return new ResourceSecurityPanel(panelId, model);
              }
 -        };
 +        });
 +        //--------------------------------
 +    }
  
 -        form.add(submit);
 -        form.setDefaultButton(submit);
 +    @Override
 +    public void onError(final AjaxRequestTarget target, final Form<?> form) {
 +        modal.getFeedbackPanel().refresh(target);
 +    }
  
 -        final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new 
ResourceModel(CANCEL)) {
 +    @Override
 +    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
 +        final ResourceTO resourceTO = (ResourceTO) 
form.getDefaultModelObject();
  
 -            private static final long serialVersionUID = -958724007591692537L;
 +        boolean connObjectKeyError = false;
  
 -            @Override
 -            protected void onSubmit(final AjaxRequestTarget target, final 
Form<?> form) {
 -                window.close(target);
 -            }
 +        final Collection<ProvisionTO> provisions = new 
ArrayList<>(resourceTO.getProvisions());
  
 -            @Override
 -            protected void onError(final AjaxRequestTarget target, final 
Form<?> form) {
 -            }
 -        };
 +        for (ProvisionTO provision : provisions) {
 +            if (provision != null) {
 +                if (provision.getMapping() == null || 
provision.getMapping().getItems().isEmpty()) {
 +                    resourceTO.getProvisions().remove(provision);
 +                } else {
 +                    int uConnObjectKeyCount = CollectionUtils.countMatches(
 +                            provision.getMapping().getItems(), new 
Predicate<MappingItemTO>() {
  
 -        cancel.setDefaultFormProcessing(false);
 -        form.add(cancel);
 +                                @Override
 +                                public boolean evaluate(final MappingItemTO 
item) {
 +                                    return item.isConnObjectKey();
 +                                }
 +                            });
  
 -        add(form);
 +                    connObjectKeyError = uConnObjectKeyCount != 1;
 +                }
 +            }
 +        }
 +
 +        if (connObjectKeyError) {
 +            error(getString("connObjectKeyValidation"));
 +            modal.getFeedbackPanel().refresh(target);
 +        } else {
 +            try {
 +                if (createFlag) {
 +                    resourceRestClient.create(resourceTO);
 +                    send(pageRef.getPage(), Broadcast.BREADTH, new 
CreateEvent(
 +                            resourceTO.getKey(),
 +                            resourceTO.getKey(),
 +                            TopologyNode.Kind.RESOURCE,
 +                            resourceTO.getConnector(),
 +                            target));
 +                } else {
 +                    resourceRestClient.update(resourceTO);
 +                }
  
 -        MetaDataRoleAuthorizationStrategy.authorize(
 -                submit, ENABLE, createFlag ? Entitlement.RESOURCE_CREATE : 
Entitlement.RESOURCE_UPDATE);
 +                if (pageRef.getPage() instanceof AbstractBasePage) {
 +                    ((AbstractBasePage) 
pageRef.getPage()).setModalResult(true);
 +                }
 +                modal.close(target);
 +            } catch (Exception e) {
 +                LOG.error("Failure managing resource {}", resourceTO, e);
 +                error(getString(Constants.ERROR) + ": " + e.getMessage());
 +                modal.getFeedbackPanel().refresh(target);
 +            }
 +        }
      }
 +
  }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java
index 2be0d95,a0a1ddc..4aab37e
--- 
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
@@@ -49,7 -49,7 +49,7 @@@ public class ResourceSecurityPanel exte
  
      private IModel<Map<Long, String>> syncPolicies = null;
  
--    public ResourceSecurityPanel(final String id, final ResourceTO 
resourceTO) {
++    public ResourceSecurityPanel(final String id, final IModel<ResourceTO> 
model) {
  
          super(id);
  
@@@ -105,49 -100,54 +105,46 @@@
          // -------------------------------
          // Password policy specification
          // -------------------------------
--        final AjaxDropDownChoicePanel<Long> passwordPolicy = new 
AjaxDropDownChoicePanel<Long>("passwordPolicy",
--                new ResourceModel("passwordPolicy", 
"passwordPolicy").getObject(), new PropertyModel<Long>(resourceTO,
--                        "passwordPolicy"));
++        final AjaxDropDownChoicePanel<Long> passwordPolicy = new 
AjaxDropDownChoicePanel<Long>(
++                "passwordPolicy",
++                new ResourceModel("passwordPolicy", 
"passwordPolicy").getObject(),
++                new PropertyModel<Long>(model, "passwordPolicy"),
++                false);
  
          passwordPolicy.setChoiceRenderer(new 
PolicyRenderer(PolicyType.PASSWORD));
--
          passwordPolicy.setChoices(new 
ArrayList<>(passwordPolicies.getObject().keySet()));
--
          ((DropDownChoice<?>) passwordPolicy.getField()).setNullValid(true);
--
 -        securityContainer.add(passwordPolicy);
 +        container.add(passwordPolicy);
          // -------------------------------
  
          // -------------------------------
          // Account policy specification
          // -------------------------------
--        final AjaxDropDownChoicePanel<Long> accountPolicy = new 
AjaxDropDownChoicePanel<Long>("accountPolicy",
--                new ResourceModel("accountPolicy", 
"accountPolicy").getObject(), new PropertyModel<Long>(resourceTO,
--                        "accountPolicy"));
++        final AjaxDropDownChoicePanel<Long> accountPolicy = new 
AjaxDropDownChoicePanel<Long>(
++                "accountPolicy",
++                new ResourceModel("accountPolicy", 
"accountPolicy").getObject(),
++                new PropertyModel<Long>(model, "accountPolicy"),
++                false);
  
          accountPolicy.setChoiceRenderer(new 
PolicyRenderer(PolicyType.ACCOUNT));
--
          accountPolicy.setChoices(new 
ArrayList<Long>(accountPolicies.getObject().keySet()));
--
          ((DropDownChoice<?>) accountPolicy.getField()).setNullValid(true);
--
 -        securityContainer.add(accountPolicy);
 +        container.add(accountPolicy);
          // -------------------------------
  
          // -------------------------------
          // Sync policy specification
          // -------------------------------
--        final AjaxDropDownChoicePanel<Long> syncPolicy = new 
AjaxDropDownChoicePanel<Long>("syncPolicy",
--                new ResourceModel("syncPolicy", "syncPolicy").getObject(), 
new PropertyModel<Long>(resourceTO,
--                        "syncPolicy"));
++        final AjaxDropDownChoicePanel<Long> syncPolicy = new 
AjaxDropDownChoicePanel<Long>(
++                "syncPolicy",
++                new ResourceModel("syncPolicy", "syncPolicy").getObject(),
++                new PropertyModel<Long>(model, "syncPolicy"),
++                false);
  
          syncPolicy.setChoiceRenderer(new PolicyRenderer(PolicyType.SYNC));
--
          syncPolicy.setChoices(new 
ArrayList<Long>(syncPolicies.getObject().keySet()));
--
          ((DropDownChoice<?>) syncPolicy.getField()).setNullValid(true);
--
 -        securityContainer.add(syncPolicy);
 +        container.add(syncPolicy);
          // -------------------------------
      }
  
@@@ -155,7 -155,7 +152,7 @@@
  
          private static final long serialVersionUID = 8060500161321947000L;
  
--        private PolicyType type;
++        private final PolicyType type;
  
          public PolicyRenderer(final PolicyType type) {
              super();
@@@ -178,9 -178,9 +175,7 @@@
  
          @Override
          public String getIdValue(final Long object, final int index) {
--            return String.valueOf(object != null
--                    ? object
--                    : 0L);
++            return String.valueOf(object != null ? object : 0L);
          }
      };
  }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java
index 1381c00,1381c00..5ad33a9
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java
@@@ -19,12 -19,12 +19,6 @@@
  package org.apache.syncope.client.console.themes;
  
  import de.agilecoders.wicket.core.settings.Theme;
--import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIAllJavaScriptReference;
--import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUICoreJavaScriptReference;
--import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIDraggableJavaScriptReference;
--import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIMouseJavaScriptReference;
--import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIResizableJavaScriptReference;
--import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIWidgetJavaScriptReference;
  import java.util.ArrayList;
  import java.util.List;
  import org.apache.wicket.markup.head.CssHeaderItem;
@@@ -44,14 -44,14 +38,6 @@@ public class AdminLTE extends Theme 
          references.add(JavaScriptHeaderItem.forReference(
                  new JQueryPluginResourceReference(AdminLTE.class, 
"js/AdminLTE-app.min.js"), "adminltejs"));
  
--        // Adds WebjarsJavaScriptResourceReference about JQuery
--        
references.add(JavaScriptHeaderItem.forReference(JQueryUIAllJavaScriptReference.instance()));
--        
references.add(JavaScriptHeaderItem.forReference(JQueryUICoreJavaScriptReference.instance()));
--        
references.add(JavaScriptHeaderItem.forReference(JQueryUIMouseJavaScriptReference.instance()));
--        
references.add(JavaScriptHeaderItem.forReference(JQueryUIWidgetJavaScriptReference.instance()));
--        
references.add(JavaScriptHeaderItem.forReference(JQueryUIResizableJavaScriptReference.instance()));
--        
references.add(JavaScriptHeaderItem.forReference(JQueryUIDraggableJavaScriptReference.instance()));
--
          
references.add(CssHeaderItem.forReference(AdminLTECssResourceReference.INSTANCE));
          references.addAll(super.getDependencies());
          return references;

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java
index d3aa975,7756a25..8a68ca3
--- 
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
@@@ -45,7 -39,7 +45,9 @@@ import org.apache.wicket.behavior.Attri
  import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.markup.html.panel.Fragment;
  import org.apache.wicket.markup.html.panel.Panel;
++import org.apache.wicket.model.CompoundPropertyModel;
++import org.apache.wicket.model.IModel;
 +import org.apache.wicket.model.Model;
  import org.apache.wicket.spring.injection.annot.SpringBean;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
@@@ -130,18 -124,12 +132,20 @@@ public class TopologyNodePanel extends 
  
              @Override
              public void onClickInternal(final AjaxRequestTarget target) {
-                 final ConnInstanceTO model = new ConnInstanceTO();
-                 model.setLocation(node.getKey().toString());
++                final ConnInstanceTO modelObject = new ConnInstanceTO();
++                modelObject.setLocation(node.getKey().toString());
 +
++                final IModel<ConnInstanceTO> model = new 
CompoundPropertyModel<>(modelObject);
 +                modal.setFormModel(model);
++
 +                target.add(modal.setContent(new ConnectorModal(modal, 
pageRef, model)));
  
 -                final ConnInstanceTO connectorTO = new ConnInstanceTO();
 -                connectorTO.setLocation(node.getKey().toString());
 -                modal.setContent(new ConnectorModal(modal, pageRef, 
connectorTO));
 -                
modal.setTitle(MessageFormat.format(getString("connector.new"), node.getKey()));
 -                modal.show(target);
 +                modal.header(new 
Model<String>(MessageFormat.format(getString("connector.new"), node.getKey())));
 +
 +                MetaDataRoleAuthorizationStrategy.
 +                        authorize(modal.addSumbitButton(), ENABLE, 
Entitlement.CONNECTOR_CREATE);
 +
 +                modal.show(true);
              }
          };
          fragment.add(create);
@@@ -180,19 -164,12 +184,21 @@@
  
              @Override
              public void onClickInternal(final AjaxRequestTarget target) {
-                 final ResourceTO model = new ResourceTO();
-                 model.setConnector(Long.class.cast(node.getKey()));
-                 model.setConnectorDisplayName(node.getDisplayName());
 -                final ResourceTO resourceTO = new ResourceTO();
 -                resourceTO.setConnector(Long.class.cast(node.getKey()));
 -                resourceTO.setConnectorDisplayName(node.getDisplayName());
 -                modal.setContent(new ResourceModal(modal, pageRef, 
resourceTO, true));
 -                modal.setTitle(getString("resource.new"));
 -                modal.show(target);
++                final ResourceTO modelObject = new ResourceTO();
++                modelObject.setConnector(Long.class.cast(node.getKey()));
++                modelObject.setConnectorDisplayName(node.getDisplayName());
 +
++                final IModel<ResourceTO> model = new 
CompoundPropertyModel<>(modelObject);
 +                modal.setFormModel(model);
++
 +                target.add(modal.setContent(new ResourceModal(modal, pageRef, 
model, true)));
 +
 +                modal.header(new 
Model<String>(MessageFormat.format(getString("resource.new"), node.getKey())));
 +
 +                MetaDataRoleAuthorizationStrategy.
 +                        authorize(modal.addSumbitButton(), ENABLE, 
Entitlement.RESOURCE_CREATE);
 +
 +                modal.show(true);
              }
          };
          fragment.add(create);
@@@ -205,17 -180,14 +211,19 @@@
  
              @Override
              public void onClickInternal(final AjaxRequestTarget target) {
-                 final ConnInstanceTO model = 
connectorRestClient.read(Long.class.cast(node.getKey()));
++                final ConnInstanceTO modelObject = 
connectorRestClient.read(Long.class.cast(node.getKey()));
 +
++                final IModel<ConnInstanceTO> model = new 
CompoundPropertyModel<>(modelObject);
 +                modal.setFormModel(model);
+ 
 -                modal.setContent(new ConnectorModal(
 -                        modal,
 -                        pageRef,
 -                        
connectorRestClient.read(Long.class.cast(node.getKey()))));
 +                target.add(modal.setContent(new ConnectorModal(modal, 
pageRef, model)));
  
 -                
modal.setTitle(MessageFormat.format(getString("connector.edit"), 
node.getKey()));
 -                modal.show(target);
 +                modal.header(new 
Model<String>(MessageFormat.format(getString("connector.edit"), 
node.getKey())));
 +
 +                MetaDataRoleAuthorizationStrategy.
 +                        authorize(modal.addSumbitButton(), ENABLE, 
Entitlement.CONNECTOR_UPDATE);
 +
 +                modal.show(true);
              }
          };
          fragment.add(edit);
@@@ -254,18 -222,15 +262,19 @@@
  
              @Override
              public void onClickInternal(final AjaxRequestTarget target) {
++                final ResourceTO modelObject = 
resourceRestClient.read(node.getKey().toString());
 +
-                 final ResourceTO model = 
resourceRestClient.read(node.getKey().toString());
- 
++                final IModel<ResourceTO> model = new 
CompoundPropertyModel<>(modelObject);
 +                modal.setFormModel(model);
++
 +                target.add(modal.setContent(new ResourceModal(modal, pageRef, 
model, false)));
  
 -                modal.setContent(new ResourceModal(
 -                        modal,
 -                        pageRef,
 -                        resourceRestClient.read(node.getKey().toString()),
 -                        false));
 +                modal.header(new 
Model<String>(MessageFormat.format(getString("resource.edit"), node.getKey())));
  
 -                
modal.setTitle(MessageFormat.format(getString("resource.edit"), node.getKey()));
 -                modal.show(target);
 +                MetaDataRoleAuthorizationStrategy.
 +                        authorize(modal.addSumbitButton(), ENABLE, 
Entitlement.RESOURCE_UPDATE);
 +
 +                modal.show(true);
              }
          };
          fragment.add(edit);

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
index 2d26c08,e67daac..124b096
--- 
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
@@@ -40,6 -40,6 +40,7 @@@ import org.apache.wicket.markup.html.fo
  import org.apache.wicket.markup.html.list.ListItem;
  import org.apache.wicket.markup.html.list.ListView;
  import org.apache.wicket.model.CompoundPropertyModel;
++import org.apache.wicket.model.IModel;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
@@@ -117,6 -117,6 +118,11 @@@ public class BaseModal<T extends Serial
          return this;
      }
  
++    public BaseModal<T> setFormModel(final IModel<T> model) {
++        form.setModel(model);
++        return this;
++    }
++
      public T getFormModel() {
          return form.getModelObject();
      }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java
index 165f20d,41643ea..1f58760
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java
@@@ -18,11 -18,8 +18,14 @@@
   */
  package org.apache.syncope.client.console.wicket.markup.html.form;
  
++import org.apache.commons.lang3.StringUtils;
 +import org.apache.wicket.Component;
 +import org.apache.wicket.markup.html.basic.Label;
++import org.apache.wicket.markup.html.form.FormComponent;
++import org.apache.wicket.markup.html.panel.Fragment;
  import org.apache.wicket.markup.html.panel.Panel;
  import org.apache.wicket.model.IModel;
 +import org.apache.wicket.model.ResourceModel;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
@@@ -35,33 -32,9 +38,92 @@@ public abstract class AbstractFieldPane
  
      private static final long serialVersionUID = 5958017546318855690L;
  
-     protected final String name;
 -    public AbstractFieldPanel(final String id, final IModel<T> model) {
++    private static final String LABEL = "field-label";
++
++    private static final String EXTERNAL_ACTION = "externalAction";
++
++    private static final String EXTERNAL_ACTION_ICON = "externalActionIcon";
++
++    protected boolean isRequiredLabelAdded = false;
++
++    protected String name;
 +
 +    public AbstractFieldPanel(final String id, final String name, final 
IModel<T> model) {
          super(id, model);
 +        this.name = name;
 +
++        add(new Fragment("required", "emptyFragment", 
AbstractFieldPanel.this));
++        add(new Fragment("externalAction", "emptyFragment", 
AbstractFieldPanel.this));
++
 +        addLabel();
 +        setOutputMarkupId(true);
 +    }
 +
 +    public final AbstractFieldPanel<T> addLabel() {
 +        return addLabel(this.name);
 +    }
 +
 +    public final AbstractFieldPanel<T> addLabel(final String name) {
-         addOrReplace(new Label("field-label", new ResourceModel(name, name)));
++        addOrReplace(new Label(LABEL, new ResourceModel(name, name)));
 +        return this;
 +    }
 +
 +    public AbstractFieldPanel<T> hideLabel() {
-         final Component label = get("field-label");
++        final Component label = get(LABEL);
 +
 +        if (label != null) {
 +            label.setVisible(false);
 +        }
++
++        return this;
++    }
++
++    public AbstractFieldPanel<T> showExternAction(final FormComponent<?> 
component) {
++        final Fragment fragment = new Fragment("externalAction", 
"externalActionFragment", AbstractFieldPanel.this);
++        addOrReplace(fragment);
++        fragment.add(component.setRenderBodyOnly(false));
++        return this;
++    }
++
++    public boolean isRequired() {
++        return false;
++    }
++
++    public AbstractFieldPanel<T> setRequired(final boolean required) {
 +        return this;
 +    }
 +
++    public AbstractFieldPanel<T> addRequiredLabel() {
++        if (!isRequired()) {
++            setRequired(true);
++        }
++
++        final Fragment fragment = new Fragment("required", 
"requiredFragment", this);
++        fragment.add(new Label("requiredLabel", "*"));
++        replace(fragment);
++
++        this.isRequiredLabelAdded = true;
++
++        return this;
++    }
++
++    public AbstractFieldPanel<T> removeRequiredLabel() {
++        if (isRequired()) {
++            setRequired(false);
++        }
++
++        final Fragment fragment = new Fragment("required", "emptyFragment", 
this);
++
++        replace(fragment);
++
++        this.isRequiredLabelAdded = false;
++
++        return this;
++    }
++
++    protected String externalActionIcon() {
++        return StringUtils.EMPTY;
+     }
+ 
      public abstract AbstractFieldPanel<T> setModelObject(T object);
  }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
index bd1cd0d,ff64fbe..789a8e1
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
@@@ -40,7 -38,7 +38,7 @@@ public class AjaxCheckBoxPanel extends 
  
      public AjaxCheckBoxPanel(
              final String id, final String name, final IModel<Boolean> model, 
final boolean enableOnChange) {
--        super(id, model);
++        super(id, name, model);
  
          field = new CheckBox("checkboxField", model);
          add(field.setLabel(new Model<String>(name)).setOutputMarkupId(true));

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
index 2eb11ea,2eb11ea..a831520
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
@@@ -23,19 -23,19 +23,24 @@@ import org.apache.wicket.ajax.AjaxReque
  import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
  import org.apache.wicket.markup.html.form.PasswordTextField;
  import org.apache.wicket.model.IModel;
--import org.apache.wicket.model.Model;
++import org.apache.wicket.model.ResourceModel;
  
  public class AjaxPasswordFieldPanel extends FieldPanel<String> {
  
      private static final long serialVersionUID = -5490115280336667460L;
  
      public AjaxPasswordFieldPanel(final String id, final String name, final 
IModel<String> model) {
--        super(id, model);
++        this(id, name, model, true);
++    }
++
++    public AjaxPasswordFieldPanel(
++            final String id, final String name, final IModel<String> model, 
final boolean enableOnChange) {
++        super(id, name, model);
  
          field = new PasswordTextField("passwordField", model);
--        add(field.setLabel(new 
Model<>(name)).setRequired(false).setOutputMarkupId(true));
++        add(field.setLabel(new ResourceModel(name, 
name)).setRequired(false).setOutputMarkupId(true));
  
--        if (!isReadOnly()) {
++        if (enableOnChange && !isReadOnly()) {
              field.add(new 
AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
  
                  private static final long serialVersionUID = 
-1107858522700306810L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
index 08de6f8,f42b67f..59a2c00
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
@@@ -28,7 -28,7 +28,6 @@@ import org.apache.wicket.ajax.AjaxReque
  import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
  import 
org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings;
  import 
org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
--import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.model.IModel;
  import org.apache.wicket.model.ResourceModel;
  import org.apache.wicket.validation.IValidator;
@@@ -45,7 -45,7 +44,7 @@@ public class AjaxTextFieldPanel extend
  
      public AjaxTextFieldPanel(
              final String id, final String name, final IModel<String> model, 
final boolean enableOnChange) {
--        super(id, model);
++        super(id, name, model);
  
          final AutoCompleteSettings settings = new AutoCompleteSettings();
          settings.setShowCompleteListOnFocusGain(true);
@@@ -84,8 -84,8 +83,6 @@@
                  }
              });
          }
- 
 -        
--        add(new Label("label", new ResourceModel(name, name)));
      }
  
      public void addValidator(final IValidator<? super String> validator) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
index 5bf1cdc,3a48d38..89970f8
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
@@@ -23,10 -23,10 +23,8 @@@ import java.util.List
  import org.apache.commons.lang3.SerializationUtils;
  import org.apache.commons.lang3.StringUtils;
  import org.apache.wicket.AttributeModifier;
--import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.markup.html.form.FormComponent;
  import org.apache.wicket.markup.html.list.ListItem;
--import org.apache.wicket.markup.html.panel.Fragment;
  import org.apache.wicket.model.IModel;
  import org.apache.wicket.model.Model;
  import org.apache.wicket.model.ResourceModel;
@@@ -39,17 -39,15 +37,12 @@@ public abstract class FieldPanel<T exte
  
      protected String title = null;
  
--    protected boolean isRequiredLabelAdded = false;
--
      public FieldPanel(final String id, final IModel<T> model) {
 -        super(id, model);
 -
 -        final Fragment fragment = new Fragment("required", 
"notRequiredFragment", this);
 -        add(fragment);
 +        this(id, id, model);
 +    }
  
 -        setOutputMarkupId(true);
 +    public FieldPanel(final String id, final String name, final IModel<T> 
model) {
 +        super(id, name, model);
- 
-         final Fragment fragment = new Fragment("required", 
"notRequiredFragment", this);
-         add(fragment);
      }
  
      public FormComponent<T> getField() {
@@@ -75,6 -73,6 +68,7 @@@
          return this;
      }
  
++    @Override
      public FieldPanel<T> setRequired(final boolean required) {
          field.setRequired(required);
          return this;
@@@ -85,6 -83,6 +79,7 @@@
          return this;
      }
  
++    @Override
      public boolean isRequired() {
          return field.isRequired();
      }
@@@ -93,34 -91,36 +88,6 @@@
          return !field.isEnabled();
      }
  
--    public FieldPanel<T> addRequiredLabel() {
--        if (!isRequired()) {
--            setRequired(true);
--        }
--
--        final Fragment fragment = new Fragment("required", 
"requiredFragment", this);
 -
--        fragment.add(new Label("requiredLabel", "*"));
 -
--        replace(fragment);
--
--        this.isRequiredLabelAdded = true;
--
--        return this;
--    }
--
--    public FieldPanel<T> removeRequiredLabel() {
--        if (isRequired()) {
--            setRequired(false);
--        }
--
--        final Fragment fragment = new Fragment("required", 
"notRequiredFragment", this);
--
--        replace(fragment);
--
--        this.isRequiredLabelAdded = false;
--
--        return this;
--    }
--
      @Override
      public FieldPanel<T> setModelObject(final T object) {
          field.setModelObject(object);

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java
index 4eb7270,4f71f81..3370cd7
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java
@@@ -26,59 -36,147 +26,57 @@@ public class SpinnerFieldPanel<T extend
  
      private static final long serialVersionUID = 6413819574530703577L;
  
-     private String name;
- 
 -    private final String name;
 +    private Class<T> reference;
  
 -    private final Class<T> reference;
 +    private IModel<T> model;
  
 -    private final IModel<T> model;
 +    private SpinnerConfig conf;
  
 -    private final T min;
 -
 -    private final T max;
 -
 -    @SuppressWarnings("unchecked")
 -    public SpinnerFieldPanel(final String id, final String name, final 
Class<T> reference, final IModel<T> model,
 +    public SpinnerFieldPanel(
 +            final String id,
 +            final String name,
 +            final Class<T> reference,
 +            final IModel<T> model,
              final T min, final T max) {
 +        super(id, name, model);
  
 -        super(id, model);
 -        this.name = name;
 -        this.reference = reference;
 -        this.model = model;
 -        this.min = min;
 -        this.max = max;
 +        final SpinnerConfig config = new SpinnerConfig();
 +        config.withMax(max);
 +        config.withMin(min);
  
 -        String uuid = UUID.randomUUID().toString();
 -        field = new TextField<T>("spinnerField", model, reference);
 -        field.setMarkupId(uuid);
 -        add(field.setLabel(new Model<String>(name)));
 -
 -        if (!isReadOnly()) {
 -            field.add(new 
AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 +        init(name, reference, model, config);
 +    }
  
 -                private static final long serialVersionUID = 
-1107858522700306810L;
 +    public SpinnerFieldPanel(
 +            final String id,
 +            final String name,
 +            final Class<T> reference,
 +            final IModel<T> model) {
 +        this(id, name, reference, model, new SpinnerConfig());
 +    }
  
 -                @Override
 -                protected void onUpdate(final AjaxRequestTarget target) {
 -                    // nothing to do
 -                }
 -            });
 -        }
 +    public SpinnerFieldPanel(
 +            final String id,
 +            final String name,
 +            final Class<T> reference,
 +            final IModel<T> model,
 +            final SpinnerConfig conf) {
  
 -        final StringBuilder statements = new StringBuilder();
 -        statements.append("jQuery(function() {").
 -                append("var spinner = 
$('#").append(uuid).append("').spinner();").
 -                append("$('#").append(uuid).append("').spinner(").
 -                append("'option', 'stop', function(event, ui) { 
$(this).change(); });");
 -        if (this.min != null) {
 -            statements.
 -                    append("$('#").append(uuid).append("').spinner(").
 -                    append("'option', 'min', ").append(this.min).append(");");
 -        }
 -        if (this.max != null) {
 -            statements.
 -                    append("$('#").append(uuid).append("').spinner(").
 -                    append("'option', 'max', ").append(this.max).append(");");
 -        }
 -        statements.append("});");
 -        Label spinnerFieldJS = new Label("spinnerFieldJS", 
statements.toString());
 -        spinnerFieldJS.setEscapeModelStrings(false);
 -        add(spinnerFieldJS);
 +        super(id, name, model);
 +        init(name, reference, model, conf);
      }
  
 -    @Override
 -    public SpinnerFieldPanel<T> setNewModel(final List<Serializable> list) {
 -        setNewModel(new Model<T>() {
 -
 -            private static final long serialVersionUID = 527651414610325237L;
 -
 -            @Override
 -            public T getObject() {
 -                T value = null;
 -
 -                if (list != null && !list.isEmpty() && 
StringUtils.hasText(list.get(0).toString())) {
 -                    value = reference.equals(Integer.class)
 -                            ? 
reference.cast(NumberUtils.toInt(list.get(0).toString()))
 -                            : reference.equals(Long.class)
 -                            ? 
reference.cast(NumberUtils.toLong(list.get(0).toString()))
 -                            : reference.equals(Short.class)
 -                            ? 
reference.cast(NumberUtils.toShort(list.get(0).toString()))
 -                            : reference.equals(Float.class)
 -                            ? 
reference.cast(NumberUtils.toFloat(list.get(0).toString()))
 -                            : reference.equals(byte.class)
 -                            ? 
reference.cast(NumberUtils.toByte(list.get(0).toString()))
 -                            : 
reference.cast(NumberUtils.toDouble(list.get(0).toString()));
 -                }
 -
 -                return value;
 -            }
 -
 -            @Override
 -            public void setObject(final T object) {
 -                list.clear();
 -                if (object != null) {
 -                    list.add(object.toString());
 -                }
 -            }
 -        });
 -
 -        return this;
 -    }
 +    private void init(final String name, final Class<T> reference, final 
IModel<T> model, final SpinnerConfig conf) {
 +        final Spinner<T> spinner = new Spinner<>("spinner", model, conf);
 +        add(spinner);
  
 -    @SuppressWarnings("rawtypes")
 -    @Override
 -    public SpinnerFieldPanel<T> setNewModel(final ListItem item) {
 -        field.setModel(new Model<T>() {
 -
 -            private static final long serialVersionUID = 6799404673615637845L;
 -
 -            @Override
 -            public T getObject() {
 -                T number = null;
 -
 -                final Object obj = item.getModelObject();
 -
 -                if (obj != null && !obj.toString().isEmpty()) {
 -                    if (obj instanceof String) {
 -                        number = reference.equals(Integer.class)
 -                                ? reference.cast(Integer.valueOf((String) 
obj))
 -                                : reference.equals(Long.class)
 -                                ? reference.cast(Long.valueOf((String) obj))
 -                                : reference.equals(Short.class)
 -                                ? reference.cast(Short.valueOf((String) obj))
 -                                : reference.equals(Float.class)
 -                                ? reference.cast(Float.valueOf((String) obj))
 -                                : reference.equals(byte.class)
 -                                ? reference.cast(Byte.valueOf((String) obj))
 -                                : reference.cast(Double.valueOf((String) 
obj));
 -                    } else if (obj instanceof Number) {
 -                        // Don't parse anything
 -                        number = reference.cast(obj);
 -                    }
 -                }
 -
 -                return number;
 -            }
 -
 -            @Override
 -            @SuppressWarnings("unchecked")
 -            public void setObject(final T object) {
 -                item.setModelObject(object == null ? null : 
object.toString());
 -            }
 -        });
 -
 -        return this;
 +        this.name = name;
 +        this.model = model;
 +        this.conf = conf;
 +        this.reference = reference;
 +
 +        this.conf.withMouseWheel(true);
 +        this.conf.withVerticalbuttons(true);
      }
  
      @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/AltListView.java
----------------------------------------------------------------------
diff --cc 
client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/AltListView.java
index 3691171,3691171..0000000
deleted file mode 100644,100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/AltListView.java
+++ /dev/null
@@@ -1,59 -1,59 +1,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.wicket.markup.html.list;
--
--import java.util.List;
--import org.apache.wicket.markup.ComponentTag;
--import org.apache.wicket.markup.html.list.ListItem;
--import org.apache.wicket.markup.html.list.ListView;
--import org.apache.wicket.model.IModel;
--
--public abstract class AltListView<T> extends ListView<T> {
--
--    private static final long serialVersionUID = 251378224847354710L;
--
--    public AltListView(final String id) {
--        super(id);
--    }
--
--    public AltListView(final String id, final IModel<? extends List<T>> 
model) {
--        super(id, model);
--    }
--
--    public AltListView(final String id, final List<T> list) {
--        super(id, list);
--    }
--
--    @Override
--    protected ListItem<T> newItem(final int index, final IModel<T> itemModel) 
{
--        return new ListItem<T>(index, itemModel) {
--
--            private static final long serialVersionUID = 5473483270932376694L;
--
--            @Override
--            protected void onComponentTag(final ComponentTag tag) {
--                if (index % 2 == 0) {
--                    tag.append("class", "alt", " ");
--                }
--
--                super.onComponentTag(tag);
--            }
--        };
--    }
--}

Reply via email to