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

[1/2] syncope git commit: [SYNCOPE-743] providing sched tasks management

Repository: syncope
Updated Branches:
  refs/heads/master fa28888fe -> a4a9ef568


http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html
new file mode 100644
index 0000000..ac755e8
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <head><title></title></head>
+  <wicket:panel>
+    <span wicket:id="tasks">[TASKS]</span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.html
new file mode 100644
index 0000000..241141d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.html
@@ -0,0 +1,37 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <head><title></title></head>
+  <body>
+    <wicket:panel>
+      <label for="cron"><wicket:message key="cron"/></label>
+      <div id="schedule" class="form-group">
+        <span wicket:id="seconds"/>
+        <span wicket:id="minutes"/>
+        <span wicket:id="hours"/>
+        <span wicket:id="daysOfMonth"/>
+        <span wicket:id="months"/>
+        <span wicket:id="daysOfWeek"/>
+      </div>
+      <div id="templates" class="form-group">
+        <span wicket:id="cronTemplateChooser"/>
+      </div>
+    </wicket:panel>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.properties
new file mode 100644
index 0000000..4d3bb87
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel.properties
@@ -0,0 +1,25 @@
+# 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.
+cron=Schedule (seconds, minutes, hours, days of month, months, days of week)
+cronTemplateChooser=Templates
+chooseForTemplate=Templates
+selOpt1=Unschedule
+selOpt2=Every 5 minutes
+selOpt3=Fire at 12pm (noon) every day
+selOpt4=Fire at 12am (midnight) every first day of the month
+selOpt5=Fire at 12am (midnight) every last day of the month
+selOpt6=Fire at 12am (midnight) every Monday

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_it.properties
new file mode 100644
index 0000000..29ffcf4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_it.properties
@@ -0,0 +1,25 @@
+# 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.
+cron=Schedule (secondi, minuti, ore, giorni del mese, mesi, giorni della settimana)
+cronTemplateChooser=Modelli
+chooseForTemplate=Modelli
+selOpt1=Non schedulato
+selOpt2=Ogni 5 minuti
+selOpt3=Lanciato ogni giorno a mezzanotte
+selOpt4=Lanciato ogni primo giorno del mese a mezzogiorno
+selOpt5=Lanciato ogni ultimo giorno del mese a mezzogiorno
+selOpt6=Lanciato ogni Luned\u00ec a mezzogiorno

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_pt_BR.properties
new file mode 100644
index 0000000..7df5cc4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/CrontabPanel_pt_BR.properties
@@ -0,0 +1,25 @@
+# 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.
+cron=Agendar (segundos, minutos, horas, dias do m\u00EAs, meses, dias da semana)
+cronTemplateChooser=Templates
+chooseForTemplate=Templates
+selOpt1=N\u00e3o Agendado
+selOpt2=A cada 5 minutos
+selOpt3=Acionar \u00e0s 12\:00 todos os dias
+selOpt4=Acionar \u00e0s 24\:00 sempre no primeiro dia de cada m\u00eas
+selOpt5=Acionar \u00e0s 24\:00 sempre no \u00faltimo dia de cada m\u00eas
+selOpt6=Acionar \u00e0s 24\:00 de toda Segunda Feira

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_it.properties
new file mode 100644
index 0000000..f176210
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_it.properties
@@ -0,0 +1,18 @@
+# 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.
+anyKey=Object Id
+resource=Risorsa

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_pt_BR.properties
new file mode 100644
index 0000000..4a36305
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskDetails$Profile_pt_BR.properties
@@ -0,0 +1,18 @@
+# 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.
+anyKey=Object key
+resource=Resource

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.properties
index 768cea5..a882f45 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.properties
@@ -14,19 +14,9 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-profile=Profile
-executions=Executions
-title=Task
-connObjectKey=Remote Object id
-anyKey=Local Object id
-resource=Resource
-start=Start date
-end=End date
-status=Status
-message=Message
-taskExecutions=Task executions
-delete=Delete
-showMessage=Show
-anyTypeKind=Involved object
 operation=Operation
-latestExecStatus=Latest exec status
+anyTypeKind=Involved object
+anyKey=Local id
+connObjectKey=Remote Id
+start=Start
+end=End

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_it.properties
new file mode 100644
index 0000000..13e1fb1
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_it.properties
@@ -0,0 +1,22 @@
+# 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.
+operation=Operazione
+anyTypeKind=Oggetto coinvolto
+anyKey=Id locale
+connObjectKey=Id remoto
+start=Inizio
+end=Fine

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_pt_BR.properties
new file mode 100644
index 0000000..a882f45
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel_pt_BR.properties
@@ -0,0 +1,22 @@
+# 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.
+operation=Operation
+anyTypeKind=Involved object
+anyKey=Local id
+connObjectKey=Remote Id
+start=Start
+end=End

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTasks.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTasks.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTasks.html
deleted file mode 100644
index ac755e8..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/PropagationTasks.html
+++ /dev/null
@@ -1,24 +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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head><title></title></head>
-  <wicket:panel>
-    <span wicket:id="tasks">[TASKS]</span>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..18a180c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.properties
@@ -0,0 +1,22 @@
+# 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.
+name=Name
+description=Description
+jobDelegateClassName=Job
+lastExec=Last execution
+nextExec=Next execution
+active=Active

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..6db5e5d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_it.properties
@@ -0,0 +1,22 @@
+# 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.
+name=Nome
+description=Descrizione
+jobDelegateClassName=Job
+lastExec=Ultima esecuszione
+nextExec=Prossima esecuzione
+active=Attivo

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..18a180c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel_pt_BR.properties
@@ -0,0 +1,22 @@
+# 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.
+name=Name
+description=Description
+jobDelegateClassName=Job
+lastExec=Last execution
+nextExec=Next execution
+active=Active

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDetails.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDetails.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDetails.properties
deleted file mode 100644
index e19ad94..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDetails.properties
+++ /dev/null
@@ -1,26 +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.
-profile=Profile
-executions=Executions
-title=Task
-start=Start date
-end=End date
-status=Status
-message=Message
-taskExecutions=Task executions
-delete=Delete
-showMessage=Show

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..5a0d29c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.properties
@@ -0,0 +1,22 @@
+# 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.
+profile=Profile
+executions=Executions
+title=Task
+
+key=Id
+latestExecStatus=Last execution status

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..1d9b447
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_it.properties
@@ -0,0 +1,22 @@
+# 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.
+profile=Profilo
+executions=Esecuzioni
+title=Task
+
+key=Id
+latestExecStatus=Stato ultima esecuzione

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..1d9b447
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskSearchResultPanel_pt_BR.properties
@@ -0,0 +1,22 @@
+# 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.
+profile=Profilo
+executions=Esecuzioni
+title=Task
+
+key=Id
+latestExecStatus=Stato ultima esecuzione

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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 cd9654d..3dd4ed8 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
@@ -15,17 +15,17 @@
 # specific language governing permissions and limitations
 # under the License.
 connector.new=New connector
