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:23:48 UTC

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

http://git-wip-us.apache.org/repos/asf/syncope/blob/f8b61e78/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/f8b61e78/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/f8b61e78/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/f8b61e78/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/f8b61e78/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/f8b61e78/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

http://git-wip-us.apache.org/repos/asf/syncope/blob/f8b61e78/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
index 59938ec..eb859a6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
@@ -30,13 +30,12 @@ import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
-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.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.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -48,7 +47,6 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 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.IModel;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
 public abstract class NotificationTaskDirectoryPanel
@@ -83,7 +81,7 @@ public abstract class NotificationTaskDirectoryPanel
         final List<IColumn<NotificationTaskTO, String>> columns = new ArrayList<>();
 
         columns.add(new KeyPropertyColumn<NotificationTaskTO>(
-                new StringResourceModel("key", this), "key", "key"));
+                new StringResourceModel("key", this), "key"));
 
         columns.add(new PropertyColumn<NotificationTaskTO, String>(
                 new StringResourceModel("sender", this), "sender", "sender"));
@@ -92,7 +90,7 @@ public abstract class NotificationTaskDirectoryPanel
                 new StringResourceModel("subject", this), "subject", "subject"));
 
         columns.add(new CollectionPropertyColumn<NotificationTaskTO>(
-                new StringResourceModel("recipients", this), "recipients", "recipients"));
+                new StringResourceModel("recipients", this), "recipients"));
 
         columns.add(new DatePropertyColumn<NotificationTaskTO>(
                 new StringResourceModel("start", this), "start", "start"));
