You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2017/05/05 22:22:53 UTC

[07/10] syncope git commit: [SYNCOPE-1047] Replaces ActionLinksPanel with TogglePanel

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
index 5919dee..27712ce 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
@@ -21,15 +21,12 @@ package org.apache.syncope.client.console.panels.search;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
-import org.apache.syncope.client.console.panels.AnyObjectDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.panels.AnyDirectoryPanel;
 import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
-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.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
@@ -37,7 +34,7 @@ import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.TokenColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -104,71 +101,25 @@ public abstract class AnySelectionDirectoryPanel<A extends AnyTO, E extends Abst
             }
         }
 
-        // Add defaults in case of no selection
-        if (columns.isEmpty()) {
-            for (String name : getDisplayAttributes()) {
-                columns.add(new PropertyColumn<A, String>(new ResourceModel(name, name), name, name));
-            }
-
-            prefMan.setList(getRequest(), getResponse(), getPrefDetailsView(), Arrays.asList(getDisplayAttributes()));
-        }
-
-        columns.add(new ActionColumn<A, String>(new ResourceModel("actions")) {
-
-            private static final long serialVersionUID = -3503023501954863131L;
-
-            @Override
-            public ActionLinksPanel<A> getActions(final String componentId, final IModel<A> model) {
-                final ActionLinksPanel.Builder<A> panel = ActionLinksPanel.builder();
+        return columns;
+    }
 
-                panel.add(new ActionLink<A>() {
+    @Override
+    public ActionsPanel<A> getActions(final IModel<A> model) {
+        final ActionsPanel<A> panel = super.getActions(model);
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+        panel.add(new ActionLink<A>() {
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final A ignore) {
-                        send(AnySelectionDirectoryPanel.this,
-                                Broadcast.BUBBLE, new ItemSelection<>(target, model.getObject()));
-                    }
-                }, ActionType.SELECT, AnyEntitlement.READ.getFor(type));
-
-                return panel.build(componentId, model.getObject());
-            }
+            private static final long serialVersionUID = -7978723352517770644L;
 
             @Override
-            public ActionLinksPanel<A> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<A> panel = ActionLinksPanel.builder();
-
-                return panel.add(new ActionLink<A>() {
-
-                    private static final long serialVersionUID = -7978723352517770644L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final A ignore) {
-                        // still missing content
-                        target.add(altDefaultModal.setContent(new AnyObjectDisplayAttributesModalPanel<>(
-                                altDefaultModal, page.getPageReference(), pSchemaNames, dSchemaNames, type)));
-
-                        altDefaultModal.addSubmitButton();
-                        altDefaultModal.header(new ResourceModel("any.attr.display"));
-                        altDefaultModal.show(true);
-                    }
-                }, ActionType.CHANGE_VIEW, AnyEntitlement.READ.getFor(type)).add(new ActionLink<A>() {
-
-                    private static final long serialVersionUID = -7978723352517770644L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final A ignore) {
-                        if (target != null) {
-                            target.add(container);
-                        }
-                    }
-                }, ActionType.RELOAD, AnyEntitlement.SEARCH.getFor(type)).
-                        build(componentId);
+            public void onClick(final AjaxRequestTarget target, final A ignore) {
+                send(AnySelectionDirectoryPanel.this,
+                        Broadcast.BUBBLE, new ItemSelection<>(target, model.getObject()));
             }
-        });
+        }, ActionType.SELECT, AnyEntitlement.READ.getFor(type));
 
-        return columns;
+        return panel;
     }
 
     @Override
@@ -176,8 +127,6 @@ public abstract class AnySelectionDirectoryPanel<A extends AnyTO, E extends Abst
         return Collections.<ActionType>emptyList();
     }
 
-    protected abstract String[] getDisplayAttributes();
-
     protected abstract String getPrefDetailsView();
 
     protected abstract String getPrefPlainAttributesView();

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java
index 65c7bd6..4642414 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.panels.GroupDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyWrapper;
@@ -42,11 +41,6 @@ public final class GroupSelectionDirectoryPanel extends AnySelectionDirectoryPan
     }
 
     @Override
-    protected String[] getDisplayAttributes() {
-        return GroupDisplayAttributesModalPanel.DEFAULT_SELECTION;
-    }
-
-    @Override
     public String getPrefDetailsView() {
         return Constants.PREF_GROUP_DETAILS_VIEW;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java
index c3c8825..a27c2f6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.panels.UserDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.UserRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyWrapper;
@@ -42,11 +41,6 @@ public final class UserSelectionDirectoryPanel extends AnySelectionDirectoryPane
     }
 
     @Override
-    protected String[] getDisplayAttributes() {
-        return UserDisplayAttributesModalPanel.DEFAULT_SELECTION;
-    }
-
-    @Override
     protected String getPrefDetailsView() {
         return Constants.PREF_USERS_DETAILS_VIEW;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/policies/AccountPolicyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/AccountPolicyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/AccountPolicyDirectoryPanel.java
index 9e7d7a0..5b0f2f1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/AccountPolicyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/AccountPolicyDirectoryPanel.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.CollectionPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.common.lib.policy.AccountPolicyTO;
 import org.apache.syncope.common.lib.types.PolicyType;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -54,7 +54,7 @@ public class AccountPolicyDirectoryPanel extends PolicyDirectoryPanel<AccountPol
     @Override
     protected void addCustomColumnFields(final List<IColumn<AccountPolicyTO, String>> columns) {
         columns.add(new CollectionPropertyColumn<AccountPolicyTO>(new StringResourceModel(
-                "passthroughResources", this), "passthroughResources", "passthroughResources"));
+                "passthroughResources", this), "passthroughResources"));
 
         columns.add(new PropertyColumn<AccountPolicyTO, String>(new StringResourceModel(
                 "maxAuthenticationAttempts", this), "maxAuthenticationAttempts", "maxAuthenticationAttempts"));