+connector.edit=Edit connector {0}
 connector.menu.add=Add new connector
 connector.menu.remove=Remove connector
 connector.menu.edit=Edit connector
 
 resource.new=New resource
+resource.edit=Edit resource {0}
 resource.menu.add=Add new resource
 resource.menu.remove=Remove resource
 resource.menu.edit=Edit resource
 
-connector.edit=Edit connector {0}
-resource.edit=Edit resource {0}
 task.generic.list=Generic tasks
 task.propagation.list=Propagation tasks
 task.synchronization.list=Synchronization tasks

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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 da88de1..6641a6f 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
@@ -15,15 +15,17 @@
 # specific language governing permissions and limitations
 # under the License.
 connector.new=Nuovo connettore
-resource.new=Nuova risorsa
 connector.edit=Modifica connettore {0}
-resource.edit=Modifica risorsa {0}
 connector.menu.add=Aggiungi nuovo connettore
 connector.menu.remove=Rimuovi connettore
 connector.menu.edit=Modifica connettore
+
+resource.new=Nuova risorsa
+resource.edit=Modifica risorsa {0}
 resource.menu.add=Aggiungi nuova risorsa
 resource.menu.remove=Rimuovi risorsa
 resource.menu.edit=Modifica risorsa
+
 task.generic.list=Task generici
 task.propagation.list=Task di propagazione
 task.synchronization.list=Task di sincronizzazione

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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 5484c4b..06d3608 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
@@ -15,15 +15,17 @@
 # specific language governing permissions and limitations
 # under the License.
 connector.new=Novo conector
-resource.new=Novo recurso
 connector.edit=Alterar conector {0}
-resource.edit=Alterar recurso {0}
 connector.menu.add=Adicionar novo conector
 connector.menu.remove=Retire conector
 connector.menu.edit=Alterar conector
+
+resource.new=Novo recurso
+resource.edit=Alterar recurso {0}
 resource.menu.add=Adicionar novo recurso
 resource.menu.remove=Retire recurso
 resource.menu.edit=Alterar recurso
+
 task.generic.list=Generic tasks
 task.propagation.list=Propagation tasks
 task.synchronization.list=Synchronization tasks

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
index 3297c34..f89ff38 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
@@ -125,7 +125,7 @@ under the License.
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentDryRun">
-      <a href="#" wicket:id="dryRunLink" class="btn"><img id="actionLink" src="img/actions/dryrun.png" alt="dryrun icon" title="DryRun"/></a>
+      <a href="#" wicket:id="dryRunLink" class="btn"><i class="fa fa-gears" alt="dryrun icon" title="DryRun"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentExecute">


[2/2] syncope git commit: [SYNCOPE-743] providing sched tasks management

Posted by fm...@apache.org.
[SYNCOPE-743] providing sched tasks management


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

Branch: refs/heads/master
Commit: a4a9ef568d29a591055dfb7fea625cc9bea28e5b
Parents: fa28888
Author: fmartelli <fa...@gmail.com>
Authored: Thu Jan 28 18:28:49 2016 +0100
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Jan 28 18:28:49 2016 +0100

----------------------------------------------------------------------
 .../client/console/commons/Constants.java       |   2 +
 .../console/commons/DateFormatROModel.java      |  50 ++++
 .../console/commons/TaskDataProvider.java       |  61 +++++
 .../client/console/rest/TaskRestClient.java     |  14 +
 .../console/tasks/AbstractSchedTaskDetails.java | 199 ++++++++++++++
 .../client/console/tasks/AbstractTasks.java     |  49 ++++
 .../client/console/tasks/CrontabPanel.java      | 186 +++++++++++++
 .../tasks/PropagationTaskSearchResultPanel.java |  85 +-----
 .../client/console/tasks/PropagationTasks.java  |  21 +-
 .../ProvisioningTaskSearchResultPanel.java      | 113 ++++++++
 .../tasks/PushTaskSearchResultPanel.java        |  40 +++
 .../client/console/tasks/SchedTaskDetails.java  |  43 +++
 .../tasks/SchedTaskSearchResultPanel.java       | 270 +++++++++++++++++++
 .../client/console/tasks/SchedTasks.java        |  49 ++++
 .../tasks/SyncTaskSearchResultPanel.java        |  40 +++
 .../console/tasks/TaskSearchResultPanel.java    | 104 +++++++
 .../console/topology/TopologyTogglePanel.java   |   5 +-
 .../META-INF/resources/css/topology.css         |  16 ++
 .../tasks/AbstractSchedTaskDetails$Profile.html |  30 +++
 .../AbstractSchedTaskDetails$Profile.properties |  27 ++
 ...stractSchedTaskDetails$Profile_it.properties |  27 ++
 ...actSchedTaskDetails$Profile_pt_BR.properties |  27 ++
 .../AbstractSchedTaskDetails$Schedule.html      |  26 ++
 .../tasks/AbstractSchedTaskDetails.properties   |  20 ++
 .../AbstractSchedTaskDetails_it.properties      |  20 ++
 .../AbstractSchedTaskDetails_pt_BR.properties   |  20 ++
 .../client/console/tasks/AbstractTasks.html     |  24 ++
 .../client/console/tasks/CrontabPanel.html      |  37 +++
 .../console/tasks/CrontabPanel.properties       |  25 ++
 .../console/tasks/CrontabPanel_it.properties    |  25 ++
 .../console/tasks/CrontabPanel_pt_BR.properties |  25 ++
 ...PropagationTaskDetails$Profile_it.properties |  18 ++
 ...pagationTaskDetails$Profile_pt_BR.properties |  18 ++
 .../PropagationTaskSearchResultPanel.properties |  20 +-
 ...opagationTaskSearchResultPanel_it.properties |  22 ++
 ...gationTaskSearchResultPanel_pt_BR.properties |  22 ++
 .../client/console/tasks/PropagationTasks.html  |  24 --
 .../tasks/SchedTaskSearchResultPanel.properties |  22 ++
 .../SchedTaskSearchResultPanel_it.properties    |  22 ++
 .../SchedTaskSearchResultPanel_pt_BR.properties |  22 ++
 .../client/console/tasks/TaskDetails.properties |  26 --
 .../tasks/TaskSearchResultPanel.properties      |  22 ++
 .../tasks/TaskSearchResultPanel_it.properties   |  22 ++
 .../TaskSearchResultPanel_pt_BR.properties      |  22 ++
 .../topology/TopologyTogglePanel.properties     |   4 +-
 .../topology/TopologyTogglePanel_it.properties  |   6 +-
 .../TopologyTogglePanel_pt_BR.properties        |   6 +-
 .../markup/html/form/ActionLinksPanel.html      |   2 +-
 48 files changed, 1808 insertions(+), 172 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
