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/03/24 17:33:50 UTC

[1/5] syncope git commit: [SYNCOPE-765] providing TODO features

Repository: syncope
Updated Branches:
  refs/heads/master ab67161a5 -> 9014cf287


http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_it.properties
new file mode 100644
index 0000000..af65a7e
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_it.properties
@@ -0,0 +1,32 @@
+# 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.
+taskId=Task
+key=Chiave
+description=Descrizione
+createTime=Data di creazione
+dueDate=Scadenza
+owner=Esecutore
+claim=Richiedi
+manage=Gestisci
+approvals=Approvazioni
+delete=Rimuovi
+type=Tipo
+username=Utente
+new_user=Nuovo utente
+creationDate = Data creazione
+claimDate = Data rivendicazione
+approval.edit=Approvazione

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_pt_BR.properties
new file mode 100644
index 0000000..1b34dbc
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs_pt_BR.properties
@@ -0,0 +1,32 @@
+# 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.
+taskId=Tarefa
+key=Chave
+description=Descri\u00e7\u00e3o
+createTime=Tempo de Cria\u00e7\u00e3o
+dueDate=Data acordada
+owner=Propriet\u00e1rio
+claim=Requerimento
+manage=Ger\u00eancia
+approvals=Aprova\u00e7\u00e3o
+delete=Excluir
+type=Tipo
+username=Usu\u00e1rio
+new_user=Novo Usu\u00e1rio
+creationDate = Data de cria\u00e7\u00e3o
+claimDate = Data de reivindica\u00e7\u00e3o
+approval.edit=Aprova\u00e7\u00e3o

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.html b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.html
new file mode 100644
index 0000000..5231287
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.html
@@ -0,0 +1,34 @@
+<!--
+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 wicket:id="propView">
+        <span wicket:id="value">[value]</span>
+      </div>
+
+      <div style="margin: 20px 0">
+        <a href="#" alt="user details" class="btn btn-primary btn-circle btn-lg" wicket:id="userDetails" wicket:message="title:userDetails">
+          <i class="glyphicon glyphicon-eye-open"></i>
+        </a>
+      </div>
+    </wicket:panel>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.properties b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.properties
new file mode 100644
index 0000000..5d29cc4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval.properties
@@ -0,0 +1,17 @@
+# 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.
+userDetails=User details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalDetails.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalDetails.html b/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalDetails.html
new file mode 100644
index 0000000..fc22ba2
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalDetails.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="wizard"/>
+    </wicket:panel>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.html
new file mode 100644
index 0000000..790398a
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.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="approval">[APPROVAL]</span>
+    </wicket:panel>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.properties
new file mode 100644
index 0000000..941c896
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/todos/ApprovalModal.properties
@@ -0,0 +1,17 @@
+# 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.
+approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_it.properties
new file mode 100644
index 0000000..b96f57c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_it.properties
@@ -0,0 +1,17 @@
+# 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.
+userDetails=Dettagli utente

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_pt_BR.properties
new file mode 100644
index 0000000..b2b000a
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/todos/Approval_pt_BR.properties
@@ -0,0 +1,17 @@
+# 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.
+userDetails=Detalhes do Usu\u00e1rio

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/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 f8a868b..cc36119 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
@@ -68,7 +68,7 @@ under the License.
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentClaim">
-      <a href="#" wicket:id="claimLink" class="btn"><img id="actionLink" src="img/actions/claim.png" alt="claim icon" title="Claim"/></a>
+      <a href="#" wicket:id="claimLink" class="btn"><i id="actionLink" class="fa fa-thumbs-o-up" alt="claim icon" title="Claim"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentManageResources">

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.html
new file mode 100644
index 0000000..3dd33d1
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.html
@@ -0,0 +1,48 @@
+<!--
+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>
+      <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
+        <i class="fa fa-flag-o"></i>
+        <span class="label label-danger" wicket:id="todos"></span>
+      </a>
+      <ul class="dropdown-menu">
+        <li class="header">
+          <wicket:message key="summary"><span wicket:id="number"/></wicket:message>
+        </li>
+        <li>
+          <ul wicket:id="lastTODOsList" class="menu">
+            <li class="todoitem" wicket:id="lastTODOs">
+              <a href="#" wicket:id="todo">
+                <h3><small class="pull-right" wicket:id="owner"/> <p wicket:id="key"/></h3>
+                <small wicket:id="dueDateContainer" class="pull-right"><i class="fa fa-hourglass-end"></i> <p wicket:id="dueDate"/></small>
+                <small><i class="fa fa-clock-o"></i> <p wicket:id="createTime"/></small>
+              </a>
+            </li>
+          </ul>
+        </li>
+        <li class="footer">
+          <a href="#" wicket:id="todosLink"><wicket:message key="todos.view.all">View all TODOs</wicket:message></a>
+        </li>
+      </ul>
+    </wicket:panel>
+  </body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.properties b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.properties
new file mode 100644
index 0000000..a3f5c5f
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget.properties
@@ -0,0 +1,21 @@
+# 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.
+todos.view.all=View All TODOs
+duedate=Due date
+owner=Owner
+createApproval=Create Approval
+summary=There are ${number} pending approvals

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_it.properties
new file mode 100644
index 0000000..64edea4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_it.properties
@@ -0,0 +1,21 @@
+# 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.
+todos.view.all=Tutti i TODOs
+duedate=Scadenza
+owner=Assegnato
+createApproval=Approvazione Creazione
+summary=Ci sono ${number} approvazioni pendenti

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_pt_BR.properties
new file mode 100644
index 0000000..a3f5c5f
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/TODOsWidget_pt_BR.properties
@@ -0,0 +1,21 @@
+# 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.
+todos.view.all=View All TODOs
+duedate=Due date
+owner=Owner
+createApproval=Create Approval
+summary=There are ${number} pending approvals

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs.properties
index 72b580f..b31980e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-derived.emptyvalue.message=Value to be derived ...
+derived.emptyvalue.message=Value to be derived
 attribute.empty.list=No derived attributes available

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_it.properties
index d275c71..b4c585e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_it.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-derived.emptyvalue.message=Valore da derivare ...
+derived.emptyvalue.message=Valore da derivare
 attribute.empty.list=Non ci sono attributi derivati disponibili

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_pt_BR.properties
index b659c46..db2bd34 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DerAttrs_pt_BR.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-derived.emptyvalue.message=Valor a ser derivada ...
+derived.emptyvalue.message=Valor a ser derivada
 attribute.empty.list=Sem atributos derivados dispon\u00edveis

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails.properties
index f4ff161..501bb53 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails.properties
@@ -17,4 +17,4 @@
 username=Username
 password=Password
 confirmPassword=Password (confirm)
-password.change=Password management ...
+password.change=Password management

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_it.properties
index 743b35d..3d69de7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_it.properties
@@ -17,4 +17,4 @@
 username=Username
 password=Password
 confirmPassword=Password (conferma)
-password.change=Gestisci password ...
+password.change=Gestisci password

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_pt_BR.properties
index 9d4efad..a3d5457 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserDetails_pt_BR.properties
@@ -17,4 +17,4 @@
 username=Nome do Usu\u00e1rio
 password=Senha
 confirmPassword=Senha (confirmar)
-password.change=Gest\u00e3o password ...
+password.change=Gest\u00e3o password

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesPanel.java
----------------------------------------------------------------------
diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesPanel.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesPanel.java
index 2d1afa4..5368933 100644
--- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesPanel.java
+++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesPanel.java
@@ -83,7 +83,7 @@ public class CamelRoutesPanel extends AbstractSearchResultPanel<
             private static final long serialVersionUID = -6388405037134399367L;
 
             @Override
