syncope-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fmarte...@apache.org
Subject syncope git commit: [SYNCOPE-743] provides task CRUD operations
Date Tue, 02 Feb 2016 16:49:51 GMT
Repository: syncope
Updated Branches:
  refs/heads/master f6924d05f -> 6fb162234


[SYNCOPE-743] provides task CRUD operations


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

Branch: refs/heads/master
Commit: 6fb162234d5c65231daf53bf0914a9004f5803ce
Parents: f6924d0
Author: fmartelli <fabio.martelli@gmail.com>
Authored: Tue Feb 2 17:49:37 2016 +0100
Committer: fmartelli <fabio.martelli@gmail.com>
Committed: Tue Feb 2 17:49:37 2016 +0100

----------------------------------------------------------------------
 .../console/commons/TaskDataProvider.java       |   2 +-
 .../client/console/rest/TaskRestClient.java     |  17 ++-
 .../ProvisioningTaskSearchResultPanel.java      |  23 ++--
 .../tasks/PushTaskSearchResultPanel.java        |   6 ++
 .../syncope/client/console/tasks/PushTasks.java |   6 +-
 .../tasks/SchedTaskSearchResultPanel.java       |  21 ++--
 .../console/tasks/SchedTaskWizardBuilder.java   | 106 +++++++++++++++++--
 .../client/console/tasks/SchedTasks.java        |   6 +-
 .../tasks/SyncTaskSearchResultPanel.java        |   6 ++
 .../syncope/client/console/tasks/SyncTasks.java |   6 +-
 .../client/console/tasks/TaskExecutions.java    |  16 +--
 .../tasks/SchedTaskSearchResultPanel.properties |   1 +
 .../SchedTaskSearchResultPanel_it.properties    |   1 +
 .../SchedTaskSearchResultPanel_pt_BR.properties |   1 +
 .../tasks/SchedTaskWizardBuilder$Profile.html   |  16 +++
 .../SchedTaskWizardBuilder$Profile.properties   |   6 ++
 ...SchedTaskWizardBuilder$Profile_it.properties |   6 ++
 ...edTaskWizardBuilder$Profile_pt_BR.properties |   8 +-
 .../tasks/TaskExecutionDetails.properties       |   2 +
 .../tasks/TaskExecutionDetails_it.properties    |   2 +
 .../tasks/TaskExecutionDetails_pt_BR.properties |   2 +
 .../tasks/TaskSearchResultPanel.properties      |   2 +
 .../tasks/TaskSearchResultPanel_it.properties   |   2 +
 .../TaskSearchResultPanel_pt_BR.properties      |   2 +
 24 files changed, 213 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
index a639b1a..163b079 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
@@ -31,7 +31,7 @@ public abstract class TaskDataProvider<T extends AbstractTaskTO> extends
Searcha
 
     private final SortableDataProviderComparator<T> comparator;
 
-    private final TaskType id;
+    protected final TaskType id;
 
     private final TaskRestClient taskRestClient;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/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 668aae5..7dc5ef4 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
@@ -68,6 +68,11 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 list(new TaskQuery.Builder().type(kind).page(1).size(1).build()).getTotalCount();
     }
 
+    public int count(final String resource, final TaskType kind) {
+        return getService(TaskService.class).
+                list(new TaskQuery.Builder().resource(resource).type(kind).page(1).size(1).build()).getTotalCount();
+    }
+
     public int countExecutions(final Long taskId) {
         return getService(TaskService.class).
                 listExecutions(new TaskExecQuery.Builder().key(taskId).page(1).size(1).build()).getTotalCount();
@@ -160,19 +165,11 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
         getService(TaskService.class).deleteExecution(taskExecId);
     }
 
