You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/03/02 18:13:03 UTC

[2/2] syncope git commit: [SYNCOPE-156] All tables feature the reload button

[SYNCOPE-156] All tables feature the reload button


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

Branch: refs/heads/master
Commit: 89d0ce572d644ccb66a1e172531b22bc922181e2
Parents: 03b7439
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Mar 2 18:12:47 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Mar 2 18:12:47 2016 +0100

----------------------------------------------------------------------
 .../syncope/client/console/pages/Types.java     |   4 +-
 .../console/panels/AnyTypeClassesPanel.java     |  88 ++++---
 .../client/console/panels/AnyTypesPanel.java    |  88 ++++---
 .../console/panels/ConnectorDetailsPanel.java   |   9 +-
 .../panels/ParametersCreateWizardPanel.java     |  16 +-
 .../client/console/panels/ParametersPanel.java  | 109 +++-----
 .../console/panels/RelationshipTypePanel.java   | 233 -----------------
 .../console/panels/RelationshipTypesPanel.java  | 249 +++++++++++++++++++
 .../console/panels/ResourceDetailsPanel.java    |  17 +-
 .../client/console/panels/SchemaTypePanel.java  | 108 ++++----
 .../console/panels/SecurityQuestionsPanel.java  |  59 +++--
 .../console/resources/FilesystemResource.java   |   3 -
 .../client/console/tasks/SchedTasks.java        |   2 +-
 .../html/repeater/data/table/ActionColumn.java  |   5 +-
 .../markup/html/form/AbstractFieldPanel.java    |   7 -
 .../client/console/wizards/any/StatusPanel.java |  13 +-
 .../panels/RelationshipTypePanel.properties     |  18 --
 .../panels/RelationshipTypePanel_it.properties  |  18 --
 .../RelationshipTypePanel_pt_BR.properties      |  18 --
 .../panels/RelationshipTypesPanel.properties    |  18 ++
 .../panels/RelationshipTypesPanel_it.properties |  18 ++
 .../RelationshipTypesPanel_pt_BR.properties     |  18 ++
 .../rest/cxf/RestServiceExceptionMapper.java    |   3 +
 .../client/console/panels/CamelRoutesPanel.java |  51 ++--
 .../syncope/fit/console/ParametersITCase.java   |   4 +-
 25 files changed, 598 insertions(+), 578 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
index d815958..664315b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
@@ -23,7 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.apache.syncope.client.console.panels.AnyTypeClassesPanel;
 import org.apache.syncope.client.console.panels.AnyTypesPanel;
-import org.apache.syncope.client.console.panels.RelationshipTypePanel;
+import org.apache.syncope.client.console.panels.RelationshipTypesPanel;
 import org.apache.syncope.client.console.panels.SchemasPanel;
 import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
 import org.apache.wicket.extensions.markup.html.tabs.ITab;
@@ -62,7 +62,7 @@ public class Types extends BasePage {
 
             @Override
             public Panel getPanel(final String panelId) {
-                return new RelationshipTypePanel(panelId, getPageReference());
+                return new RelationshipTypesPanel(panelId, getPageReference());
             }
         });
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
index c563fca..1f88ea4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
@@ -32,6 +31,8 @@ import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.SearchableDataProvider;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -44,12 +45,9 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.event.Broadcast;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
@@ -126,6 +124,9 @@ public class AnyTypeClassesPanel extends AbstractTypesPanel<AnyTypeClassTO, AnyT
 
                     columns.add(new PropertyColumn<AnyTypeClassTO, String>(
                             new ResourceModel(field.getName()), field.getName()));