@@ -102,105 +100,80 @@ public abstract class NotificationTaskDirectoryPanel
 
         columns.add(new PropertyColumn<NotificationTaskTO, String>(
                 new StringResourceModel("latestExecStatus", this), "latestExecStatus", "latestExecStatus"));
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<NotificationTaskTO> getActions(final IModel<NotificationTaskTO> model) {
+        final ActionsPanel<NotificationTaskTO> panel = super.getActions(model);
+        final NotificationTaskTO taskTO = model.getObject();
 
-        columns.add(new ActionColumn<NotificationTaskTO, String>(new ResourceModel("actions", "")) {
+        panel.add(new ActionLink<NotificationTaskTO>() {
 
-            private static final long serialVersionUID = 2054811145491901166L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<NotificationTaskTO> getActions(
-                    final String componentId, final IModel<NotificationTaskTO> model) {
-
-                final NotificationTaskTO taskTO = model.getObject();
-
-                final ActionLinksPanel<NotificationTaskTO> panel = ActionLinksPanel.<NotificationTaskTO>builder().
-                        add(new ActionLink<NotificationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
-                                viewTask(taskTO, target);
-                            }
-                        }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ).
-                        add(new ActionLink<NotificationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
-                                viewMailBody(MailTemplateFormat.TEXT, taskTO.getTextBody(), target);
-                            }
-                        }, ActionLink.ActionType.TEXT, StandardEntitlement.TASK_READ).
-                        add(new ActionLink<NotificationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
-                                viewMailBody(MailTemplateFormat.HTML, taskTO.getHtmlBody(), target);
-                            }
-                        }, ActionLink.ActionType.HTML, StandardEntitlement.TASK_READ).
-                        add(new ActionLink<NotificationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
-                                try {
-                                    restClient.startExecution(taskTO.getKey(), null);
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    target.add(container);
-                                } catch (SyncopeClientException e) {
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                    LOG.error("While running {}", taskTO.getKey(), e);
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE).
-                        add(new ActionLink<NotificationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
-                                try {
-                                    restClient.delete(taskTO.getKey(), NotificationTaskTO.class);
-                                    updateResultTable(target);
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    target.add(container);
-                                } catch (SyncopeClientException e) {
-                                    LOG.error("While deleting {}", taskTO.getKey(), e);
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE).build(componentId);
-
-                return panel;
+            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
+                viewTask(taskTO, target);
             }
+        }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ);
+        panel.add(new ActionLink<NotificationTaskTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<NotificationTaskTO> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<NotificationTaskTO> panel = ActionLinksPanel.builder();
+            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
+                viewMailBody(MailTemplateFormat.TEXT, taskTO.getTextBody(), target);
+            }
+        }, ActionLink.ActionType.TEXT, StandardEntitlement.TASK_READ);
+        panel.add(new ActionLink<NotificationTaskTO>() {
 
-                return panel.add(new ActionLink<NotificationTaskTO>() {
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+            @Override
+            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
+                viewMailBody(MailTemplateFormat.HTML, taskTO.getHtmlBody(), target);
+            }
+        }, ActionLink.ActionType.HTML, StandardEntitlement.TASK_READ);
+        panel.add(new ActionLink<NotificationTaskTO>() {
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final NotificationTaskTO ignore) {
-                        if (target != null) {
-                            target.add(container);
-                        }
-                    }
-                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
+                try {
+                    restClient.startExecution(taskTO.getKey(), null);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                    LOG.error("While running {}", taskTO.getKey(), e);
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
-        });
+        }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE);
+        panel.add(new ActionLink<NotificationTaskTO>() {
 
-        return columns;
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
+                try {
+                    restClient.delete(taskTO.getKey(), NotificationTaskTO.class);
+                    updateResultTable(target);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting {}", taskTO.getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE, true);
+
+        return panel;
     }
 
     @Override
@@ -237,7 +210,7 @@ public abstract class NotificationTaskDirectoryPanel
                 final String entityKey,
                 final int paginatorRows) {
 
-            super(paginatorRows, TaskType.NOTIFICATION , restClient);
+            super(paginatorRows, TaskType.NOTIFICATION, restClient);
             this.notification = notification;
             this.anyTypeKind = anyTypeKind;
             this.entityKey = entityKey;

http://git-wip-us.apache.org/repos/asf/syncope/blob/f8b61e78/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index 9bb23e5..1c653d0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -30,13 +30,12 @@ import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
-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.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.PropagationTaskTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.types.TaskType;
@@ -46,7 +45,6 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 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.IModel;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
 /**
@@ -74,7 +72,7 @@ public abstract class PropagationTaskDirectoryPanel
         final List<IColumn<PropagationTaskTO, String>> columns = new ArrayList<>();
 
         columns.add(new KeyPropertyColumn<PropagationTaskTO>(
-                new StringResourceModel("key", this), "key", "key"));
+                new StringResourceModel("key", this), "key"));
 
         columns.add(new PropertyColumn<PropagationTaskTO, String>(new StringResourceModel(
                 "operation", this), "operation", "operation"));
@@ -101,86 +99,65 @@ public abstract class PropagationTaskDirectoryPanel
 
         columns.add(new PropertyColumn<PropagationTaskTO, String>(
                 new StringResourceModel("latestExecStatus", this), "latestExecStatus", "latestExecStatus"));
+        return columns;
+    }
 
-        columns.add(new ActionColumn<PropagationTaskTO, String>(new ResourceModel("actions")) {
+    @Override
+    public ActionsPanel<PropagationTaskTO> getActions(final IModel<PropagationTaskTO> model) {
+        final ActionsPanel<PropagationTaskTO> panel = super.getActions(model);
+        final PropagationTaskTO taskTO = model.getObject();
 
-            private static final long serialVersionUID = 2054811145491901166L;
+        panel.add(new ActionLink<PropagationTaskTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<PropagationTaskTO> getActions(
-                    final String componentId, final IModel<PropagationTaskTO> model) {
-
-                final PropagationTaskTO taskTO = model.getObject();
-
-                final ActionLinksPanel<PropagationTaskTO> panel = ActionLinksPanel.<PropagationTaskTO>builder().
-                        add(new ActionLink<PropagationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final PropagationTaskTO modelObject) {
-                                viewTask(taskTO, target);
-                            }
-                        }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ).
-                        add(new ActionLink<PropagationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final PropagationTaskTO modelObject) {
-                                try {
-                                    restClient.startExecution(taskTO.getKey(), null);
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    target.add(container);
-                                } catch (SyncopeClientException e) {
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                    LOG.error("While running {}", taskTO.getKey(), e);
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE).
-                        add(new ActionLink<PropagationTaskTO>() {
-
-                            private static final long serialVersionUID = -3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget target, final PropagationTaskTO modelObject) {
-                                try {
-                                    restClient.delete(taskTO.getKey(), PropagationTaskTO.class);
-                                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                                    target.add(container);
-                                } catch (SyncopeClientException e) {
-                                    LOG.error("While deleting {}", taskTO.getKey(), e);
-                                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                                            ? e.getClass().getName() : e.getMessage());
-                                }
-                                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                            }
-                        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE).build(componentId);
-
-                return panel;
+            public void onClick(final AjaxRequestTarget target, final PropagationTaskTO modelObject) {
+                PropagationTaskDirectoryPanel.this.getTogglePanel().close(target);
+                viewTask(taskTO, target);
             }
+        }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ);
+
+        panel.add(new ActionLink<PropagationTaskTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
-            public ActionLinksPanel<PropagationTaskTO> getHeader(final String componentId) {
-                final ActionLinksPanel.Builder<PropagationTaskTO> panel = ActionLinksPanel.builder();
+            public void onClick(final AjaxRequestTarget target, final PropagationTaskTO modelObject) {
+                try {
+                    restClient.startExecution(taskTO.getKey(), null);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                    LOG.error("While running {}", taskTO.getKey(), e);
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE);
 
-                return panel.add(new ActionLink<PropagationTaskTO>() {
+        panel.add(new ActionLink<PropagationTaskTO>() {
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+            private static final long serialVersionUID = -3722207913631435501L;
 
-                    @Override
-                    public void onClick(final AjaxRequestTarget target, final PropagationTaskTO ignore) {
-                        if (target != null) {
-                            target.add(container);
-                        }
-                    }
-                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+            @Override
+            public void onClick(final AjaxRequestTarget target, final PropagationTaskTO modelObject) {
+                try {
+                    restClient.delete(taskTO.getKey(), PropagationTaskTO.class);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                    PropagationTaskDirectoryPanel.this.getTogglePanel().close(target);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting {}", taskTO.getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
-        });
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE, true);
 
-        return columns;
+        return panel;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/f8b61e78/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
index 75b5efd..6634736 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
@@ -72,7 +72,7 @@ public abstract class ProvisioningTaskDirectoryPanel<T extends AbstractProvision
         List<IColumn<T, String>> columns = new ArrayList<>();
 
         columns.add(new KeyPropertyColumn<T>(
-                new StringResourceModel("key", this), "key", "key"));
+                new StringResourceModel("key", this), "key"));
 
         columns.add(new PropertyColumn<T, String>(
                 new StringResourceModel("name", this), "name", "name"));

http://git-wip-us.apache.org/repos/asf/syncope/blob/f8b61e78/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java
index 1c9804e..9af1251 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java
@@ -22,7 +22,7 @@ import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 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.PullTaskTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.types.TaskType;
@@ -53,21 +53,17 @@ public abstract class PullTaskDirectoryPanel extends ProvisioningTaskDirectoryPa
     }
 
     @Override
-    protected void addFurtherActions(final ActionLinksPanel.Builder<PullTaskTO> panel, final IModel<PullTaskTO> model) {
+    protected void addFurtherActions(final ActionsPanel<PullTaskTO> panel, final IModel<PullTaskTO> model) {
         panel.add(new ActionLink<PullTaskTO>() {
 
             private static final long serialVersionUID = -3722207913631435501L;
 
             @Override
             public void onClick(final AjaxRequestTarget target, final PullTaskTO ignore) {
+                PullTaskDirectoryPanel.this.getTogglePanel().close(target);
                 templates.setTargetObject(model.getObject());
                 templates.toggle(target, true);
             }
-
-            @Override
-            public boolean isIndicatorEnabled() {
-                return false;
-            }
-        }, ActionLink.ActionType.TEMPLATE, StandardEntitlement.TASK_UPDATE);
+        }, ActionLink.ActionType.TEMPLATE, StandardEntitlement.TASK_UPDATE).disableIndicator();
     }
 }