You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/04/06 16:28:25 UTC

syncope git commit: [SYNCOPE-824] Fix provided, more refinements for task create / edit

Repository: syncope
Updated Branches:
  refs/heads/master 0e89478de -> 97af20e14


[SYNCOPE-824] Fix provided, more refinements for task create / edit


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

Branch: refs/heads/master
Commit: 97af20e1422e50d4d04008e1f7eb34e49d471f59
Parents: 0e89478
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 6 16:28:12 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 6 16:28:12 2016 +0200

----------------------------------------------------------------------
 .../console/pages/MustChangePassword.java       |   7 +-
 .../syncope/client/console/pages/Workflow.java  |   8 +-
 .../console/panels/ResourceDetailsPanel.java    |  29 +++-
 .../client/console/panels/ResourceModal.java    |   3 +-
 .../client/console/rest/PolicyRestClient.java   |  14 --
 .../client/console/rest/ResourceRestClient.java |   6 -
 .../client/console/rest/SchemaRestClient.java   |  12 --
 .../client/console/rest/TaskRestClient.java     |  13 --
 .../client/console/rest/UserSelfRestClient.java |  98 ------------
 .../client/console/rest/WorkflowRestClient.java |   4 -
 .../console/tasks/SchedTaskWizardBuilder.java   | 159 ++++++++++++-------
 .../console/topology/TopologyTogglePanel.java   |   2 +-
 .../console/panels/ResourceDetailsPanel.html    |   4 +-
 .../console/panels/ResourceModal.properties     |   2 +-
 .../console/panels/ResourceModal_it.properties  |   2 +-
 .../panels/ResourceModal_pt_BR.properties       |   2 +-
 .../tasks/SchedTaskDirectoryPanel.properties    |   7 +-
 .../tasks/SchedTaskDirectoryPanel_it.properties |   5 +-
 .../SchedTaskDirectoryPanel_pt_BR.properties    |   7 +-
 .../tasks/SchedTaskWizardBuilder$Profile.html   |  12 +-
 .../console/topology/TopologyTogglePanel.html   |   2 +-
 .../topology/TopologyTogglePanel.properties     |   2 +-
 .../topology/TopologyTogglePanel_it.properties  |   2 +-
 .../TopologyTogglePanel_pt_BR.properties        |   2 +-
 .../markup/html/form/AjaxPalettePanel.html      |   2 +-
 25 files changed, 166 insertions(+), 240 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java