-            public ModalPanel<CamelRouteTO> build(final int index, final boolean edit) {
+            public ModalPanel<CamelRouteTO> build(final int index, final AjaxWizard.Mode mode) {
                 final CamelRouteTO modelObject = newModelObject();
                 return new CamelRoutesModalPanel(modal, modelObject, pageRef) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 679a530..fc1eda8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -377,6 +377,7 @@ under the License.
         
     <jquery.version>2.2.2</jquery.version>
     <jquery-ui.version>1.11.4</jquery-ui.version>
+    <jquery-slimscroll.version>1.3.3</jquery-slimscroll.version>
     <jquery-cookie.version>1.4.1-1</jquery-cookie.version>
     
     <bootstrap.version>3.3.6</bootstrap.version>
@@ -1058,6 +1059,11 @@ under the License.
       </dependency>
       <dependency>
         <groupId>org.webjars</groupId>
+        <artifactId>jQuery-slimScroll</artifactId>
+        <version>${jquery-slimscroll.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.webjars</groupId>
         <artifactId>bootstrap</artifactId>
         <version>${bootstrap.version}</version>
       </dependency>


[4/5] syncope git commit: [SYNCOPE-813] mandatory condition for configuration parameters not available anymore from administration console

Posted by fm...@apache.org.
[SYNCOPE-813] mandatory condition for configuration parameters not available anymore from administration console


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

Branch: refs/heads/master
Commit: 762178b15fb3555c58813ede0caa87d9740f9064
Parents: d9ec96b
Author: fmartelli <fa...@gmail.com>
Authored: Thu Mar 24 16:45:51 2016 +0100
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Mar 24 17:19:54 2016 +0100

----------------------------------------------------------------------
 .../console/panels/ParametersCreateWizardSchemaStep.java     | 8 ++------
 .../console/panels/ParametersCreateWizardSchemaStep.html     | 1 -
 .../src/main/resources/domains/MasterContent.xml             | 3 +--
 .../src/test/resources/domains/MasterContent.xml             | 3 +--
 4 files changed, 4 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/762178b1/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
index 4a4cb7f..fd8544f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
@@ -40,6 +40,8 @@ public class ParametersCreateWizardSchemaStep extends WizardStep {
     private static final long serialVersionUID = -7843275202297616553L;
 
     public ParametersCreateWizardSchemaStep(final ParametersCreateWizardPanel.ParametersForm modelObject) {
+        modelObject.getPlainSchemaTO().setMandatoryCondition("false");
+
         final WebMarkupContainer content = new WebMarkupContainer("content");
         this.setOutputMarkupId(true);
         content.setOutputMarkupId(true);
@@ -107,14 +109,8 @@ public class ParametersCreateWizardSchemaStep extends WizardStep {
             }
         });
 
-        final AjaxTextFieldPanel mandatoryCondition = new AjaxTextFieldPanel(
-                "mandatoryCondition", getString("mandatoryCondition"),
-                new PropertyModel<String>(modelObject.getPlainSchemaTO(), "mandatoryCondition"));
-        content.add(mandatoryCondition);
-
         final AjaxCheckBoxPanel multiValue = new AjaxCheckBoxPanel("panel", getString("multivalue"),
                 new PropertyModel<Boolean>(modelObject.getPlainSchemaTO(), "multivalue"), false);
         content.add(multiValue);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/762178b1/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
index 320ae7a..c707e98 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
@@ -21,7 +21,6 @@ under the License.
     <div wicket:id="content">
       <span wicket:id="type">[type]</span>
       <span wicket:id="values">[values]</span>
-      <span wicket:id="mandatoryCondition">[mandatoryCondition]</span>
       <span wicket:id="panel">[panel]</span>
     </div>
   </wicket:panel>

http://git-wip-us.apache.org/repos/asf/syncope/blob/762178b1/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
index 1d59b71..f71c409 100644
--- a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
@@ -68,8 +68,7 @@ under the License.
   <CPlainAttr id="8" owner_id="1" schema_name="passwordReset.securityQuestion"/>
   <CPlainAttrValue id="8" attribute_id="8" booleanValue="1"/>
 
-  <PlainSchema name="authentication.statuses" type="String"
-               mandatoryCondition="true" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <PlainSchema name="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
   <CPlainAttr id="9" owner_id="1" schema_name="authentication.statuses"/>
   <CPlainAttrValue id="9" attribute_id="9" stringValue="created"/>
   <CPlainAttrValue id="10" attribute_id="9" stringValue="active"/>

http://git-wip-us.apache.org/repos/asf/syncope/blob/762178b1/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 0e1805d..9a9696f 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -68,8 +68,7 @@ under the License.
   <CPlainAttr id="8" owner_id="1" schema_name="passwordReset.securityQuestion"/>
   <CPlainAttrValue id="8" attribute_id="8" booleanValue="1"/>
 
-  <PlainSchema name="authentication.statuses" type="String"
-               mandatoryCondition="true" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <PlainSchema name="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
   <CPlainAttr id="9" owner_id="1" schema_name="authentication.statuses"/>
   <CPlainAttrValue id="9" attribute_id="9" stringValue="created"/>
   <CPlainAttrValue id="10" attribute_id="9" stringValue="active"/>


[3/5] syncope git commit: [SYNCOPE-812] fix for all useless flickering

Posted by fm...@apache.org.
[SYNCOPE-812] fix for all useless flickering


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

Branch: refs/heads/master
Commit: d9ec96b7c5d0c0dee206781e2c76f60eedcfe620
Parents: 6dd1757
Author: fmartelli <fa...@gmail.com>
Authored: Thu Mar 24 16:27:09 2016 +0100
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Mar 24 17:19:54 2016 +0100

----------------------------------------------------------------------
 .../client/console/panels/AbstractLogsPanel.java        |  4 ++--
 .../console/panels/AbstractSearchResultPanel.java       |  4 ++--
 .../client/console/panels/ConnectorDetailsPanel.java    |  4 ++--
 .../panels/ParametersCreateWizardSchemaStep.java        |  4 ++--
 .../client/console/panels/PlainSchemaDetails.java       |  6 +++---
 .../client/console/panels/ResourceMappingPanel.java     | 12 ++++++------
 .../syncope/client/console/panels/VirSchemaDetails.java |  4 ++--
 .../client/console/panels/search/SearchClausePanel.java | 10 +++++-----
 .../syncope/client/console/tasks/CrontabPanel.java      |  4 ++--
 .../client/console/tasks/SchedTaskWizardBuilder.java    |  8 ++++----
 .../client/console/tasks/StartAtTogglePanel.java        |  9 ++++-----
 .../wicket/markup/html/form/DateTimeFieldPanel.java     |  1 -
 .../syncope/client/console/wizards/any/Ownership.java   |  4 ++--
 .../client/console/wizards/any/Relationships.java       |  6 +++---
 .../wizards/provision/ProvisionWizardBuilder.java       |  6 +++---
 15 files changed, 42 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
index dbd79a7..4b752fd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.common.lib.AbstractBaseBean;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -31,7 +32,6 @@ import org.apache.syncope.common.lib.types.LoggerLevel;
 import org.apache.wicket.Component;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
@@ -67,7 +67,7 @@ public abstract class AbstractLogsPanel<T extends AbstractBaseBean> extends Pane
                             "field", getString("level"), Model.of(loggerTO.getLevel()), false);
                     loggerTOs.hideLabel();
                     loggerTOs.setChoices(Arrays.asList(LoggerLevel.values()));
-                    loggerTOs.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                    loggerTOs.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                         private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
index cb5221a..50b1539 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
@@ -26,12 +26,12 @@ import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.SearchableDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.rest.BaseRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.event.IEvent;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
@@ -171,7 +171,7 @@ public abstract class AbstractSearchResultPanel<
         final DropDownChoice<Integer> rowsChooser = new DropDownChoice<>(
                 "rowsChooser", new PropertyModel<Integer>(this, "rows"), prefMan.getPaginatorChoices());
 
-        rowsChooser.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        rowsChooser.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
index fee845b..02381da 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorDetailsPanel.java
@@ -25,6 +25,7 @@ import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSpinnerFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -32,7 +33,6 @@ import org.apache.syncope.common.lib.to.ConnBundleTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ConnPoolConfTO;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
@@ -104,7 +104,7 @@ public class ConnectorDetailsPanel extends Panel {
         version.getField().setOutputMarkupId(true);
         add(version);
 
-        bundleName.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        bundleName.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
index 7a776ee..4a4cb7f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.PropertyList;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -29,7 +30,6 @@ import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel
 import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.model.Model;
@@ -89,7 +89,7 @@ public class ParametersCreateWizardSchemaStep extends WizardStep {
         panel.setVisible(false);
         content.add(panel);
 
-        type.getField().add(new AjaxFormComponentUpdatingBehavior("onchange") {
+        type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior("onchange") {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
index 4336b6a..637f91f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
@@ -29,6 +29,7 @@ import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.commons.PropertyList;
 import org.apache.syncope.client.console.init.MIMETypesLoader;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -39,7 +40,6 @@ import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -213,7 +213,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
                 encryptedParams, secretKey, cipherAlgorithm,
                 binaryParams, mimeType);
 
-        type.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 
@@ -266,7 +266,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
                 return choices.iterator();
             }
         };
-        mandatoryCondition.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        mandatoryCondition.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
index 935b800..8784e4e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
@@ -36,6 +36,7 @@ import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
 import org.apache.syncope.client.console.rest.AnyTypeRestClient;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
@@ -56,7 +57,6 @@ import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
@@ -373,7 +373,7 @@ public class ResourceMappingPanel extends Panel {
                 item.add(actions.build("toRemove"));
                 // -------------------------------
 
-                entitiesPanel.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                entitiesPanel.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = -1107858522700306810L;
 
@@ -390,7 +390,7 @@ public class ResourceMappingPanel extends Panel {
                     }
                 });
 
-                intMappingTypes.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                intMappingTypes.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = -1107858522700306810L;
 
@@ -404,7 +404,7 @@ public class ResourceMappingPanel extends Panel {
                     }
                 });
 
-                intAttrNames.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                intAttrNames.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = -1107858522700306810L;
 
@@ -413,7 +413,7 @@ public class ResourceMappingPanel extends Panel {
                     }
                 });
 
-                connObjectKey.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                connObjectKey.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = -1107858522700306810L;
 
@@ -430,7 +430,7 @@ public class ResourceMappingPanel extends Panel {
                     }
                 });
 
-                password.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                password.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index 0fbc7a6..08493f5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.rest.ResourceRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -33,7 +34,6 @@ import org.apache.syncope.common.lib.to.ProvisionTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.model.PropertyModel;
 
@@ -85,7 +85,7 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
         add(schemaForm);
 
-        resource.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        resource.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index c756c42..df52f8c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -35,6 +35,7 @@ import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.panels.search.SearchClause.Comparator;
 import org.apache.syncope.client.console.panels.search.SearchClause.Operator;
 import org.apache.syncope.client.console.panels.search.SearchClause.Type;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 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.FieldPanel;
@@ -43,7 +44,6 @@ import org.apache.syncope.common.rest.api.service.RelationshipTypeService;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -302,7 +302,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
             @Override
             protected CheckBox newCheckBox(final String id, final IModel<Boolean> model) {
                 final CheckBox checkBox = super.newCheckBox(id, model);
-                checkBox.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                checkBox.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = 1L;
 
@@ -324,7 +324,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                 "property", "property", new PropertyModel<String>(searchClause, "property"));
         property.hideLabel().setRequired(required).setOutputMarkupId(true);
         property.setChoices(properties);
-        property.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        property.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 
@@ -350,7 +350,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
         final AjaxDropDownChoicePanel<SearchClause.Type> type = new AjaxDropDownChoicePanel<>(
                 "type", "type", new PropertyModel<SearchClause.Type>(searchClause, "type"));
         type.setChoices(types).hideLabel().setRequired(required).setOutputMarkupId(true);
-        type.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 
@@ -368,7 +368,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
         });
         field.add(type);
 
-        comparator.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        comparator.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/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
index 526dd6f..754caed 100644
--- 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
@@ -20,12 +20,12 @@ 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.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 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;
@@ -125,7 +125,7 @@ public class CrontabPanel extends Panel {
 
         final FormComponent<SelectOption> component = cronTemplateChooser.getField();
 
-        cronTemplateChooser.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        cronTemplateChooser.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
index 6fc3fdd..7fb01fb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.DateFormatROModel;
 import org.apache.syncope.client.console.rest.TaskRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -37,7 +38,6 @@ import org.apache.syncope.common.lib.types.PullMode;
 import org.apache.syncope.common.lib.types.UnmatchingRule;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -93,8 +93,8 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui
         };
 
         public Profile(final SchedTaskTO taskTO) {
-            final AjaxTextFieldPanel name =
-                    new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(taskTO, "name"), false);
+            final AjaxTextFieldPanel name = new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(taskTO,
+                    "name"), false);
             name.setEnabled(true);
             add(name);
 
@@ -129,7 +129,7 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui
             pullTaskSpecifics.add(filter);
             filter.setEnabled(isFiltered);
 
-            pullMode.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            pullMode.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java
index 341e4cd..912fd5c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java
@@ -25,13 +25,13 @@ import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.panels.TogglePanel;
 import org.apache.syncope.client.console.rest.TaskRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.DateTimeFieldPanel;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.SchedTaskTO;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
