You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/10/09 15:08:46 UTC

[1/6] syncope git commit: [SYNCOPE-1369] Some refinements + admin console suport

Repository: syncope
Updated Branches:
  refs/heads/2_1_X e1b88c219 -> ff37c3f76
  refs/heads/master 1302734d3 -> 9d78874fb


http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties
new file mode 100644
index 0000000..450ff50
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=User details
+userForm=Edit User

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties
new file mode 100644
index 0000000..92c475d
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=Dettagli utente
+userForm=Modifica utente

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties
new file mode 100644
index 0000000..5a9cc2d
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=\u30e6\u30fc\u30b6\u30fc\u8a73\u7d30
+userForm=\u30e6\u30fc\u30b6\u30fc\u3092\u7de8\u96c6

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties
new file mode 100644
index 0000000..00a8971
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=Detalhes do Usu\u00e1rio
+userForm=Detalhes do Usu\u00e1rio

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties
new file mode 100644
index 0000000..02c159a
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# userDetails=\u00d0\u0098\u00d0\u00bd\u00d1\u0084\u00d0\u00be\u00d1\u0080\u00d0\u00bc\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d1\u008f \u00d0\u00be \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5
+userDetails=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435
+userForm=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties
deleted file mode 100644
index dd5b98f..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=View all approvals
-duedate=Due date
-owner=Owner
-createApproval=Create Approval
-summary=${number} pending approval(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties
deleted file mode 100644
index 7b2287e..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=Tutte le approvazioni
-duedate=Scadenza
-owner=Assegnato
-createApproval=Approvazione Creazione
-summary=${number} approvazioni pendenti

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties
deleted file mode 100644
index a6089eb..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=\u3059\u3079\u3066\u306e\u627f\u8a8d\u3092\u8868\u793a
-duedate=\u671f\u9650
-owner=\u30aa\u30fc\u30ca\u30fc
-createApproval=\u627f\u8a8d\u3092\u4f5c\u6210
-summary=${number} \u4fdd\u7559\u306e\u627f\u8a8d

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties
deleted file mode 100644
index c24f3d8..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=View all Approvals
-duedate=Due date
-owner=Owner
-createApproval=Create Approval
-summary=${number} pending approval(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties
deleted file mode 100644
index 10281ff..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-alerts.view.all=\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u044f\u0432\u043a\u0438
-duedate=\u0421\u0440\u043e\u043a
-owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
-createApproval=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443
-summary=\u041e\u0436\u0438\u0434\u0430\u044e\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f: ${number}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties
new file mode 100644
index 0000000..36e1e2e
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=View all forms
+duedate=Due date
+owner=Owner
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties
new file mode 100644
index 0000000..bf3e9ad
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=Tutte le form
+duedate=Scadenza
+owner=Assegnato
+summary=${number} form pendenti

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties
new file mode 100644
index 0000000..0d938e3
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=View all forms
+duedate=\u671f\u9650
+owner=\u30aa\u30fc\u30ca\u30fc
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties
new file mode 100644
index 0000000..36e1e2e
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=View all forms
+duedate=Due date
+owner=Owner
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.properties
new file mode 100644
index 0000000..e713681
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.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.
+#
+alerts.view.all=View all forms
+duedate=\u0421\u0440\u043e\u043a
+owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
----------------------------------------------------------------------
diff --git a/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java b/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
index 251eb89..9b65845 100644
--- a/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
+++ b/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.common.lib.to;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 import org.apache.syncope.common.lib.AbstractBaseBean;
@@ -30,7 +31,9 @@ public class UserRequest extends AbstractBaseBean {
 
     private String bpmnProcess;
 
-    private String user;
+    private Date startTime;
+
+    private String username;
 
     private String executionId;
 
@@ -44,12 +47,20 @@ public class UserRequest extends AbstractBaseBean {
         this.bpmnProcess = bpmnProcess;
     }
 
-    public String getUser() {
-        return user;
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(final Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getUsername() {
+        return username;
     }
 
-    public void setUser(final String user) {
-        this.user = user;
+    public void setUsername(final String username) {
+        this.username = username;
     }
 
     public String getExecutionId() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
----------------------------------------------------------------------
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
index 45a834b..c1d20b1 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
@@ -62,9 +62,7 @@ import org.flowable.engine.form.TaskFormData;
 import org.flowable.engine.history.HistoricActivityInstance;
 import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
 import org.flowable.engine.impl.persistence.entity.HistoricFormPropertyEntity;
-import org.flowable.engine.runtime.NativeProcessInstanceQuery;
 import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.engine.runtime.ProcessInstanceQuery;
 import org.flowable.task.api.Task;
 import org.flowable.task.api.TaskQuery;
 import org.flowable.task.api.history.HistoricTaskInstance;
@@ -99,26 +97,28 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
     @Autowired
     protected EntityFactory entityFactory;
 
-    protected NativeProcessInstanceQuery createProcessInstanceQuery(final String userKey) {
-        return engine.getRuntimeService().createNativeProcessInstanceQuery().
-                sql("SELECT DISTINCT ID_,BUSINESS_KEY_,ACT_ID_ FROM "
-                        + engine.getManagementService().getTableName(ExecutionEntity.class)
-                        + " WHERE BUSINESS_KEY_ LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey("%", userKey) + "'"
-                        + " AND BUSINESS_KEY_ NOT LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey(FlowableRuntimeUtils.WF_PROCESS_ID, "%") + "'"
-                        + " AND PARENT_ID_ IS NULL");
+    protected StringBuilder createProcessInstanceQuery(final String userKey) {
+        StringBuilder query = new StringBuilder().
+                append("SELECT DISTINCT ID_,BUSINESS_KEY_,PROC_DEF_ID_,PROC_INST_ID_,START_TIME_ FROM ").
+                append(engine.getManagementService().getTableName(ExecutionEntity.class)).
+                append(" WHERE BUSINESS_KEY_ NOT LIKE '").
+                append(FlowableRuntimeUtils.getProcBusinessKey(FlowableRuntimeUtils.WF_PROCESS_ID, "%")).
+                append("'");
+        if (userKey != null) {
+            query.append(" AND BUSINESS_KEY_ LIKE '").
+                    append(FlowableRuntimeUtils.getProcBusinessKey("%", userKey)).
+                    append("'");
+        }
+        query.append(" AND PARENT_ID_ IS NULL");
+
+        return query;
     }
 
-    protected int countProcessInstances(final String userKey) {
+    protected int countProcessInstances(final StringBuilder processInstanceQuery) {
         return (int) engine.getRuntimeService().createNativeProcessInstanceQuery().
                 sql("SELECT COUNT(ID_) FROM "
-                        + engine.getManagementService().getTableName(ExecutionEntity.class)
-                        + " WHERE BUSINESS_KEY_ LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey("%", userKey) + "'"
-                        + " AND BUSINESS_KEY_ NOT LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey(FlowableRuntimeUtils.WF_PROCESS_ID, "%") + "'"
-                        + " AND PARENT_ID_ IS NULL").count();
+                        + StringUtils.substringAfter(processInstanceQuery.toString(), " FROM ")).
+                count();
     }
 
     protected UserRequest getUserRequest(final ProcessInstance procInst) {
@@ -126,9 +126,11 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
 
         UserRequest userRequest = new UserRequest();
         userRequest.setBpmnProcess(split.getLeft());
-        userRequest.setUser(split.getRight());
+        userRequest.setStartTime(procInst.getStartTime());
+        userRequest.setUsername(userDAO.find(split.getRight()).getUsername());
         userRequest.setExecutionId(procInst.getId());
-        userRequest.setActivityId(procInst.getActivityId());
+        userRequest.setActivityId(FlowableRuntimeUtils.createTaskQuery(engine, false).
+                processInstanceId(procInst.getProcessInstanceId()).singleResult().getTaskDefinitionKey());
         return userRequest;
     }
 
@@ -140,23 +142,25 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
             final int size,
             final List<OrderByClause> orderByClauses) {
 
-        Integer count = null;
-        List<UserRequest> result = null;
-        if (userKey == null) {
-            ProcessInstanceQuery query = engine.getRuntimeService().createProcessInstanceQuery().active();
+        StringBuilder query = createProcessInstanceQuery(userKey);
+        Integer count = countProcessInstances(query);
+
+        if (!orderByClauses.isEmpty()) {
+            query.append(" ORDER BY");
+
             for (OrderByClause clause : orderByClauses) {
                 boolean sorted = true;
                 switch (clause.getField().trim()) {
-                    case "processDefinitionId":
-                        query.orderByProcessDefinitionId();
+                    case "bpmnProcess":
+                        query.append(" PROC_DEF_ID_");
                         break;
 
-                    case "processDefinitionKey":
-                        query.orderByProcessDefinitionKey();
+                    case "startTime":
+                        query.append(" START_TIME_");
                         break;
 
-                    case "processInstanceId":
-                        query.orderByProcessInstanceId();
+                    case "executionId":
+                        query.append(" PROC_INST_ID_");
                         break;
 
                     default:
@@ -165,24 +169,22 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
                 }
                 if (sorted) {
                     if (clause.getDirection() == OrderByClause.Direction.ASC) {
-                        query.asc();
+                        query.append(" ASC,");
                     } else {
-                        query.desc();
+                        query.append(" DESC,");
                     }
                 }
-
-                count = (int) query.count();
-                result = query.listPage(size * (page <= 0 ? 0 : page - 1), size).stream().
-                        map(procInst -> getUserRequest(procInst)).
-                        collect(Collectors.toList());
             }
-        } else {
-            count = countProcessInstances(userKey);
-            result = createProcessInstanceQuery(userKey).listPage(size * (page <= 0 ? 0 : page - 1), size).stream().
-                    map(procInst -> getUserRequest(procInst)).
-                    collect(Collectors.toList());
+
+            query.setLength(query.length() - 1);
         }
 
+        List<UserRequest> result = engine.getRuntimeService().createNativeProcessInstanceQuery().
+                sql(query.toString()).
+                listPage(size * (page <= 0 ? 0 : page - 1), size).stream().
+                map(procInst -> getUserRequest(procInst)).
+                collect(Collectors.toList());
+
         return Pair.of(count, result);
     }
 
@@ -256,8 +258,9 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
     public void cancelByUser(final AnyDeletedEvent event) {
         if (AuthContextUtils.getDomain().equals(event.getDomain()) && event.getAnyTypeKind() == AnyTypeKind.USER) {
             String username = event.getAnyName();
-            createProcessInstanceQuery(event.getAnyKey()).list().
-                    forEach(procInst -> {
+            engine.getRuntimeService().createNativeProcessInstanceQuery().
+                    sql(createProcessInstanceQuery(event.getAnyKey()).toString()).
+                    list().forEach(procInst -> {
                         engine.getRuntimeService().deleteProcessInstance(
                                 procInst.getId(), "Cascade Delete user " + username);
                     });

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
index ef199be..77a01ae 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
@@ -69,8 +69,8 @@ public class UserRequestITCase extends AbstractITCase {
         assertNotNull(req);
         assertEquals("directorGroupRequest", req.getBpmnProcess());
         assertNotNull(req.getExecutionId());
-        assertEquals(req.getUser(), user.getKey());
-        
+        assertEquals(req.getUsername(), user.getUsername());
+
         // check that user can see the ongoing request
         SyncopeClient client = clientFactory.create(user.getUsername(), "password123");
         PagedResult<UserRequest> requests = client.getService(UserRequestService.class).


[6/6] syncope git commit: [SYNCOPE-1369] Some refinements + admin console suport

Posted by il...@apache.org.
[SYNCOPE-1369] Some refinements + admin console suport


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

Branch: refs/heads/master
Commit: 9d78874fb7edb84a616b274c8af5160d3ef7f826
Parents: 1302734
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Oct 9 17:08:13 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Oct 9 17:08:35 2018 +0200

----------------------------------------------------------------------
 .../console/SyncopeConsoleApplication.java      |   4 +-
 .../client/console/commons/Constants.java       |   2 -
 .../client/console/rest/ReportRestClient.java   |   2 -
 .../console/tasks/SchedTaskDirectoryPanel.java  |   6 +-
 .../client/console/approvals/Approval.java      | 201 -----------
 .../console/approvals/ApprovalDetails.java      |  63 ----
 .../approvals/ApprovalDirectoryPanel.java       | 352 ------------------
 .../client/console/approvals/ApprovalModal.java |  82 -----
 .../syncope/client/console/pages/Approvals.java |  41 ---
 .../syncope/client/console/pages/Flowable.java  |   7 -
 .../client/console/pages/UserRequests.java      |  74 ++++
 .../panels/UserRequestDirectoryPanel.java       | 163 +++++++++
 .../console/panels/UserRequestFormDetails.java  |  62 ++++
 .../panels/UserRequestFormDirectoryPanel.java   | 353 +++++++++++++++++++
 .../console/panels/UserRequestFormModal.java    |  79 +++++
 .../console/panels/UserRequestFormPanel.java    | 200 +++++++++++
 .../console/rest/UserRequestRestClient.java     |  18 +
 .../client/console/widgets/ApprovalsWidget.java | 128 -------
 .../console/widgets/UserRequestFormsWidget.java | 128 +++++++
 .../client/console/approvals/Approval.html      |  31 --
 .../console/approvals/Approval.properties       |  18 -
 .../console/approvals/ApprovalDetails.html      |  23 --
 .../client/console/approvals/ApprovalModal.html |  23 --
 .../console/approvals/ApprovalModal.properties  |  17 -
 .../approvals/ApprovalModal_it.properties       |  17 -
 .../approvals/ApprovalModal_ja.properties       |  17 -
 .../approvals/ApprovalModal_pt_BR.properties    |  17 -
 .../approvals/ApprovalModal_ru.properties       |  17 -
 .../console/approvals/Approval_it.properties    |  18 -
 .../console/approvals/Approval_ja.properties    |  18 -
 .../console/approvals/Approval_pt_BR.properties |  18 -
 .../console/approvals/Approval_ru.properties    |  20 --
 .../syncope/client/console/pages/Approvals.html |  35 --
 .../client/console/pages/Approvals.properties   |  34 --
 .../console/pages/Approvals_it.properties       |  34 --
 .../console/pages/Approvals_ja.properties       |  34 --
 .../console/pages/Approvals_pt_BR.properties    |  34 --
 .../console/pages/Approvals_ru.properties       |  52 ---
 .../client/console/pages/UserRequests.html      |  35 ++
 .../console/pages/UserRequests.properties       |  38 ++
 .../console/pages/UserRequests_it.properties    |  38 ++
 .../console/pages/UserRequests_ja.properties    |  38 ++
 .../console/pages/UserRequests_pt_BR.properties |  38 ++
 .../console/pages/UserRequests_ru.properties    |  56 +++
 .../console/panels/UserRequestFormDetails.html  |  23 ++
 .../console/panels/UserRequestFormModal.html    |  23 ++
 .../panels/UserRequestFormModal.properties      |  17 +
 .../panels/UserRequestFormModal_it.properties   |  17 +
 .../panels/UserRequestFormModal_ja.properties   |  17 +
 .../UserRequestFormModal_pt_BR.properties       |  17 +
 .../panels/UserRequestFormModal_ru.properties   |  17 +
 .../console/panels/UserRequestFormPanel.html    |  31 ++
 .../panels/UserRequestFormPanel.properties      |  18 +
 .../panels/UserRequestFormPanel_it.properties   |  18 +
 .../panels/UserRequestFormPanel_ja.properties   |  18 +
 .../UserRequestFormPanel_pt_BR.properties       |  18 +
 .../panels/UserRequestFormPanel_ru.properties   |  20 ++
 .../console/widgets/ApprovalsWidget.properties  |  21 --
 .../widgets/ApprovalsWidget_it.properties       |  21 --
 .../widgets/ApprovalsWidget_ja.properties       |  21 --
 .../widgets/ApprovalsWidget_pt_BR.properties    |  21 --
 .../widgets/ApprovalsWidget_ru.properties       |  22 --
 .../widgets/UserRequestFormsWidget.properties   |  20 ++
 .../UserRequestFormsWidget_it.properties        |  20 ++
 .../UserRequestFormsWidget_ja.properties        |  20 ++
 .../UserRequestFormsWidget_pt_BR.properties     |  20 ++
 .../UserRequestFormsWidget_ru.properties        |  21 ++
 .../syncope/common/lib/to/UserRequest.java      |  21 +-
 .../impl/FlowableUserRequestHandler.java        |  91 ++---
 .../syncope/fit/core/UserRequestITCase.java     |   4 +-
 70 files changed, 1744 insertions(+), 1518 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
index 2e15b19..f03f823 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
@@ -62,7 +62,7 @@ import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.resource.DynamicJQueryResourceReference;
+import org.apache.wicket.resource.JQueryResourceReference;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -190,7 +190,7 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
 
         getResourceSettings().setThrowExceptionOnMissingResource(true);
 
-        getJavaScriptLibrarySettings().setJQueryReference(new DynamicJQueryResourceReference());
+        getJavaScriptLibrarySettings().setJQueryReference(JQueryResourceReference.getV2());
 
         getSecuritySettings().setAuthorizationStrategy(new MetaDataRoleAuthorizationStrategy(this));
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/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 48b58137..2e60aa9 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
@@ -123,8 +123,6 @@ public final class Constants {
 
     public static final String PREF_ACCESS_TOKEN_PAGINATOR_ROWS = "accessToken.paginator.rows";
 
-    public static final String PREF_WORKFLOW_FORM_PAGINATOR_ROWS = "workflow.paginator.rows";
-
     public static final String PREF_REMEDIATION_PAGINATOR_ROWS = "remediation.paginator.rows";
 
     public static final String PREF_RESOURCES_PAGINATOR_ROWS = "resources.paginator.rows";

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index 8b60941..a80cdcb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.console.rest;
 
-import static org.apache.syncope.client.console.rest.BaseRestClient.getStatus;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 0dc445d..c333f34 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -229,8 +229,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
                         new AjaxWizard.EditItemActionEvent<>(clone, target).setResourceModel(
                                 new StringResourceModel("inner.task.clone",
                                         SchedTaskDirectoryPanel.this,
-                                        Model.of(Pair.of(
-                                                ActionLink.ActionType.CLONE, model.getObject())))));
+                                        Model.of(Pair.of(ActionLink.ActionType.CLONE, model.getObject())))));
             }
         }, ActionLink.ActionType.CLONE, StandardEntitlement.TASK_CREATE);
 
@@ -241,8 +240,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
             @Override
             public void onClick(final AjaxRequestTarget target, final T ignore) {
                 SchedTaskDirectoryPanel.this.getTogglePanel().close(target);
-                startAt.setExecutionDetail(
-                        model.getObject().getKey(), model.getObject().getName(), target);
+                startAt.setExecutionDetail(model.getObject().getKey(), model.getObject().getName(), target);
                 startAt.toggle(target, true);
             }
         }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java
deleted file mode 100644
index 6a66afc..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-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.AjaxDateTimeFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
-import org.apache.syncope.common.lib.to.UserRequestFormProperty;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-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.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 UserRequestForm formTO) {
-        super(MultilevelPanel.FIRST_LEVEL_ID);
-
-        IModel<List<UserRequestFormProperty>> formProps = new LoadableDetachableModel<List<UserRequestFormProperty>>() {
-
-            private static final long serialVersionUID = 3169142472626817508L;
-
-            @Override
-            protected List<UserRequestFormProperty> load() {
-                return formTO.getProperties();
-            }
-        };
-
-        ListView<UserRequestFormProperty> propView = new ListView<UserRequestFormProperty>("propView", formProps) {
-
-            private static final long serialVersionUID = 9101744072914090143L;
-
-            @Override
-            @SuppressWarnings({ "unchecked", "rawtypes" })
-            protected void populateItem(final ListItem<UserRequestFormProperty> item) {
-                final UserRequestFormProperty 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:
-                        FastDateFormat formatter = FastDateFormat.getInstance(prop.getDatePattern());
-                        field = new AjaxDateTimeFieldPanel("value", label, new PropertyModel<Date>(prop, "value") {
-
-                            private static final long serialVersionUID = -3743432456095828573L;
-
-                            @Override
-                            public Date getObject() {
-                                try {
-                                    return StringUtils.isBlank(prop.getValue())
-                                            ? null
-                                            : 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:
-                        field = new AjaxDropDownChoicePanel(
-                                "value", label, new PropertyModel<String>(prop, "value"), false).
-                                setChoiceRenderer(new MapChoiceRenderer(prop.getEnumValues())).
-                                setChoices(new ArrayList<>(prop.getEnumValues().keySet()));
-                        break;
-
-                    case Dropdown:
-                        field = new AjaxDropDownChoicePanel(
-                                "value", label, new PropertyModel<String>(prop, "value"), false).
-                                setChoiceRenderer(new MapChoiceRenderer(prop.getDropdownValues())).
-                                setChoices(new ArrayList<>(prop.getDropdownValues().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<>(prop, "value"), false);
-                        break;
-                }
-
-                field.setReadOnly(!prop.isWritable());
-                if (prop.isRequired()) {
-                    field.addRequiredLabel();
-                }
-
-                item.add(field);
-            }
-        };
-
-        AjaxLink<String> userDetails = new AjaxLink<String>("userDetails") {
-
-            private static final long serialVersionUID = -4804368561204623354L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target) {
-                viewDetails(target);
-            }
-        };
-        MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE, StandardEntitlement.USER_READ);
-
-        boolean enabled = formTO.getUserTO() != null;
-        userDetails.setVisible(enabled).setEnabled(enabled);
-
-        add(propView);
-        add(userDetails);
-    }
-
-    protected abstract void viewDetails(final AjaxRequestTarget target);
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
deleted file mode 100644
index 9606824..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
-import org.apache.syncope.client.console.panels.MultilevelPanel;
-import org.apache.syncope.client.console.rest.AnyTypeRestClient;
-import org.apache.syncope.client.console.wizards.AjaxWizard;
-import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
-import org.apache.syncope.common.lib.AnyOperations;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-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 UserRequestForm formTO) {
-        super(MultilevelPanel.SECOND_LEVEL_ID);
-
-        final UserTO newUserTO;
-        final UserTO previousUserTO;
-        if (formTO.getUserPatch() == null) {
-            newUserTO = formTO.getUserTO();
-            previousUserTO = null;
-        } else if (formTO.getUserTO() == null) {
-            // make it stronger by handling possible NPE
-            previousUserTO = new UserTO();
-            previousUserTO.setKey(formTO.getUserPatch().getKey());
-            newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
-        } else {
-            formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
-            newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
-            previousUserTO = formTO.getUserTO();
-        }
-
-        add(new UserWizardBuilder(
-                previousUserTO,
-                newUserTO,
-                new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
-                new UserFormLayoutInfo(),
-                pageRef).
-                build(AjaxWizard.Mode.READONLY));
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
deleted file mode 100644
index 577ea65..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-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.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.panels.DirectoryPanel;
-import org.apache.syncope.client.console.rest.UserRequestRestClient;
-import org.apache.syncope.client.console.approvals.ApprovalDirectoryPanel.ApprovalProvider;
-import org.apache.syncope.client.console.layout.FormLayoutInfoUtils;
-import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
-import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.rest.AnyTypeRestClient;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
-import org.apache.syncope.client.console.widgets.ApprovalsWidget;
-import org.apache.syncope.client.console.wizards.AjaxWizard;
-import org.apache.syncope.client.console.wizards.any.AnyWrapper;
-import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
-import org.apache.syncope.common.lib.AnyOperations;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.patch.PasswordPatch;
-import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.ProvisioningResult;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.FlowableEntitlement;
-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.event.Broadcast;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
-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.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.ResourceModel;
-
-public class ApprovalDirectoryPanel
-        extends DirectoryPanel<UserRequestForm, UserRequestForm, ApprovalProvider, UserRequestRestClient> {
-
-    private static final long serialVersionUID = -7122136682275797903L;
-
-    protected final BaseModal<UserRequestForm> manageApprovalModal = new BaseModal<UserRequestForm>("outer") {
-
-        private static final long serialVersionUID = 389935548143327858L;
-
-        @Override
-        protected void onConfigure() {
-            super.onConfigure();
-            addSubmitButton();
-            size(Modal.Size.Large);
-        }
-
-    };
-
-    public ApprovalDirectoryPanel(final String id, final PageReference pageReference) {
-        super(id, pageReference, true);
-        disableCheckBoxes();
-        setFooterVisibility(false);
-        modal.size(Modal.Size.Large);
-
-        addOuterObject(manageApprovalModal);
-
-        manageApprovalModal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
-
-            private static final long serialVersionUID = 8804221891699487139L;
-
-            @Override
-            public void onClose(final AjaxRequestTarget target) {
-                updateResultTable(target);
-
-                Serializable widget = SyncopeConsoleSession.get().getAttribute(ApprovalsWidget.class.getName());
-                if (widget instanceof ApprovalsWidget) {
-                    ((ApprovalsWidget) widget).refreshLatestAlerts(target);
-                }
-
-                manageApprovalModal.show(false);
-            }
-        });
-
-        restClient = new UserRequestRestClient();
-
-        initResultTable();
-
-        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
-    }
-
-    @Override
-    protected List<IColumn<UserRequestForm, String>> getColumns() {
-        List<IColumn<UserRequestForm, String>> columns = new ArrayList<>();
-
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("bpmnProcess"), "bpmnProcess", "bpmnProcess"));
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("key"), "formKey", "formKey"));
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("username"), "username"));
-        columns.add(new DatePropertyColumn<>(
-                new ResourceModel("createTime"), "createTime", "createTime"));
-        columns.add(new DatePropertyColumn<>(
-                new ResourceModel("dueDate"), "dueDate", "dueDate"));
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("owner"), "owner", "owner"));
-
-        return columns;
-    }
-
-    @Override
-    public ActionsPanel<UserRequestForm> getActions(final IModel<UserRequestForm> model) {
-        final ActionsPanel<UserRequestForm> panel = super.getActions(model);
-
-        panel.add(new ActionLink<UserRequestForm>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                claimForm(model.getObject().getTaskId());
-                SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                target.add(container);
-            }
-        }, ActionLink.ActionType.CLAIM, FlowableEntitlement.USER_REQUEST_FORM_CLAIM);
-
-        panel.add(new ActionLink<UserRequestForm>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                manageApprovalModal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
-
-                target.add(manageApprovalModal.setContent(
-                        new ApprovalModal(manageApprovalModal, pageRef, model.getObject()) {
-
-                    private static final long serialVersionUID = 5546519445061007248L;
-
-                    @Override
-                    public void onSubmit(final AjaxRequestTarget target) {
-                        try {
-                            super.onSubmit(target);
-
-                            ApprovalDirectoryPanel.this.getTogglePanel().close(target);
-                        } catch (SyncopeClientException e) {
-                            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + e.getMessage());
-                        }
-                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                    }
-
-                }));
-
-                manageApprovalModal.header(new Model<>(getString("approval.manage", new Model<>(model.getObject()))));
-                manageApprovalModal.show(true);
-            }
-
-            @Override
-            protected boolean statusCondition(final UserRequestForm modelObject) {
-                return SyncopeConsoleSession.get().getSelfTO().getUsername().
-                        equals(model.getObject().getOwner());
-            }
-
-        }, ActionLink.ActionType.MANAGE_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
-
-        // SYNCOPE-1200 edit user while in approval state
-        panel.add(new ActionLink<UserRequestForm>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                modal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
-
-                UserRequestForm formTO = model.getObject();
-                UserTO newUserTO;
-                UserTO previousUserTO;
-                if (formTO.getUserPatch() == null) {
-                    newUserTO = formTO.getUserTO();
-                    previousUserTO = null;
-                } else if (formTO.getUserTO() == null) {
-                    // make it stronger by handling possible NPE
-                    previousUserTO = new UserTO();
-                    previousUserTO.setKey(formTO.getUserPatch().getKey());
-                    newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
-                } else {
-                    previousUserTO = formTO.getUserTO();
-                    formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
-                    formTO.getUserTO().setPassword(null);
-                    newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
-                }
-
-                AjaxWizard.EditItemActionEvent<UserTO> editItemActionEvent =
-                        new AjaxWizard.EditItemActionEvent<>(newUserTO, target);
-                editItemActionEvent.forceModalPanel(new ApprovalUserWizardBuilder(
-                        model.getObject(),
-                        previousUserTO,
-                        newUserTO,
-                        new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
-                        FormLayoutInfoUtils.fetch(Collections.singletonList(AnyTypeKind.USER.name())).getLeft(),
-                        pageRef
-                ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
-
-                send(ApprovalDirectoryPanel.this, Broadcast.EXACT, editItemActionEvent);
-            }
-
-            @Override
-            protected boolean statusCondition(final UserRequestForm modelObject) {
-                return SyncopeConsoleSession.get().getSelfTO().getUsername().
-                        equals(model.getObject().getOwner());
-            }
-
-        }, ActionLink.ActionType.EDIT_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
-
-        return panel;
-    }
-
-    @Override
-    protected ApprovalProvider dataProvider() {
-        return new ApprovalProvider(rows);
-    }
-
-    @Override
-    protected String paginatorRowsKey() {
-        return Constants.PREF_WORKFLOW_FORM_PAGINATOR_ROWS;
-    }
-
-    public static class ApprovalProvider extends DirectoryDataProvider<UserRequestForm> {
-
-        private static final long serialVersionUID = -2311716167583335852L;
-
-        private final UserRequestRestClient restClient = new UserRequestRestClient();
-
-        public ApprovalProvider(final int paginatorRows) {
-            super(paginatorRows);
-
-            setSort("createTime", SortOrder.ASCENDING);
-        }
-
-        @Override
-        public Iterator<UserRequestForm> iterator(final long first, final long count) {
-            int page = ((int) first / paginatorRows);
-            return restClient.getForms((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
-        }
-
-        @Override
-        public long size() {
-            return restClient.countForms();
-        }
-
-        @Override
-        public IModel<UserRequestForm> model(final UserRequestForm form) {
-            return new IModel<UserRequestForm>() {
-
-                private static final long serialVersionUID = -2566070996511906708L;
-
-                @Override
-                public UserRequestForm getObject() {
-                    return form;
-                }
-            };
-        }
-    }
-
-    @Override
-    protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
-    }
-
-    private void claimForm(final String taskId) {
-        try {
-            restClient.claimForm(taskId);
-        } catch (SyncopeClientException scee) {
-            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + scee.getMessage());
-        }
-    }
-
-    private class ApprovalUserWizardBuilder extends UserWizardBuilder {
-
-        private static final long serialVersionUID = 1854981134836384069L;
-
-        private final UserRequestForm formTO;
-
-        ApprovalUserWizardBuilder(
-                final UserRequestForm formTO,
-                final UserTO previousUserTO,
-                final UserTO userTO,
-                final List<String> anyTypeClasses,
-                final UserFormLayoutInfo formLayoutInfo,
-                final PageReference pageRef) {
-
-            super(previousUserTO, userTO, anyTypeClasses, formLayoutInfo, pageRef);
-            this.formTO = formTO;
-        }
-
-        @Override
-        protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
-            UserTO inner = modelObject.getInnerObject();
-
-            UserPatch patch = AnyOperations.diff(inner, formTO.getUserTO(), false);
-
-            if (StringUtils.isNotBlank(inner.getPassword())) {
-                PasswordPatch passwordPatch = new PasswordPatch.Builder().
-                        value(inner.getPassword()).onSyncope(true).resources(inner.
-                        getResources()).
-                        build();
-                patch.setPassword(passwordPatch);
-            }
-
-            // update just if it is changed
-            ProvisioningResult<UserTO> result;
-            if (patch.isEmpty()) {
-                result = new ProvisioningResult<>();
-                result.setEntity(inner);
-            } else {
-                result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
-                restClient.getForm(result.getEntity().getKey()).ifPresent(form -> claimForm(form.getTaskId()));
-            }
-
-            return result;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
deleted file mode 100644
index 0cae1c8..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.panels.MultilevelPanel;
-import org.apache.syncope.client.console.rest.UserRequestRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.syncope.client.console.panels.SubmitableModalPanel;
-import org.apache.syncope.client.console.panels.WizardModalPanel;
-
-public class ApprovalModal extends Panel implements SubmitableModalPanel, WizardModalPanel<UserRequestForm> {
-
-    private static final long serialVersionUID = -8847854414429745216L;
-
-    private final UserRequestRestClient restClient = new UserRequestRestClient();
-
-    private final BaseModal<?> modal;
-
-    private final UserRequestForm formTO;
-
-    private final PageReference pageRef;
-
-    public ApprovalModal(final BaseModal<?> modal, final PageReference pageRef, final UserRequestForm formTO) {
-        super(BaseModal.CONTENT_ID);
-        this.modal = modal;
-        this.formTO = formTO;
-        this.pageRef = pageRef;
-
-        MultilevelPanel mlp = new MultilevelPanel("approval");
-        mlp.setFirstLevel(new Approval(pageRef, formTO) {
-
-            private static final long serialVersionUID = -2195387360323687302L;
-
-            @Override
-            protected void viewDetails(final AjaxRequestTarget target) {
-                mlp.next(getString("approval.details"), new ApprovalDetails(pageRef, formTO), target);
-            }
-        });
-        add(mlp);
-    }
-
-    @Override
-    public void onSubmit(final AjaxRequestTarget target) {
-        this.restClient.submitForm(formTO);
-        this.modal.show(false);
-        this.modal.close(target);
-        SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-    }
-
-    @Override
-    public void onError(final AjaxRequestTarget target) {
-        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-    }
-
-    @Override
-    public UserRequestForm getItem() {
-        return this.formTO;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java
deleted file mode 100644
index 0dbc4db..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.pages;
-
-import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.approvals.ApprovalDirectoryPanel;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-public class Approvals extends BasePage {
-
-    private static final long serialVersionUID = -1100228004207271271L;
-
-    public Approvals(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 ApprovalDirectoryPanel("wfPanel", getPageReference()));
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
index 8062a77..a533897 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.pages;
 
 import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.annotations.ExtPage;
 import org.apache.syncope.client.console.panels.BpmnProcessDirectoryPanel;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
@@ -57,11 +56,5 @@ public class Flowable extends BaseExtPage {
         MetaDataRoleAuthorizationStrategy.authorize(bpmnProcessesPanel, ENABLE, FlowableEntitlement.BPMN_PROCESS_LIST);
 
         content.add(bpmnProcessesPanel);
-
-        if (SyncopeConsoleSession.get().getPlatformInfo().getUserWorkflowAdapter().contains("Flowable")) {
-            disabled.setVisible(false);
-        } else {
-            bpmnProcessesPanel.setVisible(false);
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
new file mode 100644
index 0000000..c23e1ad
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
@@ -0,0 +1,74 @@
+/*
+ * 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 de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.panels.UserRequestFormDirectoryPanel;
+import org.apache.syncope.client.console.panels.UserRequestDirectoryPanel;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class UserRequests extends BasePage {
+
+    private static final long serialVersionUID = -1100228004207271271L;
+
+    public UserRequests(final PageParameters parameters) {
+        super(parameters);
+
+        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
+
+        WebMarkupContainer content = new WebMarkupContainer("content");
+        content.setOutputMarkupId(true);
+        content.setMarkupId("userRequests");
+        content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
+        body.add(content);
+    }
+
+    private List<ITab> buildTabList() {
+        final List<ITab> tabs = new ArrayList<>();
+
+        tabs.add(new AbstractTab(new ResourceModel("userRequestForms")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new UserRequestFormDirectoryPanel(panelId, getPageReference());
+            }
+        });
+
+        tabs.add(new AbstractTab(new ResourceModel("activeRequests")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new UserRequestDirectoryPanel(panelId, getPageReference());
+            }
+        });
+        return tabs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
new file mode 100644
index 0000000..3c043ac
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
@@ -0,0 +1,163 @@
+/*
+ * 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.panels;
+
+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.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.UserRequestDirectoryPanel.UserRequestProvider;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+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.ActionsPanel;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.UserRequest;
+import org.apache.syncope.common.lib.types.FlowableEntitlement;
+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.IModel;
+import org.apache.wicket.model.ResourceModel;
+
+public class UserRequestDirectoryPanel
+        extends DirectoryPanel<UserRequest, UserRequest, UserRequestProvider, UserRequestRestClient> {
+
+    private static final long serialVersionUID = -5346161040211617763L;
+
+    private static final String PREF_USER_REQUEST_PAGINATOR_ROWS = "userrequest.paginator.rows";
+
+    public UserRequestDirectoryPanel(final String id, final PageReference pageReference) {
+        super(id, pageReference, true);
+        disableCheckBoxes();
+        setFooterVisibility(false);
+        modal.size(Modal.Size.Large);
+
+        restClient = new UserRequestRestClient();
+
+        initResultTable();
+
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, FlowableEntitlement.USER_REQUEST_LIST);
+    }
+
+    @Override
+    protected List<IColumn<UserRequest, String>> getColumns() {
+        List<IColumn<UserRequest, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("bpmnProcess"), "bpmnProcess", "bpmnProcess"));
+        columns.add(new DatePropertyColumn<>(
+                new ResourceModel("startTime"), "startTime", "startTime"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("username"), "username"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("activityId"), "activityId"));
+
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<UserRequest> getActions(final IModel<UserRequest> model) {
+        final ActionsPanel<UserRequest> panel = super.getActions(model);
+
+        panel.add(new ActionLink<UserRequest>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequest ignore) {
+                try {
+                    restClient.cancelRequest(model.getObject().getExecutionId(), null);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                    UserRequestDirectoryPanel.this.getTogglePanel().close(target);
+                } catch (SyncopeClientException e) {
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                    LOG.error("While canceling execution {}", model.getObject().getExecutionId(), e);
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, FlowableEntitlement.USER_REQUEST_CANCEL, true);
+
+        return panel;
+    }
+
+    @Override
+    protected UserRequestProvider dataProvider() {
+        return new UserRequestProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return PREF_USER_REQUEST_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBatches() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    protected static class UserRequestProvider extends DirectoryDataProvider<UserRequest> {
+
+        private static final long serialVersionUID = -1392420250782313734L;
+
+        private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+        public UserRequestProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            setSort("startTime", SortOrder.ASCENDING);
+        }
+
+        @Override
+        public Iterator<UserRequest> iterator(final long first, final long count) {
+            int page = ((int) first / paginatorRows);
+            return restClient.getUserRequests((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
+        }
+
+        @Override
+        public long size() {
+            return restClient.countUserRequests();
+        }
+
+        @Override
+        public IModel<UserRequest> model(final UserRequest request) {
+            return new IModel<UserRequest>() {
+
+                private static final long serialVersionUID = -2566070996511906708L;
+
+                @Override
+                public UserRequest getObject() {
+                    return request;
+                }
+            };
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java
new file mode 100644
index 0000000..9c29105
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java
@@ -0,0 +1,62 @@
+/*
+ * 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.panels;
+
+import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
+import org.apache.syncope.common.lib.AnyOperations;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.wicket.PageReference;
+
+public class UserRequestFormDetails extends MultilevelPanel.SecondLevel {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    public UserRequestFormDetails(final PageReference pageRef, final UserRequestForm formTO) {
+        super(MultilevelPanel.SECOND_LEVEL_ID);
+
+        final UserTO newUserTO;
+        final UserTO previousUserTO;
+        if (formTO.getUserPatch() == null) {
+            newUserTO = formTO.getUserTO();
+            previousUserTO = null;
+        } else if (formTO.getUserTO() == null) {
+            // make it stronger by handling possible NPE
+            previousUserTO = new UserTO();
+            previousUserTO.setKey(formTO.getUserPatch().getKey());
+            newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
+        } else {
+            formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
+            newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
+            previousUserTO = formTO.getUserTO();
+        }
+
+        add(new UserWizardBuilder(
+                previousUserTO,
+                newUserTO,
+                new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
+                new UserFormLayoutInfo(),
+                pageRef).
+                build(AjaxWizard.Mode.READONLY));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
new file mode 100644
index 0000000..bf82896
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
@@ -0,0 +1,353 @@
+/*
+ * 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.panels;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+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.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+import org.apache.syncope.client.console.panels.UserRequestFormDirectoryPanel.UserRequestFormProvider;
+import org.apache.syncope.client.console.layout.FormLayoutInfoUtils;
+import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.console.widgets.UserRequestFormsWidget;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.any.AnyWrapper;
+import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
+import org.apache.syncope.common.lib.AnyOperations;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.patch.PasswordPatch;
+import org.apache.syncope.common.lib.patch.UserPatch;
+import org.apache.syncope.common.lib.to.ProvisioningResult;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.FlowableEntitlement;
+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.event.Broadcast;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+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.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+
+public class UserRequestFormDirectoryPanel
+        extends DirectoryPanel<UserRequestForm, UserRequestForm, UserRequestFormProvider, UserRequestRestClient> {
+
+    private static final long serialVersionUID = -7122136682275797903L;
+
+    private static final String PREF_USER_REQUEST_FORM_PAGINATOR_ROWS = "userrequestform.paginator.rows";
+
+    protected final BaseModal<UserRequestForm> manageFormModal = new BaseModal<UserRequestForm>("outer") {
+
+        private static final long serialVersionUID = 389935548143327858L;
+
+        @Override
+        protected void onConfigure() {
+            super.onConfigure();
+            addSubmitButton();
+            size(Modal.Size.Large);
+        }
+
+    };
+
+    public UserRequestFormDirectoryPanel(final String id, final PageReference pageReference) {
+        super(id, pageReference, true);
+        disableCheckBoxes();
+        setFooterVisibility(false);
+        modal.size(Modal.Size.Large);
+
+        addOuterObject(manageFormModal);
+
+        manageFormModal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
+
+            private static final long serialVersionUID = 8804221891699487139L;
+
+            @Override
+            public void onClose(final AjaxRequestTarget target) {
+                updateResultTable(target);
+
+                Serializable widget = SyncopeConsoleSession.get().getAttribute(UserRequestFormsWidget.class.getName());
+                if (widget instanceof UserRequestFormsWidget) {
+                    ((UserRequestFormsWidget) widget).refreshLatestAlerts(target);
+                }
+
+                manageFormModal.show(false);
+            }
+        });
+
+        restClient = new UserRequestRestClient();
+
+        initResultTable();
+
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
+    }
+
+    @Override
+    protected List<IColumn<UserRequestForm, String>> getColumns() {
+        List<IColumn<UserRequestForm, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("bpmnProcess"), "bpmnProcess", "bpmnProcess"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("key"), "formKey", "formKey"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("username"), "username"));
+        columns.add(new DatePropertyColumn<>(
+                new ResourceModel("createTime"), "createTime", "createTime"));
+        columns.add(new DatePropertyColumn<>(
+                new ResourceModel("dueDate"), "dueDate", "dueDate"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("owner"), "owner", "owner"));
+
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<UserRequestForm> getActions(final IModel<UserRequestForm> model) {
+        final ActionsPanel<UserRequestForm> panel = super.getActions(model);
+
+        panel.add(new ActionLink<UserRequestForm>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
+                claimForm(model.getObject().getTaskId());
+                SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                target.add(container);
+            }
+        }, ActionLink.ActionType.CLAIM, FlowableEntitlement.USER_REQUEST_FORM_CLAIM);
+
+        panel.add(new ActionLink<UserRequestForm>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
+                manageFormModal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
+
+                target.add(manageFormModal.setContent(new UserRequestFormModal(manageFormModal, pageRef, model.
+                        getObject()) {
+
+                    private static final long serialVersionUID = 5546519445061007248L;
+
+                    @Override
+                    public void onSubmit(final AjaxRequestTarget target) {
+                        try {
+                            super.onSubmit(target);
+
+                            UserRequestFormDirectoryPanel.this.getTogglePanel().close(target);
+                        } catch (SyncopeClientException e) {
+                            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + e.getMessage());
+                        }
+                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                    }
+
+                }));
+
+                manageFormModal.header(new Model<>(getString("form.manage", new Model<>(model.getObject()))));
+                manageFormModal.show(true);
+            }
+
+            @Override
+            protected boolean statusCondition(final UserRequestForm modelObject) {
+                return SyncopeConsoleSession.get().getSelfTO().getUsername().
+                        equals(model.getObject().getOwner());
+            }
+
+        }, ActionLink.ActionType.MANAGE_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
+
+        // SYNCOPE-1200 edit user while in approval state
+        panel.add(new ActionLink<UserRequestForm>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
+                modal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
+
+                UserRequestForm formTO = model.getObject();
+                UserTO newUserTO;
+                UserTO previousUserTO;
+                if (formTO.getUserPatch() == null) {
+                    newUserTO = formTO.getUserTO();
+                    previousUserTO = null;
+                } else if (formTO.getUserTO() == null) {
+                    // make it stronger by handling possible NPE
+                    previousUserTO = new UserTO();
+                    previousUserTO.setKey(formTO.getUserPatch().getKey());
+                    newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
+                } else {
+                    previousUserTO = formTO.getUserTO();
+                    formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
+                    formTO.getUserTO().setPassword(null);
+                    newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
+                }
+
+                AjaxWizard.EditItemActionEvent<UserTO> editItemActionEvent =
+                        new AjaxWizard.EditItemActionEvent<>(newUserTO, target);
+                editItemActionEvent.forceModalPanel(new FormUserWizardBuilder(
+                        model.getObject(),
+                        previousUserTO,
+                        newUserTO,
+                        new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
+                        FormLayoutInfoUtils.fetch(Collections.singletonList(AnyTypeKind.USER.name())).getLeft(),
+                        pageRef
+                ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
+
+                send(UserRequestFormDirectoryPanel.this, Broadcast.EXACT, editItemActionEvent);
+            }
+
+            @Override
+            protected boolean statusCondition(final UserRequestForm modelObject) {
+                return SyncopeConsoleSession.get().getSelfTO().getUsername().
+                        equals(model.getObject().getOwner());
+            }
+
+        }, ActionLink.ActionType.EDIT_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
+
+        return panel;
+    }
+
+    @Override
+    protected UserRequestFormProvider dataProvider() {
+        return new UserRequestFormProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return PREF_USER_REQUEST_FORM_PAGINATOR_ROWS;
+    }
+
+    protected static class UserRequestFormProvider extends DirectoryDataProvider<UserRequestForm> {
+
+        private static final long serialVersionUID = -2311716167583335852L;
+
+        private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+        public UserRequestFormProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            setSort("createTime", SortOrder.ASCENDING);
+        }
+
+        @Override
+        public Iterator<UserRequestForm> iterator(final long first, final long count) {
+            int page = ((int) first / paginatorRows);
+            return restClient.getForms((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
+        }
+
+        @Override
+        public long size() {
+            return restClient.countForms();
+        }
+
+        @Override
+        public IModel<UserRequestForm> model(final UserRequestForm form) {
+            return new IModel<UserRequestForm>() {
+
+                private static final long serialVersionUID = -2566070996511906708L;
+
+                @Override
+                public UserRequestForm getObject() {
+                    return form;
+                }
+            };
+        }
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBatches() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    private void claimForm(final String taskId) {
+        try {
+            restClient.claimForm(taskId);
+        } catch (SyncopeClientException scee) {
+            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + scee.getMessage());
+        }
+    }
+
+    private class FormUserWizardBuilder extends UserWizardBuilder {
+
+        private static final long serialVersionUID = 1854981134836384069L;
+
+        private final UserRequestForm formTO;
+
+        FormUserWizardBuilder(
+                final UserRequestForm formTO,
+                final UserTO previousUserTO,
+                final UserTO userTO,
+                final List<String> anyTypeClasses,
+                final UserFormLayoutInfo formLayoutInfo,
+                final PageReference pageRef) {
+
+            super(previousUserTO, userTO, anyTypeClasses, formLayoutInfo, pageRef);
+            this.formTO = formTO;
+        }
+
+        @Override
+        protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
+            UserTO inner = modelObject.getInnerObject();
+
+            UserPatch patch = AnyOperations.diff(inner, formTO.getUserTO(), false);
+
+            if (StringUtils.isNotBlank(inner.getPassword())) {
+                PasswordPatch passwordPatch = new PasswordPatch.Builder().
+                        value(inner.getPassword()).onSyncope(true).resources(inner.
+                        getResources()).
+                        build();
+                patch.setPassword(passwordPatch);
+            }
+
+            // update just if it is changed
+            ProvisioningResult<UserTO> result;
+            if (patch.isEmpty()) {
+                result = new ProvisioningResult<>();
+                result.setEntity(inner);
+            } else {
+                result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+                restClient.getForm(result.getEntity().getKey()).ifPresent(form -> claimForm(form.getTaskId()));
+            }
+
+            return result;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java
new file mode 100644
index 0000000..07a7950
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java
@@ -0,0 +1,79 @@
+/*
+ * 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.panels;
+
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.panel.Panel;
+
+public class UserRequestFormModal extends Panel implements SubmitableModalPanel, WizardModalPanel<UserRequestForm> {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+    private final BaseModal<?> modal;
+
+    private final UserRequestForm formTO;
+
+    private final PageReference pageRef;
+
+    public UserRequestFormModal(final BaseModal<?> modal, final PageReference pageRef, final UserRequestForm formTO) {
+        super(BaseModal.CONTENT_ID);
+        this.modal = modal;
+        this.formTO = formTO;
+        this.pageRef = pageRef;
+
+        MultilevelPanel mlp = new MultilevelPanel("userRequestForm");
+        mlp.setFirstLevel(new UserRequestFormPanel(pageRef, formTO) {
+
+            private static final long serialVersionUID = -2195387360323687302L;
+
+            @Override
+            protected void viewDetails(final AjaxRequestTarget target) {
+                mlp.next(getString("userRequest.details"), new UserRequestFormDetails(pageRef, formTO), target);
+            }
+        });
+        add(mlp);
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target) {
+        this.restClient.submitForm(formTO);
+        this.modal.show(false);
+        this.modal.close(target);
+        SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target) {
+        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+    }
+
+    @Override
+    public UserRequestForm getItem() {
+        return this.formTO;
+    }
+}


[2/6] syncope git commit: [SYNCOPE-1369] Some refinements + admin console suport

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java
new file mode 100644
index 0000000..6520177
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java
@@ -0,0 +1,200 @@
+/*
+ * 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.panels;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+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.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.AjaxDateTimeFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
+import org.apache.syncope.common.lib.to.UserRequestFormProperty;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+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.PropertyModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class UserRequestFormPanel extends Panel {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    protected static final Logger LOG = LoggerFactory.getLogger(UserRequestFormPanel.class);
+
+    public UserRequestFormPanel(final PageReference pageRef, final UserRequestForm form) {
+        super(MultilevelPanel.FIRST_LEVEL_ID);
+
+        IModel<List<UserRequestFormProperty>> formProps = new LoadableDetachableModel<List<UserRequestFormProperty>>() {
+
+            private static final long serialVersionUID = 3169142472626817508L;
+
+            @Override
+            protected List<UserRequestFormProperty> load() {
+                return form.getProperties();
+            }
+        };
+
+        ListView<UserRequestFormProperty> propView = new ListView<UserRequestFormProperty>("propView", formProps) {
+
+            private static final long serialVersionUID = 9101744072914090143L;
+
+            @Override
+            @SuppressWarnings({ "unchecked", "rawtypes" })
+            protected void populateItem(final ListItem<UserRequestFormProperty> item) {
+                final UserRequestFormProperty 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:
+                        FastDateFormat formatter = FastDateFormat.getInstance(prop.getDatePattern());
+                        field = new AjaxDateTimeFieldPanel("value", label, new PropertyModel<Date>(prop, "value") {
+
+                            private static final long serialVersionUID = -3743432456095828573L;
+
+                            @Override
+                            public Date getObject() {
+                                try {
+                                    return StringUtils.isBlank(prop.getValue())
+                                            ? null
+                                            : 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:
+                        field = new AjaxDropDownChoicePanel(
+                                "value", label, new PropertyModel<String>(prop, "value"), false).
+                                setChoiceRenderer(new MapChoiceRenderer(prop.getEnumValues())).
+                                setChoices(new ArrayList<>(prop.getEnumValues().keySet()));
+                        break;
+
+                    case Dropdown:
+                        field = new AjaxDropDownChoicePanel(
+                                "value", label, new PropertyModel<String>(prop, "value"), false).
+                                setChoiceRenderer(new MapChoiceRenderer(prop.getDropdownValues())).
+                                setChoices(new ArrayList<>(prop.getDropdownValues().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<>(prop, "value"), false);
+                        break;
+                }
+
+                field.setReadOnly(!prop.isWritable());
+                if (prop.isRequired()) {
+                    field.addRequiredLabel();
+                }
+
+                item.add(field);
+            }
+        };
+
+        AjaxLink<String> userDetails = new AjaxLink<String>("userDetails") {
+
+            private static final long serialVersionUID = -4804368561204623354L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                viewDetails(target);
+            }
+        };
+        MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE, StandardEntitlement.USER_READ);
+
+        boolean enabled = form.getUserTO() != null;
+        userDetails.setVisible(enabled).setEnabled(enabled);
+
+        add(propView);
+        add(userDetails);
+    }
+
+    protected abstract void viewDetails(final AjaxRequestTarget target);
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
index e3a179f..8d3b03b 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
@@ -21,8 +21,10 @@ package org.apache.syncope.client.console.rest;
 import java.util.List;
 import java.util.Optional;
 import org.apache.syncope.common.lib.to.PagedResult;
+import org.apache.syncope.common.lib.to.UserRequest;
 import org.apache.syncope.common.lib.to.UserRequestForm;
 import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
+import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import org.apache.syncope.common.rest.api.service.UserRequestService;
 
@@ -30,6 +32,22 @@ public class UserRequestRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -4785231164900813921L;
 
+    public int countUserRequests() {
+        return getService(UserRequestService.class).
+                list(new UserRequestQuery.Builder().page(1).size(1).build()).
+                getTotalCount();
+    }
+
+    public List<UserRequest> getUserRequests(final int page, final int size, final SortParam<String> sort) {
+        return getService(UserRequestService.class).
+                list(new UserRequestQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
+                getResult();
+    }
+
+    public void cancelRequest(final String executionId, final String reason) {
+        getService(UserRequestService.class).cancel(executionId, reason);
+    }
+
     public int countForms() {
         return getService(UserRequestService.class).
                 getForms(new UserRequestFormQuery.Builder().page(1).size(1).build()).

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
deleted file mode 100644
index 9a9fd2d..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.widgets;
-
-import de.agilecoders.wicket.core.markup.html.bootstrap.image.Icon;
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesomeIconTypeBuilder;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.annotations.ExtWidget;
-import org.apache.syncope.client.console.pages.Approvals;
-import org.apache.syncope.client.console.rest.UserRequestRestClient;
-import org.apache.syncope.client.console.wicket.ajax.IndicatorAjaxTimerBehavior;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.syncope.common.lib.types.FlowableEntitlement;
-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.util.SortParam;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.util.ListModel;
-import org.apache.wicket.util.time.Duration;
-
-@ExtWidget(priority = 10)
-public class ApprovalsWidget extends ExtAlertWidget<UserRequestForm> {
-
-    private static final long serialVersionUID = 7667120094526529934L;
-
-    private final UserRequestRestClient restClient = new UserRequestRestClient();
-
-    private final List<UserRequestForm> lastApprovals = new ArrayList<>();
-
-    public ApprovalsWidget(final String id, final PageReference pageRef) {
-        super(id);
-        setOutputMarkupId(true);
-
-        latestAlertsList.add(new IndicatorAjaxTimerBehavior(Duration.seconds(30)) {
-
-            private static final long serialVersionUID = 7298597675929755960L;
-
-            @Override
-            protected void onTimer(final AjaxRequestTarget target) {
-                if (!latestAlerts.getObject().equals(lastApprovals)) {
-                    refreshLatestAlerts(target);
-                }
-            }
-        });
-    }
-
-    public final void refreshLatestAlerts(final AjaxRequestTarget target) {
-        latestAlerts.getObject().clear();
-        latestAlerts.getObject().addAll(lastApprovals);
-
-        int latestAlertSize = getLatestAlertsSize();
-        linkAlertsNumber.setDefaultModelObject(latestAlertSize);
-        target.add(linkAlertsNumber);
-
-        headerAlertsNumber.setDefaultModelObject(latestAlertSize);
-        target.add(headerAlertsNumber);
-
-        target.add(latestAlertsList);
-
-        lastApprovals.clear();
-        lastApprovals.addAll(latestAlerts.getObject());
-    }
-
-    @Override
-    protected int getLatestAlertsSize() {
-        return SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)
-                ? restClient.countForms()
-                : 0;
-    }
-
-    @Override
-    protected IModel<List<UserRequestForm>> getLatestAlerts() {
-        return new ListModel<UserRequestForm>() {
-
-            private static final long serialVersionUID = -2583290457773357445L;
-
-            @Override
-            public List<UserRequestForm> getObject() {
-                List<UserRequestForm> updatedApprovals;
-                if (SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)) {
-                    updatedApprovals = restClient.getForms(1, MAX_SIZE, new SortParam<>("createTime", true));
-                } else {
-                    updatedApprovals = Collections.<UserRequestForm>emptyList();
-                }
-
-                return updatedApprovals;
-            }
-        };
-    }
-
-    @Override
-    protected AbstractLink getEventsLink(final String linkid) {
-        BookmarkablePageLink<Approvals> approvals = BookmarkablePageLinkBuilder.build(linkid, Approvals.class);
-        MetaDataRoleAuthorizationStrategy.authorize(
-                approvals, WebPage.ENABLE, FlowableEntitlement.USER_REQUEST_FORM_LIST);
-        return approvals;
-    }
-
-    @Override
-    protected Icon getIcon(final String iconid) {
-        return new Icon(iconid,
-                FontAwesomeIconTypeBuilder.on(FontAwesomeIconTypeBuilder.FontAwesomeGraphic.handshake_o).build());
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
new file mode 100644
index 0000000..b445dd9
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
@@ -0,0 +1,128 @@
+/*
+ * 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 de.agilecoders.wicket.core.markup.html.bootstrap.image.Icon;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesomeIconTypeBuilder;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.annotations.ExtWidget;
+import org.apache.syncope.client.console.pages.UserRequests;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+import org.apache.syncope.client.console.wicket.ajax.IndicatorAjaxTimerBehavior;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.syncope.common.lib.types.FlowableEntitlement;
+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.util.SortParam;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.util.time.Duration;
+
+@ExtWidget(priority = 10)
+public class UserRequestFormsWidget extends ExtAlertWidget<UserRequestForm> {
+
+    private static final long serialVersionUID = 7667120094526529934L;
+
+    private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+    private final List<UserRequestForm> lastForms = new ArrayList<>();
+
+    public UserRequestFormsWidget(final String id, final PageReference pageRef) {
+        super(id);
+        setOutputMarkupId(true);
+
+        latestAlertsList.add(new IndicatorAjaxTimerBehavior(Duration.seconds(30)) {
+
+            private static final long serialVersionUID = 7298597675929755960L;
+
+            @Override
+            protected void onTimer(final AjaxRequestTarget target) {
+                if (!latestAlerts.getObject().equals(lastForms)) {
+                    refreshLatestAlerts(target);
+                }
+            }
+        });
+    }
+
+    public final void refreshLatestAlerts(final AjaxRequestTarget target) {
+        latestAlerts.getObject().clear();
+        latestAlerts.getObject().addAll(lastForms);
+
+        int latestAlertSize = getLatestAlertsSize();
+        linkAlertsNumber.setDefaultModelObject(latestAlertSize);
+        target.add(linkAlertsNumber);
+
+        headerAlertsNumber.setDefaultModelObject(latestAlertSize);
+        target.add(headerAlertsNumber);
+
+        target.add(latestAlertsList);
+
+        lastForms.clear();
+        lastForms.addAll(latestAlerts.getObject());
+    }
+
+    @Override
+    protected int getLatestAlertsSize() {
+        return SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)
+                ? restClient.countForms()
+                : 0;
+    }
+
+    @Override
+    protected IModel<List<UserRequestForm>> getLatestAlerts() {
+        return new ListModel<UserRequestForm>() {
+
+            private static final long serialVersionUID = -2583290457773357445L;
+
+            @Override
+            public List<UserRequestForm> getObject() {
+                List<UserRequestForm> updatedForms;
+                if (SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)) {
+                    updatedForms = restClient.getForms(1, MAX_SIZE, new SortParam<>("createTime", true));
+                } else {
+                    updatedForms = Collections.<UserRequestForm>emptyList();
+                }
+
+                return updatedForms;
+            }
+        };
+    }
+
+    @Override
+    protected AbstractLink getEventsLink(final String linkid) {
+        BookmarkablePageLink<UserRequests> userRequests = BookmarkablePageLinkBuilder.build(linkid, UserRequests.class);
+        MetaDataRoleAuthorizationStrategy.authorize(
+                userRequests, WebPage.ENABLE, FlowableEntitlement.USER_REQUEST_FORM_LIST);
+        return userRequests;
+    }
+
+    @Override
+    protected Icon getIcon(final String iconid) {
+        return new Icon(iconid,
+                FontAwesomeIconTypeBuilder.on(FontAwesomeIconTypeBuilder.FontAwesomeGraphic.handshake_o).build());
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html
deleted file mode 100644
index 64805b9..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <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>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties
deleted file mode 100644
index 450ff50..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=User details
-userForm=Edit User

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html
deleted file mode 100644
index 1de2361..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="wizard"/>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
deleted file mode 100644
index 5d5d129..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="approval">[APPROVAL]</span>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties
deleted file mode 100644
index 84106b9..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=\u627f\u8a8d\u8a73\u7d30

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties
deleted file mode 100644
index 92c475d..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=Dettagli utente
-userForm=Modifica utente

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties
deleted file mode 100644
index 5a9cc2d..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=\u30e6\u30fc\u30b6\u30fc\u8a73\u7d30
-userForm=\u30e6\u30fc\u30b6\u30fc\u3092\u7de8\u96c6

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties
deleted file mode 100644
index 00a8971..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=Detalhes do Usu\u00e1rio
-userForm=Detalhes do Usu\u00e1rio

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties
deleted file mode 100644
index 02c159a..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# userDetails=\u00d0\u0098\u00d0\u00bd\u00d1\u0084\u00d0\u00be\u00d1\u0080\u00d0\u00bc\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d1\u008f \u00d0\u00be \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5
-userDetails=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435
-userForm=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html
deleted file mode 100644
index 5bf6234..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <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"><wicket:message key="approvals"/></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/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties
deleted file mode 100644
index 84b9c85..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-key=Key
-description=Description
-createTime=Create Time
-dueDate=Due Date
-owner=Owner
-claim=Claim
-manage=Manage
-approvals=Approvals
-delete=Delete
-type=Type
-username=Username
-new_user=New User
-creationDate = Creation Date
-claimDate = Claim Dare
-approval.edit=Approval Edit
-approval.manage=Approval Manage
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties
deleted file mode 100644
index f25abd8..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-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.manage=Gestisci Approvazione
-approval.edit=Modifica Approvazione
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties
deleted file mode 100644
index dcca6e1..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-key=\u30ad\u30fc
-description=\u8aac\u660e
-createTime=\u4f5c\u6210\u6642\u523b
-dueDate=\u671f\u9650
-owner=\u30aa\u30fc\u30ca\u30fc
-claim=\u7533\u8acb
-manage=\u7ba1\u7406
-approvals=\u627f\u8a8d
-delete=\u524a\u9664
-type=\u30bf\u30a4\u30d7
-username=\u30e6\u30fc\u30b6\u30fc\u540d
-new_user=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc
-creationDate = \u4f5c\u6210\u65e5
-claimDate = \u7533\u8acb\u65e5
-approval.edit=\u627f\u8a8d \u7de8\u96c6
-approval.manage=\u627f\u8a8d \u7ba1\u7406
-any.edit=${anyTO.type} ${anyTO.username} \u3092\u7de8\u96c6

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties
deleted file mode 100644
index 88a9e05..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-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\u00f5es
-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.manage=Aprova\u00e7\u00e3o
-approval.edit=Aprova\u00e7\u00e3o
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties
deleted file mode 100644
index 2e7a199..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# taskId=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0
-bpmnProcess=User Request
-# key=\u00d0\u0098\u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u0082\u00d0\u00b8\u00d1\u0084\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d1\u0082\u00d0\u00be\u00d1\u0080
-key=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
-# description=\u00d0\u009e\u00d0\u00bf\u00d0\u00b8\u00d1\u0081\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
-# createTime=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
-createTime=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
-# dueDate=\u00d0\u00a1\u00d1\u0080\u00d0\u00be\u00d0\u00ba
-dueDate=\u0421\u0440\u043e\u043a
-# owner=\u00d0\u0092\u00d0\u00bb\u00d0\u00b0\u00d0\u00b4\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d1\u0086
-owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
-# claim=\u00d0\u0092\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-claim=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
-# manage=\u00d0\u00a3\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-manage=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435
-# approvals=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b8
-approvals=\u0417\u0430\u044f\u0432\u043a\u0438
-# delete=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c
-delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-# type=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf
-type=\u0422\u0438\u043f
-# username=\u00d0\u0098\u00d0\u00bc\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
-username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-# new_user=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
-new_user=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-# creationDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
-creationDate=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
-# claimDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b0\u00d0\u00bb\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
-claimDate=\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f
-# approval.edit=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-approval.edit=\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
-# approval.manage=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-approval.manage=\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.html
new file mode 100644
index 0000000..d14949c
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.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"><wicket:message key="userRequests"/></li>
+      </ol>
+    </section>
+
+    <section class="content" wicket:id="content">
+      <div class="box">
+        <div class="box-body" wicket:id="tabbedPanel"/>
+      </div>
+    </section>
+  </wicket:extend>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties
new file mode 100644
index 0000000..9f30811
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=Key
+description=Description
+createTime=Create Time
+dueDate=Due Date
+owner=Owner
+claim=Claim
+manage=Manage
+userRequests=User Requests
+delete=Delete
+type=Type
+username=Username
+new_user=New User
+creationDate = Creation Date
+claimDate = Claim Dare
+form.edit=Edit
+form.manage=Manage
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties
new file mode 100644
index 0000000..04f5462
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=Chiave
+description=Descrizione
+createTime=Data di creazione
+dueDate=Scadenza
+owner=Esecutore
+claim=Richiedi
+manage=Gestisci
+userRequests=Richieste utente
+delete=Rimuovi
+type=Tipo
+username=Utente
+new_user=Nuovo utente
+creationDate = Data creazione
+claimDate = Data rivendicazione
+form.manage=Gestisci
+form.edit=Modifica
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Form
+activeRequests=Richieste attive
+startTime=Inizio
+activityId=Stato

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties
new file mode 100644
index 0000000..61fef13
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=\u30ad\u30fc
+description=\u8aac\u660e
+createTime=\u4f5c\u6210\u6642\u523b
+dueDate=\u671f\u9650
+owner=\u30aa\u30fc\u30ca\u30fc
+claim=\u7533\u8acb
+manage=\u7ba1\u7406
+userRequests=User Requests
+delete=\u524a\u9664
+type=\u30bf\u30a4\u30d7
+username=\u30e6\u30fc\u30b6\u30fc\u540d
+new_user=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc
+creationDate = \u4f5c\u6210\u65e5
+claimDate = \u7533\u8acb\u65e5
+form.edit=Edit
+form.manage=Manage
+any.edit=${anyTO.type} ${anyTO.username} \u3092\u7de8\u96c6
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties
new file mode 100644
index 0000000..65c43f4
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=Chave
+description=Descri\u00e7\u00e3o
+createTime=Tempo de Cria\u00e7\u00e3o
+dueDate=Data acordada
+owner=Propriet\u00e1rio
+claim=Requerimento
+manage=Ger\u00eancia
+userRequests=User Requests
+delete=Excluir
+type=Tipo
+username=Usu\u00e1rio
+new_user=Novo Usu\u00e1rio
+creationDate = Data de cria\u00e7\u00e3o
+claimDate = Data de reivindica\u00e7\u00e3o
+form.manage=Manage
+form.edit=Edit
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties
new file mode 100644
index 0000000..52b454b
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties
@@ -0,0 +1,56 @@
+# 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=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0
+bpmnProcess=User Request
+# key=\u00d0\u0098\u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u0082\u00d0\u00b8\u00d1\u0084\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d1\u0082\u00d0\u00be\u00d1\u0080
+key=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
+# description=\u00d0\u009e\u00d0\u00bf\u00d0\u00b8\u00d1\u0081\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
+# createTime=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
+createTime=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
+# dueDate=\u00d0\u00a1\u00d1\u0080\u00d0\u00be\u00d0\u00ba
+dueDate=\u0421\u0440\u043e\u043a
+# owner=\u00d0\u0092\u00d0\u00bb\u00d0\u00b0\u00d0\u00b4\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d1\u0086
+owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
+# claim=\u00d0\u0092\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+claim=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
+# manage=\u00d0\u00a3\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+manage=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435
+# approvals=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b8
+userRequests=User Requests
+# delete=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c
+delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+# type=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf
+type=\u0422\u0438\u043f
+# username=\u00d0\u0098\u00d0\u00bc\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
+username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+# new_user=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
+new_user=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+# creationDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
+creationDate=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
+# claimDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b0\u00d0\u00bb\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
+claimDate=\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f
+# approval.edit=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+form.edit=Edit
+# approval.manage=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+form.manage=Manage
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html
new file mode 100644
index 0000000..1de2361
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html
@@ -0,0 +1,23 @@
+<!--
+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:panel>
+    <span wicket:id="wizard"/>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html
new file mode 100644
index 0000000..777dbd8
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html
@@ -0,0 +1,23 @@
+<!--
+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:panel>
+    <span wicket:id="userRequestForm"></span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_it.properties
new file mode 100644
index 0000000..e68bb15
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_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.
+userRequest.details=Dettagli richiesta

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_pt_BR.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html
new file mode 100644
index 0000000..64805b9
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html
@@ -0,0 +1,31 @@
+<!--
+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: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>
+</html>


[3/6] syncope git commit: [SYNCOPE-1369] Some refinements + admin console suport

Posted by il...@apache.org.
[SYNCOPE-1369] Some refinements + admin console suport


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

Branch: refs/heads/2_1_X
Commit: ff37c3f763b967d928a5dd5d4764b54694ca299f
Parents: e1b88c2
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Oct 9 17:08:13 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Oct 9 17:08:13 2018 +0200

----------------------------------------------------------------------
 .../console/SyncopeConsoleApplication.java      |   4 +-
 .../client/console/commons/Constants.java       |   2 -
 .../client/console/rest/ReportRestClient.java   |   2 -
 .../console/tasks/SchedTaskDirectoryPanel.java  |   6 +-
 .../client/console/approvals/Approval.java      | 201 -----------
 .../console/approvals/ApprovalDetails.java      |  63 ----
 .../approvals/ApprovalDirectoryPanel.java       | 352 ------------------
 .../client/console/approvals/ApprovalModal.java |  82 -----
 .../syncope/client/console/pages/Approvals.java |  41 ---
 .../syncope/client/console/pages/Flowable.java  |   7 -
 .../client/console/pages/UserRequests.java      |  74 ++++
 .../panels/UserRequestDirectoryPanel.java       | 163 +++++++++
 .../console/panels/UserRequestFormDetails.java  |  62 ++++
 .../panels/UserRequestFormDirectoryPanel.java   | 353 +++++++++++++++++++
 .../console/panels/UserRequestFormModal.java    |  79 +++++
 .../console/panels/UserRequestFormPanel.java    | 200 +++++++++++
 .../console/rest/UserRequestRestClient.java     |  18 +
 .../client/console/widgets/ApprovalsWidget.java | 128 -------
 .../console/widgets/UserRequestFormsWidget.java | 128 +++++++
 .../client/console/approvals/Approval.html      |  31 --
 .../console/approvals/Approval.properties       |  18 -
 .../console/approvals/ApprovalDetails.html      |  23 --
 .../client/console/approvals/ApprovalModal.html |  23 --
 .../console/approvals/ApprovalModal.properties  |  17 -
 .../approvals/ApprovalModal_it.properties       |  17 -
 .../approvals/ApprovalModal_ja.properties       |  17 -
 .../approvals/ApprovalModal_pt_BR.properties    |  17 -
 .../approvals/ApprovalModal_ru.properties       |  17 -
 .../console/approvals/Approval_it.properties    |  18 -
 .../console/approvals/Approval_ja.properties    |  18 -
 .../console/approvals/Approval_pt_BR.properties |  18 -
 .../console/approvals/Approval_ru.properties    |  20 --
 .../syncope/client/console/pages/Approvals.html |  35 --
 .../client/console/pages/Approvals.properties   |  34 --
 .../console/pages/Approvals_it.properties       |  34 --
 .../console/pages/Approvals_ja.properties       |  34 --
 .../console/pages/Approvals_pt_BR.properties    |  34 --
 .../console/pages/Approvals_ru.properties       |  52 ---
 .../client/console/pages/UserRequests.html      |  35 ++
 .../console/pages/UserRequests.properties       |  38 ++
 .../console/pages/UserRequests_it.properties    |  38 ++
 .../console/pages/UserRequests_ja.properties    |  38 ++
 .../console/pages/UserRequests_pt_BR.properties |  38 ++
 .../console/pages/UserRequests_ru.properties    |  56 +++
 .../console/panels/UserRequestFormDetails.html  |  23 ++
 .../console/panels/UserRequestFormModal.html    |  23 ++
 .../panels/UserRequestFormModal.properties      |  17 +
 .../panels/UserRequestFormModal_it.properties   |  17 +
 .../panels/UserRequestFormModal_ja.properties   |  17 +
 .../UserRequestFormModal_pt_BR.properties       |  17 +
 .../panels/UserRequestFormModal_ru.properties   |  17 +
 .../console/panels/UserRequestFormPanel.html    |  31 ++
 .../panels/UserRequestFormPanel.properties      |  18 +
 .../panels/UserRequestFormPanel_it.properties   |  18 +
 .../panels/UserRequestFormPanel_ja.properties   |  18 +
 .../UserRequestFormPanel_pt_BR.properties       |  18 +
 .../panels/UserRequestFormPanel_ru.properties   |  20 ++
 .../console/widgets/ApprovalsWidget.properties  |  21 --
 .../widgets/ApprovalsWidget_it.properties       |  21 --
 .../widgets/ApprovalsWidget_ja.properties       |  21 --
 .../widgets/ApprovalsWidget_pt_BR.properties    |  21 --
 .../widgets/ApprovalsWidget_ru.properties       |  22 --
 .../widgets/UserRequestFormsWidget.properties   |  20 ++
 .../UserRequestFormsWidget_it.properties        |  20 ++
 .../UserRequestFormsWidget_ja.properties        |  20 ++
 .../UserRequestFormsWidget_pt_BR.properties     |  20 ++
 .../UserRequestFormsWidget_ru.properties        |  21 ++
 .../syncope/common/lib/to/UserRequest.java      |  21 +-
 .../impl/FlowableUserRequestHandler.java        |  91 ++---
 .../syncope/fit/core/UserRequestITCase.java     |   4 +-
 70 files changed, 1744 insertions(+), 1518 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
index 2e15b19..f03f823 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
@@ -62,7 +62,7 @@ import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.resource.DynamicJQueryResourceReference;
+import org.apache.wicket.resource.JQueryResourceReference;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -190,7 +190,7 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
 
         getResourceSettings().setThrowExceptionOnMissingResource(true);
 
-        getJavaScriptLibrarySettings().setJQueryReference(new DynamicJQueryResourceReference());
+        getJavaScriptLibrarySettings().setJQueryReference(JQueryResourceReference.getV2());
 
         getSecuritySettings().setAuthorizationStrategy(new MetaDataRoleAuthorizationStrategy(this));
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/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 48b58137..2e60aa9 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
@@ -123,8 +123,6 @@ public final class Constants {
 
     public static final String PREF_ACCESS_TOKEN_PAGINATOR_ROWS = "accessToken.paginator.rows";
 
-    public static final String PREF_WORKFLOW_FORM_PAGINATOR_ROWS = "workflow.paginator.rows";
-
     public static final String PREF_REMEDIATION_PAGINATOR_ROWS = "remediation.paginator.rows";
 
     public static final String PREF_RESOURCES_PAGINATOR_ROWS = "resources.paginator.rows";

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index 8b60941..a80cdcb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.console.rest;
 
-import static org.apache.syncope.client.console.rest.BaseRestClient.getStatus;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 0dc445d..c333f34 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -229,8 +229,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
                         new AjaxWizard.EditItemActionEvent<>(clone, target).setResourceModel(
                                 new StringResourceModel("inner.task.clone",
                                         SchedTaskDirectoryPanel.this,
-                                        Model.of(Pair.of(
-                                                ActionLink.ActionType.CLONE, model.getObject())))));
+                                        Model.of(Pair.of(ActionLink.ActionType.CLONE, model.getObject())))));
             }
         }, ActionLink.ActionType.CLONE, StandardEntitlement.TASK_CREATE);
 
@@ -241,8 +240,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
             @Override
             public void onClick(final AjaxRequestTarget target, final T ignore) {
                 SchedTaskDirectoryPanel.this.getTogglePanel().close(target);
-                startAt.setExecutionDetail(
-                        model.getObject().getKey(), model.getObject().getName(), target);
+                startAt.setExecutionDetail(model.getObject().getKey(), model.getObject().getName(), target);
                 startAt.toggle(target, true);
             }
         }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java
deleted file mode 100644
index 6a66afc..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/Approval.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-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.AjaxDateTimeFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
-import org.apache.syncope.common.lib.to.UserRequestFormProperty;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-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.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 UserRequestForm formTO) {
-        super(MultilevelPanel.FIRST_LEVEL_ID);
-
-        IModel<List<UserRequestFormProperty>> formProps = new LoadableDetachableModel<List<UserRequestFormProperty>>() {
-
-            private static final long serialVersionUID = 3169142472626817508L;
-
-            @Override
-            protected List<UserRequestFormProperty> load() {
-                return formTO.getProperties();
-            }
-        };
-
-        ListView<UserRequestFormProperty> propView = new ListView<UserRequestFormProperty>("propView", formProps) {
-
-            private static final long serialVersionUID = 9101744072914090143L;
-
-            @Override
-            @SuppressWarnings({ "unchecked", "rawtypes" })
-            protected void populateItem(final ListItem<UserRequestFormProperty> item) {
-                final UserRequestFormProperty 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:
-                        FastDateFormat formatter = FastDateFormat.getInstance(prop.getDatePattern());
-                        field = new AjaxDateTimeFieldPanel("value", label, new PropertyModel<Date>(prop, "value") {
-
-                            private static final long serialVersionUID = -3743432456095828573L;
-
-                            @Override
-                            public Date getObject() {
-                                try {
-                                    return StringUtils.isBlank(prop.getValue())
-                                            ? null
-                                            : 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:
-                        field = new AjaxDropDownChoicePanel(
-                                "value", label, new PropertyModel<String>(prop, "value"), false).
-                                setChoiceRenderer(new MapChoiceRenderer(prop.getEnumValues())).
-                                setChoices(new ArrayList<>(prop.getEnumValues().keySet()));
-                        break;
-
-                    case Dropdown:
-                        field = new AjaxDropDownChoicePanel(
-                                "value", label, new PropertyModel<String>(prop, "value"), false).
-                                setChoiceRenderer(new MapChoiceRenderer(prop.getDropdownValues())).
-                                setChoices(new ArrayList<>(prop.getDropdownValues().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<>(prop, "value"), false);
-                        break;
-                }
-
-                field.setReadOnly(!prop.isWritable());
-                if (prop.isRequired()) {
-                    field.addRequiredLabel();
-                }
-
-                item.add(field);
-            }
-        };
-
-        AjaxLink<String> userDetails = new AjaxLink<String>("userDetails") {
-
-            private static final long serialVersionUID = -4804368561204623354L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target) {
-                viewDetails(target);
-            }
-        };
-        MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE, StandardEntitlement.USER_READ);
-
-        boolean enabled = formTO.getUserTO() != null;
-        userDetails.setVisible(enabled).setEnabled(enabled);
-
-        add(propView);
-        add(userDetails);
-    }
-
-    protected abstract void viewDetails(final AjaxRequestTarget target);
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
deleted file mode 100644
index 9606824..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
-import org.apache.syncope.client.console.panels.MultilevelPanel;
-import org.apache.syncope.client.console.rest.AnyTypeRestClient;
-import org.apache.syncope.client.console.wizards.AjaxWizard;
-import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
-import org.apache.syncope.common.lib.AnyOperations;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-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 UserRequestForm formTO) {
-        super(MultilevelPanel.SECOND_LEVEL_ID);
-
-        final UserTO newUserTO;
-        final UserTO previousUserTO;
-        if (formTO.getUserPatch() == null) {
-            newUserTO = formTO.getUserTO();
-            previousUserTO = null;
-        } else if (formTO.getUserTO() == null) {
-            // make it stronger by handling possible NPE
-            previousUserTO = new UserTO();
-            previousUserTO.setKey(formTO.getUserPatch().getKey());
-            newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
-        } else {
-            formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
-            newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
-            previousUserTO = formTO.getUserTO();
-        }
-
-        add(new UserWizardBuilder(
-                previousUserTO,
-                newUserTO,
-                new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
-                new UserFormLayoutInfo(),
-                pageRef).
-                build(AjaxWizard.Mode.READONLY));
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
deleted file mode 100644
index 577ea65..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-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.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.panels.DirectoryPanel;
-import org.apache.syncope.client.console.rest.UserRequestRestClient;
-import org.apache.syncope.client.console.approvals.ApprovalDirectoryPanel.ApprovalProvider;
-import org.apache.syncope.client.console.layout.FormLayoutInfoUtils;
-import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
-import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.rest.AnyTypeRestClient;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
-import org.apache.syncope.client.console.widgets.ApprovalsWidget;
-import org.apache.syncope.client.console.wizards.AjaxWizard;
-import org.apache.syncope.client.console.wizards.any.AnyWrapper;
-import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
-import org.apache.syncope.common.lib.AnyOperations;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.patch.PasswordPatch;
-import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.ProvisioningResult;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.FlowableEntitlement;
-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.event.Broadcast;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
-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.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.ResourceModel;
-
-public class ApprovalDirectoryPanel
-        extends DirectoryPanel<UserRequestForm, UserRequestForm, ApprovalProvider, UserRequestRestClient> {
-
-    private static final long serialVersionUID = -7122136682275797903L;
-
-    protected final BaseModal<UserRequestForm> manageApprovalModal = new BaseModal<UserRequestForm>("outer") {
-
-        private static final long serialVersionUID = 389935548143327858L;
-
-        @Override
-        protected void onConfigure() {
-            super.onConfigure();
-            addSubmitButton();
-            size(Modal.Size.Large);
-        }
-
-    };
-
-    public ApprovalDirectoryPanel(final String id, final PageReference pageReference) {
-        super(id, pageReference, true);
-        disableCheckBoxes();
-        setFooterVisibility(false);
-        modal.size(Modal.Size.Large);
-
-        addOuterObject(manageApprovalModal);
-
-        manageApprovalModal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
-
-            private static final long serialVersionUID = 8804221891699487139L;
-
-            @Override
-            public void onClose(final AjaxRequestTarget target) {
-                updateResultTable(target);
-
-                Serializable widget = SyncopeConsoleSession.get().getAttribute(ApprovalsWidget.class.getName());
-                if (widget instanceof ApprovalsWidget) {
-                    ((ApprovalsWidget) widget).refreshLatestAlerts(target);
-                }
-
-                manageApprovalModal.show(false);
-            }
-        });
-
-        restClient = new UserRequestRestClient();
-
-        initResultTable();
-
-        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
-    }
-
-    @Override
-    protected List<IColumn<UserRequestForm, String>> getColumns() {
-        List<IColumn<UserRequestForm, String>> columns = new ArrayList<>();
-
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("bpmnProcess"), "bpmnProcess", "bpmnProcess"));
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("key"), "formKey", "formKey"));
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("username"), "username"));
-        columns.add(new DatePropertyColumn<>(
-                new ResourceModel("createTime"), "createTime", "createTime"));
-        columns.add(new DatePropertyColumn<>(
-                new ResourceModel("dueDate"), "dueDate", "dueDate"));
-        columns.add(new PropertyColumn<>(
-                new ResourceModel("owner"), "owner", "owner"));
-
-        return columns;
-    }
-
-    @Override
-    public ActionsPanel<UserRequestForm> getActions(final IModel<UserRequestForm> model) {
-        final ActionsPanel<UserRequestForm> panel = super.getActions(model);
-
-        panel.add(new ActionLink<UserRequestForm>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                claimForm(model.getObject().getTaskId());
-                SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                target.add(container);
-            }
-        }, ActionLink.ActionType.CLAIM, FlowableEntitlement.USER_REQUEST_FORM_CLAIM);
-
-        panel.add(new ActionLink<UserRequestForm>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                manageApprovalModal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
-
-                target.add(manageApprovalModal.setContent(
-                        new ApprovalModal(manageApprovalModal, pageRef, model.getObject()) {
-
-                    private static final long serialVersionUID = 5546519445061007248L;
-
-                    @Override
-                    public void onSubmit(final AjaxRequestTarget target) {
-                        try {
-                            super.onSubmit(target);
-
-                            ApprovalDirectoryPanel.this.getTogglePanel().close(target);
-                        } catch (SyncopeClientException e) {
-                            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + e.getMessage());
-                        }
-                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                    }
-
-                }));
-
-                manageApprovalModal.header(new Model<>(getString("approval.manage", new Model<>(model.getObject()))));
-                manageApprovalModal.show(true);
-            }
-
-            @Override
-            protected boolean statusCondition(final UserRequestForm modelObject) {
-                return SyncopeConsoleSession.get().getSelfTO().getUsername().
-                        equals(model.getObject().getOwner());
-            }
-
-        }, ActionLink.ActionType.MANAGE_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
-
-        // SYNCOPE-1200 edit user while in approval state
-        panel.add(new ActionLink<UserRequestForm>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                modal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
-
-                UserRequestForm formTO = model.getObject();
-                UserTO newUserTO;
-                UserTO previousUserTO;
-                if (formTO.getUserPatch() == null) {
-                    newUserTO = formTO.getUserTO();
-                    previousUserTO = null;
-                } else if (formTO.getUserTO() == null) {
-                    // make it stronger by handling possible NPE
-                    previousUserTO = new UserTO();
-                    previousUserTO.setKey(formTO.getUserPatch().getKey());
-                    newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
-                } else {
-                    previousUserTO = formTO.getUserTO();
-                    formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
-                    formTO.getUserTO().setPassword(null);
-                    newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
-                }
-
-                AjaxWizard.EditItemActionEvent<UserTO> editItemActionEvent =
-                        new AjaxWizard.EditItemActionEvent<>(newUserTO, target);
-                editItemActionEvent.forceModalPanel(new ApprovalUserWizardBuilder(
-                        model.getObject(),
-                        previousUserTO,
-                        newUserTO,
-                        new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
-                        FormLayoutInfoUtils.fetch(Collections.singletonList(AnyTypeKind.USER.name())).getLeft(),
-                        pageRef
-                ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
-
-                send(ApprovalDirectoryPanel.this, Broadcast.EXACT, editItemActionEvent);
-            }
-
-            @Override
-            protected boolean statusCondition(final UserRequestForm modelObject) {
-                return SyncopeConsoleSession.get().getSelfTO().getUsername().
-                        equals(model.getObject().getOwner());
-            }
-
-        }, ActionLink.ActionType.EDIT_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
-
-        return panel;
-    }
-
-    @Override
-    protected ApprovalProvider dataProvider() {
-        return new ApprovalProvider(rows);
-    }
-
-    @Override
-    protected String paginatorRowsKey() {
-        return Constants.PREF_WORKFLOW_FORM_PAGINATOR_ROWS;
-    }
-
-    public static class ApprovalProvider extends DirectoryDataProvider<UserRequestForm> {
-
-        private static final long serialVersionUID = -2311716167583335852L;
-
-        private final UserRequestRestClient restClient = new UserRequestRestClient();
-
-        public ApprovalProvider(final int paginatorRows) {
-            super(paginatorRows);
-
-            setSort("createTime", SortOrder.ASCENDING);
-        }
-
-        @Override
-        public Iterator<UserRequestForm> iterator(final long first, final long count) {
-            int page = ((int) first / paginatorRows);
-            return restClient.getForms((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
-        }
-
-        @Override
-        public long size() {
-            return restClient.countForms();
-        }
-
-        @Override
-        public IModel<UserRequestForm> model(final UserRequestForm form) {
-            return new IModel<UserRequestForm>() {
-
-                private static final long serialVersionUID = -2566070996511906708L;
-
-                @Override
-                public UserRequestForm getObject() {
-                    return form;
-                }
-            };
-        }
-    }
-
-    @Override
-    protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
-    }
-
-    private void claimForm(final String taskId) {
-        try {
-            restClient.claimForm(taskId);
-        } catch (SyncopeClientException scee) {
-            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + scee.getMessage());
-        }
-    }
-
-    private class ApprovalUserWizardBuilder extends UserWizardBuilder {
-
-        private static final long serialVersionUID = 1854981134836384069L;
-
-        private final UserRequestForm formTO;
-
-        ApprovalUserWizardBuilder(
-                final UserRequestForm formTO,
-                final UserTO previousUserTO,
-                final UserTO userTO,
-                final List<String> anyTypeClasses,
-                final UserFormLayoutInfo formLayoutInfo,
-                final PageReference pageRef) {
-
-            super(previousUserTO, userTO, anyTypeClasses, formLayoutInfo, pageRef);
-            this.formTO = formTO;
-        }
-
-        @Override
-        protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
-            UserTO inner = modelObject.getInnerObject();
-
-            UserPatch patch = AnyOperations.diff(inner, formTO.getUserTO(), false);
-
-            if (StringUtils.isNotBlank(inner.getPassword())) {
-                PasswordPatch passwordPatch = new PasswordPatch.Builder().
-                        value(inner.getPassword()).onSyncope(true).resources(inner.
-                        getResources()).
-                        build();
-                patch.setPassword(passwordPatch);
-            }
-
-            // update just if it is changed
-            ProvisioningResult<UserTO> result;
-            if (patch.isEmpty()) {
-                result = new ProvisioningResult<>();
-                result.setEntity(inner);
-            } else {
-                result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
-                restClient.getForm(result.getEntity().getKey()).ifPresent(form -> claimForm(form.getTaskId()));
-            }
-
-            return result;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
deleted file mode 100644
index 0cae1c8..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.approvals;
-
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.panels.MultilevelPanel;
-import org.apache.syncope.client.console.rest.UserRequestRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.syncope.client.console.panels.SubmitableModalPanel;
-import org.apache.syncope.client.console.panels.WizardModalPanel;
-
-public class ApprovalModal extends Panel implements SubmitableModalPanel, WizardModalPanel<UserRequestForm> {
-
-    private static final long serialVersionUID = -8847854414429745216L;
-
-    private final UserRequestRestClient restClient = new UserRequestRestClient();
-
-    private final BaseModal<?> modal;
-
-    private final UserRequestForm formTO;
-
-    private final PageReference pageRef;
-
-    public ApprovalModal(final BaseModal<?> modal, final PageReference pageRef, final UserRequestForm formTO) {
-        super(BaseModal.CONTENT_ID);
-        this.modal = modal;
-        this.formTO = formTO;
-        this.pageRef = pageRef;
-
-        MultilevelPanel mlp = new MultilevelPanel("approval");
-        mlp.setFirstLevel(new Approval(pageRef, formTO) {
-
-            private static final long serialVersionUID = -2195387360323687302L;
-
-            @Override
-            protected void viewDetails(final AjaxRequestTarget target) {
-                mlp.next(getString("approval.details"), new ApprovalDetails(pageRef, formTO), target);
-            }
-        });
-        add(mlp);
-    }
-
-    @Override
-    public void onSubmit(final AjaxRequestTarget target) {
-        this.restClient.submitForm(formTO);
-        this.modal.show(false);
-        this.modal.close(target);
-        SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-    }
-
-    @Override
-    public void onError(final AjaxRequestTarget target) {
-        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-    }
-
-    @Override
-    public UserRequestForm getItem() {
-        return this.formTO;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java
deleted file mode 100644
index 0dbc4db..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Approvals.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.pages;
-
-import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.approvals.ApprovalDirectoryPanel;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-public class Approvals extends BasePage {
-
-    private static final long serialVersionUID = -1100228004207271271L;
-
-    public Approvals(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 ApprovalDirectoryPanel("wfPanel", getPageReference()));
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
index 8062a77..a533897 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/Flowable.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.pages;
 
 import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.annotations.ExtPage;
 import org.apache.syncope.client.console.panels.BpmnProcessDirectoryPanel;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
@@ -57,11 +56,5 @@ public class Flowable extends BaseExtPage {
         MetaDataRoleAuthorizationStrategy.authorize(bpmnProcessesPanel, ENABLE, FlowableEntitlement.BPMN_PROCESS_LIST);
 
         content.add(bpmnProcessesPanel);
-
-        if (SyncopeConsoleSession.get().getPlatformInfo().getUserWorkflowAdapter().contains("Flowable")) {
-            disabled.setVisible(false);
-        } else {
-            bpmnProcessesPanel.setVisible(false);
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
new file mode 100644
index 0000000..c23e1ad
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
@@ -0,0 +1,74 @@
+/*
+ * 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 de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.panels.UserRequestFormDirectoryPanel;
+import org.apache.syncope.client.console.panels.UserRequestDirectoryPanel;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class UserRequests extends BasePage {
+
+    private static final long serialVersionUID = -1100228004207271271L;
+
+    public UserRequests(final PageParameters parameters) {
+        super(parameters);
+
+        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
+
+        WebMarkupContainer content = new WebMarkupContainer("content");
+        content.setOutputMarkupId(true);
+        content.setMarkupId("userRequests");
+        content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
+        body.add(content);
+    }
+
+    private List<ITab> buildTabList() {
+        final List<ITab> tabs = new ArrayList<>();
+
+        tabs.add(new AbstractTab(new ResourceModel("userRequestForms")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new UserRequestFormDirectoryPanel(panelId, getPageReference());
+            }
+        });
+
+        tabs.add(new AbstractTab(new ResourceModel("activeRequests")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new UserRequestDirectoryPanel(panelId, getPageReference());
+            }
+        });
+        return tabs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
new file mode 100644
index 0000000..3c043ac
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
@@ -0,0 +1,163 @@
+/*
+ * 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.panels;
+
+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.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.UserRequestDirectoryPanel.UserRequestProvider;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+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.ActionsPanel;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.UserRequest;
+import org.apache.syncope.common.lib.types.FlowableEntitlement;
+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.IModel;
+import org.apache.wicket.model.ResourceModel;
+
+public class UserRequestDirectoryPanel
+        extends DirectoryPanel<UserRequest, UserRequest, UserRequestProvider, UserRequestRestClient> {
+
+    private static final long serialVersionUID = -5346161040211617763L;
+
+    private static final String PREF_USER_REQUEST_PAGINATOR_ROWS = "userrequest.paginator.rows";
+
+    public UserRequestDirectoryPanel(final String id, final PageReference pageReference) {
+        super(id, pageReference, true);
+        disableCheckBoxes();
+        setFooterVisibility(false);
+        modal.size(Modal.Size.Large);
+
+        restClient = new UserRequestRestClient();
+
+        initResultTable();
+
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, FlowableEntitlement.USER_REQUEST_LIST);
+    }
+
+    @Override
+    protected List<IColumn<UserRequest, String>> getColumns() {
+        List<IColumn<UserRequest, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("bpmnProcess"), "bpmnProcess", "bpmnProcess"));
+        columns.add(new DatePropertyColumn<>(
+                new ResourceModel("startTime"), "startTime", "startTime"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("username"), "username"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("activityId"), "activityId"));
+
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<UserRequest> getActions(final IModel<UserRequest> model) {
+        final ActionsPanel<UserRequest> panel = super.getActions(model);
+
+        panel.add(new ActionLink<UserRequest>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequest ignore) {
+                try {
+                    restClient.cancelRequest(model.getObject().getExecutionId(), null);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                    UserRequestDirectoryPanel.this.getTogglePanel().close(target);
+                } catch (SyncopeClientException e) {
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                    LOG.error("While canceling execution {}", model.getObject().getExecutionId(), e);
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, FlowableEntitlement.USER_REQUEST_CANCEL, true);
+
+        return panel;
+    }
+
+    @Override
+    protected UserRequestProvider dataProvider() {
+        return new UserRequestProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return PREF_USER_REQUEST_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBatches() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    protected static class UserRequestProvider extends DirectoryDataProvider<UserRequest> {
+
+        private static final long serialVersionUID = -1392420250782313734L;
+
+        private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+        public UserRequestProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            setSort("startTime", SortOrder.ASCENDING);
+        }
+
+        @Override
+        public Iterator<UserRequest> iterator(final long first, final long count) {
+            int page = ((int) first / paginatorRows);
+            return restClient.getUserRequests((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
+        }
+
+        @Override
+        public long size() {
+            return restClient.countUserRequests();
+        }
+
+        @Override
+        public IModel<UserRequest> model(final UserRequest request) {
+            return new IModel<UserRequest>() {
+
+                private static final long serialVersionUID = -2566070996511906708L;
+
+                @Override
+                public UserRequest getObject() {
+                    return request;
+                }
+            };
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java
new file mode 100644
index 0000000..9c29105
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDetails.java
@@ -0,0 +1,62 @@
+/*
+ * 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.panels;
+
+import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
+import org.apache.syncope.common.lib.AnyOperations;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.wicket.PageReference;
+
+public class UserRequestFormDetails extends MultilevelPanel.SecondLevel {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    public UserRequestFormDetails(final PageReference pageRef, final UserRequestForm formTO) {
+        super(MultilevelPanel.SECOND_LEVEL_ID);
+
+        final UserTO newUserTO;
+        final UserTO previousUserTO;
+        if (formTO.getUserPatch() == null) {
+            newUserTO = formTO.getUserTO();
+            previousUserTO = null;
+        } else if (formTO.getUserTO() == null) {
+            // make it stronger by handling possible NPE
+            previousUserTO = new UserTO();
+            previousUserTO.setKey(formTO.getUserPatch().getKey());
+            newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
+        } else {
+            formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
+            newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
+            previousUserTO = formTO.getUserTO();
+        }
+
+        add(new UserWizardBuilder(
+                previousUserTO,
+                newUserTO,
+                new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
+                new UserFormLayoutInfo(),
+                pageRef).
+                build(AjaxWizard.Mode.READONLY));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
new file mode 100644
index 0000000..bf82896
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
@@ -0,0 +1,353 @@
+/*
+ * 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.panels;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+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.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+import org.apache.syncope.client.console.panels.UserRequestFormDirectoryPanel.UserRequestFormProvider;
+import org.apache.syncope.client.console.layout.FormLayoutInfoUtils;
+import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.console.widgets.UserRequestFormsWidget;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.any.AnyWrapper;
+import org.apache.syncope.client.console.wizards.any.UserWizardBuilder;
+import org.apache.syncope.common.lib.AnyOperations;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.patch.PasswordPatch;
+import org.apache.syncope.common.lib.patch.UserPatch;
+import org.apache.syncope.common.lib.to.ProvisioningResult;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.FlowableEntitlement;
+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.event.Broadcast;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+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.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+
+public class UserRequestFormDirectoryPanel
+        extends DirectoryPanel<UserRequestForm, UserRequestForm, UserRequestFormProvider, UserRequestRestClient> {
+
+    private static final long serialVersionUID = -7122136682275797903L;
+
+    private static final String PREF_USER_REQUEST_FORM_PAGINATOR_ROWS = "userrequestform.paginator.rows";
+
+    protected final BaseModal<UserRequestForm> manageFormModal = new BaseModal<UserRequestForm>("outer") {
+
+        private static final long serialVersionUID = 389935548143327858L;
+
+        @Override
+        protected void onConfigure() {
+            super.onConfigure();
+            addSubmitButton();
+            size(Modal.Size.Large);
+        }
+
+    };
+
+    public UserRequestFormDirectoryPanel(final String id, final PageReference pageReference) {
+        super(id, pageReference, true);
+        disableCheckBoxes();
+        setFooterVisibility(false);
+        modal.size(Modal.Size.Large);
+
+        addOuterObject(manageFormModal);
+
+        manageFormModal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
+
+            private static final long serialVersionUID = 8804221891699487139L;
+
+            @Override
+            public void onClose(final AjaxRequestTarget target) {
+                updateResultTable(target);
+
+                Serializable widget = SyncopeConsoleSession.get().getAttribute(UserRequestFormsWidget.class.getName());
+                if (widget instanceof UserRequestFormsWidget) {
+                    ((UserRequestFormsWidget) widget).refreshLatestAlerts(target);
+                }
+
+                manageFormModal.show(false);
+            }
+        });
+
+        restClient = new UserRequestRestClient();
+
+        initResultTable();
+
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
+    }
+
+    @Override
+    protected List<IColumn<UserRequestForm, String>> getColumns() {
+        List<IColumn<UserRequestForm, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("bpmnProcess"), "bpmnProcess", "bpmnProcess"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("key"), "formKey", "formKey"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("username"), "username"));
+        columns.add(new DatePropertyColumn<>(
+                new ResourceModel("createTime"), "createTime", "createTime"));
+        columns.add(new DatePropertyColumn<>(
+                new ResourceModel("dueDate"), "dueDate", "dueDate"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("owner"), "owner", "owner"));
+
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<UserRequestForm> getActions(final IModel<UserRequestForm> model) {
+        final ActionsPanel<UserRequestForm> panel = super.getActions(model);
+
+        panel.add(new ActionLink<UserRequestForm>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
+                claimForm(model.getObject().getTaskId());
+                SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                target.add(container);
+            }
+        }, ActionLink.ActionType.CLAIM, FlowableEntitlement.USER_REQUEST_FORM_CLAIM);
+
+        panel.add(new ActionLink<UserRequestForm>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
+                manageFormModal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
+
+                target.add(manageFormModal.setContent(new UserRequestFormModal(manageFormModal, pageRef, model.
+                        getObject()) {
+
+                    private static final long serialVersionUID = 5546519445061007248L;
+
+                    @Override
+                    public void onSubmit(final AjaxRequestTarget target) {
+                        try {
+                            super.onSubmit(target);
+
+                            UserRequestFormDirectoryPanel.this.getTogglePanel().close(target);
+                        } catch (SyncopeClientException e) {
+                            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + e.getMessage());
+                        }
+                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                    }
+
+                }));
+
+                manageFormModal.header(new Model<>(getString("form.manage", new Model<>(model.getObject()))));
+                manageFormModal.show(true);
+            }
+
+            @Override
+            protected boolean statusCondition(final UserRequestForm modelObject) {
+                return SyncopeConsoleSession.get().getSelfTO().getUsername().
+                        equals(model.getObject().getOwner());
+            }
+
+        }, ActionLink.ActionType.MANAGE_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
+
+        // SYNCOPE-1200 edit user while in approval state
+        panel.add(new ActionLink<UserRequestForm>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
+                modal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
+
+                UserRequestForm formTO = model.getObject();
+                UserTO newUserTO;
+                UserTO previousUserTO;
+                if (formTO.getUserPatch() == null) {
+                    newUserTO = formTO.getUserTO();
+                    previousUserTO = null;
+                } else if (formTO.getUserTO() == null) {
+                    // make it stronger by handling possible NPE
+                    previousUserTO = new UserTO();
+                    previousUserTO.setKey(formTO.getUserPatch().getKey());
+                    newUserTO = AnyOperations.patch(previousUserTO, formTO.getUserPatch());
+                } else {
+                    previousUserTO = formTO.getUserTO();
+                    formTO.getUserTO().setKey(formTO.getUserPatch().getKey());
+                    formTO.getUserTO().setPassword(null);
+                    newUserTO = AnyOperations.patch(formTO.getUserTO(), formTO.getUserPatch());
+                }
+
+                AjaxWizard.EditItemActionEvent<UserTO> editItemActionEvent =
+                        new AjaxWizard.EditItemActionEvent<>(newUserTO, target);
+                editItemActionEvent.forceModalPanel(new FormUserWizardBuilder(
+                        model.getObject(),
+                        previousUserTO,
+                        newUserTO,
+                        new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
+                        FormLayoutInfoUtils.fetch(Collections.singletonList(AnyTypeKind.USER.name())).getLeft(),
+                        pageRef
+                ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
+
+                send(UserRequestFormDirectoryPanel.this, Broadcast.EXACT, editItemActionEvent);
+            }
+
+            @Override
+            protected boolean statusCondition(final UserRequestForm modelObject) {
+                return SyncopeConsoleSession.get().getSelfTO().getUsername().
+                        equals(model.getObject().getOwner());
+            }
+
+        }, ActionLink.ActionType.EDIT_APPROVAL, FlowableEntitlement.USER_REQUEST_FORM_SUBMIT);
+
+        return panel;
+    }
+
+    @Override
+    protected UserRequestFormProvider dataProvider() {
+        return new UserRequestFormProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return PREF_USER_REQUEST_FORM_PAGINATOR_ROWS;
+    }
+
+    protected static class UserRequestFormProvider extends DirectoryDataProvider<UserRequestForm> {
+
+        private static final long serialVersionUID = -2311716167583335852L;
+
+        private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+        public UserRequestFormProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            setSort("createTime", SortOrder.ASCENDING);
+        }
+
+        @Override
+        public Iterator<UserRequestForm> iterator(final long first, final long count) {
+            int page = ((int) first / paginatorRows);
+            return restClient.getForms((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
+        }
+
+        @Override
+        public long size() {
+            return restClient.countForms();
+        }
+
+        @Override
+        public IModel<UserRequestForm> model(final UserRequestForm form) {
+            return new IModel<UserRequestForm>() {
+
+                private static final long serialVersionUID = -2566070996511906708L;
+
+                @Override
+                public UserRequestForm getObject() {
+                    return form;
+                }
+            };
+        }
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBatches() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    private void claimForm(final String taskId) {
+        try {
+            restClient.claimForm(taskId);
+        } catch (SyncopeClientException scee) {
+            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + scee.getMessage());
+        }
+    }
+
+    private class FormUserWizardBuilder extends UserWizardBuilder {
+
+        private static final long serialVersionUID = 1854981134836384069L;
+
+        private final UserRequestForm formTO;
+
+        FormUserWizardBuilder(
+                final UserRequestForm formTO,
+                final UserTO previousUserTO,
+                final UserTO userTO,
+                final List<String> anyTypeClasses,
+                final UserFormLayoutInfo formLayoutInfo,
+                final PageReference pageRef) {
+
+            super(previousUserTO, userTO, anyTypeClasses, formLayoutInfo, pageRef);
+            this.formTO = formTO;
+        }
+
+        @Override
+        protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
+            UserTO inner = modelObject.getInnerObject();
+
+            UserPatch patch = AnyOperations.diff(inner, formTO.getUserTO(), false);
+
+            if (StringUtils.isNotBlank(inner.getPassword())) {
+                PasswordPatch passwordPatch = new PasswordPatch.Builder().
+                        value(inner.getPassword()).onSyncope(true).resources(inner.
+                        getResources()).
+                        build();
+                patch.setPassword(passwordPatch);
+            }
+
+            // update just if it is changed
+            ProvisioningResult<UserTO> result;
+            if (patch.isEmpty()) {
+                result = new ProvisioningResult<>();
+                result.setEntity(inner);
+            } else {
+                result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+                restClient.getForm(result.getEntity().getKey()).ifPresent(form -> claimForm(form.getTaskId()));
+            }
+
+            return result;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/ff37c3f7/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java
new file mode 100644
index 0000000..07a7950
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormModal.java
@@ -0,0 +1,79 @@
+/*
+ * 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.panels;
+
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.panel.Panel;
+
+public class UserRequestFormModal extends Panel implements SubmitableModalPanel, WizardModalPanel<UserRequestForm> {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+    private final BaseModal<?> modal;
+
+    private final UserRequestForm formTO;
+
+    private final PageReference pageRef;
+
+    public UserRequestFormModal(final BaseModal<?> modal, final PageReference pageRef, final UserRequestForm formTO) {
+        super(BaseModal.CONTENT_ID);
+        this.modal = modal;
+        this.formTO = formTO;
+        this.pageRef = pageRef;
+
+        MultilevelPanel mlp = new MultilevelPanel("userRequestForm");
+        mlp.setFirstLevel(new UserRequestFormPanel(pageRef, formTO) {
+
+            private static final long serialVersionUID = -2195387360323687302L;
+
+            @Override
+            protected void viewDetails(final AjaxRequestTarget target) {
+                mlp.next(getString("userRequest.details"), new UserRequestFormDetails(pageRef, formTO), target);
+            }
+        });
+        add(mlp);
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target) {
+        this.restClient.submitForm(formTO);
+        this.modal.show(false);
+        this.modal.close(target);
+        SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target) {
+        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+    }
+
+    @Override
+    public UserRequestForm getItem() {
+        return this.formTO;
+    }
+}


[5/6] syncope git commit: [SYNCOPE-1369] Some refinements + admin console suport

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java
new file mode 100644
index 0000000..6520177
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormPanel.java
@@ -0,0 +1,200 @@
+/*
+ * 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.panels;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+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.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.AjaxDateTimeFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
+import org.apache.syncope.common.lib.to.UserRequestFormProperty;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+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.PropertyModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class UserRequestFormPanel extends Panel {
+
+    private static final long serialVersionUID = -8847854414429745216L;
+
+    protected static final Logger LOG = LoggerFactory.getLogger(UserRequestFormPanel.class);
+
+    public UserRequestFormPanel(final PageReference pageRef, final UserRequestForm form) {
+        super(MultilevelPanel.FIRST_LEVEL_ID);
+
+        IModel<List<UserRequestFormProperty>> formProps = new LoadableDetachableModel<List<UserRequestFormProperty>>() {
+
+            private static final long serialVersionUID = 3169142472626817508L;
+
+            @Override
+            protected List<UserRequestFormProperty> load() {
+                return form.getProperties();
+            }
+        };
+
+        ListView<UserRequestFormProperty> propView = new ListView<UserRequestFormProperty>("propView", formProps) {
+
+            private static final long serialVersionUID = 9101744072914090143L;
+
+            @Override
+            @SuppressWarnings({ "unchecked", "rawtypes" })
+            protected void populateItem(final ListItem<UserRequestFormProperty> item) {
+                final UserRequestFormProperty 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:
+                        FastDateFormat formatter = FastDateFormat.getInstance(prop.getDatePattern());
+                        field = new AjaxDateTimeFieldPanel("value", label, new PropertyModel<Date>(prop, "value") {
+
+                            private static final long serialVersionUID = -3743432456095828573L;
+
+                            @Override
+                            public Date getObject() {
+                                try {
+                                    return StringUtils.isBlank(prop.getValue())
+                                            ? null
+                                            : 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:
+                        field = new AjaxDropDownChoicePanel(
+                                "value", label, new PropertyModel<String>(prop, "value"), false).
+                                setChoiceRenderer(new MapChoiceRenderer(prop.getEnumValues())).
+                                setChoices(new ArrayList<>(prop.getEnumValues().keySet()));
+                        break;
+
+                    case Dropdown:
+                        field = new AjaxDropDownChoicePanel(
+                                "value", label, new PropertyModel<String>(prop, "value"), false).
+                                setChoiceRenderer(new MapChoiceRenderer(prop.getDropdownValues())).
+                                setChoices(new ArrayList<>(prop.getDropdownValues().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<>(prop, "value"), false);
+                        break;
+                }
+
+                field.setReadOnly(!prop.isWritable());
+                if (prop.isRequired()) {
+                    field.addRequiredLabel();
+                }
+
+                item.add(field);
+            }
+        };
+
+        AjaxLink<String> userDetails = new AjaxLink<String>("userDetails") {
+
+            private static final long serialVersionUID = -4804368561204623354L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                viewDetails(target);
+            }
+        };
+        MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE, StandardEntitlement.USER_READ);
+
+        boolean enabled = form.getUserTO() != null;
+        userDetails.setVisible(enabled).setEnabled(enabled);
+
+        add(propView);
+        add(userDetails);
+    }
+
+    protected abstract void viewDetails(final AjaxRequestTarget target);
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
index e3a179f..8d3b03b 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
@@ -21,8 +21,10 @@ package org.apache.syncope.client.console.rest;
 import java.util.List;
 import java.util.Optional;
 import org.apache.syncope.common.lib.to.PagedResult;
+import org.apache.syncope.common.lib.to.UserRequest;
 import org.apache.syncope.common.lib.to.UserRequestForm;
 import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
+import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import org.apache.syncope.common.rest.api.service.UserRequestService;
 
@@ -30,6 +32,22 @@ public class UserRequestRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -4785231164900813921L;
 
+    public int countUserRequests() {
+        return getService(UserRequestService.class).
+                list(new UserRequestQuery.Builder().page(1).size(1).build()).
+                getTotalCount();
+    }
+
+    public List<UserRequest> getUserRequests(final int page, final int size, final SortParam<String> sort) {
+        return getService(UserRequestService.class).
+                list(new UserRequestQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
+                getResult();
+    }
+
+    public void cancelRequest(final String executionId, final String reason) {
+        getService(UserRequestService.class).cancel(executionId, reason);
+    }
+
     public int countForms() {
         return getService(UserRequestService.class).
                 getForms(new UserRequestFormQuery.Builder().page(1).size(1).build()).

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
deleted file mode 100644
index 9a9fd2d..0000000
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.widgets;
-
-import de.agilecoders.wicket.core.markup.html.bootstrap.image.Icon;
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesomeIconTypeBuilder;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.annotations.ExtWidget;
-import org.apache.syncope.client.console.pages.Approvals;
-import org.apache.syncope.client.console.rest.UserRequestRestClient;
-import org.apache.syncope.client.console.wicket.ajax.IndicatorAjaxTimerBehavior;
-import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.syncope.common.lib.types.FlowableEntitlement;
-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.util.SortParam;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.util.ListModel;
-import org.apache.wicket.util.time.Duration;
-
-@ExtWidget(priority = 10)
-public class ApprovalsWidget extends ExtAlertWidget<UserRequestForm> {
-
-    private static final long serialVersionUID = 7667120094526529934L;
-
-    private final UserRequestRestClient restClient = new UserRequestRestClient();
-
-    private final List<UserRequestForm> lastApprovals = new ArrayList<>();
-
-    public ApprovalsWidget(final String id, final PageReference pageRef) {
-        super(id);
-        setOutputMarkupId(true);
-
-        latestAlertsList.add(new IndicatorAjaxTimerBehavior(Duration.seconds(30)) {
-
-            private static final long serialVersionUID = 7298597675929755960L;
-
-            @Override
-            protected void onTimer(final AjaxRequestTarget target) {
-                if (!latestAlerts.getObject().equals(lastApprovals)) {
-                    refreshLatestAlerts(target);
-                }
-            }
-        });
-    }
-
-    public final void refreshLatestAlerts(final AjaxRequestTarget target) {
-        latestAlerts.getObject().clear();
-        latestAlerts.getObject().addAll(lastApprovals);
-
-        int latestAlertSize = getLatestAlertsSize();
-        linkAlertsNumber.setDefaultModelObject(latestAlertSize);
-        target.add(linkAlertsNumber);
-
-        headerAlertsNumber.setDefaultModelObject(latestAlertSize);
-        target.add(headerAlertsNumber);
-
-        target.add(latestAlertsList);
-
-        lastApprovals.clear();
-        lastApprovals.addAll(latestAlerts.getObject());
-    }
-
-    @Override
-    protected int getLatestAlertsSize() {
-        return SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)
-                ? restClient.countForms()
-                : 0;
-    }
-
-    @Override
-    protected IModel<List<UserRequestForm>> getLatestAlerts() {
-        return new ListModel<UserRequestForm>() {
-
-            private static final long serialVersionUID = -2583290457773357445L;
-
-            @Override
-            public List<UserRequestForm> getObject() {
-                List<UserRequestForm> updatedApprovals;
-                if (SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)) {
-                    updatedApprovals = restClient.getForms(1, MAX_SIZE, new SortParam<>("createTime", true));
-                } else {
-                    updatedApprovals = Collections.<UserRequestForm>emptyList();
-                }
-
-                return updatedApprovals;
-            }
-        };
-    }
-
-    @Override
-    protected AbstractLink getEventsLink(final String linkid) {
-        BookmarkablePageLink<Approvals> approvals = BookmarkablePageLinkBuilder.build(linkid, Approvals.class);
-        MetaDataRoleAuthorizationStrategy.authorize(
-                approvals, WebPage.ENABLE, FlowableEntitlement.USER_REQUEST_FORM_LIST);
-        return approvals;
-    }
-
-    @Override
-    protected Icon getIcon(final String iconid) {
-        return new Icon(iconid,
-                FontAwesomeIconTypeBuilder.on(FontAwesomeIconTypeBuilder.FontAwesomeGraphic.handshake_o).build());
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
new file mode 100644
index 0000000..b445dd9
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
@@ -0,0 +1,128 @@
+/*
+ * 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 de.agilecoders.wicket.core.markup.html.bootstrap.image.Icon;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesomeIconTypeBuilder;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.annotations.ExtWidget;
+import org.apache.syncope.client.console.pages.UserRequests;
+import org.apache.syncope.client.console.rest.UserRequestRestClient;
+import org.apache.syncope.client.console.wicket.ajax.IndicatorAjaxTimerBehavior;
+import org.apache.syncope.common.lib.to.UserRequestForm;
+import org.apache.syncope.common.lib.types.FlowableEntitlement;
+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.util.SortParam;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.util.time.Duration;
+
+@ExtWidget(priority = 10)
+public class UserRequestFormsWidget extends ExtAlertWidget<UserRequestForm> {
+
+    private static final long serialVersionUID = 7667120094526529934L;
+
+    private final UserRequestRestClient restClient = new UserRequestRestClient();
+
+    private final List<UserRequestForm> lastForms = new ArrayList<>();
+
+    public UserRequestFormsWidget(final String id, final PageReference pageRef) {
+        super(id);
+        setOutputMarkupId(true);
+
+        latestAlertsList.add(new IndicatorAjaxTimerBehavior(Duration.seconds(30)) {
+
+            private static final long serialVersionUID = 7298597675929755960L;
+
+            @Override
+            protected void onTimer(final AjaxRequestTarget target) {
+                if (!latestAlerts.getObject().equals(lastForms)) {
+                    refreshLatestAlerts(target);
+                }
+            }
+        });
+    }
+
+    public final void refreshLatestAlerts(final AjaxRequestTarget target) {
+        latestAlerts.getObject().clear();
+        latestAlerts.getObject().addAll(lastForms);
+
+        int latestAlertSize = getLatestAlertsSize();
+        linkAlertsNumber.setDefaultModelObject(latestAlertSize);
+        target.add(linkAlertsNumber);
+
+        headerAlertsNumber.setDefaultModelObject(latestAlertSize);
+        target.add(headerAlertsNumber);
+
+        target.add(latestAlertsList);
+
+        lastForms.clear();
+        lastForms.addAll(latestAlerts.getObject());
+    }
+
+    @Override
+    protected int getLatestAlertsSize() {
+        return SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)
+                ? restClient.countForms()
+                : 0;
+    }
+
+    @Override
+    protected IModel<List<UserRequestForm>> getLatestAlerts() {
+        return new ListModel<UserRequestForm>() {
+
+            private static final long serialVersionUID = -2583290457773357445L;
+
+            @Override
+            public List<UserRequestForm> getObject() {
+                List<UserRequestForm> updatedForms;
+                if (SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)) {
+                    updatedForms = restClient.getForms(1, MAX_SIZE, new SortParam<>("createTime", true));
+                } else {
+                    updatedForms = Collections.<UserRequestForm>emptyList();
+                }
+
+                return updatedForms;
+            }
+        };
+    }
+
+    @Override
+    protected AbstractLink getEventsLink(final String linkid) {
+        BookmarkablePageLink<UserRequests> userRequests = BookmarkablePageLinkBuilder.build(linkid, UserRequests.class);
+        MetaDataRoleAuthorizationStrategy.authorize(
+                userRequests, WebPage.ENABLE, FlowableEntitlement.USER_REQUEST_FORM_LIST);
+        return userRequests;
+    }
+
+    @Override
+    protected Icon getIcon(final String iconid) {
+        return new Icon(iconid,
+                FontAwesomeIconTypeBuilder.on(FontAwesomeIconTypeBuilder.FontAwesomeGraphic.handshake_o).build());
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html
deleted file mode 100644
index 64805b9..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <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>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties
deleted file mode 100644
index 450ff50..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=User details
-userForm=Edit User

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html
deleted file mode 100644
index 1de2361..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalDetails.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="wizard"/>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
deleted file mode 100644
index 5d5d129..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="approval">[APPROVAL]</span>
-  </wicket:panel>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_it.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties
deleted file mode 100644
index 84106b9..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ja.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=\u627f\u8a8d\u8a73\u7d30

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_pt_BR.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties
deleted file mode 100644
index 941c896..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal_ru.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-approval.details=Approval details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties
deleted file mode 100644
index 92c475d..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_it.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=Dettagli utente
-userForm=Modifica utente

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties
deleted file mode 100644
index 5a9cc2d..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ja.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=\u30e6\u30fc\u30b6\u30fc\u8a73\u7d30
-userForm=\u30e6\u30fc\u30b6\u30fc\u3092\u7de8\u96c6

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties
deleted file mode 100644
index 00a8971..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_pt_BR.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-userDetails=Detalhes do Usu\u00e1rio
-userForm=Detalhes do Usu\u00e1rio

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties
deleted file mode 100644
index 02c159a..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/approvals/Approval_ru.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# userDetails=\u00d0\u0098\u00d0\u00bd\u00d1\u0084\u00d0\u00be\u00d1\u0080\u00d0\u00bc\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d1\u008f \u00d0\u00be \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5
-userDetails=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435
-userForm=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html
deleted file mode 100644
index 5bf6234..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <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"><wicket:message key="approvals"/></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/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties
deleted file mode 100644
index 84b9c85..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-key=Key
-description=Description
-createTime=Create Time
-dueDate=Due Date
-owner=Owner
-claim=Claim
-manage=Manage
-approvals=Approvals
-delete=Delete
-type=Type
-username=Username
-new_user=New User
-creationDate = Creation Date
-claimDate = Claim Dare
-approval.edit=Approval Edit
-approval.manage=Approval Manage
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties
deleted file mode 100644
index f25abd8..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_it.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-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.manage=Gestisci Approvazione
-approval.edit=Modifica Approvazione
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties
deleted file mode 100644
index dcca6e1..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ja.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-key=\u30ad\u30fc
-description=\u8aac\u660e
-createTime=\u4f5c\u6210\u6642\u523b
-dueDate=\u671f\u9650
-owner=\u30aa\u30fc\u30ca\u30fc
-claim=\u7533\u8acb
-manage=\u7ba1\u7406
-approvals=\u627f\u8a8d
-delete=\u524a\u9664
-type=\u30bf\u30a4\u30d7
-username=\u30e6\u30fc\u30b6\u30fc\u540d
-new_user=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc
-creationDate = \u4f5c\u6210\u65e5
-claimDate = \u7533\u8acb\u65e5
-approval.edit=\u627f\u8a8d \u7de8\u96c6
-approval.manage=\u627f\u8a8d \u7ba1\u7406
-any.edit=${anyTO.type} ${anyTO.username} \u3092\u7de8\u96c6

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties
deleted file mode 100644
index 88a9e05..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_pt_BR.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-bpmnProcess=User Request
-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\u00f5es
-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.manage=Aprova\u00e7\u00e3o
-approval.edit=Aprova\u00e7\u00e3o
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties
deleted file mode 100644
index 2e7a199..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/Approvals_ru.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# taskId=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0
-bpmnProcess=User Request
-# key=\u00d0\u0098\u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u0082\u00d0\u00b8\u00d1\u0084\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d1\u0082\u00d0\u00be\u00d1\u0080
-key=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
-# description=\u00d0\u009e\u00d0\u00bf\u00d0\u00b8\u00d1\u0081\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
-# createTime=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
-createTime=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
-# dueDate=\u00d0\u00a1\u00d1\u0080\u00d0\u00be\u00d0\u00ba
-dueDate=\u0421\u0440\u043e\u043a
-# owner=\u00d0\u0092\u00d0\u00bb\u00d0\u00b0\u00d0\u00b4\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d1\u0086
-owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
-# claim=\u00d0\u0092\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-claim=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
-# manage=\u00d0\u00a3\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-manage=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435
-# approvals=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b8
-approvals=\u0417\u0430\u044f\u0432\u043a\u0438
-# delete=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c
-delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-# type=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf
-type=\u0422\u0438\u043f
-# username=\u00d0\u0098\u00d0\u00bc\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
-username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-# new_user=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
-new_user=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-# creationDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
-creationDate=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
-# claimDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b0\u00d0\u00bb\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
-claimDate=\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f
-# approval.edit=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-approval.edit=\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
-# approval.manage=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
-approval.manage=\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
-any.edit=Edit ${anyTO.type} ${anyTO.username}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.html
new file mode 100644
index 0000000..d14949c
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.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"><wicket:message key="userRequests"/></li>
+      </ol>
+    </section>
+
+    <section class="content" wicket:id="content">
+      <div class="box">
+        <div class="box-body" wicket:id="tabbedPanel"/>
+      </div>
+    </section>
+  </wicket:extend>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties
new file mode 100644
index 0000000..9f30811
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=Key
+description=Description
+createTime=Create Time
+dueDate=Due Date
+owner=Owner
+claim=Claim
+manage=Manage
+userRequests=User Requests
+delete=Delete
+type=Type
+username=Username
+new_user=New User
+creationDate = Creation Date
+claimDate = Claim Dare
+form.edit=Edit
+form.manage=Manage
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties
new file mode 100644
index 0000000..04f5462
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_it.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=Chiave
+description=Descrizione
+createTime=Data di creazione
+dueDate=Scadenza
+owner=Esecutore
+claim=Richiedi
+manage=Gestisci
+userRequests=Richieste utente
+delete=Rimuovi
+type=Tipo
+username=Utente
+new_user=Nuovo utente
+creationDate = Data creazione
+claimDate = Data rivendicazione
+form.manage=Gestisci
+form.edit=Modifica
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Form
+activeRequests=Richieste attive
+startTime=Inizio
+activityId=Stato

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties
new file mode 100644
index 0000000..61fef13
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ja.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=\u30ad\u30fc
+description=\u8aac\u660e
+createTime=\u4f5c\u6210\u6642\u523b
+dueDate=\u671f\u9650
+owner=\u30aa\u30fc\u30ca\u30fc
+claim=\u7533\u8acb
+manage=\u7ba1\u7406
+userRequests=User Requests
+delete=\u524a\u9664
+type=\u30bf\u30a4\u30d7
+username=\u30e6\u30fc\u30b6\u30fc\u540d
+new_user=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc
+creationDate = \u4f5c\u6210\u65e5
+claimDate = \u7533\u8acb\u65e5
+form.edit=Edit
+form.manage=Manage
+any.edit=${anyTO.type} ${anyTO.username} \u3092\u7de8\u96c6
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties
new file mode 100644
index 0000000..65c43f4
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_pt_BR.properties
@@ -0,0 +1,38 @@
+# 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.
+bpmnProcess=User Request
+key=Chave
+description=Descri\u00e7\u00e3o
+createTime=Tempo de Cria\u00e7\u00e3o
+dueDate=Data acordada
+owner=Propriet\u00e1rio
+claim=Requerimento
+manage=Ger\u00eancia
+userRequests=User Requests
+delete=Excluir
+type=Tipo
+username=Usu\u00e1rio
+new_user=Novo Usu\u00e1rio
+creationDate = Data de cria\u00e7\u00e3o
+claimDate = Data de reivindica\u00e7\u00e3o
+form.manage=Manage
+form.edit=Edit
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties
new file mode 100644
index 0000000..52b454b
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/pages/UserRequests_ru.properties
@@ -0,0 +1,56 @@
+# 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=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0
+bpmnProcess=User Request
+# key=\u00d0\u0098\u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u0082\u00d0\u00b8\u00d1\u0084\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d1\u0082\u00d0\u00be\u00d1\u0080
+key=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
+# description=\u00d0\u009e\u00d0\u00bf\u00d0\u00b8\u00d1\u0081\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
+# createTime=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
+createTime=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
+# dueDate=\u00d0\u00a1\u00d1\u0080\u00d0\u00be\u00d0\u00ba
+dueDate=\u0421\u0440\u043e\u043a
+# owner=\u00d0\u0092\u00d0\u00bb\u00d0\u00b0\u00d0\u00b4\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d1\u0086
+owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
+# claim=\u00d0\u0092\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+claim=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435
+# manage=\u00d0\u00a3\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+manage=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435
+# approvals=\u00d0\u0097\u00d0\u00b0\u00d1\u008f\u00d0\u00b2\u00d0\u00ba\u00d0\u00b8
+userRequests=User Requests
+# delete=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c
+delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+# type=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf
+type=\u0422\u0438\u043f
+# username=\u00d0\u0098\u00d0\u00bc\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
+username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+# new_user=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
+new_user=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+# creationDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
+creationDate=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
+# claimDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b0\u00d0\u00bb\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
+claimDate=\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f
+# approval.edit=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+form.edit=Edit
+# approval.manage=\u00d0\u00a1\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+form.manage=Manage
+any.edit=Edit ${anyTO.type} ${anyTO.username}
+userRequestForms=Forms
+activeRequests=Active Requests
+startTime=Start
+activityId=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html
new file mode 100644
index 0000000..1de2361
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormDetails.html
@@ -0,0 +1,23 @@
+<!--
+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:panel>
+    <span wicket:id="wizard"/>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html
new file mode 100644
index 0000000..777dbd8
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.html
@@ -0,0 +1,23 @@
+<!--
+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:panel>
+    <span wicket:id="userRequestForm"></span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal.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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_it.properties
new file mode 100644
index 0000000..e68bb15
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_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.
+userRequest.details=Dettagli richiesta

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ja.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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_pt_BR.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.properties
new file mode 100644
index 0000000..b636185
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormModal_ru.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.
+userRequest.details=Request details

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html
new file mode 100644
index 0000000..64805b9
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.html
@@ -0,0 +1,31 @@
+<!--
+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: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>
+</html>


[4/6] syncope git commit: [SYNCOPE-1369] Some refinements + admin console suport

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties
new file mode 100644
index 0000000..450ff50
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=User details
+userForm=Edit User

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties
new file mode 100644
index 0000000..92c475d
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_it.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=Dettagli utente
+userForm=Modifica utente

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties
new file mode 100644
index 0000000..5a9cc2d
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ja.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=\u30e6\u30fc\u30b6\u30fc\u8a73\u7d30
+userForm=\u30e6\u30fc\u30b6\u30fc\u3092\u7de8\u96c6

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties
new file mode 100644
index 0000000..00a8971
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+userDetails=Detalhes do Usu\u00e1rio
+userForm=Detalhes do Usu\u00e1rio

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties
new file mode 100644
index 0000000..02c159a
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestFormPanel_ru.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# userDetails=\u00d0\u0098\u00d0\u00bd\u00d1\u0084\u00d0\u00be\u00d1\u0080\u00d0\u00bc\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d1\u008f \u00d0\u00be \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5
+userDetails=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435
+userForm=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties
deleted file mode 100644
index dd5b98f..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=View all approvals
-duedate=Due date
-owner=Owner
-createApproval=Create Approval
-summary=${number} pending approval(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties
deleted file mode 100644
index 7b2287e..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_it.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=Tutte le approvazioni
-duedate=Scadenza
-owner=Assegnato
-createApproval=Approvazione Creazione
-summary=${number} approvazioni pendenti

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties
deleted file mode 100644
index a6089eb..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ja.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=\u3059\u3079\u3066\u306e\u627f\u8a8d\u3092\u8868\u793a
-duedate=\u671f\u9650
-owner=\u30aa\u30fc\u30ca\u30fc
-createApproval=\u627f\u8a8d\u3092\u4f5c\u6210
-summary=${number} \u4fdd\u7559\u306e\u627f\u8a8d

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties
deleted file mode 100644
index c24f3d8..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_pt_BR.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-alerts.view.all=View all Approvals
-duedate=Due date
-owner=Owner
-createApproval=Create Approval
-summary=${number} pending approval(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties
deleted file mode 100644
index 10281ff..0000000
--- a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/ApprovalsWidget_ru.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-alerts.view.all=\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u044f\u0432\u043a\u0438
-duedate=\u0421\u0440\u043e\u043a
-owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
-createApproval=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443
-summary=\u041e\u0436\u0438\u0434\u0430\u044e\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f: ${number}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties
new file mode 100644
index 0000000..36e1e2e
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=View all forms
+duedate=Due date
+owner=Owner
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties
new file mode 100644
index 0000000..bf3e9ad
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_it.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=Tutte le form
+duedate=Scadenza
+owner=Assegnato
+summary=${number} form pendenti

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties
new file mode 100644
index 0000000..0d938e3
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ja.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=View all forms
+duedate=\u671f\u9650
+owner=\u30aa\u30fc\u30ca\u30fc
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties
new file mode 100644
index 0000000..36e1e2e
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_pt_BR.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+alerts.view.all=View all forms
+duedate=Due date
+owner=Owner
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.properties
----------------------------------------------------------------------
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.properties b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.properties
new file mode 100644
index 0000000..e713681
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/widgets/UserRequestFormsWidget_ru.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.
+#
+alerts.view.all=View all forms
+duedate=\u0421\u0440\u043e\u043a
+owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446
+summary=${number} pending form(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
----------------------------------------------------------------------
diff --git a/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java b/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
index 251eb89..9b65845 100644
--- a/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
+++ b/ext/flowable/common-lib/src/main/java/org/apache/syncope/common/lib/to/UserRequest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.common.lib.to;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 import org.apache.syncope.common.lib.AbstractBaseBean;
@@ -30,7 +31,9 @@ public class UserRequest extends AbstractBaseBean {
 
     private String bpmnProcess;
 
-    private String user;
+    private Date startTime;
+
+    private String username;
 
     private String executionId;
 
@@ -44,12 +47,20 @@ public class UserRequest extends AbstractBaseBean {
         this.bpmnProcess = bpmnProcess;
     }
 
-    public String getUser() {
-        return user;
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(final Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getUsername() {
+        return username;
     }
 
-    public void setUser(final String user) {
-        this.user = user;
+    public void setUsername(final String username) {
+        this.username = username;
     }
 
     public String getExecutionId() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
----------------------------------------------------------------------
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
index 45a834b..c1d20b1 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
@@ -62,9 +62,7 @@ import org.flowable.engine.form.TaskFormData;
 import org.flowable.engine.history.HistoricActivityInstance;
 import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
 import org.flowable.engine.impl.persistence.entity.HistoricFormPropertyEntity;
-import org.flowable.engine.runtime.NativeProcessInstanceQuery;
 import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.engine.runtime.ProcessInstanceQuery;
 import org.flowable.task.api.Task;
 import org.flowable.task.api.TaskQuery;
 import org.flowable.task.api.history.HistoricTaskInstance;
@@ -99,26 +97,28 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
     @Autowired
     protected EntityFactory entityFactory;
 
-    protected NativeProcessInstanceQuery createProcessInstanceQuery(final String userKey) {
-        return engine.getRuntimeService().createNativeProcessInstanceQuery().
-                sql("SELECT DISTINCT ID_,BUSINESS_KEY_,ACT_ID_ FROM "
-                        + engine.getManagementService().getTableName(ExecutionEntity.class)
-                        + " WHERE BUSINESS_KEY_ LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey("%", userKey) + "'"
-                        + " AND BUSINESS_KEY_ NOT LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey(FlowableRuntimeUtils.WF_PROCESS_ID, "%") + "'"
-                        + " AND PARENT_ID_ IS NULL");
+    protected StringBuilder createProcessInstanceQuery(final String userKey) {
+        StringBuilder query = new StringBuilder().
+                append("SELECT DISTINCT ID_,BUSINESS_KEY_,PROC_DEF_ID_,PROC_INST_ID_,START_TIME_ FROM ").
+                append(engine.getManagementService().getTableName(ExecutionEntity.class)).
+                append(" WHERE BUSINESS_KEY_ NOT LIKE '").
+                append(FlowableRuntimeUtils.getProcBusinessKey(FlowableRuntimeUtils.WF_PROCESS_ID, "%")).
+                append("'");
+        if (userKey != null) {
+            query.append(" AND BUSINESS_KEY_ LIKE '").
+                    append(FlowableRuntimeUtils.getProcBusinessKey("%", userKey)).
+                    append("'");
+        }
+        query.append(" AND PARENT_ID_ IS NULL");
+
+        return query;
     }
 
-    protected int countProcessInstances(final String userKey) {
+    protected int countProcessInstances(final StringBuilder processInstanceQuery) {
         return (int) engine.getRuntimeService().createNativeProcessInstanceQuery().
                 sql("SELECT COUNT(ID_) FROM "
-                        + engine.getManagementService().getTableName(ExecutionEntity.class)
-                        + " WHERE BUSINESS_KEY_ LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey("%", userKey) + "'"
-                        + " AND BUSINESS_KEY_ NOT LIKE '"
-                        + FlowableRuntimeUtils.getProcBusinessKey(FlowableRuntimeUtils.WF_PROCESS_ID, "%") + "'"
-                        + " AND PARENT_ID_ IS NULL").count();
+                        + StringUtils.substringAfter(processInstanceQuery.toString(), " FROM ")).
+                count();
     }
 
     protected UserRequest getUserRequest(final ProcessInstance procInst) {
@@ -126,9 +126,11 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
 
         UserRequest userRequest = new UserRequest();
         userRequest.setBpmnProcess(split.getLeft());
-        userRequest.setUser(split.getRight());
+        userRequest.setStartTime(procInst.getStartTime());
+        userRequest.setUsername(userDAO.find(split.getRight()).getUsername());
         userRequest.setExecutionId(procInst.getId());
-        userRequest.setActivityId(procInst.getActivityId());
+        userRequest.setActivityId(FlowableRuntimeUtils.createTaskQuery(engine, false).
+                processInstanceId(procInst.getProcessInstanceId()).singleResult().getTaskDefinitionKey());
         return userRequest;
     }
 
@@ -140,23 +142,25 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
             final int size,
             final List<OrderByClause> orderByClauses) {
 
-        Integer count = null;
-        List<UserRequest> result = null;
-        if (userKey == null) {
-            ProcessInstanceQuery query = engine.getRuntimeService().createProcessInstanceQuery().active();
+        StringBuilder query = createProcessInstanceQuery(userKey);
+        Integer count = countProcessInstances(query);
+
+        if (!orderByClauses.isEmpty()) {
+            query.append(" ORDER BY");
+
             for (OrderByClause clause : orderByClauses) {
                 boolean sorted = true;
                 switch (clause.getField().trim()) {
-                    case "processDefinitionId":
-                        query.orderByProcessDefinitionId();
+                    case "bpmnProcess":
+                        query.append(" PROC_DEF_ID_");
                         break;
 
-                    case "processDefinitionKey":
-                        query.orderByProcessDefinitionKey();
+                    case "startTime":
+                        query.append(" START_TIME_");
                         break;
 
-                    case "processInstanceId":
-                        query.orderByProcessInstanceId();
+                    case "executionId":
+                        query.append(" PROC_INST_ID_");
                         break;
 
                     default:
@@ -165,24 +169,22 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
                 }
                 if (sorted) {
                     if (clause.getDirection() == OrderByClause.Direction.ASC) {
-                        query.asc();
+                        query.append(" ASC,");
                     } else {
-                        query.desc();
+                        query.append(" DESC,");
                     }
                 }
-
-                count = (int) query.count();
-                result = query.listPage(size * (page <= 0 ? 0 : page - 1), size).stream().
-                        map(procInst -> getUserRequest(procInst)).
-                        collect(Collectors.toList());
             }
-        } else {
-            count = countProcessInstances(userKey);
-            result = createProcessInstanceQuery(userKey).listPage(size * (page <= 0 ? 0 : page - 1), size).stream().
-                    map(procInst -> getUserRequest(procInst)).
-                    collect(Collectors.toList());
+
+            query.setLength(query.length() - 1);
         }
 
+        List<UserRequest> result = engine.getRuntimeService().createNativeProcessInstanceQuery().
+                sql(query.toString()).
+                listPage(size * (page <= 0 ? 0 : page - 1), size).stream().
+                map(procInst -> getUserRequest(procInst)).
+                collect(Collectors.toList());
+
         return Pair.of(count, result);
     }
 
@@ -256,8 +258,9 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
     public void cancelByUser(final AnyDeletedEvent event) {
         if (AuthContextUtils.getDomain().equals(event.getDomain()) && event.getAnyTypeKind() == AnyTypeKind.USER) {
             String username = event.getAnyName();
-            createProcessInstanceQuery(event.getAnyKey()).list().
-                    forEach(procInst -> {
+            engine.getRuntimeService().createNativeProcessInstanceQuery().
+                    sql(createProcessInstanceQuery(event.getAnyKey()).toString()).
+                    list().forEach(procInst -> {
                         engine.getRuntimeService().deleteProcessInstance(
                                 procInst.getId(), "Cascade Delete user " + username);
                     });

http://git-wip-us.apache.org/repos/asf/syncope/blob/9d78874f/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
index ef199be..77a01ae 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
@@ -69,8 +69,8 @@ public class UserRequestITCase extends AbstractITCase {
         assertNotNull(req);
         assertEquals("directorGroupRequest", req.getBpmnProcess());
         assertNotNull(req.getExecutionId());
-        assertEquals(req.getUser(), user.getKey());
-        
+        assertEquals(req.getUsername(), user.getUsername());
+
         // check that user can see the ongoing request
         SyncopeClient client = clientFactory.create(user.getUsername(), "password123");
         PagedResult<UserRequest> requests = client.getService(UserRequestService.class).