index 3a1e72f..1d6c028 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
@@ -106,6 +106,8 @@ public final class Constants {
 
     public static final String PREF_SYNC_TASKS_PAGINATOR_ROWS = "synctasks.paginator.rows";
 
+    public static final String PREF_PUSH_TASKS_PAGINATOR_ROWS = "pushtasks.paginator.rows";
+
     public static final String PREF_TODO_PAGINATOR_ROWS = "todo.paginator.rows";
 
     public static final String PREF_REPORT_PAGINATOR_ROWS = "report.paginator.rows";

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/commons/DateFormatROModel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/DateFormatROModel.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/DateFormatROModel.java
new file mode 100644
index 0000000..12f2d95
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/DateFormatROModel.java
@@ -0,0 +1,50 @@
+/*
+ * 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.commons;
+
+import java.util.Date;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.PropertyModel;
+
+public class DateFormatROModel implements IModel<String> {
+
+    private static final long serialVersionUID = 6677274580927636121L;
+
+    private final PropertyModel model;
+
+    public DateFormatROModel(final PropertyModel model) {
+        this.model = model;
+    }
+
+    @Override
+    public String getObject() {
+        return model.getObject() == null
+                ? ""
+                : SyncopeConsoleSession.get().getDateFormat().format((Date) model.getObject());
+    }
+
+    @Override
+    public void setObject(final String object) {
+    }
+
+    @Override
+    public void detach() {
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..a639b1a
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
@@ -0,0 +1,61 @@
+/*
+ * 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.commons;
+
+import org.apache.syncope.client.console.rest.TaskRestClient;
+import org.apache.syncope.common.lib.to.AbstractTaskTO;
+import org.apache.syncope.common.lib.types.TaskType;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+
+public abstract class TaskDataProvider<T extends AbstractTaskTO> extends SearchableDataProvider<T> {
+
+    private static final long serialVersionUID = -20112718133295756L;
+
+    private final SortableDataProviderComparator<T> comparator;
+
+    private final TaskType id;
+
+    private final TaskRestClient taskRestClient;
+
+    public TaskDataProvider(final int paginatorRows, final TaskType id, final TaskRestClient taskRestClient) {
+        super(paginatorRows);
+        this.taskRestClient = taskRestClient;
+
+        //Default sorting
+        setSort("key", SortOrder.DESCENDING);
+        comparator = new SortableDataProviderComparator<T>(this);
+        this.id = id;
+    }
+
+    public SortableDataProviderComparator<T> getComparator() {
+        return comparator;
+    }
+
+    @Override
+    public long size() {
+        return taskRestClient.count(id);
+    }
+
+    @Override
+    public IModel<T> model(final T object) {
+        return new CompoundPropertyModel<>(object);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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 bf7a894..668aae5 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
@@ -94,6 +94,20 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 getResult();
     }
 
+    @SuppressWarnings("unchecked")
+    public <T extends AbstractTaskTO> List<T> list(
+            final String resource,
+            final Class<T> reference,
+            final int page,
+            final int size,
+            final SortParam<String> sort) {
+
+        return (List<T>) getService(TaskService.class).
+                list(new TaskQuery.Builder().type(getTaskType(reference)).page(page).size(size).resource(resource).
+                        orderBy(toOrderBy(sort)).build()).
+                getResult();
+    }
+
     public List<TaskExecTO> listExecutions(final Long taskId, final int page, final int size) {
         return getService(TaskService.class).
                 listExecutions(new TaskExecQuery.Builder().key(taskId).page(page).size(size).build()).getResult();

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.java
new file mode 100644
index 0000000..6a6abbc
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.java
@@ -0,0 +1,199 @@
+/*
+ * 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.tasks;
+
+import java.util.ArrayList;
+import java.util.List;
+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.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.to.SchedTaskTO;
+import org.apache.syncope.common.lib.to.SyncTaskTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+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;
+
+/**
+ * Modal window with Task form (to stop and start execution).
+ *
+ * @param <T>
+ */
+public abstract class AbstractSchedTaskDetails<T extends SchedTaskTO> extends TaskDetails<T> {
+
+    private static final long serialVersionUID = 2892005971093059242L;
+
+    protected CrontabPanel crontab;
+
+    public AbstractSchedTaskDetails(final T taskTO, final PageReference pageRef) {
+        super(taskTO, pageRef);
+    }
+
+    @Override
+    protected List<ITab> buildTabList(final T taskTO, final PageReference pageRef) {
+        final List<ITab> res = new ArrayList<>();
+        res.add(new AbstractTab(new Model<>("profile")) {
+
+            private static final long serialVersionUID = -5861786415855103559L;
+
+            @Override
+            public WebMarkupContainer getPanel(final String panelId) {
+                return new AbstractSchedTaskDetails.Profile(panelId, taskTO);
+            }
+        });
+        res.add(new AbstractTab(new Model<>("schedule")) {
+
+            private static final long serialVersionUID = -5861786415855103559L;
+
+            @Override
+            public WebMarkupContainer getPanel(final String panelId) {
+                return new Schedule(panelId, taskTO);
+            }
+        });
+        return res;
+    }
+
+    public class Schedule extends Panel {
+
+        private static final long serialVersionUID = -785981096328637758L;
+
+        public Schedule(final String id, final SchedTaskTO taskTO) {
+            super(id);
+            add(new CrontabPanel(
+                    "schedule", new PropertyModel<String>(taskTO, "cronExpression"), taskTO.getCronExpression()));
+        }
+
+    }
+
+    public class Profile extends Panel {
+
+        private static final long serialVersionUID = -3043839139187792810L;
+
+        private final IModel<List<String>> classNames = new LoadableDetachableModel<List<String>>() {
+
+            private static final long serialVersionUID = 5275935387613157437L;
+
+            @Override
+            protected List<String> load() {
+                return new ArrayList<>(new TaskRestClient().getJobClasses());
+            }
+        };
+
+        public Profile(final String id, final SchedTaskTO taskTO) {
+            super(id);
+
+            final AjaxTextFieldPanel name
+                    = new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(taskTO, "name"));
+            name.setEnabled(true);
+            add(name);
+
+            final AjaxTextFieldPanel description = new AjaxTextFieldPanel("description", "description",
+                    new PropertyModel<String>(taskTO, "description"));
+            description.setEnabled(true);
+            add(description);
+
+            final AjaxDropDownChoicePanel<String> className = new AjaxDropDownChoicePanel<String>(
+                    "jobDelegateClassName",
+                    getString("jobDelegateClassName"),
+                    new PropertyModel<String>(taskTO, "jobDelegateClassName"));
+
+            className.setChoices(classNames.getObject());
+            className.addRequiredLabel();
+            className.setEnabled(taskTO.getKey() == 0);
+            className.setStyleSheet("ui-widget-content ui-corner-all long_dynamicsize");
+            add(className);
+
+            if (taskTO instanceof SyncTaskTO || taskTO instanceof PushTaskTO) {
+                className.setEnabled(false).setVisible(false);
+            }
+
+            final AjaxTextFieldPanel lastExec = new AjaxTextFieldPanel("lastExec", getString("lastExec"),
+                    new DateFormatROModel(new PropertyModel<String>(taskTO, "lastExec")));
+            lastExec.setEnabled(false);
+            add(lastExec);
+
+            final AjaxTextFieldPanel nextExec = new AjaxTextFieldPanel("nextExec", getString("nextExec"),
+                    new DateFormatROModel(new PropertyModel<String>(taskTO, "nextExec")));
+            nextExec.setEnabled(false);
+            add(nextExec);
+//
+//            final AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(APPLY)) {
+//
+//                private static final long serialVersionUID = -958724007591692537L;
+//
+//                @Override
+//                protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+//                    SchedTaskTO taskTO = (SchedTaskTO) form.getModelObject();
+//                    taskTO.setCronExpression(StringUtils.hasText(taskTO.getCronExpression())
+//                            ? crontab.getCronExpression()
+//                            : null);
+//
+//                    try {
+//                        submitAction(taskTO);
+//
+//                        ((BasePage) pageRef.getPage()).setModalResult(true);
+//
+//                        window.close(target);
+//                    } catch (SyncopeClientException e) {
+//                        LOG.error("While creating or updating task", e);
+//                        error(getString(Constants.ERROR) + ": " + e.getMessage());
+//                        feedbackPanel.refresh(target);
+//                    }
+//                }
+//
+//                @Override
+//                protected void onError(final AjaxRequestTarget target, final Form<?> form) {
+//                    feedbackPanel.refresh(target);
+//                }
+//            };
+//
+//            final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) {
+//
+//                private static final long serialVersionUID = -958724007591692537L;
+//
+//                @Override
+//                protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+//                    window.close(target);
+//                }
+//            };
+//
+//            cancel.setDefaultFormProcessing(false);
+//
+//            if (taskTO.getId() > 0) {
+//                MetaDataRoleAuthorizationStrategy.authorize(submit, RENDER, xmlRolesReader.getEntitlement(TASKS,
+//                        "update"));
+//            } else {
+//                MetaDataRoleAuthorizationStrategy.authorize(submit, RENDER, xmlRolesReader.getEntitlement(TASKS,
+//                        "create"));
+//            }
+//
+//            form.add(submit);
+//            form.add(cancel);
+        }
+    }
+
+//    protected abstract void submitAction(SchedTaskTO taskTO);
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java
new file mode 100644
index 0000000..93b2a2a
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java
@@ -0,0 +1,49 @@
+/*
+ * 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.tasks;
+
+import java.io.Serializable;
+import org.apache.syncope.client.console.panels.ModalPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+
+public abstract class AbstractTasks extends Panel implements ModalPanel<Serializable> {
+
+    private static final long serialVersionUID = -4013796607157549641L;
+
+    public AbstractTasks(final String id) {
+        super(id);
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Serializable getItem() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
new file mode 100644
index 0000000..526dd6f
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
@@ -0,0 +1,186 @@
+/*
+ * 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.tasks;
+
+import java.util.Arrays;
+import org.apache.syncope.client.console.commons.Constants;
+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.wicket.markup.html.form.SelectChoiceRenderer;
+import org.apache.syncope.client.console.wicket.markup.html.form.SelectOption;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+
+public class CrontabPanel extends Panel {
+
+    private static final long serialVersionUID = 7879593326085337650L;
+
+    private final AjaxTextFieldPanel seconds;
+
+    private final AjaxTextFieldPanel minutes;
+
+    private final AjaxTextFieldPanel hours;
+
+    private final AjaxTextFieldPanel daysOfMonth;
+
+    private final AjaxTextFieldPanel months;
+
+    private final AjaxTextFieldPanel daysOfWeek;
+
+    public CrontabPanel(final String id, final PropertyModel<String> cronExpressionModel, final String cronExpression) {
+        super(id);
+        setOutputMarkupId(true);
+
+        final SelectOption[] cronTemplates = {
+            new SelectOption(getString("selOpt1"), "UNSCHEDULE"),
+            new SelectOption(getString("selOpt2"), "0 0/5 * * * ?"),
+            new SelectOption(getString("selOpt3"), "0 0 12 * * ?"),
+            new SelectOption(getString("selOpt4"), "0 0 0 1 * ?"),
+            new SelectOption(getString("selOpt5"), "0 0 0 L * ?"),
+            new SelectOption(getString("selOpt6"), "0 0 0 ? * 2")
+        };
+
+        final AjaxDropDownChoicePanel<SelectOption> cronTemplateChooser = new AjaxDropDownChoicePanel<SelectOption>(
+                "cronTemplateChooser", "cronTemplateChooser", new Model<SelectOption>());
+
+        cronTemplateChooser.setNullValid(false);
+        cronTemplateChooser.setPlaceholder("chooseForTemplate");
+
+        cronTemplateChooser.getField().setModel(new IModel<SelectOption>() {
+
+            private static final long serialVersionUID = 6762568283146531315L;
+
+            @Override
+            public SelectOption getObject() {
+                SelectOption result = null;
+                for (SelectOption so : cronTemplates) {
+                    if (so.getKeyValue().equals(cronExpressionModel.getObject())) {
+                        result = so;
+                    }
+                }
+
+                return result;
+            }
+
+            @Override
+            public void setObject(final SelectOption object) {
+                cronExpressionModel.setObject(object == null || object.equals(cronTemplates[0])
+                        ? null
+                        : object.toString());
+            }
+
+            @Override
+            public void detach() {
+                // no detach
+            }
+        });
+        cronTemplateChooser.setChoices(Arrays.asList(cronTemplates));
+        cronTemplateChooser.setChoiceRenderer(new SelectChoiceRenderer<SelectOption>());
+        add(cronTemplateChooser);
+
+        seconds = new AjaxTextFieldPanel(
+                "seconds", "seconds", new Model<String>(getCronField(cronExpression, 0)));
+        add(seconds.hideLabel());
+
+        minutes = new AjaxTextFieldPanel(
+                "minutes", "minutes", new Model<String>(getCronField(cronExpression, 1)));
+        add(minutes.hideLabel());
+
+        hours = new AjaxTextFieldPanel(
+                "hours", "hours", new Model<String>(getCronField(cronExpression, 2)));
+        add(hours.hideLabel());
+
+        daysOfMonth = new AjaxTextFieldPanel(
+                "daysOfMonth", "daysOfMonth", new Model<String>(getCronField(cronExpression, 3)));
+        add(daysOfMonth.hideLabel());
+
+        months = new AjaxTextFieldPanel(
+                "months", "months", new Model<String>(getCronField(cronExpression, 4)));
+        add(months.hideLabel());
+
+        daysOfWeek = new AjaxTextFieldPanel(
+                "daysOfWeek", "daysOfWeek", new Model<String>(getCronField(cronExpression, 5)));
+        add(daysOfWeek.hideLabel());
+
+        final FormComponent<SelectOption> component = cronTemplateChooser.getField();
+
+        cronTemplateChooser.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+            private static final long serialVersionUID = -1107858522700306810L;
+
+            @Override
+            protected void onUpdate(final AjaxRequestTarget target) {
+                seconds.setModelObject(getCronField(component, 0));
+                minutes.setModelObject(getCronField(component, 1));
+                hours.setModelObject(getCronField(component, 2));
+                daysOfMonth.setModelObject(getCronField(component, 3));
+                months.setModelObject(getCronField(component, 4));
+                daysOfWeek.setModelObject(getCronField(component, 5));
+                target.add(CrontabPanel.this);
+            }
+        });
+    }
+
+    private String getCronField(final FormComponent<?> formComponent, final int field) {
+        String cronField = null;
+
+        if (formComponent != null) {
+            cronField = getCronField(formComponent.getInput(), field);
+        }
+
+        return cronField;
+    }
+
+    private String getCronField(final String cron, final int field) {
+        String cronField = null;
+
+        if (cron != null && !cron.isEmpty() && !"UNSCHEDULE".equals(cron)) {
+            cronField = cron.split(" ")[field].trim();
+        }
+
+        return cronField;
+    }
+
+    public String getCronExpression() {
+        String cronExpression = null;
+
+        if (seconds != null && seconds.getField().getInput() != null
+                && minutes != null && minutes.getField().getInput() != null
+                && hours != null && hours.getField().getInput() != null
+                && daysOfMonth != null && daysOfMonth.getField().getInput() != null
+                && months != null && months.getField().getInput() != null
+                && daysOfWeek != null && daysOfWeek.getField().getInput() != null) {
+
+            cronExpression = new StringBuilder().
+                    append(seconds.getField().getInput().trim()).append(" ").
+                    append(minutes.getField().getInput().trim()).append(" ").
+                    append(hours.getField().getInput().trim()).append(" ").
+                    append(daysOfMonth.getField().getInput().trim()).append(" ").
+                    append(months.getField().getInput().trim()).append(" ").
+                    append(daysOfWeek.getField().getInput().trim()).toString();
+        }
+
+        return cronExpression;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
index 794d942..8ba0ba8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.tasks;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -26,30 +25,22 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.SearchableDataProvider;
-import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.panels.AbstractSearchResultPanel;
 import org.apache.syncope.client.console.panels.ModalPanel;
-import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
-import org.apache.syncope.common.lib.to.AbstractTaskTO;
 import org.apache.syncope.common.lib.to.PropagationTaskTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.types.TaskType;
-import org.apache.syncope.client.console.tasks.PropagationTaskSearchResultPanel.TasksProvider;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
@@ -57,25 +48,16 @@ import org.apache.wicket.model.StringResourceModel;
 /**
  * Tasks page.
  */
-public abstract class PropagationTaskSearchResultPanel extends AbstractSearchResultPanel<
-        PropagationTaskTO, PropagationTaskTO, TasksProvider<PropagationTaskTO>, TaskRestClient>
+public abstract class PropagationTaskSearchResultPanel extends TaskSearchResultPanel<PropagationTaskTO>
         implements ModalPanel<PropagationTaskTO> {
 
     private static final long serialVersionUID = 4984337552918213290L;
 
-    private final TaskRestClient taskRestClient = new TaskRestClient();
-
     private final String resource;
 
-    protected PropagationTaskSearchResultPanel(
-            final String id,
-            final PageReference pageRef,
-            final String resource) {
-
-        super(id, pageRef, false);
+    protected PropagationTaskSearchResultPanel(final String id, final PageReference pageRef, final String resource) {
+        super(id, pageRef);
         this.resource = resource;
-        setShowResultPage(true);
-        modal.size(Modal.Size.Large);
         initResultTable();
     }
 
@@ -96,9 +78,6 @@ public abstract class PropagationTaskSearchResultPanel extends AbstractSearchRes
                 new StringResourceModel("anyKey", this, null), "anyKey", "anyKey"));
 
         columns.add(new PropertyColumn<PropagationTaskTO, String>(
-                new StringResourceModel("resource", this, null), "resource", "resource"));
-
-        columns.add(new PropertyColumn<PropagationTaskTO, String>(
                 new StringResourceModel("connObjectKey", this, null), "connObjectKey", "connObjectKey"));
 
         columns.add(new DatePropertyColumn<PropagationTaskTO>(
@@ -203,7 +182,7 @@ public abstract class PropagationTaskSearchResultPanel extends AbstractSearchRes
     }
 
     @Override
-    protected TasksProvider<PropagationTaskTO> dataProvider() {
+    protected PropagationTasksProvider dataProvider() {
         return new PropagationTasksProvider(rows, this.resource);
     }
 
@@ -212,29 +191,14 @@ public abstract class PropagationTaskSearchResultPanel extends AbstractSearchRes
         return Constants.PREF_PROPAGATION_TASKS_PAGINATOR_ROWS;
     }
 
-    @Override
-    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void onError(final AjaxRequestTarget target, final Form<?> form) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public PropagationTaskTO getItem() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public class PropagationTasksProvider extends TasksProvider<PropagationTaskTO> {
+    public class PropagationTasksProvider extends TaskDataProvider<PropagationTaskTO> {
 
         private static final long serialVersionUID = 4725679400450513556L;
 
         private final String resource;
 
         public PropagationTasksProvider(final int paginatorRows, final String resource) {
-            super(paginatorRows, TaskType.PROPAGATION);
+            super(paginatorRows, TaskType.PROPAGATION, taskRestClient);
             this.resource = resource;
         }
 
@@ -249,39 +213,4 @@ public abstract class PropagationTaskSearchResultPanel extends AbstractSearchRes
             return tasks.iterator();
         }
     }
-
-    public abstract class TasksProvider<T extends AbstractTaskTO> extends SearchableDataProvider<T> {
-
-        private static final long serialVersionUID = -20112718133295756L;
-
-        private final SortableDataProviderComparator<T> comparator;
-
-        private final TaskType id;
-
-        public TasksProvider(final int paginatorRows, final TaskType id) {
-
-            super(paginatorRows);
-
-            //Default sorting
-            setSort("key", SortOrder.DESCENDING);
-            comparator = new SortableDataProviderComparator<T>(this);
-            this.id = id;
-        }
-
-        public SortableDataProviderComparator<T> getComparator() {
-            return comparator;
-        }
-
-        @Override
-        public long size() {
-            return taskRestClient.count(id);
-        }
-
-        @Override
-        public IModel<T> model(final T object) {
-            return new CompoundPropertyModel<>(object);
-        }
-    }
-
-    protected abstract void viewTask(final PropagationTaskTO taskTO, final AjaxRequestTarget target);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
index d591729..e6f58e0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
@@ -18,18 +18,14 @@
  */
 package org.apache.syncope.client.console.tasks;
 
-import java.io.Serializable;
-import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.PropagationTaskTO;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.Panel;
 
-public class PropagationTasks extends Panel implements ModalPanel<Serializable> {
+public class PropagationTasks extends AbstractTasks {
 
     private static final long serialVersionUID = -4013796607157549641L;
 
@@ -50,19 +46,4 @@ public class PropagationTasks extends Panel implements ModalPanel<Serializable>
             }
         });
     }