@@ -51,9 +51,8 @@ public class StartAtTogglePanel extends TogglePanel<Serializable> {
 
         final Model<Date> startAtDateModel = new Model<>();
 
-        final DateTimeFieldPanel startAtDate =
-                new DateTimeFieldPanel(
-                        "startAtDate", "startAtDate", startAtDateModel, SyncopeConstants.DATE_PATTERNS[3]);
+        final DateTimeFieldPanel startAtDate = new DateTimeFieldPanel(
+                "startAtDate", "startAtDate", startAtDateModel, SyncopeConstants.DATE_PATTERNS[3]);
 
         startAtDate.setReadOnly(true).hideLabel();
         form.add(startAtDate);
@@ -63,7 +62,7 @@ public class StartAtTogglePanel extends TogglePanel<Serializable> {
 
         form.add(startAtCheck);
 
-        startAtCheck.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        startAtCheck.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
index c39e4aa..07cf7ee 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
@@ -23,7 +23,6 @@ import java.util.Date;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.yui.calendar.DateTimeField;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
index 445564a..73c672a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
@@ -37,6 +37,7 @@ import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
 import org.apache.syncope.client.console.rest.AnyTypeRestClient;
 import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.console.rest.UserRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -46,7 +47,6 @@ import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.event.IEvent;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
@@ -129,7 +129,7 @@ public class Ownership extends WizardStep {
             @Override
             protected CheckBox newCheckBox(final String id, final IModel<Boolean> model) {
                 final CheckBox checkBox = super.newCheckBox(id, model);
-                checkBox.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                checkBox.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
index 6764cca..2969904 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
@@ -42,6 +42,7 @@ import org.apache.syncope.client.console.panels.search.SearchClausePanel;
 import org.apache.syncope.client.console.panels.search.SearchUtils;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
 import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.tabs.Accordion;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -60,7 +61,6 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.rest.api.service.RelationshipTypeService;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.event.IEvent;
 import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
@@ -298,7 +298,7 @@ public class Relationships extends WizardStep {
             Fragment emptyFragment = new Fragment("searchPanel", "emptyFragment", this);
             container.add(emptyFragment.setRenderBodyOnly(true));
 
-            type.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 
@@ -312,7 +312,7 @@ public class Relationships extends WizardStep {
                 }
             });
 
-            rightType.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            rightType.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/d9ec96b7/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
index 9d71413..85a9640 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.panels.ResourceMappingPanel;
 import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -40,7 +41,6 @@ import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -124,7 +124,7 @@ public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> imple
 
             container.add(clazz);
 
-            type.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 
@@ -200,7 +200,7 @@ public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> imple
             connObjectLink.setEnabled(connObjectLinkEnabled);
             connObjectLinkContainer.add(connObjectLink);
 
-            connObjectLinkCheckbox.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            connObjectLinkCheckbox.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 


[5/5] syncope git commit: [SYNCOPE-812] remove main flickerings

Posted by fm...@apache.org.
[SYNCOPE-812] remove main flickerings


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

Branch: refs/heads/master
Commit: 6dd1757b3ef536f56016693a320c5898084a9e1e
Parents: ab67161
Author: fmartelli <fa...@gmail.com>
Authored: Thu Mar 24 16:11:58 2016 +0100
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Mar 24 17:19:54 2016 +0100

----------------------------------------------------------------------
 ...icatorAjaxFormComponentUpdatingBehavior.java | 48 ++++++++++++++++++++
 .../markup/html/IndicatorAjaxSubmitLink.java    | 46 +++++++++++++++++++
 .../markup/html/form/AjaxCheckBoxPanel.java     |  4 +-
 .../html/form/AjaxDropDownChoicePanel.java      |  4 +-
 .../html/form/AjaxPasswordFieldPanel.java       |  4 +-
 .../markup/html/form/AjaxTextFieldPanel.java    |  4 +-
 .../markup/html/form/DateTextFieldPanel.java    |  4 +-
 .../markup/html/form/DateTimeFieldPanel.java    | 11 +++--
 .../markup/html/form/MultiFieldPanel.java       | 11 +++--
 .../html/list/ConnConfPropertyListView.java     |  4 +-
 10 files changed, 118 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/IndicatorAjaxFormComponentUpdatingBehavior.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/IndicatorAjaxFormComponentUpdatingBehavior.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/IndicatorAjaxFormComponentUpdatingBehavior.java
new file mode 100644
index 0000000..eb990d1
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/IndicatorAjaxFormComponentUpdatingBehavior.java
@@ -0,0 +1,48 @@
+/*
+ * 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.wicket.ajax.form;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.ajax.IAjaxIndicatorAware;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+
+/**
+ * An {@link AjaxFormComponentUpdatingBehavior} not showin veil.
+ */
+public abstract class IndicatorAjaxFormComponentUpdatingBehavior
+        extends AjaxFormComponentUpdatingBehavior implements IAjaxIndicatorAware {
+
+    private static final long serialVersionUID = -5144403874783384604L;
+
+    private final String indicator;
+
+    public IndicatorAjaxFormComponentUpdatingBehavior(final String event) {
+        this(event, StringUtils.EMPTY);
+    }
+
+    public IndicatorAjaxFormComponentUpdatingBehavior(final String event, final String indicator) {
+        super(event);
+        this.indicator = indicator;
+    }
+
+    @Override
+    public String getAjaxIndicatorMarkupId() {
+        return indicator;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/IndicatorAjaxSubmitLink.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/IndicatorAjaxSubmitLink.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/IndicatorAjaxSubmitLink.java
new file mode 100644
index 0000000..f970e86
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/IndicatorAjaxSubmitLink.java
@@ -0,0 +1,46 @@
+/*
+ * 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.wicket.ajax.markup.html;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.ajax.IAjaxIndicatorAware;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
+import org.apache.wicket.markup.html.form.Form;
+
+/**
+ * An {@link AjaxSubmitLink} not showing veil.
+ */
+public abstract class IndicatorAjaxSubmitLink extends AjaxSubmitLink implements IAjaxIndicatorAware {
+
+    private static final long serialVersionUID = 2199328860134082968L;
+
+    public IndicatorAjaxSubmitLink(final String id) {
+        super(id);
+    }
+
+    public IndicatorAjaxSubmitLink(final String id, final Form<?> form) {
+        super(id, form);
+    }
+
+    @Override
+    public String getAjaxIndicatorMarkupId() {
+        return StringUtils.EMPTY;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
index 789a8e1..524f424 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java
@@ -21,8 +21,8 @@ package org.apache.syncope.client.console.wicket.markup.html.form;
 import java.io.Serializable;
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.model.IModel;
@@ -44,7 +44,7 @@ public class AjaxCheckBoxPanel extends FieldPanel<Boolean> {
         add(field.setLabel(new Model<String>(name)).setOutputMarkupId(true));
 
         if (enableOnChange && !isReadOnly()) {
-            field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            field.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java
index d8f3007..0ca72be 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java
@@ -23,8 +23,8 @@ import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
@@ -50,7 +50,7 @@ public class AjaxDropDownChoicePanel<T extends Serializable> extends FieldPanel<
         add(field.setLabel(new Model<>(name)).setOutputMarkupId(true));
 
         if (enableOnBlur) {
-            field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) {
+            field.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
index a831520..b8b9d88 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java
@@ -19,8 +19,8 @@
 package org.apache.syncope.client.console.wicket.markup.html.form;
 
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
@@ -41,7 +41,7 @@ public class AjaxPasswordFieldPanel extends FieldPanel<String> {
         add(field.setLabel(new ResourceModel(name, name)).setRequired(false).setOutputMarkupId(true));
 
         if (enableOnChange && !isReadOnly()) {
-            field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            field.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
index 59a2c00..1edfaa6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
@@ -24,8 +24,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.regex.Pattern;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings;
 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
 import org.apache.wicket.model.IModel;
@@ -73,7 +73,7 @@ public class AjaxTextFieldPanel extends FieldPanel<String> implements Cloneable
         add(field.setLabel(new ResourceModel(name, name)).setOutputMarkupId(true));
 
         if (enableOnChange && !isReadOnly()) {
-            field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            field.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTextFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTextFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTextFieldPanel.java
index 464bf55..bce56d7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTextFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTextFieldPanel.java
@@ -20,9 +20,9 @@ package org.apache.syncope.client.console.wicket.markup.html.form;
 
 import java.util.Date;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.datetime.markup.html.form.DateTextField;
 import org.apache.wicket.extensions.yui.calendar.DatePicker;
 import org.apache.wicket.model.IModel;
@@ -39,7 +39,7 @@ public class DateTextFieldPanel extends DateFieldPanel {
         field = DateTextField.forDatePattern("field", model, datePattern);
 
         if (!isReadOnly()) {
-            field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+            field.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                 private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
index 4e13a6b..c39e4aa 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/DateTimeFieldPanel.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.console.wicket.markup.html.form;
 import java.util.Calendar;
 import java.util.Date;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.yui.calendar.DateTimeField;
@@ -41,11 +42,11 @@ public class DateTimeFieldPanel extends DateFieldPanel {
     public DateTimeFieldPanel(final String id, final String name, final IModel<Date> model, final String datePattern) {
         super(id, name, model, datePattern);
 
-        field = new DateTimePickerField("field", model); 
+        field = new DateTimePickerField("field", model);
 
         final Calendar cal = Calendar.getInstance();
 
-        field.get("hours").add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        field.get("hours").add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 
@@ -60,7 +61,7 @@ public class DateTimeFieldPanel extends DateFieldPanel {
             }
         });
 
-        field.get("minutes").add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        field.get("minutes").add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 
@@ -75,7 +76,7 @@ public class DateTimeFieldPanel extends DateFieldPanel {
             }
         });
 
-        field.get("date").add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        field.get("date").add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 
@@ -95,7 +96,7 @@ public class DateTimeFieldPanel extends DateFieldPanel {
             }
         });
 
-        field.get("amOrPmChoice").add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+        field.get("amOrPmChoice").add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.java
index 2611a2c..8f48f82 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.java
@@ -21,9 +21,9 @@ package org.apache.syncope.client.console.wicket.markup.html.form;
 import java.io.Serializable;
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
+import org.apache.syncope.client.console.wicket.ajax.markup.html.IndicatorAjaxSubmitLink;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
@@ -95,7 +95,7 @@ public abstract class MultiFieldPanel<E extends Serializable> extends AbstractFi
     }
 
     private Fragment getPlusFragment(final IModel<List<E>> model, final String label) {
-        final AjaxSubmitLink plus = new AjaxSubmitLink("add") {
+        final IndicatorAjaxSubmitLink plus = new IndicatorAjaxSubmitLink("add") {
 
             private static final long serialVersionUID = -7978723352517770644L;
 
@@ -116,6 +116,7 @@ public abstract class MultiFieldPanel<E extends Serializable> extends AbstractFi
                 error(getString(Constants.OPERATION_ERROR));
                 super.onError(target, form);
             }
+
         };
 
         final Fragment fragment = new Fragment("panelPlus", "fragmentPlus", MultiFieldPanel.this);
@@ -219,7 +220,7 @@ public abstract class MultiFieldPanel<E extends Serializable> extends AbstractFi
             fieldPanel.settingsDependingComponents();
 
             if (eventTemplate) {
-                fieldPanel.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                fieldPanel.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = -1107858522700306810L;
 
@@ -232,7 +233,7 @@ public abstract class MultiFieldPanel<E extends Serializable> extends AbstractFi
 
             item.add(fieldPanel.hideLabel().setRenderBodyOnly(true));
 
-            final AjaxSubmitLink minus = new AjaxSubmitLink("drop") {
+            final IndicatorAjaxSubmitLink minus = new IndicatorAjaxSubmitLink("drop") {
 
                 private static final long serialVersionUID = -7978723352517770644L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dd1757b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
index f362a38..344ef53 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AbstractFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPasswordFieldPanel;
@@ -34,7 +35,6 @@ import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.FormComponent;
@@ -158,7 +158,7 @@ public class ConnConfPropertyListView extends ListView<ConnConfProperty> {
             @Override
             protected CheckBox newCheckBox(final String id, final IModel<Boolean> model) {
                 final CheckBox checkBox = super.newCheckBox(id, model);
-                checkBox.add(new AjaxFormComponentUpdatingBehavior("change") {
+                checkBox.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = 1L;
 


[2/5] syncope git commit: [SYNCOPE-765] providing TODO features

Posted by fm...@apache.org.
[SYNCOPE-765] providing TODO features


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

Branch: refs/heads/master
Commit: 9014cf2873b522d9fdd7dfe7afa5bdc8be3c9677
Parents: 762178b
Author: fmartelli <fa...@gmail.com>
Authored: Thu Mar 24 16:59:31 2016 +0100
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Mar 24 17:19:54 2016 +0100

----------------------------------------------------------------------
 client/console/pom.xml                          |   4 +
 .../client/console/commons/Constants.java       |   2 +
 .../console/commons/MapChoiceRenderer.java      |  55 ++++
 .../syncope/client/console/pages/BasePage.java  |  19 +-
 .../syncope/client/console/pages/TODOs.java     |  41 +++
 .../panels/AbstractSearchResultPanel.java       |   4 +
 .../console/panels/AnyTypeClassesPanel.java     |   2 +-
 .../client/console/panels/AnyTypesPanel.java    |   4 +-
 .../panels/ParametersCreateModalPanel.java      |   3 +-
 .../client/console/panels/ParametersPanel.java  |   3 +-
 .../console/panels/RelationshipTypesPanel.java  |   2 +-
 .../client/console/panels/SchemaTypePanel.java  |   4 +-
 .../console/panels/SecurityQuestionsPanel.java  |   6 +-
 .../syncope/client/console/todos/Approval.java  | 208 ++++++++++++++
 .../client/console/todos/ApprovalDetails.java   |  48 ++++
 .../client/console/todos/ApprovalModal.java     |  83 ++++++
 .../console/todos/TODOSearchResultPanel.java    | 217 ++++++++++++++
 .../client/console/widgets/TODOsWidget.java     | 283 +++++++++++++++++++
 .../wizards/AbstractModalPanelBuilder.java      |   2 +-
 .../client/console/wizards/AjaxWizard.java      |  32 ++-
 .../console/wizards/AjaxWizardBuilder.java      |   8 +-
 .../console/wizards/AjaxWizardMgtButtonBar.java |  37 ++-
 .../client/console/wizards/WizardMgtPanel.java  |   5 +-
 .../client/console/wizards/any/PlainAttrs.java  |   2 +-
 .../META-INF/resources/css/syncopeConsole.css   |   6 +-
 .../syncope/client/console/pages/BasePage.html  |  13 +-
 .../client/console/pages/BasePage.properties    |   1 +
 .../client/console/pages/BasePage_it.properties |   1 +
 .../console/pages/BasePage_pt_BR.properties     |   1 +
 .../syncope/client/console/pages/Realms.html    |  12 +-
 .../syncope/client/console/pages/TODOs.html     |  35 +++
 .../client/console/pages/TODOs.properties       |  32 +++
 .../client/console/pages/TODOs_it.properties    |  32 +++
 .../client/console/pages/TODOs_pt_BR.properties |  32 +++
 .../syncope/client/console/todos/Approval.html  |  34 +++
 .../client/console/todos/Approval.properties    |  17 ++
 .../client/console/todos/ApprovalDetails.html   |  26 ++
 .../client/console/todos/ApprovalModal.html     |  26 ++
 .../console/todos/ApprovalModal.properties      |  17 ++
 .../client/console/todos/Approval_it.properties |  17 ++
 .../console/todos/Approval_pt_BR.properties     |  17 ++
 .../markup/html/form/ActionLinksPanel.html      |   2 +-
 .../client/console/widgets/TODOsWidget.html     |  48 ++++
 .../console/widgets/TODOsWidget.properties      |  21 ++
 .../console/widgets/TODOsWidget_it.properties   |  21 ++
 .../widgets/TODOsWidget_pt_BR.properties        |  21 ++
 .../console/wizards/any/DerAttrs.properties     |   2 +-
 .../console/wizards/any/DerAttrs_it.properties  |   2 +-
 .../wizards/any/DerAttrs_pt_BR.properties       |   2 +-
 .../console/wizards/any/UserDetails.properties  |   2 +-
 .../wizards/any/UserDetails_it.properties       |   2 +-
 .../wizards/any/UserDetails_pt_BR.properties    |   2 +-
 .../client/console/panels/CamelRoutesPanel.java |   2 +-
 pom.xml                                         |   6 +
 54 files changed, 1447 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/pom.xml
----------------------------------------------------------------------
diff --git a/client/console/pom.xml b/client/console/pom.xml
index 6f4ebcf..c143ee7 100644
--- a/client/console/pom.xml
+++ b/client/console/pom.xml
@@ -134,6 +134,10 @@ under the License.
       <groupId>org.webjars</groupId>
       <artifactId>jquery-ui</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.webjars</groupId>
+      <artifactId>jQuery-slimScroll</artifactId>
+    </dependency>
     
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/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 3e0d4a4..8f9c250 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
@@ -88,6 +88,8 @@ public final class Constants {
 
     public static final String PREF_ROLE_PAGINATOR_ROWS = "role.paginator.rows";
 
+    public static final String PREF_WORKFLOW_FORM_PAGINATOR_ROWS = "role.paginator.workflow.form";
+
     public static final String PREF_RESOURCES_PAGINATOR_ROWS = "resources.paginator.rows";
 
     public static final String PREF_CONNECTORS_PAGINATOR_ROWS = "connectors.paginator.rows";

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/commons/MapChoiceRenderer.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/MapChoiceRenderer.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/MapChoiceRenderer.java
new file mode 100644
index 0000000..2845105
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/MapChoiceRenderer.java
@@ -0,0 +1,55 @@
+/*
+ * 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.List;
+import java.util.Map;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.model.IModel;
+
+public class MapChoiceRenderer<T, K> implements IChoiceRenderer<T> {
+
+    private static final long serialVersionUID = -7452881117778186644L;
+
+    private final Map<T, K> map;
+
+    public MapChoiceRenderer(final Map<T, K> map) {
+        this.map = map;
+    }
+
+    @Override
+    public Object getDisplayValue(final T key) {
+        return map.get(key);
+    }
+
+    @Override
+    public String getIdValue(final T key, final int index) {
+        return key.toString();
+    }
+
+    @Override
+    public T getObject(final String id, final IModel<? extends List<? extends T>> choices) {
+        for (Map.Entry<T, K> entry : map.entrySet()) {
+            if (entry.getValue() != null && entry.getValue().toString().equals(id)) {
+                return entry.getKey();
+            }
+        }
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index a860bfe..44fc786 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -27,10 +27,10 @@ import org.apache.syncope.client.console.annotations.ExtPage;
 import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
 import org.apache.syncope.client.console.init.ConsoleInitializer;
 import org.apache.syncope.client.console.panels.NotificationPanel;
-import org.apache.syncope.client.console.rest.UserWorkflowRestClient;
 import org.apache.syncope.client.console.topology.Topology;
 import org.apache.syncope.client.console.wicket.markup.head.MetaHeaderItem;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.widgets.TODOsWidget;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
@@ -84,8 +84,7 @@ public class BasePage extends WebPage implements IAjaxIndicatorAware {
         super(parameters);
 
         body = new WebMarkupContainer("body");
-        Serializable leftMenuCollapse =
-                SyncopeConsoleSession.get().getAttribute(SyncopeConsoleSession.MENU_COLLAPSE);
+        Serializable leftMenuCollapse = SyncopeConsoleSession.get().getAttribute(SyncopeConsoleSession.MENU_COLLAPSE);
         if ((leftMenuCollapse instanceof Boolean) && ((Boolean) leftMenuCollapse)) {
             body.add(new AttributeAppender("class", " sidebar-collapse"));
         }
@@ -97,15 +96,7 @@ public class BasePage extends WebPage implements IAjaxIndicatorAware {
         body.add(new Label("version", SyncopeConsoleApplication.get().getVersion()));
         body.add(new Label("username", SyncopeConsoleSession.get().getSelfTO().getUsername()));
 
-        WebMarkupContainer todosContainer = new WebMarkupContainer("todosContainer");
-        body.add(todosContainer);
-        Label todos = new Label("todos", "0");
-        todosContainer.add(todos);
-        if (SyncopeConsoleSession.get().owns(StandardEntitlement.WORKFLOW_FORM_LIST)) {
-            todos.setDefaultModelObject(new UserWorkflowRestClient().getForms().size());
-        }
-        MetaDataRoleAuthorizationStrategy.authorize(
-                todosContainer, WebPage.ENABLE, StandardEntitlement.WORKFLOW_FORM_LIST);
+        body.add(new TODOsWidget("todosWidget", getPageReference()).setRenderBodyOnly(true));
 
         // menu
         WebMarkupContainer liContainer = new WebMarkupContainer(getLIContainerId("dashboard"));
@@ -248,8 +239,8 @@ public class BasePage extends WebPage implements IAjaxIndicatorAware {
         }
 
         // Extensions
-        ClassPathScanImplementationLookup classPathScanImplementationLookup =
-                (ClassPathScanImplementationLookup) SyncopeConsoleApplication.get().
+        ClassPathScanImplementationLookup classPathScanImplementationLookup
+                = (ClassPathScanImplementationLookup) SyncopeConsoleApplication.get().
                 getServletContext().getAttribute(ConsoleInitializer.CLASSPATH_LOOKUP);
         List<Class<? extends BaseExtPage>> extPageClasses = classPathScanImplementationLookup.getExtPageClasses();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/pages/TODOs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/TODOs.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/TODOs.java
new file mode 100644
index 0000000..ac51ba0
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/TODOs.java
@@ -0,0 +1,41 @@
+/*
+ * 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.pages;
+
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.todos.TODOSearchResultPanel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class TODOs extends BasePage {
+
+    private static final long serialVersionUID = -1100228004207271271L;
+
+    public TODOs(final PageParameters parameters) {
+        super(parameters);
+
+        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
+
+        WebMarkupContainer content = new WebMarkupContainer("content");
+        content.setOutputMarkupId(true);
+        body.add(content);
+
+        content.add(new TODOSearchResultPanel("wfPanel", getPageReference()));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
index 50b1539..66de748 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.List;
@@ -145,6 +146,9 @@ public abstract class AbstractSearchResultPanel<
         setWindowClosedReloadCallback(modal);
         setWindowClosedReloadCallback(altDefaultModal);
         setWindowClosedReloadCallback(displayAttributeModal);
+
+        altDefaultModal.size(Modal.Size.Medium);
+        displayAttributeModal.size(Modal.Size.Medium);
     }
 
     protected abstract DP dataProvider();

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
index 8fa1b5a..5c2b446 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
@@ -66,7 +66,7 @@ public class AnyTypeClassesPanel extends AbstractTypesPanel<AnyTypeClassTO, AnyT
             private static final long serialVersionUID = -6388405037134399367L;
 
             @Override
-            public ModalPanel<AnyTypeClassTO> build(final int index, final boolean edit) {
+            public ModalPanel<AnyTypeClassTO> build(final int index, final AjaxWizard.Mode mode) {
                 final AnyTypeClassTO modelObject = newModelObject();
                 return new AnyTypeClassModalPanel(modal, modelObject, pageRef) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
index 978c299..93d19b6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
@@ -67,7 +67,7 @@ public class AnyTypesPanel extends AbstractTypesPanel<AnyTypeTO, AnyTypeProvider
             private static final long serialVersionUID = -6388405037134399367L;
 
             @Override
-            public ModalPanel<AnyTypeTO> build(final int index, final boolean edit) {
+            public ModalPanel<AnyTypeTO> build(final int index, final AjaxWizard.Mode mode) {
                 final AnyTypeTO modelObject = newModelObject();
                 return new AnyTypeModalPanel(modal, modelObject, pageRef) {
 
@@ -184,7 +184,7 @@ public class AnyTypesPanel extends AbstractTypesPanel<AnyTypeTO, AnyTypeProvider
                                     target.add(container);
                                 } catch (Exception e) {
                                     LOG.error("While deleting {}", model.getObject(), e);
-                                    error(StringUtils.isBlank(e.getMessage()) 
+                                    error(StringUtils.isBlank(e.getMessage())
                                             ? e.getClass().getName() : e.getMessage());
                                 }
                                 SyncopeConsoleSession.get().getNotificationPanel().refresh(target);

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateModalPanel.java
index 4f73fab..6e71a2b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateModalPanel.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.panels;
 
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.AttrTO;
 import org.apache.wicket.PageReference;
 
@@ -35,7 +36,7 @@ public class ParametersCreateModalPanel extends AbstractModalPanel<AttrTO> {
         super(modal, pageRef);
         this.attrTO = attrTO;
         add(new ParametersCreateWizardPanel("parametersCreateWizardPanel",
-                new ParametersCreateWizardPanel.ParametersForm(), pageRef).build(false));
+                new ParametersCreateWizardPanel.ParametersForm(), pageRef).build(AjaxWizard.Mode.CREATE));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
index 6ee4ae0..60540d9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
@@ -36,6 +36,7 @@ import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.Bas
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.common.lib.to.AttrTO;
 import org.apache.syncope.common.lib.types.SchemaType;
@@ -100,7 +101,7 @@ public class ParametersPanel extends AbstractSearchResultPanel<
             private static final long serialVersionUID = 1995192603527154740L;
 
             @Override
-            public ModalPanel<AttrTO> build(final int index, final boolean edit) {
+            public ModalPanel<AttrTO> build(final int index, final AjaxWizard.Mode mode) {
                 return new ParametersCreateModalPanel(modal, newModelObject(), pageRef);
             }
         }, true);

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
index 81df00e..a2fa48f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
@@ -67,7 +67,7 @@ public class RelationshipTypesPanel extends AbstractTypesPanel<RelationshipTypeT
             private static final long serialVersionUID = -6388405037134399367L;
 
             @Override
-            public ModalPanel<RelationshipTypeTO> build(final int index, final boolean edit) {
+            public ModalPanel<RelationshipTypeTO> build(final int index, final AjaxWizard.Mode mode) {
                 final RelationshipTypeTO modelObject = newModelObject();
                 return new RelationshipTypeModalPanel(modal, modelObject, pageRef) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index b06318d..dd0c3aa 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -95,7 +95,7 @@ public class SchemaTypePanel extends AbstractTypesPanel<AbstractSchemaTO, Schema
                 private static final long serialVersionUID = -6388405037134399367L;
 
                 @Override
-                public ModalPanel<AbstractSchemaTO> build(final int index, final boolean edit) {
+                public ModalPanel<AbstractSchemaTO> build(final int index, final AjaxWizard.Mode mode) {
                     final AbstractSchemaTO modelObject = newModelObject();
                     return new SchemaModalPanel(modal, modelObject, pageRef) {
 
@@ -223,7 +223,7 @@ public class SchemaTypePanel extends AbstractTypesPanel<AbstractSchemaTO, Schema
                                     target.add(container);
                                 } catch (Exception e) {
                                     LOG.error("While deleting {}", model.getObject(), e);
-                                    error(StringUtils.isBlank(e.getMessage()) 
+                                    error(StringUtils.isBlank(e.getMessage())
                                             ? e.getClass().getName() : e.getMessage());
                                 }
                                 SyncopeConsoleSession.get().getNotificationPanel().refresh(target);

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index bac8481..beb15d4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -76,7 +76,7 @@ public class SecurityQuestionsPanel extends AbstractSearchResultPanel<
             private static final long serialVersionUID = -6388405037134399367L;
 
             @Override
-            public ModalPanel<SecurityQuestionTO> build(final int index, final boolean edit) {
+            public ModalPanel<SecurityQuestionTO> build(final int index, final AjaxWizard.Mode mode) {
                 final SecurityQuestionTO modelObject = newModelObject();
                 return new SecurityQuestionsModalPanel(modal, modelObject, pageRef);
             }
@@ -223,8 +223,8 @@ public class SecurityQuestionsPanel extends AbstractSearchResultPanel<
 
         @Override
         public Iterator<SecurityQuestionTO> iterator(final long first, final long count) {
-            final List<SecurityQuestionTO> list =
-                    SyncopeConsoleSession.get().getService(SecurityQuestionService.class).list();
+            final List<SecurityQuestionTO> list = SyncopeConsoleSession.get().getService(SecurityQuestionService.class).
+                    list();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/todos/Approval.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/todos/Approval.java b/client/console/src/main/java/org/apache/syncope/client/console/todos/Approval.java
new file mode 100644
index 0000000..616e49c
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/todos/Approval.java
@@ -0,0 +1,208 @@
+/*
+ * 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.todos;
+
+import static org.apache.wicket.Component.ENABLE;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.apache.commons.lang3.time.FastDateFormat;
+import org.apache.syncope.client.console.commons.MapChoiceRenderer;
+import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSpinnerFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.DateTimeFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
+import org.apache.syncope.common.lib.to.WorkflowFormPropertyTO;
+import org.apache.syncope.common.lib.to.WorkflowFormTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class Approval extends Panel {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    protected static final Logger LOG = LoggerFactory.getLogger(Approval.class);
+
+    public Approval(final PageReference pageRef, final WorkflowFormTO formTO) {
+        super(MultilevelPanel.FIRST_LEVEL_ID);
+
+        IModel<List<WorkflowFormPropertyTO>> formProps = new LoadableDetachableModel<List<WorkflowFormPropertyTO>>() {
+
+            private static final long serialVersionUID = 3169142472626817508L;
+
+            @Override
+            protected List<WorkflowFormPropertyTO> load() {
+                return formTO.getProperties();
+            }
+        };
+
+        final ListView<WorkflowFormPropertyTO> propView = new ListView<WorkflowFormPropertyTO>("propView", formProps) {
+
+            private static final long serialVersionUID = 9101744072914090143L;
+
+            @Override
+            @SuppressWarnings({ "unchecked", "rawtypes" })
+            protected void populateItem(final ListItem<WorkflowFormPropertyTO> item) {
+                final WorkflowFormPropertyTO prop = item.getModelObject();
+
+                String label = StringUtils.isBlank(prop.getName()) ? prop.getId() : prop.getName();
+
+                FieldPanel field;
+                switch (prop.getType()) {
+                    case Boolean:
+                        field = new AjaxDropDownChoicePanel("value", label, new PropertyModel<String>(prop, "value") {
+
+                            private static final long serialVersionUID = -3743432456095828573L;
+
+                            @Override
+                            public String getObject() {
+                                return StringUtils.isBlank(prop.getValue())
+                                        ? null
+                                        : prop.getValue().equals("true") ? "Yes" : "No";
+                            }
+
+                            @Override
+                            public void setObject(final String object) {
+                                prop.setValue(String.valueOf(object.equalsIgnoreCase("yes")));
+                            }
+
+                        }, false).setChoices(Arrays.asList(new String[] { "Yes", "No" }));
+                        break;
+
+                    case Date:
+                        final FastDateFormat formatter = FastDateFormat.getInstance(prop.getDatePattern());
+                        field = new DateTimeFieldPanel("value", label, new PropertyModel<Date>(prop, "value") {
+
+                            private static final long serialVersionUID = -3743432456095828573L;
+
+                            @Override
+                            public Date getObject() {
+                                try {
+                                    if (StringUtils.isBlank(prop.getValue())) {
+                                        return null;
+                                    } else {
+                                        return formatter.parse(prop.getValue());
+                                    }
+                                } catch (ParseException e) {
+                                    LOG.error("Unparsable date: {}", prop.getValue(), e);
+                                    return null;
+                                }
+                            }
+
+                            @Override
+                            public void setObject(final Date object) {
+                                prop.setValue(formatter.format(object));
+                            }
+
+                        }, prop.getDatePattern());
+                        break;
+
+                    case Enum:
+                        MapChoiceRenderer<String, String> enumCR = new MapChoiceRenderer<>(prop.getEnumValues());
+                        final Map<String, String> map = MapUtils.invertMap(prop.getEnumValues());
+
+                        field = new AjaxDropDownChoicePanel(
+                                "value", label, new PropertyModel<String>(prop, "value"), false).
+                                setChoiceRenderer(enumCR).setChoices(new Model<ArrayList<String>>() {
+
+                            private static final long serialVersionUID = -858521070366432018L;
+
+                            @Override
+                            public ArrayList<String> getObject() {
+                                return new ArrayList<String>(prop.getEnumValues().keySet());
+                            }
+                        });
+                        break;
+
+                    case Long:
+                        field = new AjaxSpinnerFieldPanel.Builder<Long>().build(
+                                "value",
+                                label,
+                                Long.class,
+                                new PropertyModel<Long>(prop, "value") {
+
+                            private static final long serialVersionUID = -7688359318035249200L;
+
+                            @Override
+                            public Long getObject() {
+                                return StringUtils.isBlank(prop.getValue())
+                                        ? null
+                                        : NumberUtils.toLong(prop.getValue());
+                            }
+
+                            @Override
+                            public void setObject(final Long object) {
+                                prop.setValue(String.valueOf(object));
+                            }
+                        });
+                        break;
+
+                    case String:
+                    default:
+                        field = new AjaxTextFieldPanel("value", label, new PropertyModel<String>(prop, "value"), false);
+                        break;
+                }
+
+                field.setReadOnly(!prop.isWritable());
+                if (prop.isRequired()) {
+                    field.addRequiredLabel();
+                }
+
+                item.add(field);
+            }
+        };
+
+        final AjaxLink<String> userDetails = new AjaxLink<String>("userDetails") {
+
+            private static final long serialVersionUID = -4804368561204623354L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                viewDetails(formTO, target);
+            }
+        };
+        MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE, StandardEntitlement.USER_READ);
+
+        add(propView);
+        add(userDetails);
+    }
+
+    protected abstract void viewDetails(final WorkflowFormTO formTO, final AjaxRequestTarget target);
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalDetails.java
new file mode 100644
index 0000000..20613d9
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalDetails.java
@@ -0,0 +1,48 @@
+/*
+ * 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.todos;
+
+import java.util.List;
+import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.rest.UserRestClient;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.any.AnyHandler;
+import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.to.WorkflowFormTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.wicket.PageReference;
+
+public class ApprovalDetails extends MultilevelPanel.SecondLevel {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    public ApprovalDetails(final PageReference pageRef, final WorkflowFormTO formTO) {
+        super(MultilevelPanel.SECOND_LEVEL_ID);
+
+        final UserTO userTO = new UserRestClient().read(formTO.getUserKey());
+        final List<String> anyTypeClasses = new AnyTypeRestClient().get(AnyTypeKind.USER.name()).getClasses();
+
+        final AjaxWizard<AnyHandler<UserTO>> wizard
+                = new UserWizardBuilder("wizard", userTO, anyTypeClasses, pageRef).build(AjaxWizard.Mode.READONLY);
+
+        add(wizard);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalModal.java b/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalModal.java
new file mode 100644
index 0000000..a4fa1b5
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/todos/ApprovalModal.java
@@ -0,0 +1,83 @@
+/*
+ * 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.todos;
+
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.ModalPanel;
+import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.rest.UserWorkflowRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.WorkflowFormTO;
+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 ApprovalModal extends Panel implements ModalPanel<WorkflowFormTO> {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    private final BaseModal<?> modal;
+
+    private final WorkflowFormTO formTO;
+
+    public ApprovalModal(final BaseModal<?> modal, final PageReference pageRef, final WorkflowFormTO formTO) {
+        super(BaseModal.CONTENT_ID);
+        this.modal = modal;
+        this.formTO = formTO;
+
+        final MultilevelPanel mlp = new MultilevelPanel("approval");
+        add(mlp);
+
+        mlp.setFirstLevel(new Approval(pageRef, formTO) {
+
+            private static final long serialVersionUID = -2195387360323687302L;
+
+            @Override
+            protected void viewDetails(final WorkflowFormTO formTO, final AjaxRequestTarget target) {
+                mlp.next(getString("approval.details"), new ApprovalDetails(pageRef, formTO), target);
+            }
+        });
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+        try {
+            new UserWorkflowRestClient().submitForm(formTO);
+            this.modal.show(false);
+            this.modal.close(target);
+            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+        } catch (SyncopeClientException e) {
+            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + e.getMessage());
+        }
+        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target, final Form<?> form) {
+        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+    }
+
+    @Override
+    public WorkflowFormTO getItem() {
+        return this.formTO;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java
new file mode 100644
index 0000000..fa14859
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java
@@ -0,0 +1,217 @@
+/*
+ * 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.todos;
+
+import static org.apache.wicket.Component.ENABLE;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+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.panels.AbstractSearchResultPanel;
+import org.apache.syncope.client.console.rest.UserWorkflowRestClient;
+import org.apache.syncope.client.console.todos.TODOSearchResultPanel.ApprovalProvider;
+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.ActionLinksPanel;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.WorkflowFormTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+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.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+
+public class TODOSearchResultPanel
+        extends AbstractSearchResultPanel<WorkflowFormTO, WorkflowFormTO, ApprovalProvider, UserWorkflowRestClient> {
+
+    private static final long serialVersionUID = -7122136682275797903L;
+
+    public TODOSearchResultPanel(final String id, final PageReference pageReference) {
+        super(id, pageReference, false);
+        disableCheckBoxes();
+
+        setFooterVisibility(true);
+        modal.addSumbitButton();
+        modal.size(Modal.Size.Large);
+
+        restClient = new UserWorkflowRestClient();
+
+        initResultTable();
+
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.WORKFLOW_FORM_SUBMIT);
+    }
+
+    @Override
+    protected List<IColumn<WorkflowFormTO, String>> getColumns() {
+
+        List<IColumn<WorkflowFormTO, String>> columns = new ArrayList<IColumn<WorkflowFormTO, String>>();
+        columns.add(new PropertyColumn<WorkflowFormTO, String>(
+                new ResourceModel("taskId"), "taskId", "taskId"));
+        columns.add(new PropertyColumn<WorkflowFormTO, String>(
+                new ResourceModel("key"), "key", "key"));
+        columns.add(new PropertyColumn<WorkflowFormTO, String>(
+                new ResourceModel("description"), "description", "description"));
+        columns.add(new DatePropertyColumn<WorkflowFormTO>(
+                new ResourceModel("createTime"), "createTime", "createTime"));
+        columns.add(new DatePropertyColumn<WorkflowFormTO>(
+                new ResourceModel("dueDate"), "dueDate", "dueDate"));
+        columns.add(new PropertyColumn<WorkflowFormTO, String>(new ResourceModel("owner"), "owner", "owner"));
+        columns.add(new ActionColumn<WorkflowFormTO, String>(new ResourceModel("actions", "")) {
+
+            private static final long serialVersionUID = -3503023501954863133L;
+
+            @Override
+            public ActionLinksPanel<WorkflowFormTO> getActions(
+                    final String componentId, final IModel<WorkflowFormTO> model) {
+                final ActionLinksPanel.Builder<WorkflowFormTO> panel = ActionLinksPanel.builder();
+
+                panel.add(new ActionLink<WorkflowFormTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435501L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final WorkflowFormTO ignore) {
+                        try {
+                            restClient.claimForm(model.getObject().getTaskId());
+                            info(getString(Constants.OPERATION_SUCCEEDED));
+                        } catch (SyncopeClientException scee) {
+                            error(getString(Constants.ERROR) + ": " + scee.getMessage());
+                        }
+                        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+                        target.add(container);
+                    }
+                }, ActionLink.ActionType.CLAIM, StandardEntitlement.WORKFLOW_FORM_CLAIM);
+
+                panel.add(new ActionLink<WorkflowFormTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435501L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final WorkflowFormTO ignore) {
+                        final IModel<WorkflowFormTO> formModel = new CompoundPropertyModel<>(model.getObject());
+                        modal.setFormModel(formModel);
+
+                        target.add(modal.setContent(new ApprovalModal(modal, pageRef, model.getObject())));
+                        modal.header(new Model<>(getString("approval.edit", new Model<>(model.getObject()))));
+
+                        modal.show(true);
+                    }
+
+                    @Override
+                    protected boolean statusCondition(final WorkflowFormTO modelObject) {
+                        return SyncopeConsoleSession.get().getSelfTO().getUsername().
+                                equals(model.getObject().getOwner());
+                    }
+
+                }, ActionLink.ActionType.EDIT, StandardEntitlement.WORKFLOW_FORM_READ);
+
+                return panel.build(componentId);
+            }
+
+            @Override
+            public ActionLinksPanel<WorkflowFormTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<WorkflowFormTO> panel = ActionLinksPanel.builder();
+
+                return panel.add(new ActionLink<WorkflowFormTO>() {
+
+                    private static final long serialVersionUID = -7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final WorkflowFormTO ignore) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD, StandardEntitlement.WORKFLOW_FORM_LIST).build(componentId);
+            }
+        });
+
+        return columns;
+    }
+
+    @Override
+    protected ApprovalProvider dataProvider() {
+        return new ApprovalProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_WORKFLOW_FORM_PAGINATOR_ROWS;
+    }
+
+    public static class ApprovalProvider extends SearchableDataProvider<WorkflowFormTO> {
+
+        private static final long serialVersionUID = -2311716167583335852L;
+
+        private final SortableDataProviderComparator<WorkflowFormTO> comparator;
+
+        private final UserWorkflowRestClient restClient = new UserWorkflowRestClient();
+
+        public ApprovalProvider(final int paginatorRows) {
+            super(paginatorRows);
+            setSort("createTime", SortOrder.DESCENDING);
+            this.comparator = new SortableDataProviderComparator<>(this);
+        }
+
+        @Override
+        public Iterator<WorkflowFormTO> iterator(final long first, final long count) {
+            final List<WorkflowFormTO> list = restClient.getForms();
+            Collections.sort(list, comparator);
+            return list.subList((int) first, (int) first + (int) count).iterator();
+        }
+
+        @Override
+        public long size() {
+            return restClient.getForms().size();
+        }
+
+        @Override
+        public IModel<WorkflowFormTO> model(final WorkflowFormTO configuration) {
+            return new AbstractReadOnlyModel<WorkflowFormTO>() {
+
+                private static final long serialVersionUID = -2566070996511906708L;
+
+                @Override
+                public WorkflowFormTO getObject() {
+                    return configuration;
+                }
+            };
+        }
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBulkActions() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/widgets/TODOsWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/TODOsWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/TODOsWidget.java
new file mode 100644
index 0000000..8b50826
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/TODOsWidget.java
@@ -0,0 +1,283 @@
+/*
+ * 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.widgets;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.pages.TODOs;
+import org.apache.syncope.client.console.rest.UserWorkflowRestClient;
+import org.apache.syncope.common.lib.to.WorkflowFormTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.Application;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.protocol.ws.WebSocketSettings;
+import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
+import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster;
+import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TODOsWidget extends Panel {
+
+    private static final long serialVersionUID = 7667120094526529934L;
+
+    private static final Logger LOG = LoggerFactory.getLogger(TODOsWidget.class);
+
+    private static final int UPDATE_PERIOD = 30;
+
+    private final Label linkTODOsNumber;
+
+    private final Label headerTODOsNumber;
+
+    private final WebMarkupContainer lastTODOsList;
+
+    private final ListView<WorkflowFormTO> lastFive;
+
+    private List<WorkflowFormTO> lastTODOs;
+
+    public TODOsWidget(final String id, final PageReference pageRef) {
+        super(id);
+        setOutputMarkupId(true);
+
+        LoadableDetachableModel<List<WorkflowFormTO>> model = new LoadableDetachableModel<List<WorkflowFormTO>>() {
+
+            private static final long serialVersionUID = 7474274077691068779L;
+
+            @Override
+            protected List<WorkflowFormTO> load() {
+                return TODOsWidget.this.lastTODOs.subList(
+                        0, TODOsWidget.this.lastTODOs.size() < 6 ? TODOsWidget.this.lastTODOs.size() : 5);
+            }
+        };
+
+        lastTODOs = getLastTODOs();
+        Collections.sort(lastTODOs, new WorkflowFormComparator());
+
+        linkTODOsNumber = new Label("todos", lastTODOs.size()) {
+
+            private static final long serialVersionUID = 4755868673082976208L;
+
+            @Override
+            protected void onComponentTag(final ComponentTag tag) {
+                super.onComponentTag(tag);
+                if (Integer.valueOf(getDefaultModelObject().toString()) > 0) {
+                    tag.put("class", "label label-danger");
+                } else {
+                    tag.put("class", "label label-info");
+                }
+            }
+
+        };
+        add(linkTODOsNumber.setOutputMarkupId(true));
+
+        headerTODOsNumber = new Label("number", lastTODOs.size());
+        headerTODOsNumber.setOutputMarkupId(true);
+        add(headerTODOsNumber);
+
+        lastTODOsList = new WebMarkupContainer("lastTODOsList");
+        lastTODOsList.setOutputMarkupId(true);
+        add(lastTODOsList);
+
+        lastFive = new ListView<WorkflowFormTO>("lastTODOs", model) {
+
+            private static final long serialVersionUID = 4949588177564901031L;
+
+            @Override
+            protected void populateItem(final ListItem<WorkflowFormTO> item) {
+                final WorkflowFormTO modelObject = item.getModelObject();
+
+                final AjaxLink<String> todo = new AjaxLink<String>("todo") {
+
+                    private static final long serialVersionUID = 7021195294339489084L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        // do nothing
+                    }
+
+                    @Override
+                    protected void onComponentTag(final ComponentTag tag) {
+                        super.onComponentTag(tag);
+                        if (StringUtils.isNotBlank(modelObject.getDescription())) {
+                            tag.put("title", modelObject.getDescription().trim());
+                        }
+                    }
+                };
+
+                item.add(todo);
+
+                todo.add(new Label("key", new ResourceModel(modelObject.getKey(), modelObject.getKey())).
+                        setRenderBodyOnly(true));
+
+                todo.add(new Label("owner", modelObject.getOwner()));
+
+                todo.add(new Label("createTime",
+                        SyncopeConsoleSession.get().getDateFormat().format(modelObject.getCreateTime())).
+                        setRenderBodyOnly(true));
+
+                WebMarkupContainer dueDateContainer = new WebMarkupContainer("dueDateContainer");
+                dueDateContainer.setOutputMarkupId(true);
+                todo.add(dueDateContainer);
+
+                if (modelObject.getDueDate() == null) {
+                    dueDateContainer.add(new Label("dueDate"));
+                    dueDateContainer.setVisible(false);
+                } else {
+                    dueDateContainer.add(new Label("dueDate",
+                            SyncopeConsoleSession.get().getDateFormat().format(modelObject.getDueDate())).
+                            setRenderBodyOnly(true));
+                }
+
+            }
+        };
+        lastTODOsList.add(lastFive.setReuseItems(false).setOutputMarkupId(true));
+
+        final BookmarkablePageLink<Object> todos = BookmarkablePageLinkBuilder.build("todosLink", TODOs.class);
+        add(todos);
+
+        MetaDataRoleAuthorizationStrategy.authorize(todos, WebPage.ENABLE, StandardEntitlement.WORKFLOW_FORM_LIST);
+
+        add(new WebSocketBehavior() {
+
+            private static final long serialVersionUID = 7944352891541344021L;
+
+            @Override
+            protected void onConnect(final ConnectedMessage message) {
+                super.onConnect(message);
+                SyncopeConsoleSession.get().scheduleAtFixedRate(
+                        new TODOInfoUpdater(message), 0, UPDATE_PERIOD, TimeUnit.SECONDS);
+            }
+        });
+    }
+
+    private List<WorkflowFormTO> getLastTODOs() {
+        if (SyncopeConsoleSession.get().owns(StandardEntitlement.WORKFLOW_FORM_LIST)) {
+            return new UserWorkflowRestClient().getForms();
+        } else {
+            return Collections.<WorkflowFormTO>emptyList();
+        }
+    }
+
+    @Override
+    public void onEvent(final IEvent<?> event) {
+        if (event.getPayload() instanceof WebSocketPushPayload) {
+            WebSocketPushPayload wsEvent = (WebSocketPushPayload) event.getPayload();
+            if (wsEvent.getMessage() instanceof UpdateMessage) {
+
+                TODOsWidget.this.linkTODOsNumber.setDefaultModelObject(TODOsWidget.this.lastTODOs.size());
+                wsEvent.getHandler().add(TODOsWidget.this.linkTODOsNumber);
+
+                TODOsWidget.this.headerTODOsNumber.setDefaultModelObject(TODOsWidget.this.lastTODOs.size());
+                wsEvent.getHandler().add(TODOsWidget.this.headerTODOsNumber);
+
+                TODOsWidget.this.lastFive.removeAll();
+                wsEvent.getHandler().add(TODOsWidget.this.lastTODOsList);
+            }
+        } else {
+            super.onEvent(event);
+        }
+    }
+
+    protected final class TODOInfoUpdater implements Runnable {
+
+        private final Application application;
+
+        private final SyncopeConsoleSession session;
+
+        private final IKey key;
+
+        public TODOInfoUpdater(final ConnectedMessage message) {
+            this.application = message.getApplication();
+            this.session = SyncopeConsoleSession.get();
+            this.key = message.getKey();
+        }
+
+        @Override
+        public void run() {
+            try {
+                ThreadContext.setApplication(application);
+                ThreadContext.setSession(session);
+
+                final List<WorkflowFormTO> actual = getLastTODOs();
+                Collections.sort(actual, new WorkflowFormComparator());
+
+                if (!actual.equals(lastTODOs)) {
+                    LOG.debug("Update TODOs");
+
+                    lastTODOs.clear();
+                    lastTODOs = actual;
+
+                    WebSocketSettings settings = WebSocketSettings.Holder.get(application);
+                    WebSocketPushBroadcaster broadcaster
+                            = new WebSocketPushBroadcaster(settings.getConnectionRegistry());
+                    broadcaster.broadcast(new ConnectedMessage(application, session.getId(), key), new UpdateMessage());
+                }
+            } catch (Throwable t) {
+                LOG.error("Unexpected error while checking for updated Job info", t);
+            } finally {
+                ThreadContext.detach();
+            }
+        }
+    }
+
+    private static class UpdateMessage implements IWebSocketPushMessage, Serializable {
+
+        private static final long serialVersionUID = -824793424112532838L;
+
+    }
+
+    private class WorkflowFormComparator implements Comparator<WorkflowFormTO> {
+
+        @Override
+        public int compare(final WorkflowFormTO o1, final WorkflowFormTO o2) {
+            if (o1 == null) {
+                return o2 == null ? 0 : 1;
+            } else if (o2 == null) {
+                return -1;
+            } else {
+                // inverse
+                return o2.getCreateTime().compareTo(o1.getCreateTime());
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/wizards/AbstractModalPanelBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AbstractModalPanelBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AbstractModalPanelBuilder.java
index 8acea1d..b4d7a69 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AbstractModalPanelBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AbstractModalPanelBuilder.java
@@ -48,7 +48,7 @@ public abstract class AbstractModalPanelBuilder<T extends Serializable> implemen
         this.pageRef = pageRef;
     }
 
-    public abstract ModalPanel<T> build(final int index, final boolean edit);
+    public abstract ModalPanel<T> build(final int index, final AjaxWizard.Mode mode);
 
     protected void onCancelInternal(final T modelObject) {
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
index 59bb335..a03ccf5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards;
 
 import java.io.Serializable;
+import java.util.Iterator;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.panels.ModalPanel;
@@ -26,8 +27,10 @@ import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.extensions.wizard.IWizardModel;
+import org.apache.wicket.extensions.wizard.IWizardStep;
 import org.apache.wicket.extensions.wizard.Wizard;
 import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.request.cycle.RequestCycle;
@@ -38,11 +41,18 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
 
     private static final long serialVersionUID = -1272120742876833520L;
 
+    public enum Mode {
+        CREATE,
+        EDIT,
+        READONLY;
+
+    }
+
     protected static final Logger LOG = LoggerFactory.getLogger(AjaxWizard.class);
 
     private T item;
 
-    private final boolean edit;
+    private final Mode mode;
 
     /**
      * Construct.
@@ -50,12 +60,17 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
      * @param id The component id.
      * @param item model object.
      * @param model wizard model
-     * @param edit <tt>true</tt> if edit mode.
+     * @param mode <tt>true</tt> if edit mode.
      */
-    public AjaxWizard(final String id, final T item, final WizardModel model, final boolean edit) {
+    public AjaxWizard(final String id, final T item, final WizardModel model, final Mode mode) {
         super(id);
         this.item = item;
-        this.edit = edit;
+        this.mode = mode;
+
+        if (mode == Mode.READONLY) {
+            model.setCancelVisible(false);
+        }
+
         setOutputMarkupId(true);
         setDefaultModel(new CompoundPropertyModel<>(this));
         init(model);
@@ -65,11 +80,18 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard implemen
     protected void init(final IWizardModel wizardModel) {
         super.init(wizardModel);
         getForm().remove(FEEDBACK_ID);
+
+        if (mode == Mode.READONLY) {
+            final Iterator<IWizardStep> iter = wizardModel.stepIterator();
+            while (iter.hasNext()) {
+                WizardStep.class.cast(iter.next()).setEnabled(false);
+            }
+        }
     }
 
     @Override
     protected Component newButtonBar(final String id) {
-        return new AjaxWizardMgtButtonBar(id, this, edit);
+        return new AjaxWizardMgtButtonBar<>(id, this, mode);
     }
 
     protected abstract void onCancelInternal();

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
index c183910..3e79047 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
@@ -38,19 +38,19 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
     }
 
     @Override
-    public AjaxWizard<T> build(final int index, final boolean edit) {
-        final AjaxWizard<T> wizard = build(edit);
+    public AjaxWizard<T> build(final int index, final AjaxWizard.Mode mode) {
+        final AjaxWizard<T> wizard = build(mode);
         for (int i = 1; i < index; i++) {
             wizard.getWizardModel().next();
         }
         return wizard;
     }
 
-    public AjaxWizard<T> build(final boolean edit) {
+    public AjaxWizard<T> build(final AjaxWizard.Mode mode) {
         // ge the specified item if available
         final T modelObject = newModelObject();
 
-        return new AjaxWizard<T>(id, modelObject, buildModelSteps(modelObject, new WizardModel()), edit) {
+        return new AjaxWizard<T>(id, modelObject, buildModelSteps(modelObject, new WizardModel()), mode) {
 
             private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardMgtButtonBar.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardMgtButtonBar.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardMgtButtonBar.java
index e183721..6a58e46 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardMgtButtonBar.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardMgtButtonBar.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.wizards;
 
+import java.io.Serializable;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -32,19 +33,17 @@ import org.apache.wicket.extensions.wizard.WizardButton;
 import org.apache.wicket.extensions.wizard.WizardButtonBar;
 import org.apache.wicket.markup.ComponentTag;
 
-public class AjaxWizardMgtButtonBar extends WizardButtonBar {
+public class AjaxWizardMgtButtonBar<T extends Serializable> extends WizardButtonBar {
 
     private static final long serialVersionUID = 7453943437344127136L;
 
-    private final boolean edit;
+    private final AjaxWizard.Mode mode;
 
-    private final AjaxWizard wizard;
-
-    public AjaxWizardMgtButtonBar(final String id, final AjaxWizard wizard, final boolean edit) {
+    public AjaxWizardMgtButtonBar(final String id, final AjaxWizard<T> wizard, final AjaxWizard.Mode mode) {
         super(id, wizard);
-        this.edit = edit;
-        this.wizard = wizard;
+        this.mode = mode;
         wizard.setOutputMarkupId(true);
+        wizard.getWizardModel().isCancelVisible();
     }
 
     @Override
@@ -103,6 +102,7 @@ public class AjaxWizardMgtButtonBar extends WizardButtonBar {
     protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) {
     }
 
+    @Override
     protected FinishButton newFinishButton(final String id, final IWizard wizard) {
         return new FinishButton(id, wizard) {
 
@@ -110,11 +110,24 @@ public class AjaxWizardMgtButtonBar extends WizardButtonBar {
 
             @Override
             public final boolean isEnabled() {
-                if (edit) {
-                    return true;
-                } else {
-                    final IWizardStep activeStep = getWizardModel().getActiveStep();
-                    return (activeStep != null) && getWizardModel().isLastStep(activeStep) && super.isEnabled();
+                switch (mode) {
+                    case EDIT:
+                        return true;
+                    case READONLY:
+                        return false;
+                    default:
+                        final IWizardStep activeStep = getWizardModel().getActiveStep();
+                        return (activeStep != null) && getWizardModel().isLastStep(activeStep) && super.isEnabled();
+                }
+            }
+
+            @Override
+            public boolean isVisible() {
+                switch (mode) {
+                    case READONLY:
+                        return false;
+                    default:
+                        return true;
                 }
             }
         };

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
index 34dc4a3..dbb99bc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
@@ -83,7 +83,7 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
      * Modal window.
      */
     protected final BaseModal<T> altDefaultModal = new BaseModal<>("alternativeDefaultModal");
-    
+
     protected final BaseModal<T> displayAttributeModal = new BaseModal<>("displayAttributeModal");
 
     protected WizardMgtPanel(final String id) {
@@ -134,7 +134,8 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
                 newItemPanelBuilder.setItem(item);
 
                 final ModalPanel<T> modalPanel = newItemPanelBuilder.build(
-                        ((AjaxWizard.NewItemActionEvent<T>) newItemEvent).getIndex(), item != null);
+                        ((AjaxWizard.NewItemActionEvent<T>) newItemEvent).getIndex(),
+                        item != null ? AjaxWizard.Mode.EDIT : AjaxWizard.Mode.CREATE);
 
                 if (wizardInModal) {
                     final IModel<T> model = new CompoundPropertyModel<>(item);

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index 1a2f6d0..673691d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -215,7 +215,7 @@ public class PlainAttrs extends AbstractAttrs {
                 if (required) {
                     panel.addRequiredLabel();
                 }
-                
+
                 break;
             case Enum:
                 panel = new AjaxDropDownChoicePanel<>("panel", schemaTO.getKey(), new Model<String>(), false);

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
index 9972ec9..b2d692d 100644
--- a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
+++ b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
@@ -642,4 +642,8 @@ div#parametersForm{
 }
 /**
 END - Parameters Details
-*/
\ No newline at end of file
+*/
+
+li.todoitem a {
+  cursor: default;
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
index 8de6319..daf1a2b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
@@ -33,6 +33,7 @@ under the License.
     <link href="css/syncopeConsole.css" rel="stylesheet" type="text/css"/>
 
     <script type="text/javascript" src="webjars/bootbox/${bootbox.version}/bootbox.js"></script>
+    <script type="text/javascript" src="webjars/jQuery-slimScroll/${jquery-slimscroll.version}/jquery.slimscroll.min.js"></script>
   </head>
   <body class="skin-green-light hold-transition sidebar-mini" wicket:id="body">
 
@@ -52,16 +53,8 @@ under the License.
           <div class="navbar-custom-menu">
             <ul class="nav navbar-nav">
 
-              <li class="dropdown tasks-menu" wicket:id="todosContainer">
-                <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
-                  <i class="fa fa-flag-o"></i>
-                  <span class="label label-danger" wicket:id="todos"></span>
-                </a>
-                <ul class="dropdown-menu">
-                  <li class="footer">
-                    <a href="#">View all TODOs</a>
-                  </li>
-                </ul>
+              <li class="dropdown tasks-menu">
+                <span wicket:id="todosWidget" />
               </li>
 
               <li class="dropdown user user-menu">

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.properties
index 47f583c..9a12bae 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.properties
@@ -17,3 +17,4 @@
 home=Home
 version=VERSION
 domain=Domain
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_it.properties
index ca4a19e..04f4225 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_it.properties
@@ -17,3 +17,4 @@
 home=Home
 version=VERSIONE
 domain=Dom\u00ednio
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_pt_BR.properties
index 675cff5..b5bdaf3 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage_pt_BR.properties
@@ -17,3 +17,4 @@
 home=In\u00edcio
 version=VERS\u00c3O
 domain=Domain
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
index e2c5948..3588eb5 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
@@ -17,13 +17,6 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:head>
-    <script type="text/javascript">
-      $(document).ready(function () {
-        $("#pageTitleInBradcrumb").append($("#pageTitle").text());
-      });
-    </script>
-  </wicket:head>
   <wicket:extend>
     <script lang="text/javascript">
 
@@ -31,10 +24,9 @@ under the License.
     <section class="content-header">
       <h1>&nbsp;</h1>
       <ol class="breadcrumb">
-        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"/></a></li>
-        <li class="active" id="pageTitleInBradcrumb"/>
+        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"></wicket:message></a></li>
+        <li class="active" id="pageTitleInBradcrumb"><wicket:message key="realms"></wicket:message></li>
       </ol>
-      <div id="pageTitle" style="visibility: hidden;"><wicket:message key='realms'/></div>
     </section>
 
     <section class="content" wicket:id="content">

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.html
new file mode 100644
index 0000000..34f9578
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.html
@@ -0,0 +1,35 @@
+<!--
+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">
+  <wicket:extend>
+    <section class="content-header">
+      <h1>&nbsp;</h1>
+      <ol class="breadcrumb">
+        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard">[DASHBOARD]</wicket:message></a></li>
+        <li class="active">TODO</li>
+      </ol>
+    </section>
+
+    <section class="content" wicket:id="content">
+      <div class="box">
+        <div class="box-body" wicket:id="wfPanel"/>
+      </div>
+    </section>
+  </wicket:extend>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/9014cf28/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.properties
new file mode 100644
index 0000000..d6b8c87
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/TODOs.properties
@@ -0,0 +1,32 @@
+# 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.
+taskId=Task
+key=Chiave
+description=Descrizione
+createTime=Data di creazione
+dueDate=Scadenza
+owner=Esecutore
+claim=Richiedi
+manage=Gestisci
+approvals=Approvazioni
+delete=Rimuovi
+type=Tipo
+username=Utente
+new_user=Nuovo utente
+creationDate = Data creazione
+claimDate = Data rivendicazione
+approval.edit=Approval