index 455326a..f9f5c70 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java
@@ -22,8 +22,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.panels.NotificationPanel;
-import org.apache.syncope.client.console.rest.UserSelfRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPasswordFieldPanel;
+import org.apache.syncope.common.rest.api.service.UserSelfService;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.WebPage;
@@ -43,8 +43,6 @@ public class MustChangePassword extends WebPage {
 
     private static final Logger LOG = LoggerFactory.getLogger(MustChangePassword.class);
 
-    private final UserSelfRestClient userSelfRestClient = new UserSelfRestClient();
-
     private final StatelessForm<Void> form;
 
     private final TextField<String> usernameField;
@@ -90,7 +88,8 @@ public class MustChangePassword extends WebPage {
             @Override
             protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
                 try {
-                    userSelfRestClient.changePassword(passwordField.getModelObject());
+                    SyncopeConsoleSession.get().getService(UserSelfService.class).
+                            changePassword(passwordField.getModelObject());
 
                     SyncopeConsoleSession.get().invalidate();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/pages/Workflow.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Workflow.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Workflow.java
index 8c2239c..3746c0d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Workflow.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Workflow.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.pages;
 
+import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.panels.WorkflowTogglePanel;
 import org.apache.syncope.client.console.rest.WorkflowRestClient;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -57,7 +58,7 @@ public class Workflow extends BasePage {
 
                     @Override
                     protected byte[] getImageData(final IResource.Attributes attributes) {
-                        return wfRestClient.isActivitiEnabledForUsers()
+                        return isActivitiEnabledForUsers()
                                 ? wfRestClient.getDiagram()
                                 : new byte[0];
                     }
@@ -72,7 +73,7 @@ public class Workflow extends BasePage {
         togglePanel.setOutputMarkupId(true);
         workflowDef.add(togglePanel);
 
-        if (wfRestClient.isActivitiEnabledForUsers()) {
+        if (isActivitiEnabledForUsers()) {
             noActivitiEnabledForUsers.setVisible(false);
         } else {
             workflowDef.setVisible(false);
@@ -82,4 +83,7 @@ public class Workflow extends BasePage {
         body.add(workflowDef);
     }
 
+    private boolean isActivitiEnabledForUsers() {
+        return SyncopeConsoleSession.get().getPlatformInfo().getUserWorkflowAdapter().contains("Activiti");
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
index 1c4a266..117888d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java
@@ -18,31 +18,44 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSpinnerFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
 import org.apache.syncope.client.console.wizards.any.AnnotatedBeanPanel;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.TraceLevel;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.util.ListModel;
 
 public class ResourceDetailsPanel extends Panel {
 
     private static final long serialVersionUID = -7982691107029848579L;
 
+    private final IModel<List<String>> propagationActionsClasses = new LoadableDetachableModel<List<String>>() {
+
+        private static final long serialVersionUID = 5275935387613157437L;
+
+        @Override
+        protected List<String> load() {
+            return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getPropagationActions());
+        }
+    };
+
     public ResourceDetailsPanel(
             final String id,
             final IModel<ResourceTO> model,
-            final List<String> actionClassNames,
             final boolean createFlag) {
 
         super(id);
@@ -77,12 +90,12 @@ public class ResourceDetailsPanel extends Panel {
                 new PropertyModel<Boolean>(model, "randomPwdIfNotProvided"),
                 false));
 
-        container.add(new MultiFieldPanel.Builder<>(
-                new PropertyModel<List<String>>(model, "propagationActionsClassNames")).build(
-                "actionsClasses",
-                "actionsClasses",
-                new AjaxDropDownChoicePanel<>("panel", "panel", new Model<String>())
-                .setChoices(actionClassNames).setNullValid(true).setRequired(true)));
+        container.add(new AjaxPalettePanel.Builder<String>().
+                setAllowMoveAll(true).setAllowOrder(true).
+                build("propagationActionsClassNames",
+                        new PropertyModel<List<String>>(model, "propagationActionsClassNames"),
+                        new ListModel<>(propagationActionsClasses.getObject())).
+                setOutputMarkupId(true));
 
         container.add(new AjaxDropDownChoicePanel<>(
                 "createTraceLevel",

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
index ba29fb9..12a19d0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
@@ -84,8 +84,7 @@ public class ResourceModal<T extends Serializable> extends AbstractResourceModal
 
             @Override
             public Panel getPanel(final String panelId) {
-                return new ResourceDetailsPanel(panelId, model,
-                        resourceRestClient.getPropagationActionsClasses(), createFlag);
+                return new ResourceDetailsPanel(panelId, model, createFlag);
             }
         });
         //--------------------------------

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
index 0d80b45..6d21769 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
@@ -20,8 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.common.lib.policy.AbstractPolicyTO;
 import org.apache.syncope.common.lib.types.PolicyType;
 import org.apache.syncope.common.rest.api.service.PolicyService;
@@ -67,16 +65,4 @@ public class PolicyRestClient extends BaseRestClient {
     public void delete(final Long id, final Class<? extends AbstractPolicyTO> policyClass) {
         getService(PolicyService.class).delete(id);
     }
-
-    public Set<String> getCorrelationRuleClasses() {
-        Set<String> rules = null;
-
-        try {
-            rules = SyncopeConsoleSession.get().getPlatformInfo().getPullCorrelationRules();
-        } catch (Exception e) {
-            LOG.error("While getting all correlation rule classes", e);
-        }
-
-        return rules;
-    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
index b4b880f..b0a70d7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
@@ -18,10 +18,8 @@
  */
 package org.apache.syncope.client.console.rest;
 
-import java.util.ArrayList;
 import java.util.List;
 import javax.ws.rs.core.Response;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.patch.ResourceDeassociationPatch;
 import org.apache.syncope.common.lib.to.BulkAction;
@@ -37,10 +35,6 @@ public class ResourceRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -6898907679835668987L;
 
-    public List<String> getPropagationActionsClasses() {
-        return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getPropagationActions());
-    }
-
     public List<ResourceTO> getAll() {
         List<ResourceTO> resources = null;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
index 7ca9cc7..725a088 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
@@ -23,7 +23,6 @@ import java.util.Collection;
 import java.util.List;
 import java.util.ListIterator;
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.to.AbstractSchemaTO;
@@ -161,15 +160,4 @@ public class SchemaRestClient extends BaseRestClient {
         getService(SchemaService.class).delete(SchemaType.VIRTUAL, name);
         return schemaTO;
     }
-
-    public List<String> getAllValidatorClasses() {
-        List<String> response = null;
-
-        try {
-            response = new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getValidators());
-        } catch (SyncopeClientException e) {
-            LOG.error("While getting all validators", e);
-        }
-        return response;
-    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
index 54bc352..95c5456 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.util.Date;
 import java.util.List;
-import java.util.Set;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.common.lib.to.AbstractTaskTO;
 import org.apache.syncope.common.lib.to.BulkAction;
@@ -45,18 +44,6 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
 
     private static final long serialVersionUID = 6284485820911028843L;
 
-    public Set<String> getJobClasses() {
-        return SyncopeConsoleSession.get().getPlatformInfo().getTaskJobs();
-    }
-
-    public Set<String> getPullActionsClasses() {
-        return SyncopeConsoleSession.get().getPlatformInfo().getPullActions();
-    }
-
-    public Set<String> getPushActionsClasses() {
-        return SyncopeConsoleSession.get().getPlatformInfo().getPushActions();
-    }
-
     /**
      * Return the number of tasks.
      *

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java
deleted file mode 100644
index 24cfafe..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.rest;
-
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.rest.api.service.UserSelfService;
-
-public class UserSelfRestClient extends BaseRestClient {
-
-    private static final long serialVersionUID = 2994691796924731295L;
-
-    public boolean isSelfRegistrationAllowed() {
-        Boolean result = null;
-        try {
-            result = SyncopeConsoleSession.get().getPlatformInfo().isSelfRegAllowed();
-        } catch (SyncopeClientException e) {
-            LOG.error("While seeking if self registration is allowed", e);
-        }
-
-        return result == null
-                ? false
-                : result;
-    }
-
-    public UserTO read() {
-        return SyncopeConsoleSession.get().getSelfTO();
-    }
-
-    public void create(final UserTO userTO, final boolean storePassword) {
-        getService(UserSelfService.class).create(userTO, storePassword);
-    }
-
-    public void update(final UserPatch userPatch) {
-        getService(UserSelfService.class).update(userPatch);
-    }
-
-    public void delete() {
-        getService(UserSelfService.class).delete();
-    }
-
-    public boolean isPasswordResetAllowed() {
-        Boolean result = null;
-        try {
-            result = SyncopeConsoleSession.get().getPlatformInfo().isPwdResetAllowed();
-        } catch (SyncopeClientException e) {
-            LOG.error("While seeking if password reset is allowed", e);
-        }
-
-        return result == null
-                ? false
-                : result;
-    }
-
-    public boolean isPwdResetRequiringSecurityQuestions() {
-        Boolean result = null;
-        try {
-            result = SyncopeConsoleSession.get().getPlatformInfo().isPwdResetRequiringSecurityQuestions();
-        } catch (SyncopeClientException e) {
-            LOG.error("While seeking if password reset requires security question", e);
-        }
-
-        return result == null
-                ? false
-                : result;
-    }
-
-    public void changePassword(final String password) {
-        getService(UserSelfService.class).changePassword(password);
-    }
-
-    public void requestPasswordReset(final String username, final String securityAnswer) {
-        getService(UserSelfService.class).requestPasswordReset(username, securityAnswer);
-    }
-
-    public void confirmPasswordReset(final String token, final String password) {
-        getService(UserSelfService.class).confirmPasswordReset(token, password);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/rest/WorkflowRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/WorkflowRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/WorkflowRestClient.java
index d7f9df5..8d9c424 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/WorkflowRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/WorkflowRestClient.java
@@ -57,10 +57,6 @@ public class WorkflowRestClient extends BaseRestClient {
         return diagram;
     }
 
-    public boolean isActivitiEnabledForUsers() {
-        return SyncopeConsoleSession.get().getPlatformInfo().getUserWorkflowAdapter().contains("Activiti");
-    }
-
     public void updateDefinition(final MediaType mediaType, final String definition) {
         getService(mediaType).importDefinition(AnyTypeKind.USER, definition);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
index e6cee5f..e8d902c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
@@ -25,18 +25,20 @@ import java.util.Collections;
 import java.util.List;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Transformer;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.DateFormatROModel;
 import org.apache.syncope.client.console.rest.RealmRestClient;
 import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizardBuilder;
 import org.apache.syncope.common.lib.to.AbstractProvisioningTaskTO;
 import org.apache.syncope.common.lib.to.SchedTaskTO;
 import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.lib.types.MatchingRule;
 import org.apache.syncope.common.lib.types.PullMode;
@@ -49,6 +51,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.ListModel;
 
 public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBuilder<T> {
 
@@ -102,54 +105,102 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui
 
         private static final long serialVersionUID = -3043839139187792810L;
 
-        private final IModel<List<String>> classNames = new LoadableDetachableModel<List<String>>() {
+        private final IModel<List<String>> taskJobClasses = new LoadableDetachableModel<List<String>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
 
             @Override
             protected List<String> load() {
-                return new ArrayList<>(new TaskRestClient().getJobClasses());
+                return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getTaskJobs());
+            }
+        };
+
+        private final IModel<List<String>> reconciliationFilterBuilderClasses =
+                new LoadableDetachableModel<List<String>>() {
+
+            private static final long serialVersionUID = 5275935387613157437L;
+
+            @Override
+            protected List<String> load() {
+                return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getReconciliationFilterBuilders());
+            }
+        };
+
+        private final IModel<List<String>> pullActionsClasses = new LoadableDetachableModel<List<String>>() {
+
+            private static final long serialVersionUID = 5275935387613157437L;
+
+            @Override
+            protected List<String> load() {
+                return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getPullActions());
+            }
+        };
+
+        private final IModel<List<String>> pushActionsClasses = new LoadableDetachableModel<List<String>>() {
+
+            private static final long serialVersionUID = 5275935387613157437L;
+
+            @Override
+            protected List<String> load() {
+                return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getPushActions());
             }
         };
 
         public Profile(final SchedTaskTO taskTO) {
-            final AjaxTextFieldPanel name = new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(taskTO,
-                    "name"), false);
+            AjaxTextFieldPanel name =
+                    new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(taskTO, "name"), false);
+            name.addRequiredLabel();
             name.setEnabled(true);
             add(name);
 
-            final AjaxTextFieldPanel description = new AjaxTextFieldPanel("description", "description",
-                    new PropertyModel<String>(taskTO, "description"), false);
+            AjaxTextFieldPanel description = new AjaxTextFieldPanel(
+                    "description", "description", new PropertyModel<String>(taskTO, "description"), false);
             description.setEnabled(true);
             add(description);
 
-            final AjaxCheckBoxPanel active = new AjaxCheckBoxPanel("active", "active",
-                    new PropertyModel<Boolean>(taskTO, "active"), false);
+            AjaxCheckBoxPanel active =
+                    new AjaxCheckBoxPanel("active", "active", new PropertyModel<Boolean>(taskTO, "active"), false);
             add(active);
 
-            final WebMarkupContainer pullTaskSpecifics = new WebMarkupContainer("pullTaskSpecifics");
+            AjaxDropDownChoicePanel<String> jobDelegateClassName = new AjaxDropDownChoicePanel<>(
+                    "jobDelegateClassName", "jobDelegateClassName",
+                    new PropertyModel<String>(taskTO, "jobDelegateClassName"), false);
+            jobDelegateClassName.setChoices(taskJobClasses.getObject());
+            jobDelegateClassName.addRequiredLabel();
+            jobDelegateClassName.setEnabled(taskTO.getKey() == null || taskTO.getKey() == 0L);
+            jobDelegateClassName.setStyleSheet("ui-widget-content ui-corner-all long_dynamicsize");
+            add(jobDelegateClassName);
+
+            // ------------------------------
+            // Only for pull tasks
+            // ------------------------------            
+            WebMarkupContainer pullTaskSpecifics = new WebMarkupContainer("pullTaskSpecifics");
             add(pullTaskSpecifics.setRenderBodyOnly(true));
 
             boolean isFiltered = false;
-
             if (taskTO instanceof PullTaskTO) {
                 isFiltered = PullTaskTO.class.cast(taskTO).getPullMode() == PullMode.FILTERED_RECONCILIATION;
             } else {
                 pullTaskSpecifics.setEnabled(false).setVisible(false);
             }
 
-            final AjaxDropDownChoicePanel<PullMode> pullMode = new AjaxDropDownChoicePanel<>("pullMode", "pullMode",
-                    new PropertyModel<PullMode>(taskTO, "pullMode"), false);
+            final AjaxDropDownChoicePanel<PullMode> pullMode = new AjaxDropDownChoicePanel<>(
+                    "pullMode", "pullMode", new PropertyModel<PullMode>(taskTO, "pullMode"), false);
             pullMode.setChoices(Arrays.asList(PullMode.values()));
-            pullMode.setRequired(taskTO instanceof PullTaskTO);
+            if (taskTO instanceof PullTaskTO) {
+                pullMode.addRequiredLabel();
+            }
             pullMode.setNullValid(!(taskTO instanceof PullTaskTO));
             pullTaskSpecifics.add(pullMode);
 
-            final AjaxTextFieldPanel filter = new AjaxTextFieldPanel(
+            final AjaxDropDownChoicePanel<String> reconciliationFilterBuilderClassName = new AjaxDropDownChoicePanel<>(
                     "reconciliationFilterBuilderClassName", "reconciliationFilterBuilderClassName",
                     new PropertyModel<String>(taskTO, "reconciliationFilterBuilderClassName"), false);
-            pullTaskSpecifics.add(filter);
-            filter.setEnabled(isFiltered);
+            reconciliationFilterBuilderClassName.setChoices(reconciliationFilterBuilderClasses.getObject());
+            reconciliationFilterBuilderClassName.setStyleSheet("ui-widget-content ui-corner-all long_dynamicsize");
+            reconciliationFilterBuilderClassName.setEnabled(isFiltered);
+            reconciliationFilterBuilderClassName.setRequired(isFiltered);
+            pullTaskSpecifics.add(reconciliationFilterBuilderClassName);
 
             pullMode.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
@@ -157,75 +208,71 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui
 
                 @Override
                 protected void onUpdate(final AjaxRequestTarget target) {
-                    filter.setEnabled(pullMode.getModelObject() == PullMode.FILTERED_RECONCILIATION);
-                    target.add(filter);
+                    reconciliationFilterBuilderClassName.setEnabled(
+                            pullMode.getModelObject() == PullMode.FILTERED_RECONCILIATION);
+                    reconciliationFilterBuilderClassName.setRequired(
+                            pullMode.getModelObject() == PullMode.FILTERED_RECONCILIATION);
+                    target.add(reconciliationFilterBuilderClassName);
                 }
             });
 
-            final AjaxDropDownChoicePanel<String> destinationRealm = new AjaxDropDownChoicePanel<>(
+            AjaxDropDownChoicePanel<String> destinationRealm = new AjaxDropDownChoicePanel<>(
                     "destinationRealm", "destinationRealm",
                     new PropertyModel<String>(taskTO, "destinationRealm"), false).
                     setChoices(realms);
-            destinationRealm.setRequired(taskTO instanceof PullTaskTO);
+            if (taskTO instanceof PullTaskTO) {
+                destinationRealm.addRequiredLabel();
+            }
             destinationRealm.setNullValid(!(taskTO instanceof PullTaskTO));
             pullTaskSpecifics.add(destinationRealm);
 
-            final AjaxDropDownChoicePanel<String> className = new AjaxDropDownChoicePanel<>(
-                    "jobDelegateClassName",
-                    getString("jobDelegateClassName"),
-                    new PropertyModel<String>(taskTO, "jobDelegateClassName"), false);
+            // ------------------------------
+            // For push and pull tasks
+            // ------------------------------            
+            WebMarkupContainer provisioningTaskSpecifics = new WebMarkupContainer("provisioningTaskSpecifics");
+            add(provisioningTaskSpecifics.setRenderBodyOnly(true));
 
-            className.setChoices(classNames.getObject());
-            className.addRequiredLabel();
-            className.setEnabled(taskTO.getKey() == null || taskTO.getKey() == 0L);
-            className.setStyleSheet("ui-widget-content ui-corner-all long_dynamicsize");
-            add(className);
+            if (taskTO instanceof AbstractProvisioningTaskTO) {
+                jobDelegateClassName.setEnabled(false).setVisible(false);
+            } else {
+                provisioningTaskSpecifics.setEnabled(false).setVisible(false);
+            }
 
-            final WebMarkupContainer provisioningTaskSpecifics = new WebMarkupContainer("provisioningTaskSpecifics");
-            add(provisioningTaskSpecifics.setRenderBodyOnly(true));
+            AjaxPalettePanel<String> actionsClassNames = new AjaxPalettePanel.Builder<String>().
+                    setAllowMoveAll(true).setAllowOrder(true).
+                    build("actionsClassNames",
+                            new PropertyModel<List<String>>(taskTO, "actionsClassNames"),
+                            new ListModel<>(taskTO instanceof PushTaskTO
+                                    ? pushActionsClasses.getObject() : pullActionsClasses.getObject()));
+            actionsClassNames.setOutputMarkupId(true);
+            provisioningTaskSpecifics.add(actionsClassNames);
 
-            final AjaxDropDownChoicePanel<MatchingRule> matchingRule = new AjaxDropDownChoicePanel<>(
+            AjaxDropDownChoicePanel<MatchingRule> matchingRule = new AjaxDropDownChoicePanel<>(
                     "matchingRule", "matchingRule", new PropertyModel<MatchingRule>(taskTO, "matchingRule"), false);
-            provisioningTaskSpecifics.add(matchingRule);
             matchingRule.setChoices(Arrays.asList(MatchingRule.values()));
+            provisioningTaskSpecifics.add(matchingRule);
 
-            final AjaxDropDownChoicePanel<UnmatchingRule> unmatchingRule = new AjaxDropDownChoicePanel<>(
+            AjaxDropDownChoicePanel<UnmatchingRule> unmatchingRule = new AjaxDropDownChoicePanel<>(
                     "unmatchingRule", "unmatchingRule", new PropertyModel<UnmatchingRule>(taskTO, "unmatchingRule"),
                     false);
-            provisioningTaskSpecifics.add(unmatchingRule);
             unmatchingRule.setChoices(Arrays.asList(UnmatchingRule.values()));
+            provisioningTaskSpecifics.add(unmatchingRule);
 
-            final AjaxCheckBoxPanel performCreate = new AjaxCheckBoxPanel(
+            AjaxCheckBoxPanel performCreate = new AjaxCheckBoxPanel(
                     "performCreate", "performCreate", new PropertyModel<Boolean>(taskTO, "performCreate"), false);
             provisioningTaskSpecifics.add(performCreate);
 
-            final AjaxCheckBoxPanel performUpdate = new AjaxCheckBoxPanel(
+            AjaxCheckBoxPanel performUpdate = new AjaxCheckBoxPanel(
                     "performUpdate", "performUpdate", new PropertyModel<Boolean>(taskTO, "performUpdate"), false);
             provisioningTaskSpecifics.add(performUpdate);
 
-            final AjaxCheckBoxPanel performDelete = new AjaxCheckBoxPanel(
+            AjaxCheckBoxPanel performDelete = new AjaxCheckBoxPanel(
                     "performDelete", "performDelete", new PropertyModel<Boolean>(taskTO, "performDelete"), false);
             provisioningTaskSpecifics.add(performDelete);
 
-            final AjaxCheckBoxPanel pullStatus = new AjaxCheckBoxPanel(
+            AjaxCheckBoxPanel pullStatus = new AjaxCheckBoxPanel(
                     "pullStatus", "pullStatus", new PropertyModel<Boolean>(taskTO, "pullStatus"), false);
             provisioningTaskSpecifics.add(pullStatus);
-
-            if (taskTO instanceof AbstractProvisioningTaskTO) {
-                className.setEnabled(false).setVisible(false);
-            } else {
-                provisioningTaskSpecifics.setEnabled(false).setVisible(false);
-            }
-
-            final AjaxTextFieldPanel lastExec = new AjaxTextFieldPanel("lastExec", "lastExec",
-                    new DateFormatROModel(new PropertyModel<String>(taskTO, "lastExec")));
-            lastExec.setEnabled(false);
-            add(lastExec);
-
-            final AjaxTextFieldPanel nextExec = new AjaxTextFieldPanel("nextExec", "nextExec",
-                    new DateFormatROModel(new PropertyModel<String>(taskTO, "nextExec")));
-            nextExec.setEnabled(false);
-            add(nextExec);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index fd495c5..30df39b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -129,7 +129,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 target.add(taskModal.setContent(new SchedTasks(taskModal, pageRef)));
-                taskModal.header(new ResourceModel("task.generic.list", "Scheduled tasks"));
+                taskModal.header(new ResourceModel("task.custom.list"));
                 taskModal.show(true);
             }
         };

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html
index 3d7486b..67df51d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceDetailsPanel.html
@@ -40,8 +40,8 @@ under the License.
         <span wicket:id="randomPwdIfNotProvided">[randomPwdIfNotProvided]</span>
       </div>
 
-      <div class="form-group">
-        <span wicket:id="actionsClasses">[actionsClasses]</span>
+      <div class="form-group" style="display: inline-block;width: 120%;">
+        <span wicket:id="propagationActionsClassNames">[propagationActionsClassNames]</span>
       </div>
 
       <div class="form-group">

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
index 5b21e1f..9a91557 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
@@ -55,7 +55,7 @@ propagationPriority=Propagation priority
 success_connection=Successful connection
 error_connection=Connection failure
 check=Check connection
-actionsClasses=Actions classes
+propagationActionsClassNames=Propagation Actions
 gmapping=Group mapping
 new=New resource
 randomPwdIfNotProvided=Generate random passwords when missing

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
index 1f7d76a..515975c 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
@@ -54,7 +54,7 @@ propagationPriority=Priorit\u00e0 in propagazione
 success_connection=Connessione avvenuta con successo
 error_connection=Connessione non riuscita
 check=Verifica connessione
-actionsClasses=Classi azioni
+propagationActionsClassNames=Azioni di Propagazione
 gmapping=Mapping gruppi
 new=Nuova risorsa
 randomPwdIfNotProvided=Genera password casuali se mancanti

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
index db984d9..a73218f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
@@ -54,7 +54,7 @@ propagationPriority=Prioridade de propaga\u00e7\u00e3o
 success_connection=Conex\u00e3o com sucesso
 error_connection=Conex\u00e3o sem sucesso
 check=Verificar a conex\u00e3o
-actionsClasses=Classes de a\u00e7\u00f5es
+propagationActionsClassNames=A\u00e7\u00f5es de Propaga\u00e7\u00e3o
 gmapping=Mapeamento de grupos
 new=Novo recurso
 randomPwdIfNotProvided=Gerar senhas aleat\u00f3rias quando n\u00e3o houver

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties
index e68cee7..6234fe1 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties
@@ -16,8 +16,8 @@
 # under the License.
 name=Name
 description=Description
-destinationRealm=Destination realm
-jobDelegateClassName=Job
+destinationRealm=Destination Realm
+jobDelegateClassName=Job Delegate
 lastExec=Last execution
 nextExec=Next execution
 active=Active
@@ -26,3 +26,6 @@ any.edit=Edit ${name}
 any.new=New task
 any.finish=Submit ${name}
 any.cancel=Cancel ${name}
+pullMode=Pull Mode
+reconciliationFilterBuilderClassName=Reconciliation Filter Builder
+actionsClassNames=Actions

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties
index f88f658..1a3156f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties
@@ -17,7 +17,7 @@
 name=Nome
 description=Descrizione
 destinationRealm=Realm di destinazione
-jobDelegateClassName=Job
+jobDelegateClassName=JobJob Delegate
 lastExec=Ultima esecuszione
 nextExec=Prossima esecuzione
 active=Attivo
@@ -26,3 +26,6 @@ any.edit=Modifica ${name}
 any.new=Nuovo Task
 any.finish=Invia ${name}
 any.cancel=Annulla ${name}
+pullMode=Pull Mode
+reconciliationFilterBuilderClassName=Reconciliation Filter Builder
+actionsClassNames=Actions

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties
index e68cee7..6234fe1 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties
@@ -16,8 +16,8 @@
 # under the License.
 name=Name
 description=Description
-destinationRealm=Destination realm
-jobDelegateClassName=Job
+destinationRealm=Destination Realm
+jobDelegateClassName=Job Delegate
 lastExec=Last execution
 nextExec=Next execution
 active=Active
@@ -26,3 +26,6 @@ any.edit=Edit ${name}
 any.new=New task
 any.finish=Submit ${name}
 any.cancel=Cancel ${name}
+pullMode=Pull Mode
+reconciliationFilterBuilderClassName=Reconciliation Filter Builder
+actionsClassNames=Actions

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html
index a50f801..db617a5 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html
@@ -23,14 +23,19 @@ under the License.
       <div class="form-group"><span wicket:id="name">[id]</span></div>
       <div class="form-group"><span wicket:id="description">[anyKey]</span></div>
       <div class="form-group"><span wicket:id="active">[active]</span></div>
+
+      <div class="form-group"><span wicket:id="jobDelegateClassName">[jobDelegateClassName]</span></div>
+
       <span wicket:id="pullTaskSpecifics">
         <div class="form-group"><span wicket:id="destinationRealm">[destinationRealm]</span></div>
         <div class="form-group"><span wicket:id="pullMode">[pullMode]</span></div>
         <div class="form-group"><span wicket:id="reconciliationFilterBuilderClassName">[filter]</span></div>
-      </span>
-      <div class="form-group"><span wicket:id="jobDelegateClassName">[jobDelegateClassName]</span></div>
+      </span>      
 
       <span wicket:id="provisioningTaskSpecifics">
+        <div class="form-group" style="display: inline-block;width: 120%;">
+          <span wicket:id="actionsClassNames">[actionsClassNames]</span>
+        </div>
         <div class="form-group"><span wicket:id="matchingRule">[matchingRule]</span></div>
         <div class="form-group"><span wicket:id="unmatchingRule">[unmatchingRule]</span></div>
         <div class="form-group"><span wicket:id="performCreate">[performCreate]</span></div>
@@ -38,9 +43,6 @@ under the License.
         <div class="form-group"><span wicket:id="performDelete">[performDelete]</span></div>
         <div class="form-group"><span wicket:id="pullStatus">[pullStatus]</span></div>
       </span>
-
-      <div class="form-group"><span wicket:id="lastExec">[lastExec]</span></div>
-      <div class="form-group"><span wicket:id="nextExec">[lastExec]</span></div>
     </wicket:panel>
   </body>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
index 20f7260..bba937b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
@@ -50,7 +50,7 @@ under the License.
 
       <wicket:fragment wicket:id="syncopeActions">
         <ul class="menu">
-          <li><i class="fa fa-tasks"></i><a href="#" wicket:id="tasks"><wicket:message key="task.generic.list"/></a></li>
+          <li><i class="fa fa-tasks"></i><a href="#" wicket:id="tasks"><wicket:message key="task.custom.list"/></a></li>
         </ul>
       </wicket:fragment>
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
index 2db9d85..a76ec45 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
@@ -26,7 +26,7 @@ resource.menu.add=Add new resource
 resource.menu.remove=Remove resource
 resource.menu.edit=Edit resource
 
-task.generic.list=Generic tasks
+task.custom.list=Custom tasks
 task.propagation.list=Propagation tasks
 task.pull.list=Pull tasks
 task.push.list=Push tasks

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
index 82f95e8..279e80d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
@@ -26,7 +26,7 @@ resource.menu.add=Aggiungi nuova risorsa
 resource.menu.remove=Rimuovi risorsa
 resource.menu.edit=Modifica risorsa
 
-task.generic.list=Task generici
+task.custom.list=Task personalizzati
 task.propagation.list=Task di propagazione
 task.pull.list=Pull task
 task.push.list=Push task

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
index 2c987e5..5a1aa78 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
@@ -26,7 +26,7 @@ resource.menu.add=Adicionar novo recurso
 resource.menu.remove=Retire recurso
 resource.menu.edit=Alterar recurso
 
-task.generic.list=Generic tasks
+task.custom.list=Custom tasks
 task.propagation.list=Propagation tasks
 task.pull.list=Pull tasks
 task.push.list=Push tasks

http://git-wip-us.apache.org/repos/asf/syncope/blob/97af20e1/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.html
index aaf1ffd..3776906 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.html
@@ -28,7 +28,7 @@ under the License.
       </div>
     </form>
     <wicket:enclosure child="field-label">
-      <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
+      <div><label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/></div>
       <span wicket:id="externalAction"/>
     </wicket:enclosure>
     <span wicket:id="paletteField">[Palette]</span>