-    public void createSyncTask(final SyncTaskTO taskTO) {
+    public void create(final SchedTaskTO taskTO) {
         getService(TaskService.class).create(taskTO);
     }
 
-    public void createSchedTask(final SchedTaskTO taskTO) {
-        getService(TaskService.class).create(taskTO);
-    }
-
-    public void updateSchedTask(final SchedTaskTO taskTO) {
-        getService(TaskService.class).update(taskTO);
-    }
-
-    public void updateSyncTask(final SyncTaskTO taskTO) {
+    public void update(final SchedTaskTO taskTO) {
         getService(TaskService.class).update(taskTO);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskSearchResultPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskSearchResultPanel.java
index 2728065..86f3027 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskSearchResultPanel.java
@@ -24,6 +24,8 @@ import java.util.Iterator;
 import java.util.List;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 import org.apache.syncope.common.lib.to.AbstractProvisioningTaskTO;
+import org.apache.syncope.common.lib.to.SyncTaskTO;
+import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
@@ -46,6 +48,8 @@ public abstract class ProvisioningTaskSearchResultPanel<T extends AbstractProvis
         super(id, reference, pageRef);
         this.resource = resource;
 
+        this.schedTaskTO.setResource(resource);
+
         // super in order to call the parent implementation
         super.initResultTable();
     }
@@ -68,6 +72,11 @@ public abstract class ProvisioningTaskSearchResultPanel<T extends AbstractProvis
         columns.add(new PropertyColumn<T, String>(
                 new StringResourceModel("description", this, null), "description", "description"));
 
+        if (reference == SyncTaskTO.class) {
+            columns.add(new PropertyColumn<T, String>(
+                    new StringResourceModel("destinationRealm", this, null), "destinationRealm",
"destinationRealm"));
+        }
+
         columns.add(new DatePropertyColumn<T>(
                 new StringResourceModel("lastExec", this, null), "lastExec", "lastExec"));
 
@@ -83,23 +92,23 @@ public abstract class ProvisioningTaskSearchResultPanel<T extends AbstractProvis
         return columns;
     }
 
-    @Override
-    protected ProvisioningTasksProvider<T> dataProvider() {
-        return new ProvisioningTasksProvider<T>(reference, rows);
-    }
-
     public class ProvisioningTasksProvider<T extends AbstractProvisioningTaskTO> extends
SchedTasksProvider<T> {
 
         private static final long serialVersionUID = 4725679400450513556L;
 
         private final Class<T> reference;
 
-        public ProvisioningTasksProvider(final Class<T> reference, final int paginatorRows)
{
-            super(reference, paginatorRows);
+        public ProvisioningTasksProvider(final Class<T> reference, final TaskType id,
final int paginatorRows) {
+            super(reference, id, paginatorRows);
             this.reference = reference;
         }
 
         @Override
+        public long size() {
+            return restClient.count(resource, id);
+        }
+
+        @Override
         public Iterator<T> iterator(final long first, final long count) {
             final int page = ((int) first / paginatorRows);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskSearchResultPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskSearchResultPanel.java
index ad67040..ad52c35 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskSearchResultPanel.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.tasks;
 
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.wicket.PageReference;
 
 /**
@@ -37,4 +38,9 @@ public abstract class PushTaskSearchResultPanel extends ProvisioningTaskSearchRe
     protected String paginatorRowsKey() {
         return Constants.PREF_PUSH_TASKS_PAGINATOR_ROWS;
     }
+
+    @Override
+    protected ProvisioningTasksProvider<PushTaskTO> dataProvider() {
+        return new ProvisioningTasksProvider<PushTaskTO>(reference, TaskType.PUSH,
rows);
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTasks.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTasks.java
index cc69bae..fc816f6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTasks.java
@@ -26,6 +26,8 @@ import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.PushTaskTO;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.StringResourceModel;
 
 public class PushTasks extends AbstractTasks {
 
@@ -43,7 +45,9 @@ public class PushTasks extends AbstractTasks {
 
             @Override
             protected void viewTask(final PushTaskTO taskTO, final AjaxRequestTarget target)
{
-                mlp.next("task.view", new TaskExecutionDetails<PushTaskTO>(taskTO,
pageReference), target);
+                mlp.next(
+                        new StringResourceModel("task.view", this, new Model<>(taskTO)).getObject(),
+                        new TaskExecutionDetails<PushTaskTO>(taskTO, pageReference),
target);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
index db6271d..ac00e03 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
@@ -23,7 +23,6 @@ import static org.apache.wicket.Component.ENABLE;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.SerializationUtils;
@@ -67,16 +66,20 @@ public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO>
extends
 
     protected final Class<T> reference;
 
+    protected T schedTaskTO;
+
     protected SchedTaskSearchResultPanel(final String id, final Class<T> reference,
final PageReference pageRef) {
         super(id, pageRef);
         this.reference = reference;
 
         try {
-            this.addNewItemPanelBuilder(new SchedTaskWizardBuilder<T>(reference.newInstance(),
pageRef), true);
+            schedTaskTO = reference.newInstance();
         } catch (InstantiationException | IllegalAccessException e) {
             LOG.error("Falure instantiating task", e);
         }
 
+        this.addNewItemPanelBuilder(new SchedTaskWizardBuilder<T>(schedTaskTO, pageRef),
true);
+
         MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.TASK_CREATE);
 
         initResultTable();
@@ -185,9 +188,7 @@ public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO>
extends
                                 final T clone = SerializationUtils.clone(model.getObject());
                                 clone.setKey(0L);
                                 send(SchedTaskSearchResultPanel.this, Broadcast.EXACT,
-                                        new AjaxWizard.EditItemActionEvent<>(
-                                                restClient.readSchedTask(reference, model.getObject().getKey()),
-                                                target));
+                                        new AjaxWizard.EditItemActionEvent<>(clone,
target));
                             }
                         }, ActionLink.ActionType.CLONE, StandardEntitlement.TASK_READ).
                         add(new ActionLink<T>() {
@@ -197,7 +198,7 @@ public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO>
extends
                             @Override
                             public void onClick(final AjaxRequestTarget target, final T ignore)
{
                                 try {
-                                    restClient.startExecution(taskTO.getKey(), new Date());
+                                    restClient.startExecution(taskTO.getKey(), null);
                                     info(getString(Constants.OPERATION_SUCCEEDED));
                                     target.add(container);
                                 } catch (SyncopeClientException e) {
@@ -214,7 +215,7 @@ public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO>
extends
                             @Override
                             public void onClick(final AjaxRequestTarget target, final T ignore)
{
                                 try {
-                                    restClient.startExecution(taskTO.getKey(), new Date(),
true);
+                                    restClient.startExecution(taskTO.getKey(), null, true);
                                     info(getString(Constants.OPERATION_SUCCEEDED));
                                     target.add(container);
                                 } catch (SyncopeClientException e) {
@@ -283,7 +284,7 @@ public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO>
extends
 
     @Override
     protected SchedTasksProvider<T> dataProvider() {
-        return new SchedTasksProvider<T>(reference, rows);
+        return new SchedTasksProvider<T>(reference, TaskType.SCHEDULED, rows);
     }
 
     public class SchedTasksProvider<T extends SchedTaskTO> extends TaskDataProvider<T>
{
@@ -292,8 +293,8 @@ public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO>
extends
 
         private final Class<T> reference;
 
-        public SchedTasksProvider(final Class<T> reference, final int paginatorRows)
{
-            super(paginatorRows, TaskType.SCHEDULED, restClient);
+        public SchedTasksProvider(final Class<T> reference, final TaskType id, final
int paginatorRows) {
+            super(paginatorRows, id, restClient);
             this.reference = reference;
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/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 621a1ea..d642a80 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
@@ -17,18 +17,27 @@ package org.apache.syncope.client.console.tasks;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.DateFormatROModel;
 import org.apache.syncope.client.console.rest.TaskRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizardBuilder;
-import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.to.AbstractProvisioningTaskTO;
 import org.apache.syncope.common.lib.to.SchedTaskTO;
 import org.apache.syncope.common.lib.to.SyncTaskTO;
+import org.apache.syncope.common.lib.types.MatchingRule;
+import org.apache.syncope.common.lib.types.SyncMode;
+import org.apache.syncope.common.lib.types.UnmatchingRule;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.extensions.wizard.WizardStep;
+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;
@@ -37,6 +46,8 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends
AjaxWizardBui
 
     private static final long serialVersionUID = 5945391813567245081L;
 
+    private final TaskRestClient taskRestClient = new TaskRestClient();
+
     /**
      * Construct.
      *
@@ -49,7 +60,12 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends
AjaxWizardBui
 
     @Override
     protected Serializable onApplyInternal(final SchedTaskTO modelObject) {
-        return null;
+        if (modelObject.getKey() == null || modelObject.getKey() == 0L) {
+            taskRestClient.create(modelObject);
+        } else {
+            taskRestClient.update(modelObject);
+        }
+        return modelObject;
     }
 
     @Override
@@ -75,19 +91,60 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends
AjaxWizardBui
 
         public Profile(final SchedTaskTO taskTO) {
             final AjaxTextFieldPanel name
-                    = new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(taskTO,
"name"));
+                    = new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(taskTO,
"name"), false);
             name.setEnabled(true);
             add(name);
 
             final AjaxTextFieldPanel description = new AjaxTextFieldPanel("description",
"description",
-                    new PropertyModel<String>(taskTO, "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);
+            add(active);
+
+            final WebMarkupContainer syncTaskSpecifics = new WebMarkupContainer("syncTaskSpecifics");
+            add(syncTaskSpecifics.setRenderBodyOnly(true));
+
+            boolean isFiltered = false;
+
+            if (taskTO instanceof SyncTaskTO) {
+                isFiltered = SyncTaskTO.class.cast(taskTO).getSyncMode() == SyncMode.FILTERED_RECONCILIATION;
+            } else {
+                syncTaskSpecifics.setEnabled(false).setVisible(false);
+            }
+
+            final AjaxDropDownChoicePanel<SyncMode> syncMode = new AjaxDropDownChoicePanel<>("syncMode",
"syncMode",
+                    new PropertyModel<SyncMode>(taskTO, "syncMode"), false);
+            syncTaskSpecifics.add(syncMode);
+            syncMode.setChoices(Arrays.asList(SyncMode.values()));
+
+            final AjaxTextFieldPanel filter = new AjaxTextFieldPanel(
+                    "reconciliationFilterBuilderClassName", "reconciliationFilterBuilderClassName",
+                    new PropertyModel<String>(taskTO, "reconciliationFilterBuilderClassName"),
false);
+            syncTaskSpecifics.add(filter);
+            filter.setEnabled(isFiltered);
+
+            syncMode.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE)
{
+
+                private static final long serialVersionUID = -1107858522700306810L;
+
+                @Override
+                protected void onUpdate(final AjaxRequestTarget target) {
+                    filter.setEnabled(syncMode.getModelObject() == SyncMode.FILTERED_RECONCILIATION);
+                    target.add(filter);
+                }
+            });
+
+            final AjaxTextFieldPanel destinationRealm = new AjaxTextFieldPanel("destinationRealm",
"destinationRealm",
+                    new PropertyModel<String>(taskTO, "destinationRealm"), false);
+            syncTaskSpecifics.add(destinationRealm);
+
             final AjaxDropDownChoicePanel<String> className = new AjaxDropDownChoicePanel<String>(
                     "jobDelegateClassName",
                     getString("jobDelegateClassName"),
-                    new PropertyModel<String>(taskTO, "jobDelegateClassName"));
+                    new PropertyModel<String>(taskTO, "jobDelegateClassName"), false);
 
             className.setChoices(classNames.getObject());
             className.addRequiredLabel();
@@ -95,19 +152,52 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends
AjaxWizardBui
             className.setStyleSheet("ui-widget-content ui-corner-all long_dynamicsize");
             add(className);
 
-            if (taskTO instanceof SyncTaskTO || taskTO instanceof PushTaskTO) {
+            final WebMarkupContainer provisioningTaskSpecifics = new WebMarkupContainer("provisioningTaskSpecifics");
+            add(provisioningTaskSpecifics.setRenderBodyOnly(true));
+
+            final AjaxDropDownChoicePanel<MatchingRule> matchingRule = new AjaxDropDownChoicePanel<>(
+                    "matchingRule", "matchingRule", new PropertyModel<MatchingRule>(taskTO,
"matchingRule"), false);
+            provisioningTaskSpecifics.add(matchingRule);
+            matchingRule.setChoices(Arrays.asList(MatchingRule.values()));
+
+            final AjaxDropDownChoicePanel<UnmatchingRule> unmatchingRule = new AjaxDropDownChoicePanel<>(
+                    "unmatchingRule", "unmatchingRule", new PropertyModel<UnmatchingRule>(taskTO,
"unmatchingRule"),
+                    false);
+            provisioningTaskSpecifics.add(unmatchingRule);
+            unmatchingRule.setChoices(Arrays.asList(UnmatchingRule.values()));
+
+            final AjaxCheckBoxPanel performCreate = new AjaxCheckBoxPanel(
+                    "performCreate", "performCreate", new PropertyModel<Boolean>(taskTO,
"performCreate"), false);
+            provisioningTaskSpecifics.add(performCreate);
+
+            final AjaxCheckBoxPanel performUpdate = new AjaxCheckBoxPanel(
+                    "performUpdate", "performUpdate", new PropertyModel<Boolean>(taskTO,
"performUpdate"), false);
+            provisioningTaskSpecifics.add(performUpdate);
+
+            final AjaxCheckBoxPanel performDelete = new AjaxCheckBoxPanel(
+                    "performDelete", "performDelete", new PropertyModel<Boolean>(taskTO,
"performDelete"), false);
+            provisioningTaskSpecifics.add(performDelete);
+
+            final AjaxCheckBoxPanel syncStatus = new AjaxCheckBoxPanel(
+                    "syncStatus", "syncStatus", new PropertyModel<Boolean>(taskTO,
"syncStatus"), false);
+            provisioningTaskSpecifics.add(syncStatus);
+
+            if (taskTO instanceof AbstractProvisioningTaskTO) {
                 className.setEnabled(false).setVisible(false);
+            } else {
+                provisioningTaskSpecifics.setEnabled(false).setVisible(false);
             }
 
-            final AjaxTextFieldPanel lastExec = new AjaxTextFieldPanel("lastExec", getString("lastExec"),
+            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", getString("nextExec"),
+            final AjaxTextFieldPanel nextExec = new AjaxTextFieldPanel("nextExec", "nextExec",
                     new DateFormatROModel(new PropertyModel<String>(taskTO, "nextExec")));
             nextExec.setEnabled(false);
             add(nextExec);
+
 //
 //            final AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(APPLY))
{
 //

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
index 3146dc7..0d54327 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
@@ -24,6 +24,8 @@ import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.SchedTaskTO;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.StringResourceModel;
 
 public class SchedTasks extends AbstractTasks {
 
@@ -42,7 +44,9 @@ public class SchedTasks extends AbstractTasks {
 
             @Override
             protected void viewTask(final SchedTaskTO taskTO, final AjaxRequestTarget target)
{
-//                mlp.next("task.view", new SchedTaskDetails(taskTO, pageReference), target);
+                mlp.next(
+                        new StringResourceModel("task.view", this, new Model<>(taskTO)).getObject(),
+                        new TaskExecutionDetails<SchedTaskTO>(taskTO, pageReference),
target);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTaskSearchResultPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTaskSearchResultPanel.java
index 5fa1802..d48ef4c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTaskSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTaskSearchResultPanel.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.tasks;
 
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.common.lib.to.SyncTaskTO;
+import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.wicket.PageReference;
 
 /**
@@ -37,4 +38,9 @@ public abstract class SyncTaskSearchResultPanel extends ProvisioningTaskSearchRe
     protected String paginatorRowsKey() {
         return Constants.PREF_PUSH_TASKS_PAGINATOR_ROWS;
     }
+
+    @Override
+    protected ProvisioningTasksProvider<SyncTaskTO> dataProvider() {
+        return new ProvisioningTasksProvider<SyncTaskTO>(reference, TaskType.SYNCHRONIZATION,
rows);
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTasks.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTasks.java
index 4c2dbe2..90bbcdb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTasks.java
@@ -26,6 +26,8 @@ import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.SyncTaskTO;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.StringResourceModel;
 
 public class SyncTasks extends AbstractTasks {
 
@@ -43,7 +45,9 @@ public class SyncTasks extends AbstractTasks {
 
             @Override
             protected void viewTask(final SyncTaskTO taskTO, final AjaxRequestTarget target)
{
-                mlp.next("task.view", new TaskExecutionDetails<SyncTaskTO>(taskTO,
pageReference), target);
+                mlp.next(
+                        new StringResourceModel("task.view", this, new Model<>(taskTO)).getObject(),
+                        new TaskExecutionDetails<SyncTaskTO>(taskTO, pageReference),
target);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
index 98de659..57fc870 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
@@ -42,12 +42,12 @@ import org.apache.syncope.common.lib.to.TaskExecTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
 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 TaskExecutions
         extends AbstractSearchResultPanel<TaskExecTO, TaskExecTO, TaskExecProvider, TaskRestClient>
{
@@ -72,8 +72,6 @@ public abstract class TaskExecutions
     protected List<IColumn<TaskExecTO, String>> getColumns() {
         final List<IColumn<TaskExecTO, String>> columns = new ArrayList<IColumn<TaskExecTO,
String>>();
 
-        final int paginatorRows = 10;
-
         columns.add(new PropertyColumn<TaskExecTO, String>(new ResourceModel("key"),
"key", "key"));
 
         columns.add(new DatePropertyColumn<TaskExecTO>(new ResourceModel("start"),
"start", "start"));
@@ -101,7 +99,7 @@ public abstract class TaskExecutions
 
                             @Override
                             public void onClick(final AjaxRequestTarget target, final TaskExecTO
ignore) {
-                                next("execution.view",
+                                next(new StringResourceModel("execution.view", TaskExecutions.this,
model).getObject(),
                                         new ExecMessage(model.getObject().getMessage()),
target);
                             }
                         }, ActionLink.ActionType.SEARCH, StandardEntitlement.TASK_READ).
@@ -138,15 +136,7 @@ public abstract class TaskExecutions
                     @Override
                     public void onClick(final AjaxRequestTarget target, final Serializable
ignore) {
                         if (target != null) {
-                            final AjaxFallbackDefaultDataTable<TaskExecTO, String>
currentTable
-                                    = new AjaxFallbackDefaultDataTable<TaskExecTO, String>(
-                                            "executionsTable",
-                                            columns,
-                                            new TaskExecProvider(taskTO.getKey(), paginatorRows),
-                                            paginatorRows);
-                            currentTable.setOutputMarkupId(true);
-                            target.add(currentTable);
-                            addOrReplace(currentTable);
+                            target.add(container);
                         }
                     }
                 }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.properties
index 9d390f2..e68cee7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.properties
@@ -16,6 +16,7 @@
 # under the License.
 name=Name
 description=Description
+destinationRealm=Destination realm
 jobDelegateClassName=Job
 lastExec=Last execution
 nextExec=Next execution

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_it.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_it.properties
index 70e4730..f88f658 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_it.properties
@@ -16,6 +16,7 @@
 # under the License.
 name=Nome
 description=Descrizione
+destinationRealm=Realm di destinazione
 jobDelegateClassName=Job
 lastExec=Ultima esecuszione
 nextExec=Prossima esecuzione

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_pt_BR.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_pt_BR.properties
index 9d390f2..e68cee7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_pt_BR.properties
@@ -16,6 +16,7 @@
 # under the License.
 name=Name
 description=Description
+destinationRealm=Destination realm
 jobDelegateClassName=Job
 lastExec=Last execution
 nextExec=Next execution

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/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 0136a05..1925785 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
@@ -22,7 +22,23 @@ under the License.
     <wicket:panel>
       <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>
+      <span wicket:id="syncTaskSpecifics">
+        <div class="form-group"><span wicket:id="destinationRealm">[destinationRealm]</span></div>
+        <div class="form-group"><span wicket:id="syncMode">[syncMode]</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 wicket:id="provisioningTaskSpecifics">
+        <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>
+        <div class="form-group"><span wicket:id="performUpdate">[performUpdate]</span></div>
+        <div class="form-group"><span wicket:id="performDelete">[performDelete]</span></div>
+        <div class="form-group"><span wicket:id="syncStatus">[syncStatus]</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>

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.properties
index 30bb712..10c27ec 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.properties
@@ -17,6 +17,12 @@
 name=Name
 description=Description
 jobDelegateClassName=Class
+matchingRule=Matching rule
+unmatchingRule=Unmatching rule
+performCreate=Synchronize created objects
+performUpdate=Synchronize updated objects
+performDelete=Synchronize deleted objects
+syncStatus=Synchronize status
 lastExec=Last Execution
 nextExec=Next Execution
 detail=Detail

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_it.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_it.properties
index 30bb712..62edea3 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_it.properties
@@ -17,6 +17,12 @@
 name=Name
 description=Description
 jobDelegateClassName=Class
+matchingRule=Regola di matching
+unmatchingRule=Regola di unmatching
+performCreate=Sincronizza oggetti creati
+performUpdate=Sincronizza oggetti modificati
+performDelete=Sincronizza oggetti rimossi
+syncStatus=Sincronizza stato
 lastExec=Last Execution
 nextExec=Next Execution
 detail=Detail

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_pt_BR.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_pt_BR.properties
index 30bb712..5e07a6b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile_pt_BR.properties
@@ -16,7 +16,13 @@
 # under the License.
 name=Name
 description=Description
-jobDelegateClassName=Class
+jobDelegateClassName=ClassmatchingRule=Matching rule
+matchingRule=Matching rule
+unmatchingRule=Unmatching rule
+performCreate=Synchronize created objects
+performUpdate=Synchronize updated objects
+performDelete=Synchronize deleted objects
+syncStatus=Synchronize status
 lastExec=Last Execution
 nextExec=Next Execution
 detail=Detail

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.properties
index 43c8575..e61a012 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.properties
@@ -16,3 +16,5 @@
 # under the License.
 start=Start
 end=End
+
+execution.view=Result status of execution '${key}'

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_it.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_it.properties
index 43c8575..5eb816a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_it.properties
@@ -16,3 +16,5 @@
 # under the License.
 start=Start
 end=End
+
+execution.view=Risultato dello stato dell'esecuzione '${key}'

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_pt_BR.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_pt_BR.properties
index 43c8575..e61a012 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails_pt_BR.properties
@@ -16,3 +16,5 @@
 # under the License.
 start=Start
 end=End
+
+execution.view=Result status of execution '${key}'

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.properties
index 5a0d29c..65ce5d1 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.properties
@@ -20,3 +20,5 @@ title=Task
 
 key=Id
 latestExecStatus=Last execution status
+
+task.view=Executions of task '${key}'

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_it.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_it.properties
index 1d9b447..1d1f8e3 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_it.properties
@@ -20,3 +20,5 @@ title=Task
 
 key=Id
 latestExecStatus=Stato ultima esecuzione
+
+task.view=Esecuzioni del task '${key}'

http://git-wip-us.apache.org/repos/asf/syncope/blob/6fb16223/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_pt_BR.properties
b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_pt_BR.properties
index 1d9b447..0440e71 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_pt_BR.properties
@@ -20,3 +20,5 @@ title=Task
 
 key=Id
 latestExecStatus=Stato ultima esecuzione
+
+task.view=Executions of task '${key}'


Mime
View raw message