-
-    @Override
-    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void onError(final AjaxRequestTarget target, final Form<?> form) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public Serializable getItem() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..34d7c11
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskSearchResultPanel.java
@@ -0,0 +1,113 @@
+/*
+ * 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.tasks;
+
+import java.util.ArrayList;
+import java.util.Collections;
+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.wicket.PageReference;
+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.StringResourceModel;
+
+/**
+ * Tasks page.
+ *
+ * @param <T> Sched task type.
+ */
+public abstract class ProvisioningTaskSearchResultPanel<T extends AbstractProvisioningTaskTO>
+        extends SchedTaskSearchResultPanel<T> {
+
+    private static final long serialVersionUID = 4984337552918213290L;
+
+    private final String resource;
+
+    protected ProvisioningTaskSearchResultPanel(
+            final String id, final Class<T> reference, final String resource, final PageReference pageRef) {
+        super(id, reference, pageRef);
+        this.resource = resource;
+
+        // super in order to call the parent implementation
+        super.initResultTable();
+    }
+
+    @Override
+    protected void initResultTable() {
+        // DO nothing in order to disable the call performed by the parent
+    }
+
+    @Override
+    protected List<IColumn<T, String>> getFieldColumns() {
+        final List<IColumn<T, String>> columns = new ArrayList<IColumn<T, String>>();
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("key", this, null), "key", "key"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("name", this, null), "name", "name"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("description", this, null), "description", "description"));
+
+        columns.add(new DatePropertyColumn<T>(
+                new StringResourceModel("lastExec", this, null), "lastExec", "lastExec"));
+
+        columns.add(new DatePropertyColumn<T>(
+                new StringResourceModel("nextExec", this, null), "nextExec", "nextExec"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("latestExecStatus", this, null), "latestExecStatus", "latestExecStatus"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("active", this, null), "active", "active"));
+
+        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);
+            this.reference = reference;
+        }
+
+        @Override
+        public Iterator<T> iterator(final long first, final long count) {
+            final int page = ((int) first / paginatorRows);
+
+            final List<T> tasks = taskRestClient.list(
+                    resource, reference, (page < 0 ? 0 : page) + 1, paginatorRows, getSort());
+
+            Collections.sort(tasks, getComparator());
+            return tasks.iterator();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..e993b86
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskSearchResultPanel.java
@@ -0,0 +1,40 @@
+/*
+ * 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.tasks;
+
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.wicket.PageReference;
+
+/**
+ * Tasks page.
+ */
+public abstract class PushTaskSearchResultPanel extends ProvisioningTaskSearchResultPanel<PushTaskTO> {
+
+    private static final long serialVersionUID = 4984337552918213290L;
+
+    protected PushTaskSearchResultPanel(final String id, final String resource, final PageReference pageRef) {
+        super(id, PushTaskTO.class, resource, pageRef);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_PUSH_TASKS_PAGINATOR_ROWS;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDetails.java
new file mode 100644
index 0000000..b1f6de4
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDetails.java
@@ -0,0 +1,43 @@
+/*
+ * 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.tasks;
+
+import org.apache.syncope.common.lib.to.SchedTaskTO;
+import org.apache.wicket.PageReference;
+
+/**
+ * Modal window with Task form (to stop and start execution).
+ */
+public class SchedTaskDetails extends AbstractSchedTaskDetails<SchedTaskTO> {
+
+    private static final long serialVersionUID = -2501860242590060867L;
+
+    public SchedTaskDetails(final SchedTaskTO taskTO, final PageReference pageRef) {
+        super(taskTO, pageRef);
+    }
+
+//    @Override
+//    public void submitAction(final SchedTaskTO taskTO) {
+//        if (taskTO.getId() > 0) {
+//            taskRestClient.updateSchedTask(taskTO);
+//        } else {
+//            taskRestClient.createSchedTask(taskTO);
+//        }
+//    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..e2c0c11
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
@@ -0,0 +1,270 @@
+/*
+ * 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.tasks;
+
+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.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.TaskDataProvider;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.ModalPanel;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.common.lib.types.TaskType;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.SchedTaskTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
+
+/**
+ * Tasks page.
+ *
+ * @param <T> Sched task type.
+ */
+public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO> extends TaskSearchResultPanel<T>
+        implements ModalPanel<T> {
+
+    private static final long serialVersionUID = 4984337552918213290L;
+
+    protected final Class<T> reference;
+
+    protected SchedTaskSearchResultPanel(final String id, final Class<T> reference, final PageReference pageRef) {
+        super(id, pageRef);
+        this.reference = reference;
+        initResultTable();
+    }
+
+    protected List<IColumn<T, String>> getFieldColumns() {
+        final List<IColumn<T, String>> columns = new ArrayList<IColumn<T, String>>();
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("key", this, null), "key", "key"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("name", this, null), "name", "name"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("description", this, null), "description", "description"));
+
+        columns.add(new PropertyColumn<T, String>(new StringResourceModel(
+                "jobDelegateClassName", this, null), "jobDelegateClassName", "jobDelegateClassName") {
+
+            private static final long serialVersionUID = -3223917055078733093L;
+
+            @Override
+            public void populateItem(
+                    final Item<ICellPopulator<T>> item, final String componentId, final IModel<T> rowModel) {
+                final IModel<?> model = getDataModel(rowModel);
+                if (model != null && model.getObject() instanceof String) {
+                    String value = String.class.cast(model.getObject());
+                    if (value.length() > 20) {
+                        item.add(new Label(componentId,
+                                new Model<String>("..." + value.substring(value.length() - 17))));
+                    } else {
+                        item.add(new Label(componentId, getDataModel(rowModel)));
+                    }
+                } else {
+                    super.populateItem(item, componentId, rowModel);
+                }
+            }
+
+        });
+
+        columns.add(new DatePropertyColumn<T>(
+                new StringResourceModel("lastExec", this, null), "lastExec", "lastExec"));
+
+        columns.add(new DatePropertyColumn<T>(
+                new StringResourceModel("nextExec", this, null), "nextExec", "nextExec"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("latestExecStatus", this, null), "latestExecStatus", "latestExecStatus"));
+
+        columns.add(new PropertyColumn<T, String>(
+                new StringResourceModel("active", this, null), "active", "active"));
+
+        return columns;
+    }
+
+    @Override
+    protected final List<IColumn<T, String>> getColumns() {
+        final List<IColumn<T, String>> columns = new ArrayList<IColumn<T, String>>();
+
+        columns.addAll(getFieldColumns());
+
+        columns.add(new ActionColumn<T, String>(new ResourceModel("actions", "")) {
+
+            private static final long serialVersionUID = 2054811145491901166L;
+
+            @Override
+            public String getCssClass() {
+                return "action";
+            }
+
+            @Override
+            public ActionLinksPanel<T> getActions(
+                    final String componentId, final IModel<T> model) {
+
+                final T taskTO = model.getObject();
+
+                final ActionLinksPanel<T> panel = ActionLinksPanel.<T>builder(pageRef).
+                        add(new ActionLink<T>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final T modelObject) {
+                                viewTask(taskTO, target);
+                            }
+                        }, ActionLink.ActionType.EDIT, StandardEntitlement.TASK_READ).
+                        add(new ActionLink<T>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final T modelObject) {
+                                try {
+                                    taskRestClient.startExecution(taskTO.getKey(), new Date());
+                                    info(getString(Constants.OPERATION_SUCCEEDED));
+                                    target.add(container);
+                                } catch (SyncopeClientException e) {
+                                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                    LOG.error("While running propagation task {}", taskTO.getKey(), e);
+                                }
+                                ((BasePage) getPage()).getNotificationPanel().refresh(target);
+                            }
+                        }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE).
+                        add(new ActionLink<T>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final T modelObject) {
+                                try {
+                                    taskRestClient.startExecution(taskTO.getKey(), new Date(), true);
+                                    info(getString(Constants.OPERATION_SUCCEEDED));
+                                    target.add(container);
+                                } catch (SyncopeClientException e) {
+                                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                    LOG.error("While running propagation task {}", taskTO.getKey(), e);
+                                }
+                                ((BasePage) getPage()).getNotificationPanel().refresh(target);
+                            }
+                        }, ActionLink.ActionType.DRYRUN, StandardEntitlement.TASK_EXECUTE).
+                        add(new ActionLink<T>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final T modelObject) {
+                                try {
+                                    taskRestClient.delete(taskTO.getKey(), reference);
+                                    info(getString(Constants.OPERATION_SUCCEEDED));
+                                    target.add(container);
+                                } catch (SyncopeClientException e) {
+                                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                                    LOG.error("While deleting propagation task {}", taskTO.getKey(), e);
+                                }
+                                ((BasePage) getPage()).getNotificationPanel().refresh(target);
+                            }
+                        }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE).build(componentId);
+
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel<T> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<T> panel
+                        = ActionLinksPanel.builder(page.getPageReference());
+
+                return panel.add(new ActionLink<T>() {
+
+                    private static final long serialVersionUID = -7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final T ignore) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId);
+            }
+        });
+
+        return columns;
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_SCHED_TASKS_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionType> getBulkActions() {
+        final List<ActionType> bulkActions = new ArrayList<>();
+        bulkActions.add(ActionType.DELETE);
+        bulkActions.add(ActionType.EXECUTE);
+        bulkActions.add(ActionType.DRYRUN);
+        return bulkActions;
+    }
+
+    @Override
+    protected SchedTasksProvider<T> dataProvider() {
+        return new SchedTasksProvider<T>(reference, rows);
+    }
+
+    public class SchedTasksProvider<T extends SchedTaskTO> extends TaskDataProvider<T> {
+
+        private static final long serialVersionUID = 4725679400450513556L;
+
+        private final Class<T> reference;
+
+        public SchedTasksProvider(final Class<T> reference, final int paginatorRows) {
+            super(paginatorRows, TaskType.SCHEDULED, taskRestClient);
+            this.reference = reference;
+        }
+
+        @Override
+        public Iterator<T> iterator(final long first, final long count) {
+            final int page = ((int) first / paginatorRows);
+
+            final List<T> tasks = taskRestClient.list(
+                    reference, (page < 0 ? 0 : page) + 1, paginatorRows, getSort());
+
+            Collections.sort(tasks, getComparator());
+            return tasks.iterator();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..727cc64
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTasks.java
@@ -0,0 +1,49 @@
+/*
+ * 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.tasks;
+
+import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+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;
+
+public class SchedTasks extends AbstractTasks {
+
+    private static final long serialVersionUID = -4013796607157549641L;
+
+    public <T extends AnyTO> SchedTasks(final PageReference pageReference) {
+        super(BaseModal.CONTENT_ID);
+
+        final MultilevelPanel mlp = new MultilevelPanel("tasks");
+        add(mlp);
+
+        mlp.setFirstLevel(new SchedTaskSearchResultPanel<SchedTaskTO>(
+                MultilevelPanel.FIRST_LEVEL_ID, SchedTaskTO.class, pageReference) {
+
+            private static final long serialVersionUID = -2195387360323687302L;
+
+            @Override
+            protected void viewTask(final SchedTaskTO taskTO, final AjaxRequestTarget target) {
+                mlp.next("task.view", new SchedTaskDetails(taskTO, pageReference), target);
+            }
+        });
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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
new file mode 100644
index 0000000..2a22f1c
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SyncTaskSearchResultPanel.java
@@ -0,0 +1,40 @@
+/*
+ * 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.tasks;
+
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.common.lib.to.SyncTaskTO;
+import org.apache.wicket.PageReference;
+
+/**
+ * Tasks page.
+ */
+public abstract class SyncTaskSearchResultPanel extends ProvisioningTaskSearchResultPanel<SyncTaskTO> {
+
+    private static final long serialVersionUID = 4984337552918213290L;
+
+    protected SyncTaskSearchResultPanel(final String id, final String resource, final PageReference pageRef) {
+        super(id, SyncTaskTO.class, resource, pageRef);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_SYNC_TASKS_PAGINATOR_ROWS;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.java
new file mode 100644
index 0000000..3d62d54
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskSearchResultPanel.java
@@ -0,0 +1,104 @@
+/*
+ * 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.tasks;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import org.apache.syncope.client.console.commons.SearchableDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.commons.TaskDataProvider;
+import org.apache.syncope.client.console.panels.AbstractSearchResultPanel;
+import org.apache.syncope.client.console.panels.ModalPanel;
+import org.apache.syncope.client.console.rest.TaskRestClient;
+import org.apache.syncope.common.lib.to.AbstractTaskTO;
+import org.apache.syncope.common.lib.types.TaskType;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+
+/**
+ * Tasks page.
+ *
+ * @param <T> task type.
+ */
+public abstract class TaskSearchResultPanel<T extends AbstractTaskTO>
+        extends AbstractSearchResultPanel<T, T, TaskDataProvider<T>, TaskRestClient> implements ModalPanel<T> {
+
+    private static final long serialVersionUID = 4984337552918213290L;
+
+    protected final TaskRestClient taskRestClient = new TaskRestClient();
+
+    protected TaskSearchResultPanel(final String id, final PageReference pageRef) {
+        super(id, pageRef, false);
+        setShowResultPage(false);
+        modal.size(Modal.Size.Large);
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public T getItem() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public abstract class TasksProvider<T extends AbstractTaskTO> extends SearchableDataProvider<T> {
+
+        private static final long serialVersionUID = -20112718133295756L;
+
+        private final SortableDataProviderComparator<T> comparator;
+
+        private final TaskType id;
+
+        public TasksProvider(final int paginatorRows, final TaskType id) {
+
+            super(paginatorRows);
+
+            //Default sorting
+            setSort("key", SortOrder.DESCENDING);
+            comparator = new SortableDataProviderComparator<T>(this);
+            this.id = id;
+        }
+
+        public SortableDataProviderComparator<T> getComparator() {
+            return comparator;
+        }
+
+        @Override
+        public long size() {
+            return taskRestClient.count(id);
+        }
+
+        @Override
+        public IModel<T> model(final T object) {
+            return new CompoundPropertyModel<>(object);
+        }
+    }
+
+    protected abstract void viewTask(final T taskTO, final AjaxRequestTarget target);
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/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 7c7215e..3eaf1bb 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
@@ -29,6 +29,7 @@ import org.apache.syncope.client.console.panels.TogglePanel;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.ResourceRestClient;
 import org.apache.syncope.client.console.tasks.PropagationTasks;
+import org.apache.syncope.client.console.tasks.SchedTasks;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.confirmation.ConfirmationModalBehavior;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
@@ -116,8 +117,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                target.add(modal);
-                modal.header(new ResourceModel("task.generic.list", "Generic tasks"));
+                target.add(modal.setContent(new SchedTasks(pageRef)));
+                modal.header(new ResourceModel("task.generic.list", "Scheduled tasks"));
                 modal.show(true);
             }
         };

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/META-INF/resources/css/topology.css
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/css/topology.css b/client/console/src/main/resources/META-INF/resources/css/topology.css
index ba2a804..95d9ab3 100644
--- a/client/console/src/main/resources/META-INF/resources/css/topology.css
+++ b/client/console/src/main/resources/META-INF/resources/css/topology.css
@@ -177,3 +177,19 @@ div.node-action-link .dropdown-menu{
   margin: 0px;
   border-radius: 0.5em;
 }
+
+/**
+START - CRONTAB
+*/
+div#schedule input, div#schedule fieldset {
+  width: 50px;
+  float: left
+}
+
+div#templates {
+  padding-top: 30px;
+  clear: both;
+}
+/**
+END -CRONTAB
+*/

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.html
new file mode 100644
index 0000000..0136a05
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.html
@@ -0,0 +1,30 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <head><title></title></head>
+  <body>
+    <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="jobDelegateClassName">[jobDelegateClassName]</span></div>
+      <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/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.properties
new file mode 100644
index 0000000..30bb712
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile.properties
@@ -0,0 +1,27 @@
+# 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.
+name=Name
+description=Description
+jobDelegateClassName=Class
+lastExec=Last Execution
+nextExec=Next Execution
+detail=Detail
+delete=Delete
+edit=Edit
+execute=Execute
+executeDryRun=Dry run
+latestExecStatus=Last status

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_it.properties
new file mode 100644
index 0000000..30bb712
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_it.properties
@@ -0,0 +1,27 @@
+# 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.
+name=Name
+description=Description
+jobDelegateClassName=Class
+lastExec=Last Execution
+nextExec=Next Execution
+detail=Detail
+delete=Delete
+edit=Edit
+execute=Execute
+executeDryRun=Dry run
+latestExecStatus=Last status

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_pt_BR.properties
new file mode 100644
index 0000000..30bb712
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Profile_pt_BR.properties
@@ -0,0 +1,27 @@
+# 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.
+name=Name
+description=Description
+jobDelegateClassName=Class
+lastExec=Last Execution
+nextExec=Next Execution
+detail=Detail
+delete=Delete
+edit=Edit
+execute=Execute
+executeDryRun=Dry run
+latestExecStatus=Last status

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Schedule.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Schedule.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Schedule.html
new file mode 100644
index 0000000..99e853e
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails$Schedule.html
@@ -0,0 +1,26 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <head><title></title></head>
+  <body>
+    <wicket:panel>
+      <span wicket:id="schedule"/>
+    </wicket:panel>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.properties
new file mode 100644
index 0000000..18ed6c3
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails.properties
@@ -0,0 +1,20 @@
+# 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.
+profile=Profile
+schedule=Schedule
+start=Start
+end=End

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_it.properties
new file mode 100644
index 0000000..d174a07
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_it.properties
@@ -0,0 +1,20 @@
+# 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.
+profile=Profilo
+schedule=Pianificazione
+start=Inizio
+end=Fine

http://git-wip-us.apache.org/repos/asf/syncope/blob/a4a9ef56/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_pt_BR.properties
new file mode 100644
index 0000000..18ed6c3
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractSchedTaskDetails_pt_BR.properties
@@ -0,0 +1,20 @@
+# 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.
+profile=Profile
+schedule=Schedule
+start=Start
+end=End