@@ -64,8 +64,7 @@ public class AccountPolicyDirectoryPanel extends PolicyDirectoryPanel<AccountPol
     }
 
     @Override
-    protected void addCustomActions(
-            final ActionLinksPanel.Builder<AccountPolicyTO> panel, final IModel<AccountPolicyTO> model) {
+    protected void addCustomActions(final ActionsPanel<AccountPolicyTO> panel, final IModel<AccountPolicyTO> model) {
         panel.add(new ActionLink<AccountPolicyTO>() {
 
             private static final long serialVersionUID = -3722207913631435501L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/policies/PasswordPolicyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PasswordPolicyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PasswordPolicyDirectoryPanel.java
index bc16a74..59fe831 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PasswordPolicyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PasswordPolicyDirectoryPanel.java
@@ -21,7 +21,7 @@ package org.apache.syncope.client.console.policies;
 import java.util.List;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.common.lib.policy.PasswordPolicyTO;
 import org.apache.syncope.common.lib.types.PolicyType;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -61,8 +61,7 @@ public class PasswordPolicyDirectoryPanel extends PolicyDirectoryPanel<PasswordP
     }
 
     @Override
-    protected void addCustomActions(
-            final ActionLinksPanel.Builder<PasswordPolicyTO> panel, final IModel<PasswordPolicyTO> model) {
+    protected void addCustomActions(final ActionsPanel<PasswordPolicyTO> panel, final IModel<PasswordPolicyTO> model) {
         panel.add(new ActionLink<PasswordPolicyTO>() {
 
             private static final long serialVersionUID = -3722207913631435501L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
index 21e63cd..166b9e2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
@@ -33,18 +33,16 @@ import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.rest.PolicyRestClient;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.CollectionPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 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.ActionLink.ActionType;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.policy.AbstractPolicyTO;
-import org.apache.syncope.common.lib.to.ReportTO;
 import org.apache.syncope.common.lib.types.PolicyType;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -55,7 +53,6 @@ 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.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
 /**
@@ -112,6 +109,8 @@ public abstract class PolicyDirectoryPanel<T extends AbstractPolicyTO>
         setFooterVisibility(true);
         modal.addSubmitButton();
         modal.size(Modal.Size.Large);
+        
+        disableCheckBoxes();
     }
 
     @Override
@@ -119,107 +118,82 @@ public abstract class PolicyDirectoryPanel<T extends AbstractPolicyTO>
         final List<IColumn<T, String>> columns = new ArrayList<>();
 
         columns.add(new KeyPropertyColumn<T>(
-                new StringResourceModel("key", this), "key", "key"));
-
-        columns.add(new PropertyColumn<T, String>(new StringResourceModel(
-                "description", this), "description", "description"));
-
+                new StringResourceModel("key", this), "key"));
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("description", this), "description", "description"));
         columns.add(new CollectionPropertyColumn<T>(
-                new StringResourceModel("usedByResources", this), "usedByResources", "usedByResources"));
-
+                new StringResourceModel("usedByResources", this), "usedByResources"));
         columns.add(new CollectionPropertyColumn<T>(
-                new StringResourceModel("usedByRealms", this), "usedByRealms", "usedByRealms"));
+                new StringResourceModel("usedByRealms", this), "usedByRealms"));
 
         addCustomColumnFields(columns);
 
-        columns.add(new ActionColumn<T, String>(new ResourceModel("actions")) {
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<T> getActions(final IModel<T> model) {
+        final ActionsPanel<T> panel = super.getActions(model);
+
+        panel.add(new ActionLink<T>() {
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<T> getActions(final String componentId, final IModel<T> model) {
-
-                final ActionLinksPanel.Builder<T> panel = ActionLinksPanel.<T>builder().
-                        add(new ActionLink<T>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final AbstractPolicyTO ignore) {
-                                final AbstractPolicyTO clone = SerializationUtils.clone(model.getObject());
-                                clone.setKey(null);
-                                send(PolicyDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(clone, target));
-                            }
-                        }, ActionLink.ActionType.CLONE, StandardEntitlement.POLICY_CREATE).
-                        add(new ActionLink<T>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final AbstractPolicyTO ignore) {
-                                send(PolicyDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(
-                                                restClient.getPolicy(model.getObject().getKey()), target));
-                            }
-                        }, ActionLink.ActionType.EDIT, StandardEntitlement.POLICY_UPDATE).
-                        add(new ActionLink<T>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final AbstractPolicyTO ignore) {
-                                final T policyTO = model.getObject();
-                                try {
-                                    restClient.delete(policyTO.getKey());
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    target.add(container);
-                                } catch (SyncopeClientException e) {
-                                    LOG.error("While deleting {}", policyTO.getKey(), e);
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.POLICY_DELETE);
-
-                addCustomActions(panel, model);
-                return panel.build(componentId);
+            public void onClick(final AjaxRequestTarget target, final AbstractPolicyTO ignore) {
+                send(PolicyDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(
+                                restClient.getPolicy(model.getObject().getKey()), target));
             }
+        }, ActionLink.ActionType.EDIT, StandardEntitlement.POLICY_UPDATE);
+
+        panel.add(new ActionLink<T>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<ReportTO> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<ReportTO> panel = ActionLinksPanel.builder();
+            public void onClick(final AjaxRequestTarget target, final AbstractPolicyTO ignore) {
+                final AbstractPolicyTO clone = SerializationUtils.clone(model.getObject());
+                clone.setKey(null);
+                send(PolicyDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(clone, target));
+            }
+        }, ActionLink.ActionType.CLONE, StandardEntitlement.POLICY_CREATE);
+
+        addCustomActions(panel, model);
 
-                return panel.add(new ActionLink<ReportTO>() {
+        panel.add(new ActionLink<T>() {
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                        if (target != null) {
-                            target.add(container);
-                        }
-                    }
-                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+            @Override
+            public void onClick(final AjaxRequestTarget target, final AbstractPolicyTO ignore) {
+                final T policyTO = model.getObject();
+                try {
+                    restClient.delete(policyTO.getKey());
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting {}", policyTO.getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
-        });
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.POLICY_DELETE, true);
 
-        return columns;
+        return panel;
     }
 
     protected void addCustomColumnFields(final List<IColumn<T, String>> columns) {
     }
 
-    protected void addCustomActions(final ActionLinksPanel.Builder<T> panel, final IModel<T> model) {
+    protected void addCustomActions(final ActionsPanel<T> panel, final IModel<T> model) {
     }
 
     @Override
     protected Collection<ActionType> getBulkActions() {
-        final List<ActionType> bulkActions = new ArrayList<>();
-        bulkActions.add(ActionType.EXECUTE);
-        bulkActions.add(ActionType.DELETE);
-        return bulkActions;
+        return Collections.<ActionType>emptyList();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
index cb5969a..fd3c72e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
@@ -38,11 +38,10 @@ import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.policies.PolicyRuleDirectoryPanel.PolicyRuleWrapper;
 import org.apache.syncope.client.console.rest.PolicyRestClient;
-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.ActionLink.ActionType;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -64,7 +63,6 @@ import org.apache.wicket.markup.html.basic.Label;
 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;
 import org.apache.wicket.model.StringResourceModel;
 
 /**
@@ -120,90 +118,86 @@ public class PolicyRuleDirectoryPanel<T extends AbstractPolicyTO> extends Direct
                 cellItem.add(new Label(componentId, rowModel.getObject().getConf().getClass().getName()));
             }
         });
+        return columns;
+    }
 
-        columns.add(new ActionColumn<PolicyRuleWrapper, String>(new ResourceModel("actions")) {
+    @Override
+    public ActionsPanel<PolicyRuleWrapper> getActions(final IModel<PolicyRuleWrapper> model) {
+        final ActionsPanel<PolicyRuleWrapper> panel = super.getActions(model);
 
-            private static final long serialVersionUID = 2054811145491901166L;
+        panel.add(new ActionLink<PolicyRuleWrapper>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<PolicyRuleWrapper> getActions(final String componentId,
-                    final IModel<PolicyRuleWrapper> model) {
-
-                final ActionLinksPanel<PolicyRuleWrapper> panel = ActionLinksPanel.<PolicyRuleWrapper>builder().
-                        add(new ActionLink<PolicyRuleWrapper>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
-                                RuleConf clone = SerializationUtils.clone(model.getObject().getConf());
-
-                                send(PolicyRuleDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(
-                                                new PolicyRuleWrapper().setConf(clone),
-                                                target));
-                            }
-                        }, ActionLink.ActionType.CLONE, StandardEntitlement.POLICY_UPDATE).
-                        add(new ActionLink<PolicyRuleWrapper>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
-                                send(PolicyRuleDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
-                            }
-                        }, ActionLink.ActionType.EDIT, StandardEntitlement.POLICY_UPDATE).
-                        add(new ActionLink<PolicyRuleWrapper>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
-                                final RuleConf rule = model.getObject().getConf();
-                                try {
-                                    final T actual = restClient.getPolicy(policy);
-                                    CollectionUtils.filter(getRuleConf(actual), new Predicate<RuleConf>() {
-
-                                        @Override
-                                        public boolean evaluate(final RuleConf object) {
-                                            return !object.getName().equals(rule.getName());
-                                        }
-                                    });
-                                    restClient.updatePolicy(actual);
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    customActionOnFinishCallback(target);
-                                } catch (SyncopeClientException e) {
-                                    LOG.error("While deleting {}", rule.getName(), e);
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.POLICY_UPDATE).build(componentId);
-
-                return panel;
+            public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
+                RuleConf clone = SerializationUtils.clone(model.getObject().getConf());
+
+                PolicyRuleDirectoryPanel.this.getTogglePanel().close(target);
+                send(PolicyRuleDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(
+                                new PolicyRuleWrapper().setConf(clone),
+                                target));
             }
+        }, ActionLink.ActionType.CLONE, StandardEntitlement.POLICY_CREATE);
+        panel.add(new ActionLink<PolicyRuleWrapper>() {
 
-            @Override
-            public ActionLinksPanel<PolicyRuleWrapper> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<PolicyRuleWrapper> panel = ActionLinksPanel.builder();
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                return panel.add(new ActionLink<PolicyRuleWrapper>() {
+            @Override
+            public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
+                PolicyRuleDirectoryPanel.this.getTogglePanel().close(target);
+                send(PolicyRuleDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+            }
+        }, ActionLink.ActionType.EDIT, StandardEntitlement.POLICY_UPDATE);
+        panel.add(new ActionLink<PolicyRuleWrapper>() {
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
-                        if (target != null) {
-                            customActionOnFinishCallback(target);
+            @Override
+            public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
+                final RuleConf rule = model.getObject().getConf();
+                try {
+                    final T actual = restClient.getPolicy(policy);
+                    CollectionUtils.filter(getRuleConf(actual), new Predicate<RuleConf>() {
+
+                        @Override
+                        public boolean evaluate(final RuleConf object) {
+                            return !object.getName().equals(rule.getName());
                         }
-                    }
-                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+                    });
+                    restClient.updatePolicy(actual);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    customActionOnFinishCallback(target);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting {}", rule.getName(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
-        });
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.POLICY_DELETE, true);
 
-        return columns;
+        return panel;
+    }
+
+    @Override
+    public ActionsPanel<Serializable> getHeader(final String componentId) {
+        final ActionsPanel<Serializable> panel = new ActionsPanel<>(componentId, null);
+
+        panel.add(new ActionLink<Serializable>() {
+
+            private static final long serialVersionUID = -7978723352517770644L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                if (target != null) {
+                    customActionOnFinishCallback(target);
+                }
+            }
+        }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).hideLabel();
+        return panel;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java
index 1f3442b..32b81b7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.policies;
 
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.common.lib.policy.PullPolicySpec;
 import org.apache.syncope.common.lib.policy.PullPolicyTO;
 import org.apache.syncope.common.lib.types.PolicyType;
@@ -52,8 +52,7 @@ public class PullPolicyDirectoryPanel extends PolicyDirectoryPanel<PullPolicyTO>
     }
 
     @Override
-    protected void addCustomActions(
-            final ActionLinksPanel.Builder<PullPolicyTO> panel, final IModel<PullPolicyTO> model) {
+    protected void addCustomActions(final ActionsPanel<PullPolicyTO> panel, final IModel<PullPolicyTO> model) {
         panel.add(new ActionLink<PullPolicyTO>() {
 
             private static final long serialVersionUID = -3722207913631435501L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
index 6237c4f..01f77db 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
@@ -34,13 +34,12 @@ import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.rest.ReportRestClient;
-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.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -55,7 +54,6 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColu
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
 /**
@@ -86,9 +84,8 @@ public abstract class ReportDirectoryPanel
     protected List<IColumn<ReportTO, String>> getColumns() {
         final List<IColumn<ReportTO, String>> columns = new ArrayList<>();
 
-        columns.add(new KeyPropertyColumn<ReportTO>(
-                new StringResourceModel("key", this), "key", "key"));
-
+        columns.add(new KeyPropertyColumn<ReportTO>(new StringResourceModel(
+                "key", this), "key"));
         columns.add(new PropertyColumn<ReportTO, String>(new StringResourceModel(
                 "name", this), "name", "name"));
 
@@ -110,117 +107,99 @@ public abstract class ReportDirectoryPanel
         columns.add(new BooleanPropertyColumn<ReportTO>(
                 new StringResourceModel("active", this), "active", "active"));
 
-        columns.add(new ActionColumn<ReportTO, String>(new ResourceModel("actions")) {
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<ReportTO> getActions(final IModel<ReportTO> model) {
+        final ActionsPanel<ReportTO> panel = super.getActions(model);
+
+        panel.add(new ActionLink<ReportTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
+                send(ReportDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(
+                                restClient.read(model.getObject().getKey()), target));
+            }
+        }, ActionLink.ActionType.EDIT, StandardEntitlement.REPORT_UPDATE);
+
+        panel.add(new ActionLink<ReportTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<ReportTO> getActions(final String componentId, final IModel<ReportTO> model) {
-
-                final ActionLinksPanel<ReportTO> panel = ActionLinksPanel.<ReportTO>builder().
-                        add(new ActionLink<ReportTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                                target.add(modal.setContent(new ReportletDirectoryPanel(
-                                        modal, model.getObject().getKey(), pageRef)));
-
-                                modal.header(new StringResourceModel(
-                                        "reportlet.conf", ReportDirectoryPanel.this, Model.of(model.getObject())));
-
-                                MetaDataRoleAuthorizationStrategy.authorize(
-                                        modal.getForm(), ENABLE, StandardEntitlement.RESOURCE_UPDATE);
-
-                                modal.show(true);
-                            }
-                        }, ActionLink.ActionType.COMPOSE, StandardEntitlement.REPORT_UPDATE).
-                        add(new ActionLink<ReportTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                                final ReportTO clone = SerializationUtils.clone(model.getObject());
-                                clone.setKey(null);
-                                send(ReportDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(clone, target));
-                            }
-                        }, ActionLink.ActionType.CLONE, StandardEntitlement.REPORT_CREATE).
-                        add(new ActionLink<ReportTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                                send(ReportDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(
-                                                restClient.read(model.getObject().getKey()), target));
-                            }
-                        }, ActionLink.ActionType.EDIT, StandardEntitlement.REPORT_UPDATE).
-                        add(new ActionLink<ReportTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                                viewTask(model.getObject(), target);
-                            }
-                        }, ActionLink.ActionType.VIEW, StandardEntitlement.REPORT_READ).
-                        add(new ActionLink<ReportTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                                startAt.setExecutionDetail(
-                                        model.getObject().getKey(), model.getObject().getName(), target);
-                                startAt.toggle(target, true);
-                            }
-                        }, ActionLink.ActionType.EXECUTE, StandardEntitlement.REPORT_EXECUTE).
-                        add(new ActionLink<ReportTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                                final ReportTO reportTO = model.getObject();
-                                try {
-                                    restClient.delete(reportTO.getKey());
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    target.add(container);
-                                } catch (SyncopeClientException e) {
-                                    LOG.error("While deleting {}", reportTO.getKey(), e);
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.REPORT_DELETE).build(componentId);
-
-                return panel;
+            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
+                final ReportTO clone = SerializationUtils.clone(model.getObject());
+                clone.setKey(null);
+                send(ReportDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(clone, target));
             }
+        }, ActionLink.ActionType.CLONE, StandardEntitlement.REPORT_CREATE);
+
+        panel.add(new ActionLink<ReportTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<ReportTO> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<ReportTO> panel = ActionLinksPanel.builder();
+            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
+                target.add(modal.setContent(new ReportletDirectoryPanel(
+                        modal, model.getObject().getKey(), pageRef)));
 
-                return panel.add(new ActionLink<ReportTO>() {
+                modal.header(new StringResourceModel(
+                        "reportlet.conf", ReportDirectoryPanel.this, Model.of(model.getObject())));
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+                MetaDataRoleAuthorizationStrategy.authorize(
+                        modal.getForm(), ENABLE, StandardEntitlement.RESOURCE_UPDATE);
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
-                        if (target != null) {
-                            target.add(container);
-                        }
-                    }
-                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+                modal.show(true);
             }
-        });
+        }, ActionLink.ActionType.COMPOSE, StandardEntitlement.REPORT_UPDATE);
 
-        return columns;
+        panel.add(new ActionLink<ReportTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
+                viewTask(model.getObject(), target);
+            }
+        }, ActionLink.ActionType.VIEW, StandardEntitlement.REPORT_READ);
+
+        panel.add(new ActionLink<ReportTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
+                startAt.setExecutionDetail(
+                        model.getObject().getKey(), model.getObject().getName(), target);
+                startAt.toggle(target, true);
+            }
+        }, ActionLink.ActionType.EXECUTE, StandardEntitlement.REPORT_EXECUTE);
+
+        panel.add(new ActionLink<ReportTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
+                final ReportTO reportTO = model.getObject();
+                try {
+                    restClient.delete(reportTO.getKey());
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting {}", reportTO.getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.REPORT_DELETE, true);
+        return panel;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java
index 475deff..eda0e97 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java
@@ -25,7 +25,7 @@ import org.apache.syncope.client.console.rest.ReportRestClient;
 import org.apache.syncope.client.console.tasks.ExecutionsDirectoryPanel;
 import org.apache.syncope.client.console.wicket.ajax.form.AbstractAjaxDownloadBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.common.lib.to.ExecTO;
 import org.apache.syncope.common.lib.to.ReportTO;
 import org.apache.syncope.common.lib.types.ReportExecExportFormat;
@@ -80,7 +80,7 @@ public class ReportExecutionDetails extends MultilevelPanel.SecondLevel {
         }
 
         @Override
-        protected void addFurtherAcions(final ActionLinksPanel.Builder<ExecTO> panel, final IModel<ExecTO> model) {
+        protected void addFurtherAcions(final ActionsPanel<ExecTO> panel, final IModel<ExecTO> model) {
             panel.add(new ActionLink<ExecTO>() {
 
                 private static final long serialVersionUID = -3722207913631435501L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
index 4b01fbd..d3969b3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
@@ -33,10 +33,8 @@ import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.notifications.TemplateModal;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -55,6 +53,7 @@ import org.apache.wicket.model.StringResourceModel;
 import org.apache.syncope.client.console.panels.WizardModalPanel;
 import org.apache.syncope.client.console.reports.ReportTemplateDirectoryPanel.ReportTemplateProvider;
 import org.apache.syncope.client.console.rest.ReportRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.XMLEditorPanel;
 import org.apache.syncope.common.lib.types.ReportTemplateFormat;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
@@ -113,96 +112,88 @@ public class ReportTemplateDirectoryPanel
     @Override
     protected List<IColumn<ReportTemplateTO, String>> getColumns() {
         List<IColumn<ReportTemplateTO, String>> columns = new ArrayList<>();
-        columns.add(new PropertyColumn<ReportTemplateTO, String>(
-                new StringResourceModel("key", this), "key", "key"));
+        columns.add(new PropertyColumn<ReportTemplateTO, String>(new StringResourceModel("key", this), "key", "key"));
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<ReportTemplateTO> getActions(final IModel<ReportTemplateTO> model) {
+        final ActionsPanel<ReportTemplateTO> panel = super.getActions(model);
 
-        columns.add(new ActionColumn<ReportTemplateTO, String>(new ResourceModel("actions", "")) {
+        panel.add(new ActionLink<ReportTemplateTO>() {
 
-            private static final long serialVersionUID = -3503023501954863131L;
+            private static final long serialVersionUID = -7978723352517770645L;
 
             @Override
-            public ActionLinksPanel<ReportTemplateTO> getActions(
-                    final String componentId, final IModel<ReportTemplateTO> model) {
-
-                final ActionLinksPanel.Builder<ReportTemplateTO> panel = ActionLinksPanel.builder();
-
-                panel.add(new ActionLink<ReportTemplateTO>() {
-
-                    private static final long serialVersionUID = -7978723352517770645L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
-                        TemplateContent<ReportTemplateFormat> content =
-                                new TemplateContent<>(model.getObject().getKey(), ReportTemplateFormat.FO);
-                        content.setContent(
-                                restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.FO));
-
-                        utilityModal.header(new ResourceModel("report.template.fo", "FO Content"));
-                        utilityModal.setContent(new TemplateContentEditorPanel(content, pageRef));
-                        utilityModal.show(true);
-                        target.add(utilityModal);
-                    }
-                }, ActionLink.ActionType.FO_EDIT, StandardEntitlement.MAIL_TEMPLATE_UPDATE);
-
-                panel.add(new ActionLink<ReportTemplateTO>() {
-
-                    private static final long serialVersionUID = -7978723352517770645L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
-                        TemplateContent<ReportTemplateFormat> content =
-                                new TemplateContent<>(model.getObject().getKey(), ReportTemplateFormat.HTML);
-                        content.setContent(
-                                restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.HTML));
-
-                        utilityModal.header(new ResourceModel("report.template.html", "HTML Content"));
-                        utilityModal.setContent(new TemplateContentEditorPanel(content, pageRef));
-                        utilityModal.show(true);
-                        target.add(utilityModal);
-                    }
-                }, ActionLink.ActionType.HTML, StandardEntitlement.MAIL_TEMPLATE_UPDATE);
-
-                panel.add(new ActionLink<ReportTemplateTO>() {
-
-                    private static final long serialVersionUID = -7978723352517770645L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
-                        TemplateContent<ReportTemplateFormat> content =
-                                new TemplateContent<>(model.getObject().getKey(), ReportTemplateFormat.CSV);
-                        content.setContent(
-                                restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.CSV));
-
-                        utilityModal.header(new ResourceModel("report.template.text", "TEXT Content"));
-                        utilityModal.setContent(new TemplateContentEditorPanel(content, pageRef));
-                        utilityModal.show(true);
-                        target.add(utilityModal);
-                    }
-                }, ActionLink.ActionType.TEXT, StandardEntitlement.MAIL_TEMPLATE_UPDATE);
-
-                panel.add(new ActionLink<ReportTemplateTO>() {
-
-                    private static final long serialVersionUID = -3722207913631435501L;
-
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
-                        try {
-                            restClient.deleteTemplate(model.getObject().getKey());
-                            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                            target.add(container);
-                        } catch (SyncopeClientException e) {
-                            LOG.error("While deleting object {}", model.getObject().getKey(), e);
-                            SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage()) ? e.getClass().
-                                    getName() : e.getMessage());
-                        }
-                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                    }
-                }, ActionLink.ActionType.DELETE, StandardEntitlement.MAIL_TEMPLATE_DELETE);
-
-                return panel.build(componentId);
+            public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
+                TemplateContent<ReportTemplateFormat> content = new TemplateContent<>(model.getObject().getKey(),
+                        ReportTemplateFormat.FO);
+                content.setContent(
+                        restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.FO));
+
+                utilityModal.header(new ResourceModel("report.template.fo", "FO Content"));
+                utilityModal.setContent(new TemplateContentEditorPanel(content, pageRef));
+                utilityModal.show(true);
+                target.add(utilityModal);
             }
-        });
-        return columns;
+        }, ActionLink.ActionType.FO_EDIT, StandardEntitlement.MAIL_TEMPLATE_UPDATE);
+
+        panel.add(new ActionLink<ReportTemplateTO>() {
+
+            private static final long serialVersionUID = -7978723352517770645L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
+                TemplateContent<ReportTemplateFormat> content = new TemplateContent<>(model.getObject().getKey(),
+                        ReportTemplateFormat.HTML);
+                content.setContent(
+                        restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.HTML));
+
+                utilityModal.header(new ResourceModel("report.template.html", "HTML Content"));
+                utilityModal.setContent(new TemplateContentEditorPanel(content, pageRef));
+                utilityModal.show(true);
+                target.add(utilityModal);
+            }
+        }, ActionLink.ActionType.HTML, StandardEntitlement.MAIL_TEMPLATE_UPDATE);
+
+        panel.add(new ActionLink<ReportTemplateTO>() {
+
+            private static final long serialVersionUID = -7978723352517770645L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
+                TemplateContent<ReportTemplateFormat> content = new TemplateContent<>(model.getObject().getKey(),
+                        ReportTemplateFormat.CSV);
+                content.setContent(
+                        restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.CSV));
+
+                utilityModal.header(new ResourceModel("report.template.text", "TEXT Content"));
+                utilityModal.setContent(new TemplateContentEditorPanel(content, pageRef));
+                utilityModal.show(true);
+                target.add(utilityModal);
+            }
+        }, ActionLink.ActionType.TEXT, StandardEntitlement.MAIL_TEMPLATE_UPDATE);
+
+        panel.add(new ActionLink<ReportTemplateTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) {
+                try {
+                    restClient.deleteTemplate(model.getObject().getKey());
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting object {}", model.getObject().getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage()) ? e.getClass().
+                            getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.MAIL_TEMPLATE_DELETE);
+
+        return panel;
     }
 
     @Override
@@ -218,6 +209,7 @@ public class ReportTemplateDirectoryPanel
     @Override
     protected Collection<ActionLink.ActionType> getBulkActions() {
         return Collections.<ActionLink.ActionType>emptyList();
+
     }
 
     protected final class ReportTemplateProvider extends DirectoryDataProvider<ReportTemplateTO> {

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
index 94aeec9..a5a1a6e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
@@ -42,11 +42,10 @@ import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.search.SearchClause;
 import org.apache.syncope.client.console.reports.ReportletDirectoryPanel.ReportletWrapper;
 import org.apache.syncope.client.console.rest.ReportRestClient;
-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.ActionLink.ActionType;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -68,7 +67,6 @@ import org.apache.wicket.markup.html.basic.Label;
 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;
 import org.apache.wicket.model.StringResourceModel;
 
 /**
@@ -123,90 +121,87 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
             }
         });
 
-        columns.add(new ActionColumn<ReportletWrapper, String>(new ResourceModel("actions")) {
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<ReportletWrapper> getActions(final IModel<ReportletWrapper> model) {
+        final ActionsPanel<ReportletWrapper> panel = super.getActions(model);
+
+        panel.add(new ActionLink<ReportletWrapper>() {
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<ReportletWrapper> getActions(final String componentId,
-                    final IModel<ReportletWrapper> model) {
-
-                final ActionLinksPanel<ReportletWrapper> panel = ActionLinksPanel.<ReportletWrapper>builder().
-                        add(new ActionLink<ReportletWrapper>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
-                                AbstractReportletConf clone = SerializationUtils.clone(model.getObject().getConf());
-                                clone.setName(null);
-
-                                send(ReportletDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(
-                                                new ReportletWrapper().setConf(clone),
-                                                target));
-                            }
-                        }, ActionLink.ActionType.CLONE, StandardEntitlement.REPORT_UPDATE).
-                        add(new ActionLink<ReportletWrapper>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
-                                send(ReportletDirectoryPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
-                            }
-                        }, ActionLink.ActionType.EDIT, StandardEntitlement.REPORT_UPDATE).
-                        add(new ActionLink<ReportletWrapper>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
-                                final ReportletConf reportlet = model.getObject().getConf();
-                                try {
-                                    final ReportTO actual = restClient.read(report);
-                                    CollectionUtils.filter(actual.getReportletConfs(), new Predicate<ReportletConf>() {
-
-                                        @Override
-                                        public boolean evaluate(final ReportletConf object) {
-                                            return !object.getName().equals(reportlet.getName());
-                                        }
-                                    });
-                                    restClient.update(actual);
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    customActionOnFinishCallback(target);
-                                } catch (SyncopeClientException e) {
-                                    LOG.error("While deleting {}", reportlet.getName(), e);
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.REPORT_UPDATE).build(componentId);
-
-                return panel;
+            public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
+                ReportletDirectoryPanel.this.getTogglePanel().close(target);
+                AbstractReportletConf clone = SerializationUtils.clone(model.getObject().getConf());
+                clone.setName(null);
+
+                send(ReportletDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(
+                                new ReportletWrapper().setConf(clone),
+                                target));
             }
+        }, ActionLink.ActionType.CLONE, StandardEntitlement.REPORT_CREATE);
+        panel.add(new ActionLink<ReportletWrapper>() {
 
-            @Override
-            public ActionLinksPanel<ReportletWrapper> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<ReportletWrapper> panel = ActionLinksPanel.builder();
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                return panel.add(new ActionLink<ReportletWrapper>() {
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
+                ReportletDirectoryPanel.this.getTogglePanel().close(target);
+                send(ReportletDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+            }
+        }, ActionLink.ActionType.EDIT, StandardEntitlement.REPORT_UPDATE);
+        panel.add(new ActionLink<ReportletWrapper>() {
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
-                        if (target != null) {
-                            customActionOnFinishCallback(target);
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
+                final ReportletConf reportlet = model.getObject().getConf();
+                try {
+                    final ReportTO actual = restClient.read(report);
+                    CollectionUtils.filter(actual.getReportletConfs(), new Predicate<ReportletConf>() {
+
+                        @Override
+                        public boolean evaluate(final ReportletConf object) {
+                            return !object.getName().equals(reportlet.getName());
                         }
-                    }
-                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+                    });
+                    restClient.update(actual);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    customActionOnFinishCallback(target);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting {}", reportlet.getName(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
-        });
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.REPORT_DELETE, true);
 
-        return columns;
+        return panel;
+    }
+
+    @Override
+    public ActionsPanel<Serializable> getHeader(final String componentId) {
+        final ActionsPanel<Serializable> panel = new ActionsPanel<>(componentId, null);
+
+        panel.add(new ActionLink<Serializable>() {
+
+            private static final long serialVersionUID = -7978723352517770644L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                if (target != null) {
+                    customActionOnFinishCallback(target);
+                }
+            }
+        }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).hideLabel();
+        return panel;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
index dc665b7..992f3fb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
@@ -39,10 +39,9 @@ import org.apache.syncope.client.console.rest.AnyObjectRestClient;
 import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.console.rest.ResourceRestClient;
 import org.apache.syncope.client.console.rest.UserRestClient;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.to.GroupTO;
@@ -58,7 +57,6 @@ import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
 public class AnyStatusDirectoryPanel
@@ -159,40 +157,34 @@ public class AnyStatusDirectoryPanel
                 }
             }
         });
+        return columns;
+    }
 
-        columns.add(new ActionColumn<StatusBean, String>(new ResourceModel("actions", "")) {
-
-            private static final long serialVersionUID = 3372107192677413965L;
-
-            @Override
-            public ActionLinksPanel<StatusBean> getActions(
-                    final String componentId, final IModel<StatusBean> model) {
-
-                final ActionLinksPanel.Builder<StatusBean> panel = ActionLinksPanel.builder();
-
-                panel.add(new ActionLink<StatusBean>() {
+    @Override
+    public ActionsPanel<StatusBean> getActions(final IModel<StatusBean> model) {
+        final ActionsPanel<StatusBean> panel = super.getActions(model);
 
-                    private static final long serialVersionUID = -7978723352517770645L;
+        panel.add(new ActionLink<StatusBean>() {
 
-                    @Override
-                    protected boolean statusCondition(final StatusBean bean) {
-                        return bean.getConnObjectLink() != null
-                                && !bean.getResourceName().equalsIgnoreCase(Constants.SYNCOPE);
-                    }
+            private static final long serialVersionUID = -7978723352517770645L;
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
-                        multiLevelPanelRef.next(bean.getResourceName(),
-                                new ConnObjectDetails(resourceRestClient.readConnObject(
-                                        bean.getResourceName(), anyTO.getType(), anyTO.getKey())), target);
-                        target.add(multiLevelPanelRef);
-                    }
-                }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+            @Override
+            protected boolean statusCondition(final StatusBean bean) {
+                return bean != null && bean.getConnObjectLink() != null
+                        && !bean.getResourceName().equalsIgnoreCase(Constants.SYNCOPE);
+            }
 
-                return panel.build(componentId, model.getObject());
+            @Override
+            public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+                multiLevelPanelRef.next(bean.getResourceName(),
+                        new ConnObjectDetails(resourceRestClient.readConnObject(
+                                bean.getResourceName(), anyTO.getType(), anyTO.getKey())), target);
+                target.add(multiLevelPanelRef);
+                AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
             }
-        });
-        return columns;
+        }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+
+        return panel;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/2e7e2cee/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java
index e30bcaa..3642529 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.tasks;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -35,12 +34,11 @@ import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel.SecondLevel;
 import org.apache.syncope.client.console.rest.ExecutionRestClient;
 import org.apache.syncope.client.console.tasks.ExecutionsDirectoryPanel.ExecProvider;
-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.DatePropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 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.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ExecTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -51,7 +49,6 @@ 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.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
 public abstract class ExecutionsDirectoryPanel
@@ -107,70 +104,49 @@ public abstract class ExecutionsDirectoryPanel
         columns.add(new DatePropertyColumn<ExecTO>(new StringResourceModel("end", this), "end", "end"));
 
         columns.add(new PropertyColumn<ExecTO, String>(new StringResourceModel("status", this), "status", "status"));
+        return columns;
+    }
 
-        columns.add(new ActionColumn<ExecTO, String>(new ResourceModel("actions")) {
+    @Override
+    public ActionsPanel<ExecTO> getActions(final IModel<ExecTO> model) {
+        final ActionsPanel<ExecTO> panel = super.getActions(model);
+        final ExecTO taskExecutionTO = model.getObject();
 
-            private static final long serialVersionUID = -3503023501954863131L;
+        panel.add(new ActionLink<ExecTO>() {
 
-            @Override
-            public ActionLinksPanel<ExecTO> getActions(final String componentId, final IModel<ExecTO> model) {
-                final ExecTO taskExecutionTO = model.getObject();
-
-                final ActionLinksPanel.Builder<ExecTO> panel = ActionLinksPanel.<ExecTO>builder().
-                        add(new ActionLink<ExecTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ExecTO ignore) {
-                                next(new StringResourceModel("execution.view", ExecutionsDirectoryPanel.this, model).
-                                        getObject(), new ExecMessage(model.getObject().getMessage()), target);
-                            }
-                        }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ).
-                        add(new ActionLink<ExecTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final ExecTO ignore) {
-                                try {
-                                    restClient.deleteExecution(taskExecutionTO.getKey());
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                } catch (SyncopeClientException scce) {
-                                    SyncopeConsoleSession.get().error(scce.getMessage());
-                                }
-                                target.add(ExecutionsDirectoryPanel.this);
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE);
-
-                addFurtherAcions(panel, model);
-
-                return panel.build(componentId, model.getObject());
-            }
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<Serializable> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<Serializable> panel = ActionLinksPanel.builder();
-
-                return panel.add(new ActionLink<Serializable>() {
+            public void onClick(final AjaxRequestTarget target, final ExecTO ignore) {
+                ExecutionsDirectoryPanel.this.getTogglePanel().close(target);
+                next(new StringResourceModel("execution.view", ExecutionsDirectoryPanel.this, model).
+                        getObject(), new ExecMessage(model.getObject().getMessage()), target);
+            }
+        }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ);
+        panel.add(new ActionLink<ExecTO>() {
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        if (target != null) {
-                            target.add(container);
-                        }
-                    }
-                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ExecTO ignore) {
+                try {
+                    restClient.deleteExecution(taskExecutionTO.getKey());
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                } catch (SyncopeClientException scce) {
+                    SyncopeConsoleSession.get().error(scce.getMessage());
+                }
+                target.add(ExecutionsDirectoryPanel.this);
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                ExecutionsDirectoryPanel.this.getTogglePanel().close(target);
             }
-        });
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE, true);
 
-        return columns;
+        addFurtherAcions(panel, model);
+
+        return panel;
     }
 
-    protected void addFurtherAcions(final ActionLinksPanel.Builder<ExecTO> panel, final IModel<ExecTO> model) {
+    protected void addFurtherAcions(final ActionsPanel<ExecTO> panel, final IModel<ExecTO> model) {
     }
 
     @Override