+                } else if (field.getType().equals(boolean.class) || field.getType().equals(Boolean.class)) {
+                    columns.add(new BooleanPropertyColumn<AnyTypeClassTO>(
+                            new ResourceModel(field.getName()), field.getName(), field.getName()));
                 } else {
                     columns.add(new PropertyColumn<AnyTypeClassTO, String>(
                             new ResourceModel(field.getName()), field.getName(), field.getName()) {
@@ -147,57 +148,68 @@ public class AnyTypeClassesPanel extends AbstractTypesPanel<AnyTypeClassTO, AnyT
             }
         }
 
-        columns.add(new AbstractColumn<AnyTypeClassTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AnyTypeClassTO, String>(new ResourceModel("actions", "")) {
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            private static final long serialVersionUID = 906457126287899096L;
 
             @Override
-            public String getCssClass() {
-                return "action";
-            }
+            public ActionLinksPanel<AnyTypeClassTO> getActions(
+                    final String componentId, final IModel<AnyTypeClassTO> model) {
 
-            @Override
-            public void populateItem(final Item<ICellPopulator<AnyTypeClassTO>> item, final String componentId,
-                    final IModel<AnyTypeClassTO> model) {
+                ActionLinksPanel<AnyTypeClassTO> panel = ActionLinksPanel.<AnyTypeClassTO>builder(pageRef).
+                        add(new ActionLink<AnyTypeClassTO>() {
 
-                final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(page.
-                        getPageReference());
-                actionLinks.setDisableIndicator(true);
-                actionLinks.addWithRoles(new ActionLink<Serializable>() {
+                            private static final long serialVersionUID = -3722207913631435501L;
 
-                    private static final long serialVersionUID = -3722207913631435501L;
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final AnyTypeClassTO ignore) {
+                                send(AnyTypeClassesPanel.this, Broadcast.EXACT,
+                                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+                            }
+                        }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPECLASS_UPDATE).
+                        add(new ActionLink<AnyTypeClassTO>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final AnyTypeClassTO ignore) {
+                                try {
+                                    SyncopeConsoleSession.get().
+                                            getService(AnyTypeClassService.class).delete(model.getObject().getKey());
+                                    info(getString(Constants.OPERATION_SUCCEEDED));
+                                    target.add(container);
+                                } catch (Exception e) {
+                                    LOG.error("While deleting {}", model.getObject(), e);
+                                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                }
+                                SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+                            }
+                        }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPECLASS_DELETE).
+                        build(componentId);
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        send(AnyTypeClassesPanel.this, Broadcast.EXACT,
-                                new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
-                    }
-                }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPECLASS_UPDATE).addWithRoles(
-                        new ActionLink<Serializable>() {
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel<AnyTypeClassTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<AnyTypeClassTO> panel =
+                        ActionLinksPanel.builder(page.getPageReference());
 
-                    private static final long serialVersionUID = -3722207913631435501L;
+                return panel.add(new ActionLink<AnyTypeClassTO>() {
+
+                    private static final long serialVersionUID = -1140254463922516111L;
 
                     @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        try {
-                            SyncopeConsoleSession.get().
-                                    getService(AnyTypeClassService.class).delete(model.getObject().getKey());
-                            info(getString(Constants.OPERATION_SUCCEEDED));
+                    public void onClick(final AjaxRequestTarget target, final AnyTypeClassTO ignore) {
+                        if (target != null) {
                             target.add(container);
-                        } catch (Exception e) {
-                            LOG.error("While deleting AnyTypeClassTO", e);
-                            error(getString(Constants.ERROR) + ": " + e.getMessage());
                         }
-                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
                     }
-                }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPECLASS_DELETE);
-
-                item.add(actionLinks.build(componentId));
+                }, ActionLink.ActionType.RELOAD).build(componentId);
             }
         });
 
         return columns;
-
     }
 
     protected final class AnyTypeClassProvider extends SearchableDataProvider<AnyTypeClassTO> {

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
index d7f5a95..4365610 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
@@ -33,6 +32,8 @@ import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.SearchableDataProvider;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.panels.AnyTypesPanel.AnyTypeProvider;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -45,12 +46,9 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.event.Broadcast;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
@@ -127,6 +125,9 @@ public class AnyTypesPanel extends AbstractTypesPanel<AnyTypeTO, AnyTypeProvider
 
                     columns.add(new PropertyColumn<AnyTypeTO, String>(
                             new ResourceModel(field.getName()), field.getName()));
+                } else if (field.getType().equals(boolean.class) || field.getType().equals(Boolean.class)) {
+                    columns.add(new BooleanPropertyColumn<AnyTypeTO>(
+                            new ResourceModel(field.getName()), field.getName(), field.getName()));
                 } else {
                     columns.add(new PropertyColumn<AnyTypeTO, String>(
                             new ResourceModel(field.getName()), field.getName(), field.getName()) {
@@ -148,57 +149,68 @@ public class AnyTypesPanel extends AbstractTypesPanel<AnyTypeTO, AnyTypeProvider
             }
         }
 
-        columns.add(new AbstractColumn<AnyTypeTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AnyTypeTO, String>(new ResourceModel("actions", "")) {
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            private static final long serialVersionUID = 906457126287899096L;
 
             @Override
-            public String getCssClass() {
-                return "action";
-            }
+            public ActionLinksPanel<AnyTypeTO> getActions(
+                    final String componentId, final IModel<AnyTypeTO> model) {
 
-            @Override
-            public void populateItem(final Item<ICellPopulator<AnyTypeTO>> item, final String componentId,
-                    final IModel<AnyTypeTO> model) {
+                ActionLinksPanel<AnyTypeTO> panel = ActionLinksPanel.<AnyTypeTO>builder(pageRef).
+                        add(new ActionLink<AnyTypeTO>() {
 
-                final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(page.
-                        getPageReference());
-                actionLinks.setDisableIndicator(true);
-                actionLinks.addWithRoles(new ActionLink<Serializable>() {
+                            private static final long serialVersionUID = -3722207913631435501L;
 
-                    private static final long serialVersionUID = -3722207913631435501L;
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final AnyTypeTO ignore) {
+                                send(AnyTypesPanel.this, Broadcast.EXACT,
+                                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+                            }
+                        }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPE_UPDATE).
+                        add(new ActionLink<AnyTypeTO>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final AnyTypeTO ignore) {
+                                try {
+                                    SyncopeConsoleSession.get().
+                                            getService(AnyTypeService.class).delete(model.getObject().getKey());
+                                    info(getString(Constants.OPERATION_SUCCEEDED));
+                                    target.add(container);
+                                } catch (Exception e) {
+                                    LOG.error("While deleting {}", model.getObject(), e);
+                                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                }
+                                SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+                            }
+                        }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPE_DELETE).
+                        build(componentId);
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        send(AnyTypesPanel.this, Broadcast.EXACT,
-                                new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
-                    }
-                }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPE_UPDATE).addWithRoles(
-                        new ActionLink<Serializable>() {
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel<AnyTypeTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<AnyTypeTO> panel =
+                        ActionLinksPanel.builder(page.getPageReference());
 
-                    private static final long serialVersionUID = -3722207913631435501L;
+                return panel.add(new ActionLink<AnyTypeTO>() {
+
+                    private static final long serialVersionUID = -1140254463922516111L;
 
                     @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        try {
-                            SyncopeConsoleSession.get().
-                                    getService(AnyTypeService.class).delete(model.getObject().getKey());
-                            info(getString(Constants.OPERATION_SUCCEEDED));
+                    public void onClick(final AjaxRequestTarget target, final AnyTypeTO ignore) {
+                        if (target != null) {
                             target.add(container);
-                        } catch (Exception e) {
-                            LOG.error("While deleting AnyTypeTO", e);
-                            error(getString(Constants.ERROR) + ": " + e.getMessage());
                         }
-                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
                     }
-                }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPE_DELETE);
-
-                item.add(actionLinks.build(componentId));
+                }, ActionLink.ActionType.RELOAD).build(componentId);
             }
         });
 
         return columns;
-
     }
 
     protected final class AnyTypeProvider extends SearchableDataProvider<AnyTypeTO> {

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
index 776a195..0eec9ce 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
@@ -37,20 +37,13 @@ import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.PropertyModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Modal window with Connector form.
  */
 public class ConnectorDetailsPanel extends Panel {
 
-    private static final long serialVersionUID = -2025535531121434050L;
-
-    /**
-     * Logger.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger(ConnectorDetailsPanel.class);
+    private static final long serialVersionUID = -2435937897614232137L;
 
     public ConnectorDetailsPanel(
             final String id, final IModel<ConnInstanceTO> model, final List<ConnBundleTO> bundles) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardPanel.java
index 3a8d9e9..060160e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardPanel.java
@@ -58,10 +58,18 @@ public class ParametersCreateWizardPanel extends AjaxWizardBuilder<ParametersCre
     protected Serializable onApplyInternal(final ParametersForm modelObject) {
         final PlainSchemaTO plainSchemaTO = modelObject.getPlainSchemaTO();
         plainSchemaTO.setKey(modelObject.getAttrTO().getSchema());
-        
-        SyncopeConsoleSession.get().getService(SchemaService.class).create(
-                SchemaType.PLAIN, plainSchemaTO);
-        SyncopeConsoleSession.get().getService(ConfigurationService.class).set(modelObject.getAttrTO());
+
+        SyncopeConsoleSession.get().getService(SchemaService.class).
+                create(SchemaType.PLAIN, plainSchemaTO);
+        try {
+            SyncopeConsoleSession.get().getService(ConfigurationService.class).set(modelObject.getAttrTO());
+        } catch (Exception e) {
+            LOG.error("While setting {}, removing {}", modelObject.getAttrTO(), plainSchemaTO, e);
+            SyncopeConsoleSession.get().getService(SchemaService.class).
+                    delete(SchemaType.PLAIN, plainSchemaTO.getKey());
+
+            throw e;
+        }
         return modelObject.getAttrTO();
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
index 5d8190e..a826ede 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
@@ -19,22 +19,18 @@
 package org.apache.syncope.client.console.panels;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.SearchableDataProvider;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.panels.ParametersPanel.ParametersProvider;
 import org.apache.syncope.client.console.rest.BaseRestClient;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -49,12 +45,9 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow.WindowClosedCallback;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
@@ -140,91 +133,71 @@ public class ParametersPanel extends AbstractSearchResultPanel<
     protected List<IColumn<AttrTO, String>> getColumns() {
         final List<IColumn<AttrTO, String>> columns = new ArrayList<>();
 
-        for (Field field : AttrTO.class.getDeclaredFields()) {
-            if (field != null && !Modifier.isStatic(field.getModifiers())) {
-                final String fieldName = field.getName();
-                if (field.getType().isArray()
-                        || Collection.class.isAssignableFrom(field.getType())
-                        || Map.class.isAssignableFrom(field.getType())) {
-
-                    columns.add(new PropertyColumn<AttrTO, String>(
-                            new ResourceModel(field.getName()), field.getName()));
-                } else {
-                    columns.add(new PropertyColumn<AttrTO, String>(
-                            new ResourceModel(field.getName()), field.getName(), field.getName()) {
-
-                        private static final long serialVersionUID = -6902459669035442212L;
-
-                        @Override
-                        public String getCssClass() {
-                            String css = super.getCssClass();
-                            if ("key".equals(fieldName)) {
-                                css = StringUtils.isBlank(css)
-                                        ? "col-xs-1"
-                                        : css + " col-xs-1";
-                            }
-                            return css;
-                        }
-                    });
-                }
-            }
-        }
+        columns.add(new PropertyColumn<AttrTO, String>(new ResourceModel("schema"), "schema", "schema"));
+        columns.add(new PropertyColumn<AttrTO, String>(new ResourceModel("values"), "values"));
 
-        columns.add(new AbstractColumn<AttrTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AttrTO, String>(new ResourceModel("actions", "")) {
 
-            private static final long serialVersionUID = -3503023501954863131L;
+            private static final long serialVersionUID = 906457126287899096L;
 
             @Override
-            public String getCssClass() {
-                return "action";
-            }
-
-            @Override
-            public void populateItem(
-                    final Item<ICellPopulator<AttrTO>> item,
-                    final String componentId,
-                    final IModel<AttrTO> model) {
-
-                final AttrTO attrTO = model.getObject();
+            public ActionLinksPanel<AttrTO> getActions(final String componentId, final IModel<AttrTO> model) {
+                ActionLinksPanel<AttrTO> panel = ActionLinksPanel.<AttrTO>builder(pageRef).
+                        add(new ActionLink<AttrTO>() {
 
-                ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(page.getPageReference());
-                actionLinks.setDisableIndicator(true);
-                actionLinks.
-                        addWithRoles(new ActionLink<Serializable>() {
-
-                            private static final long serialVersionUID = 3257738274365467945L;
+                            private static final long serialVersionUID = -3722207913631435501L;
 
                             @Override
-                            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                            public void onClick(final AjaxRequestTarget target, final AttrTO ignore) {
                                 target.add(modalDetails);
                                 modalDetails.addSumbitButton();
                                 modalDetails.header(new StringResourceModel("any.edit"));
-                                modalDetails.setContent(new ParametersEditModalPanel(modalDetails, attrTO, pageRef));
+                                modalDetails.setContent(
+                                        new ParametersEditModalPanel(modalDetails, model.getObject(), pageRef));
                                 modalDetails.show(true);
                             }
                         }, ActionLink.ActionType.EDIT, StandardEntitlement.CONFIGURATION_SET).
-                        addWithRoles(new ActionLink<Serializable>() {
+                        add(new ActionLink<AttrTO>() {
 
-                            private static final long serialVersionUID = 3257738274365467945L;
+                            private static final long serialVersionUID = -3722207913631435501L;
 
                             @Override
-                            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                            public void onClick(final AjaxRequestTarget target, final AttrTO ignore) {
                                 try {
-                                    SyncopeConsoleSession.get().getService(
-                                            ConfigurationService.class).delete(attrTO.getSchema());
-                                    SyncopeConsoleSession.get().getService(
-                                            SchemaService.class).delete(SchemaType.PLAIN, attrTO.getSchema());
+                                    SyncopeConsoleSession.get().getService(ConfigurationService.class).
+                                            delete(model.getObject().getSchema());
+                                    SyncopeConsoleSession.get().getService(SchemaService.class).
+                                            delete(SchemaType.PLAIN, model.getObject().getSchema());
                                     info(getString(Constants.OPERATION_SUCCEEDED));
                                     target.add(container);
                                 } catch (Exception e) {
-                                    LOG.error("While deleting AttrTO", e);
+                                    LOG.error("While deleting {}", model.getObject(), e);
                                     error(getString(Constants.ERROR) + ": " + e.getMessage());
                                 }
                                 SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
                             }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.CONFIGURATION_DELETE);
+                        }, ActionLink.ActionType.DELETE, StandardEntitlement.CONFIGURATION_DELETE).
+                        build(componentId);
+
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel<AttrTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<AttrTO> panel =
+                        ActionLinksPanel.builder(page.getPageReference());
+
+                return panel.add(new ActionLink<AttrTO>() {
 
-                item.add(actionLinks.build(componentId));
+                    private static final long serialVersionUID = -1140254463922516111L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final AttrTO ignore) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD).build(componentId);
             }
         });
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypePanel.java
deleted file mode 100644
index 5efbf47..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypePanel.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.panels;
-
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.SearchableDataProvider;
-import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
-import org.apache.syncope.client.console.panels.RelationshipTypePanel.RelationshipTypeProvider;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
-import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
-import org.apache.syncope.client.console.wizards.AjaxWizard;
-import org.apache.syncope.common.lib.to.RelationshipTypeTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.syncope.common.rest.api.service.RelationshipTypeService;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
-import org.apache.wicket.event.Broadcast;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.repeater.Item;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.ResourceModel;
-
-public class RelationshipTypePanel extends AbstractTypesPanel<RelationshipTypeTO, RelationshipTypeProvider> {
-
-    private static final long serialVersionUID = -3731778000138547357L;
-
-    public RelationshipTypePanel(final String id, final PageReference pageRef) {
-        super(id, pageRef);
-        disableCheckBoxes();
-
-        this.addNewItemPanelBuilder(new AbstractModalPanelBuilder<RelationshipTypeTO>(
-                BaseModal.CONTENT_ID, new RelationshipTypeTO(), pageRef) {
-
-            private static final long serialVersionUID = -6388405037134399367L;
-
-            @Override
-            public ModalPanel<RelationshipTypeTO> build(final int index, final boolean edit) {
-                final RelationshipTypeTO modelObject = newModelObject();
-                return new RelationshipTypeModalPanel(modal, modelObject, pageRef) {
-
-                    private static final long serialVersionUID = -6227956682141146094L;
-
-                    @Override
-                    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-                        try {
-                            if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
-                                SyncopeConsoleSession.get().
-                                        getService(RelationshipTypeService.class).create(modelObject);
-                            } else {
-                                SyncopeConsoleSession.get().
-                                        getService(RelationshipTypeService.class).update(modelObject);
-                            }
-                            info(getString(Constants.OPERATION_SUCCEEDED));
-                            modal.close(target);
-                        } catch (Exception e) {
-                            LOG.error("While creating or updating RelationshipTypeTO", e);
-                            error(getString(Constants.ERROR) + ": " + e.getMessage());
-                        }
-                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
-                    }
-                };
-            }
-        }, true);
-
-        initResultTable();
-        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.RELATIONSHIPTYPE_CREATE);
-    }
-
-    @Override
-    protected RelationshipTypeProvider dataProvider() {
-        return new RelationshipTypeProvider(rows);
-    }
-
-    @Override
-    protected String paginatorRowsKey() {
-        return Constants.PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS;
-    }
-
-    @Override
-    protected Collection<ActionLink.ActionType> getBulkActions() {
-        return Collections.<ActionLink.ActionType>emptyList();
-    }
-
-    @Override
-    protected List<IColumn<RelationshipTypeTO, String>> getColumns() {
-
-        final List<IColumn<RelationshipTypeTO, String>> columns = new ArrayList<>();
-
-        for (Field field : RelationshipTypeTO.class.getDeclaredFields()) {
-
-            if (field != null && !Modifier.isStatic(field.getModifiers())) {
-                final String fieldName = field.getName();
-
-                final IColumn<RelationshipTypeTO, String> column = new PropertyColumn<RelationshipTypeTO, String>(
-                        new ResourceModel(field.getName()), field.getName(), field.getName()) {
-
-                    private static final long serialVersionUID = 3282547854226892169L;
-
-                    @Override
-                    public String getCssClass() {
-                        String css = super.getCssClass();
-                        if ("key".equals(fieldName)) {
-                            css = StringUtils.isBlank(css)
-                                    ? "col-xs-1"
-                                    : css + " col-xs-1";
-                        }
-                        return css;
-                    }
-                };
-                columns.add(column);
-
-            }
-        }
-
-        columns.add(new AbstractColumn<RelationshipTypeTO, String>(new ResourceModel("actions", "")) {
-
-            private static final long serialVersionUID = 2054811145491901166L;
-
-            @Override
-            public String getCssClass() {
-                return "action";
-            }
-
-            @Override
-            public void populateItem(final Item<ICellPopulator<RelationshipTypeTO>> item, final String componentId,
-                    final IModel<RelationshipTypeTO> model) {
-
-                final RelationshipTypeTO relationshipTypeTO = model.getObject();
-
-                ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(page.getPageReference());
-                actionLinks.setDisableIndicator(true);
-                actionLinks.addWithRoles(new ActionLink<Serializable>() {
-
-                    private static final long serialVersionUID = -3722207913631435501L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        send(RelationshipTypePanel.this, Broadcast.EXACT,
-                                new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
-                    }
-                }, ActionLink.ActionType.EDIT, StandardEntitlement.RELATIONSHIPTYPE_UPDATE).addWithRoles(
-                        new ActionLink<Serializable>() {
-
-                    private static final long serialVersionUID = -3722207913631435501L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        try {
-                            SyncopeConsoleSession.get().getService(
-                                    RelationshipTypeService.class).delete(relationshipTypeTO.getKey());
-                            info(getString(Constants.OPERATION_SUCCEEDED));
-                            target.add(container);
-                        } catch (Exception e) {
-                            LOG.error("While deleting RelationshipType", e);
-                            error(getString(Constants.ERROR) + ": " + e.getMessage());
-                        }
-                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
-                    }
-                }, ActionLink.ActionType.DELETE, StandardEntitlement.RELATIONSHIPTYPE_DELETE);
-
-                item.add(actionLinks.build(componentId));
-            }
-        });
-
-        return columns;
-
-    }
-
-    protected final class RelationshipTypeProvider extends SearchableDataProvider<RelationshipTypeTO> {
-
-        private static final long serialVersionUID = -185944053385660794L;
-
-        private final SortableDataProviderComparator<RelationshipTypeTO> comparator;
-
-        private RelationshipTypeProvider(final int paginatorRows) {
-            super(paginatorRows);
-            comparator = new SortableDataProviderComparator<>(this);
-        }
-
-        @Override
-        public Iterator<RelationshipTypeTO> iterator(final long first, final long count) {
-            final List<RelationshipTypeTO> list = SyncopeConsoleSession.get().getService(RelationshipTypeService.class).
-                    list();
-            Collections.sort(list, comparator);
-            return list.subList((int) first, (int) first + (int) count).iterator();
-        }
-
-        @Override
-        public long size() {
-            return SyncopeConsoleSession.get().getService(RelationshipTypeService.class).list().size();
-        }
-
-        @Override
-        public IModel<RelationshipTypeTO> model(final RelationshipTypeTO object) {
-            return new CompoundPropertyModel<>(object);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
new file mode 100644
index 0000000..01b565e
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
@@ -0,0 +1,249 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.SearchableDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.panels.RelationshipTypesPanel.RelationshipTypeProvider;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.common.lib.to.RelationshipTypeTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.common.rest.api.service.RelationshipTypeService;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
+
+public class RelationshipTypesPanel extends AbstractTypesPanel<RelationshipTypeTO, RelationshipTypeProvider> {
+
+    private static final long serialVersionUID = -3731778000138547357L;
+
+    public RelationshipTypesPanel(final String id, final PageReference pageRef) {
+        super(id, pageRef);
+        disableCheckBoxes();
+
+        this.addNewItemPanelBuilder(new AbstractModalPanelBuilder<RelationshipTypeTO>(
+                BaseModal.CONTENT_ID, new RelationshipTypeTO(), pageRef) {
+
+            private static final long serialVersionUID = -6388405037134399367L;
+
+            @Override
+            public ModalPanel<RelationshipTypeTO> build(final int index, final boolean edit) {
+                final RelationshipTypeTO modelObject = newModelObject();
+                return new RelationshipTypeModalPanel(modal, modelObject, pageRef) {
+
+                    private static final long serialVersionUID = -6227956682141146094L;
+
+                    @Override
+                    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+                        try {
+                            if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
+                                SyncopeConsoleSession.get().
+                                        getService(RelationshipTypeService.class).create(modelObject);
+                            } else {
+                                SyncopeConsoleSession.get().
+                                        getService(RelationshipTypeService.class).update(modelObject);
+                            }
+                            info(getString(Constants.OPERATION_SUCCEEDED));
+                            modal.close(target);
+                        } catch (Exception e) {
+                            LOG.error("While creating or updating RelationshipTypeTO", e);
+                            error(getString(Constants.ERROR) + ": " + e.getMessage());
+                        }
+                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+                    }
+                };
+            }
+        }, true);
+
+        initResultTable();
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.RELATIONSHIPTYPE_CREATE);
+    }
+
+    @Override
+    protected RelationshipTypeProvider dataProvider() {
+        return new RelationshipTypeProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBulkActions() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    @Override
+    protected List<IColumn<RelationshipTypeTO, String>> getColumns() {
+
+        final List<IColumn<RelationshipTypeTO, String>> columns = new ArrayList<>();
+
+        for (Field field : RelationshipTypeTO.class.getDeclaredFields()) {
+            if (field != null && !Modifier.isStatic(field.getModifiers())) {
+                final String fieldName = field.getName();
+                if (field.getType().isArray()
+                        || Collection.class.isAssignableFrom(field.getType())
+                        || Map.class.isAssignableFrom(field.getType())) {
+
+                    columns.add(new PropertyColumn<RelationshipTypeTO, String>(
+                            new ResourceModel(field.getName()), field.getName()));
+                } else if (field.getType().equals(boolean.class) || field.getType().equals(Boolean.class)) {
+                    columns.add(new BooleanPropertyColumn<RelationshipTypeTO>(
+                            new ResourceModel(field.getName()), field.getName(), field.getName()));
+                } else {
+                    columns.add(new PropertyColumn<RelationshipTypeTO, String>(
+                            new ResourceModel(field.getName()), field.getName(), field.getName()) {
+
+                        private static final long serialVersionUID = -6902459669035442212L;
+
+                        @Override
+                        public String getCssClass() {
+                            String css = super.getCssClass();
+                            if ("key".equals(fieldName)) {
+                                css = StringUtils.isBlank(css)
+                                        ? "col-xs-1"
+                                        : css + " col-xs-1";
+                            }
+                            return css;
+                        }
+                    });
+                }
+            }
+        }
+
+        columns.add(new ActionColumn<RelationshipTypeTO, String>(new ResourceModel("actions", "")) {
+
+            private static final long serialVersionUID = 906457126287899096L;
+
+            @Override
+            public ActionLinksPanel<RelationshipTypeTO> getActions(
+                    final String componentId, final IModel<RelationshipTypeTO> model) {
+
+                ActionLinksPanel<RelationshipTypeTO> panel = ActionLinksPanel.<RelationshipTypeTO>builder(pageRef).
+                        add(new ActionLink<RelationshipTypeTO>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final RelationshipTypeTO ignore) {
+                                send(RelationshipTypesPanel.this, Broadcast.EXACT,
+                                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+                            }
+                        }, ActionLink.ActionType.EDIT, StandardEntitlement.RELATIONSHIPTYPE_UPDATE).
+                        add(new ActionLink<RelationshipTypeTO>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final RelationshipTypeTO ignore) {
+                                try {
+                                    SyncopeConsoleSession.get().getService(
+                                            RelationshipTypeService.class).delete(model.getObject().getKey());
+                                    info(getString(Constants.OPERATION_SUCCEEDED));
+                                    target.add(container);
+                                } catch (Exception e) {
+                                    LOG.error("While deleting {}", model.getObject(), e);
+                                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                }
+                                SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+                            }
+                        }, ActionLink.ActionType.DELETE, StandardEntitlement.RELATIONSHIPTYPE_DELETE).
+                        build(componentId);
+
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel<RelationshipTypeTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<RelationshipTypeTO> panel =
+                        ActionLinksPanel.builder(page.getPageReference());
+
+                return panel.add(new ActionLink<RelationshipTypeTO>() {
+
+                    private static final long serialVersionUID = -1140254463922516111L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final RelationshipTypeTO ignore) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD).build(componentId);
+            }
+        });
+
+        return columns;
+    }
+
+    protected final class RelationshipTypeProvider extends SearchableDataProvider<RelationshipTypeTO> {
+
+        private static final long serialVersionUID = -185944053385660794L;
+
+        private final SortableDataProviderComparator<RelationshipTypeTO> comparator;
+
+        private RelationshipTypeProvider(final int paginatorRows) {
+            super(paginatorRows);
+            comparator = new SortableDataProviderComparator<>(this);
+        }
+
+        @Override
+        public Iterator<RelationshipTypeTO> iterator(final long first, final long count) {
+            final List<RelationshipTypeTO> list = SyncopeConsoleSession.get().getService(RelationshipTypeService.class).
+                    list();
+            Collections.sort(list, comparator);
+            return list.subList((int) first, (int) first + (int) count).iterator();
+        }
+
+        @Override
+        public long size() {
+            return SyncopeConsoleSession.get().getService(RelationshipTypeService.class).list().size();
+        }
+
+        @Override
+        public IModel<RelationshipTypeTO> model(final RelationshipTypeTO object) {
+            return new CompoundPropertyModel<>(object);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
index 8ccef7f..f611442 100644
--- 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
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import org.apache.syncope.client.console.wizards.any.AnnotatedBeanPanel;
 import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
@@ -26,6 +25,7 @@ import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownCho
 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.client.console.wizards.any.AnnotatedBeanPanel;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.TraceLevel;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -34,18 +34,11 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class ResourceDetailsPanel extends Panel {
 
     private static final long serialVersionUID = -7982691107029848579L;
 
-    /**
-     * Logger.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger(ResourceDetailsPanel.class);
-
     public ResourceDetailsPanel(
             final String id,
             final IModel<ResourceTO> model,
@@ -86,10 +79,10 @@ public class ResourceDetailsPanel extends Panel {
 
         container.add(new MultiFieldPanel.Builder<>(
                 new PropertyModel<List<String>>(model, "propagationActionsClassNames")).build(
-                        "actionsClasses",
-                        "actionsClasses",
-                        new AjaxDropDownChoicePanel<>("panel", "panel", new Model<String>())
-                        .setChoices(actionClassNames).setNullValid(true).setRequired(true)));
+                "actionsClasses",
+                "actionsClasses",
+                new AjaxDropDownChoicePanel<>("panel", "panel", new Model<String>())
+                .setChoices(actionClassNames).setNullValid(true).setRequired(true)));
 
         container.add(new AjaxDropDownChoicePanel<>(
                 "createTraceLevel",

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index fe965c0..1370bbe 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -37,6 +36,7 @@ import org.apache.syncope.client.console.commons.SearchableDataProvider;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.panels.SchemaTypePanel.SchemaProvider;
 import org.apache.syncope.client.console.rest.SchemaRestClient;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -53,13 +53,10 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.event.Broadcast;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
@@ -182,67 +179,76 @@ public class SchemaTypePanel extends AbstractTypesPanel<AbstractSchemaTO, Schema
             }
         }
 
-        columns.add(new AbstractColumn<AbstractSchemaTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AbstractSchemaTO, String>(new ResourceModel("actions", "")) {
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            private static final long serialVersionUID = 906457126287899096L;
 
             @Override
-            public String getCssClass() {
-                return "action";
-            }
+            public ActionLinksPanel<AbstractSchemaTO> getActions(
+                    final String componentId, final IModel<AbstractSchemaTO> model) {
 
-            @Override
-            public void populateItem(final Item<ICellPopulator<AbstractSchemaTO>> item, final String componentId,
-                    final IModel<AbstractSchemaTO> model) {
+                ActionLinksPanel<AbstractSchemaTO> panel = ActionLinksPanel.<AbstractSchemaTO>builder(pageRef).
+                        add(new ActionLink<AbstractSchemaTO>() {
 
-                final AbstractSchemaTO schemaTO = model.getObject();
+                            private static final long serialVersionUID = -3722207913631435501L;
 
-                final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(page.
-                        getPageReference());
-                actionLinks.setDisableIndicator(true);
-                actionLinks.setDisableIndicator(true);
-                actionLinks.addWithRoles(new ActionLink<Serializable>() {
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final AbstractSchemaTO ignore) {
+                                send(SchemaTypePanel.this, Broadcast.EXACT,
+                                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+                            }
+                        }, ActionLink.ActionType.EDIT, StandardEntitlement.SCHEMA_UPDATE).
+                        add(new ActionLink<AbstractSchemaTO>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final AbstractSchemaTO ignore) {
+                                try {
+                                    switch (schemaType) {
+                                        case DERIVED:
+                                            schemaRestClient.deleteDerSchema(model.getObject().getKey());
+                                            break;
+
+                                        case VIRTUAL:
+                                            schemaRestClient.deleteVirSchema(model.getObject().getKey());
+                                            break;
+
+                                        default:
+                                            schemaRestClient.deletePlainSchema(model.getObject().getKey());
+                                            break;
+                                    }
+
+                                    info(getString(Constants.OPERATION_SUCCEEDED));
+                                    target.add(container);
+                                } catch (Exception e) {
+                                    LOG.error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                }
+                                SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+                            }
+                        }, ActionLink.ActionType.DELETE, StandardEntitlement.SCHEMA_DELETE).
+                        build(componentId);
 
-                    private static final long serialVersionUID = -3722207913631435501L;
+                return panel;
+            }
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        send(SchemaTypePanel.this, Broadcast.EXACT,
-                                new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
-                    }
-                }, ActionLink.ActionType.EDIT, StandardEntitlement.SCHEMA_UPDATE).addWithRoles(
-                        new ActionLink<Serializable>() {
+            @Override
+            public ActionLinksPanel<AbstractSchemaTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<AbstractSchemaTO> panel =
+                        ActionLinksPanel.builder(page.getPageReference());
 
-                    private static final long serialVersionUID = -3722207913631435501L;
+                return panel.add(new ActionLink<AbstractSchemaTO>() {
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        try {
-                            switch (schemaType) {
-                                case DERIVED:
-                                    schemaRestClient.deleteDerSchema(schemaTO.getKey());
-                                    break;
-
-                                case VIRTUAL:
-                                    schemaRestClient.deleteVirSchema(schemaTO.getKey());
-                                    break;
-
-                                default:
-                                    schemaRestClient.deletePlainSchema(schemaTO.getKey());
-                                    break;
-                            }
+                    private static final long serialVersionUID = -1140254463922516111L;
 
-                            info(getString(Constants.OPERATION_SUCCEEDED));
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final AbstractSchemaTO ignore) {
+                        if (target != null) {
                             target.add(container);
-                        } catch (Exception e) {
-                            LOG.error(getString(Constants.ERROR) + ": " + e.getMessage());
-                            error(getString(Constants.ERROR) + ": " + e.getMessage());
                         }
-                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
                     }
-                }, ActionLink.ActionType.DELETE, StandardEntitlement.SCHEMA_DELETE);
-
-                item.add(actionLinks.build(componentId));
+                }, ActionLink.ActionType.RELOAD).build(componentId);
             }
         });
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index c7d2fcc..487ff94 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.panels;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
@@ -35,6 +34,7 @@ import org.apache.syncope.client.console.commons.SearchableDataProvider;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.panels.SecurityQuestionsPanel.SecurityQuestionsProvider;
 import org.apache.syncope.client.console.rest.SecurityQuestionRestClient;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -48,11 +48,8 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.event.Broadcast;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
@@ -149,58 +146,68 @@ public class SecurityQuestionsPanel extends AbstractSearchResultPanel<
             }
         }
 
-        columns.add(new AbstractColumn<SecurityQuestionTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<SecurityQuestionTO, String>(new ResourceModel("actions", "")) {
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            private static final long serialVersionUID = -8089193528195091515L;
 
             @Override
-            public String getCssClass() {
-                return "action";
-            }
-
-            @Override
-            public void populateItem(final Item<ICellPopulator<SecurityQuestionTO>> item, final String componentId,
-                    final IModel<SecurityQuestionTO> model) {
+            public ActionLinksPanel<SecurityQuestionTO> getActions(
+                    final String componentId, final IModel<SecurityQuestionTO> model) {
 
-                final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(page.
-                        getPageReference());
-                actionLinks.setDisableIndicator(true);
-                actionLinks
-                        .addWithRoles(new ActionLink<Serializable>() {
+                ActionLinksPanel<SecurityQuestionTO> panel = ActionLinksPanel.<SecurityQuestionTO>builder(pageRef).
+                        add(new ActionLink<SecurityQuestionTO>() {
 
                             private static final long serialVersionUID = -3722207913631435501L;
 
                             @Override
-                            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                            public void onClick(final AjaxRequestTarget target, final SecurityQuestionTO ignore) {
                                 send(SecurityQuestionsPanel.this, Broadcast.EXACT,
                                         new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
                             }
-                        }, ActionLink.ActionType.EDIT, StandardEntitlement.SECURITY_QUESTION_UPDATE)
-                        .addWithRoles(new ActionLink<Serializable>() {
+                        }, ActionLink.ActionType.EDIT, StandardEntitlement.SECURITY_QUESTION_UPDATE).
+                        add(new ActionLink<SecurityQuestionTO>() {
 
                             private static final long serialVersionUID = -3722207913631435501L;
 
                             @Override
-                            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                            public void onClick(final AjaxRequestTarget target, final SecurityQuestionTO ignore) {
                                 try {
                                     SyncopeConsoleSession.get().getService(
                                             SecurityQuestionService.class).delete(model.getObject().getKey());
                                     info(getString(Constants.OPERATION_SUCCEEDED));
                                     target.add(container);
                                 } catch (Exception e) {
-                                    LOG.error("While deleting SecutiryQuestionTO", e);
+                                    LOG.error("While deleting {}", model.getObject(), e);
                                     error(getString(Constants.ERROR) + ": " + e.getMessage());
                                 }
                                 SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
                             }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.SECURITY_QUESTION_DELETE);
+                        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE).
+                        build(componentId);
 
-                item.add(actionLinks.build(componentId));
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel<SecurityQuestionTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<SecurityQuestionTO> panel =
+                        ActionLinksPanel.builder(page.getPageReference());
+
+                return panel.add(new ActionLink<SecurityQuestionTO>() {
+
+                    private static final long serialVersionUID = -1140254463922516111L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final SecurityQuestionTO ignore) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD).build(componentId);
             }
         });
 
         return columns;
-
     }
 
     protected final class SecurityQuestionsProvider extends SearchableDataProvider<SecurityQuestionTO> {

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/resources/FilesystemResource.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/resources/FilesystemResource.java b/client/console/src/main/java/org/apache/syncope/client/console/resources/FilesystemResource.java
index 8a95de6..e976b16 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/resources/FilesystemResource.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/resources/FilesystemResource.java
@@ -33,9 +33,6 @@ public class FilesystemResource extends AbstractResource {
 
     private static final long serialVersionUID = -4791087117785935198L;
 
-    /**
-     * Logger.
-     */
     private static final Logger LOG = LoggerFactory.getLogger(FilesystemResource.class);
 
     private final String baseCtx;

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
index 4ec3f03..67d4d7b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
@@ -45,7 +45,7 @@ public class SchedTasks extends AbstractTasks {
             protected void viewTask(final SchedTaskTO taskTO, final AjaxRequestTarget target) {
                 mlp.next(
                         new StringResourceModel("task.view", this, new Model<>(taskTO)).getObject(),
-                        new TaskExecutionDetails<SchedTaskTO>(taskTO, pageReference), target);
+                        new TaskExecutionDetails<>(taskTO, pageReference), target);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
index b9dfa62..3118157 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
@@ -31,9 +31,6 @@ public abstract class ActionColumn<T, S> extends AbstractColumn<T, S> {
 
     private static final long serialVersionUID = 7955560320949560725L;
 
-    /**
-     * Logger.
-     */
     protected static final Logger LOG = LoggerFactory.getLogger(ActionColumn.class);
 
     public ActionColumn(final IModel<String> displayModel) {
@@ -55,5 +52,5 @@ public abstract class ActionColumn<T, S> extends AbstractColumn<T, S> {
         item.add(getActions(componentId, rowModel));
     }
 
-    public abstract ActionLinksPanel getActions(final String componentId, final IModel<T> rowModel);
+    public abstract ActionLinksPanel<?> getActions(final String componentId, final IModel<T> rowModel);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java
----------------------------------------------------------------------
diff --git 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
index 1f58760..ba2263b 100644
--- 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
@@ -31,19 +31,12 @@ import org.slf4j.LoggerFactory;
 
 public abstract class AbstractFieldPanel<T> extends Panel {
 
-    /**
-     * Logger.
-     */
     protected static final Logger LOG = LoggerFactory.getLogger(AbstractFieldPanel.class);
 
     private static final long serialVersionUID = 5958017546318855690L;
 
     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;

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
index 9322b31..bfb194b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
@@ -52,10 +52,7 @@ public class StatusPanel extends Panel {
 
     private static final long serialVersionUID = -4013796607157549641L;
 
-    /**
-     * Logger.
-     */
-    protected static final Logger LOG = LoggerFactory.getLogger(StatusPanel.class);
+    private static final Logger LOG = LoggerFactory.getLogger(StatusPanel.class);
 
     private final UserRestClient userRestClient = new UserRestClient();
 
@@ -170,8 +167,8 @@ public class StatusPanel extends Panel {
 
             @Override
             protected boolean statusCondition(final StatusBean bean) {
-                final Pair<ConnObjectTO, ConnObjectTO> pair
-                        = getConnObjectTO(bean.getAnyKey(), bean.getResourceName(), connObjects);
+                final Pair<ConnObjectTO, ConnObjectTO> pair =
+                        getConnObjectTO(bean.getAnyKey(), bean.getResourceName(), connObjects);
 
                 return pair != null && pair.getRight() != null;
             }
@@ -213,8 +210,8 @@ public class StatusPanel extends Panel {
         private static final long serialVersionUID = 4303365227411467563L;
 
         public RemoteObjectPanel(final StatusBean bean, final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects) {
-            final Pair<ConnObjectTO, ConnObjectTO> res
-                    = getConnObjectTO(bean.getAnyKey(), bean.getResourceName(), connObjects);
+            final Pair<ConnObjectTO, ConnObjectTO> res =
+                    getConnObjectTO(bean.getAnyKey(), bean.getResourceName(), connObjects);
             add(new ConnObjectPanel("remoteObject", res == null ? null : res));
         }
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel.properties
deleted file mode 100644
index 66ad3af..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-any.edit=Edit RelationshipType ${key}
-any.new=New RelationshipType

http://git-wip-us.apache.org/repos/asf/syncope/blob/89d0ce57/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel_it.properties
deleted file mode 100644
index 2882c37..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RelationshipTypePanel_it.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-any.edit=Modifica RelationshipType ${key}
-any.new=Nuovo RelationshipType