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

[1/2] syncope git commit: [SYNCOPE-835] Type extensions working

Repository: syncope
Updated Branches:
  refs/heads/master 32726184d -> eed24866e


http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
index 72f0e33..58491a1 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
@@ -64,3 +64,4 @@ any.propagation.tasks=\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u0
 any.notification.tasks=\u0417\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f ${type} ${key}
 # notification.tasks=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \u00d0\u00be\u00d1\u0082\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00ba\u00d0\u00b8 \u00d1\u0083\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 ${key}
 notification.tasks=\u0417\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 ${key}
+typeExtensions=Type extensions for GROUP ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.properties
new file mode 100644
index 0000000..e66ad6d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.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.
+auxClasses=Auxiliary classes
+anyType=Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_it.properties
new file mode 100644
index 0000000..3600848
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_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.
+auxClasses=Classi ausiliari
+anyType=Tipo

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_pt_BR.properties
new file mode 100644
index 0000000..dc42441
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_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.
+auxClasses=Auxiliary Classes
+anyType=Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_ru.properties
new file mode 100644
index 0000000..dc42441
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel_ru.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.
+auxClasses=Auxiliary Classes
+anyType=Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.html
index 88c1067..3068967 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.html
@@ -43,7 +43,7 @@ under the License.
             <button type="button" wicket:id="button"></button>
           </wicket:fragment>
           <wicket:fragment wicket:id="inputs">
-            <button wicket:id="submit"><wicket:message key="submit"/></button>
+            <button wicket:id="submit" class="btn btn-primary"><wicket:message key="submit"/></button>
           </wicket:fragment>
         </div>
       </div>

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
index a90a790..b025ccd 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
@@ -43,6 +43,7 @@ under the License.
     <span wicket:id="panelCreate">[plus]</span>
     <span wicket:id="panelReset">[plus]</span>
     <span wicket:id="panelEdit">[plus]</span>
+    <span wicket:id="panelTypeExtensions">[plus]</span>
     <span wicket:id="panelHtmlEdit">[plus]</span>
     <span wicket:id="panelTextEdit">[plus]</span>
     <span wicket:id="panelLayoutEdit">[plus]</span>
@@ -121,6 +122,10 @@ under the License.
       <a href="#" wicket:id="editLink" class="btn"><i id="actionLink" class="glyphicon glyphicon-pencil" alt="edit icon" title="Edit"></i></a>
     </wicket:fragment>
 
+    <wicket:fragment wicket:id="fragmentTypeExtensions">
+      <a href="#" wicket:id="typeExtensionsLink" class="btn"><i id="actionLink" class="fa fa-expand" alt="typeExtensions icon" title="Type extensions"></i></a>
+    </wicket:fragment>
+
     <wicket:fragment wicket:id="fragmentHtmlEdit">
       <a href="#" wicket:id="htmlEditLink" class="btn"><i id="actionLink" class="fa fa-file-code-o" alt="html edit icon" title="HTML Edit"></i></a>
     </wicket:fragment>

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder$Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder$Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder$Details.html
new file mode 100644
index 0000000..e1744e2
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder$Details.html
@@ -0,0 +1,47 @@
+<!--
+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 class="col-xs-12">
+      <div class="box">
+        <div class="box-header">
+          <h3 class="box-title">
+            <span wicket:id="anyType.label"/>
+          </h3>
+        </div>
+        <div class="box-body">
+          <span wicket:id="anyType.component"/>
+        </div>
+      </div>
+    </div>
+
+    <div class="col-xs-12">
+      <div class="box">
+        <div class="box-header">
+          <h3 class="box-title">
+            <span wicket:id="auxClasses.label"/>
+          </h3>
+        </div>
+        <div class="box-body">
+          <span wicket:id="auxClasses.palette"/>
+        </div>
+      </div>
+    </div>
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html
index ac3ba3c..851d51b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html
@@ -17,53 +17,18 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head><title></title></head>
-  <body>
-    <wicket:panel>
-      <span wicket:id="groups">[GROUPS]</span>
-
-      <div class="col-xs-12">
-        <div class="box">
-          <div class="box-header">
-            <h3 class="box-title">
-              <wicket:message key="auxclasses.palette">AUX CLASSES</wicket:message>
-            </h3>
-          </div>
-          <div class="box-body">
-            <span wicket:id="auxClasses">[AUX]</span>
-          </div>
+  <wicket:panel>
+    <div class="col-xs-12">
+      <div class="box">
+        <div class="box-header">
+          <h3 class="box-title">
+            <wicket:message key="auxClasses.palette">AUX CLASSES</wicket:message>
+          </h3>
         </div>
-      </div>
-
-      <wicket:fragment wicket:id="groupsFragment">
-        <div class="col-xs-12">
-          <div class="box">
-            <div class="box-header">
-              <h3 class="box-title">
-                <wicket:message key="groups.palette">[GROUPS]</wicket:message>
-              </h3>
-            </div>
-            <div class="box-body">
-              <span wicket:id="groups"/>
-            </div>
-          </div>
+        <div class="box-body">
+          <span wicket:id="auxClasses">[AUX CLASSES]</span>
         </div>
-
-        <div class="col-xs-12">
-          <div class="box">
-            <div class="box-header">
-              <h3 class="box-title">
-                <wicket:message key="dyngroups.palette">[DYNAMIC GROUPS]</wicket:message>
-              </h3>
-            </div>
-            <div class="box-body">
-              <span wicket:id="dyngroups">[DYNAMIC GROUPS]</span>
-            </div>
-          </div>
-        </div>
-      </wicket:fragment>
-
-      <wicket:fragment wicket:id="emptyFragment"/>
-    </wicket:panel>
-  </body>
+      </div>
+    </div>
+  </wicket:panel>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties
index fdfe92b..56c00af 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties
@@ -14,6 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-groups.palette=Groups
-auxclasses.palette=Profile extension by auxiliary classes
-dyngroups.palette=Dynamic groups
+auxClasses.palette=Auxiliary classes

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties
index bd84c93..69fb846 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties
@@ -14,6 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-groups.palette=Gruppi
-auxclasses.palette=Estensione profilo attraverso classi ausiliarie
-dyngroups.palette=Gruppi dinamici
+auxClasses.palette=Classi ausiliarie

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties
index 120c4d6..c91f75c 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties
@@ -14,6 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-groups.palette=Grupos
-auxclasses.palette=Perfil de extens\u00e3o atrav\u00e9s de classes auxiliares
-dyngroups.palette=Grupos din\u00e2micos
+auxClasses.palette=Classes auxiliares

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_ru.properties
index 8949fec..7f39171 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_ru.properties
@@ -15,9 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# groups.palette=Группы
-groups.palette=\u0413\u0440\u0443\u043f\u043f\u044b
-# auxclasses.palette=Расширение с помощью вспомогательных классов
-auxclasses.palette=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432
-# dyngroups.palette=Динамические группы
-dyngroups.palette=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b
+auxClasses.palette=\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.html
new file mode 100644
index 0000000..653799e
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.html
@@ -0,0 +1,47 @@
+<!--
+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 class="col-xs-12">
+      <div class="box">
+        <div class="box-header">
+          <h3 class="box-title">
+            <wicket:message key="groups.palette">[GROUPS]</wicket:message>
+          </h3>
+        </div>
+        <div class="box-body">
+          <span wicket:id="groups"/>
+        </div>
+      </div>
+    </div>
+
+    <div class="col-xs-12">
+      <div class="box">
+        <div class="box-header">
+          <h3 class="box-title">
+            <wicket:message key="dyngroups.palette">[DYNAMIC GROUPS]</wicket:message>
+          </h3>
+        </div>
+        <div class="box-body">
+          <span wicket:id="dyngroups">[DYNAMIC GROUPS]</span>
+        </div>
+      </div>
+    </div>
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.properties
new file mode 100644
index 0000000..c1cf4c4
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups.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.
+groups.palette=Groups
+dyngroups.palette=Dynamic groups

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_it.properties
new file mode 100644
index 0000000..c345f38
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_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.
+groups.palette=Gruppi
+dyngroups.palette=Gruppi dinamici

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_pt_BR.properties
new file mode 100644
index 0000000..b4a0d34
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_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.
+groups.palette=Grupos
+dyngroups.palette=Grupos din\u00e2micos

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_ru.properties
new file mode 100644
index 0000000..5c696f3
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Groups_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.
+#
+# groups.palette=\u00d0\u0093\u00d1\u0080\u00d1\u0083\u00d0\u00bf\u00d0\u00bf\u00d1\u008b
+groups.palette=\u0413\u0440\u0443\u043f\u043f\u044b
+# dyngroups.palette=\u00d0\u0094\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0\u00d0\u00bc\u00d0\u00b8\u00d1\u0087\u00d0\u00b5\u00d1\u0081\u00d0\u00ba\u00d0\u00b8\u00d0\u00b5 \u00d0\u00b3\u00d1\u0080\u00d1\u0083\u00d0\u00bf\u00d0\u00bf\u00d1\u008b
+dyngroups.palette=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties
index 4d4e1d7..67c2ddb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_it.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-anyType=Oggetto
+anyType=Tipo oggetto
 objectClass=Classe
 __ACCOUNT__=ACCOUNT
 __GROUP__=GROUP

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties
index 1c58a0b..2d43ac4 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel_pt_BR.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-anyType=Objeto
+anyType=Object Type
 objectClass=Classe
 __ACCOUNT__=ACCOUNT
 __GROUP__=GROUP

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index 08bf3dc..39fbc63 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -334,6 +334,9 @@ public final class AnyOperations {
         result.setUDynMembershipCond(updated.getUDynMembershipCond());
         result.getADynMembershipConds().putAll(updated.getADynMembershipConds());
 
+        // 4. type extensions
+        result.getTypeExtensions().addAll(updated.getTypeExtensions());
+
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
index 681ce8e..2a4212f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
@@ -76,7 +76,7 @@ public class JPARealm extends AbstractGeneratedKeyEntity implements Realm {
     @Column(name = "actionClassName")
     @CollectionTable(name = "Realm_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "realm_key", referencedColumnName = "id"))
+            @JoinColumn(name = "realm_id", referencedColumnName = "id"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "realm")

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
index 2f558ff..1afb4ee 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
@@ -47,7 +47,7 @@ public class JPAPushTask extends AbstractProvisioningTask implements PushTask {
     @Column(name = "actionClassName")
     @CollectionTable(name = "PushTask_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "pushTask_key", referencedColumnName = "id"))
+            @JoinColumn(name = "pushTask_id", referencedColumnName = "id"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "pushTask")

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
index 70040e8..719fd0b 100644
--- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
+++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
@@ -72,7 +72,7 @@ public class CamelRoutesDirectoryPanel extends DirectoryPanel<
 
         this.anyTypeKind = anyTypeKind;
         setFooterVisibility(true);
-        modal.addSumbitButton();
+        modal.addSubmitButton();
         modal.size(Modal.Size.Large);
         initResultTable();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/fit/console-reference/src/test/resources/rebel.xml
----------------------------------------------------------------------
diff --git a/fit/console-reference/src/test/resources/rebel.xml b/fit/console-reference/src/test/resources/rebel.xml
index ca52ec1..9d5bc81 100644
--- a/fit/console-reference/src/test/resources/rebel.xml
+++ b/fit/console-reference/src/test/resources/rebel.xml
@@ -40,7 +40,7 @@ under the License.
       </dir>
     </link>
     <link target="/">
-      <dir name="${basedir}/../../ext/camel/client-console/target/classes/META-INF/resources">
+      <dir name="${basedir}/../../ext/camel/client-console/target/classes">
       </dir>
     </link>
   </web>


[2/2] syncope git commit: [SYNCOPE-835] Type extensions working

Posted by il...@apache.org.
[SYNCOPE-835] Type extensions working


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

Branch: refs/heads/master
Commit: eed24866ec55c8f73d91f21f2d6478cfbe808d09
Parents: 3272618
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 28 17:15:51 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 28 17:15:51 2016 +0200

----------------------------------------------------------------------
 .../approvals/ApprovalDirectoryPanel.java       |   2 +-
 .../client/console/approvals/ApprovalModal.java |   6 +-
 .../client/console/commons/Constants.java       |   2 +
 .../console/layout/AnyObjectFormLayoutInfo.java |  10 +
 .../console/layout/GroupFormLayoutInfo.java     |  10 +-
 .../console/layout/UserFormLayoutInfo.java      |  10 +
 .../MailTemplateDirectoryPanel.java             |   4 +-
 .../syncope/client/console/pages/Realms.java    |   4 +-
 .../console/panels/AnyObjectDirectoryPanel.java |   2 +-
 .../client/console/panels/DirectoryPanel.java   |   3 +-
 .../console/panels/GroupDirectoryPanel.java     |  29 ++-
 .../client/console/panels/ModalPanel.java       |   4 +-
 .../client/console/panels/ParametersPanel.java  |   2 +-
 .../console/panels/RoleDirectoryPanel.java      |   2 +-
 .../console/panels/SecurityQuestionsPanel.java  |   2 +-
 .../panels/TypeExtensionDirectoryPanel.java     | 207 +++++++++++++++++++
 .../console/panels/TypesDirectoryPanel.java     |   2 +-
 .../console/panels/UserDirectoryPanel.java      |   2 +-
 .../console/panels/WorkflowTogglePanel.java     |   4 +-
 .../search/AnySelectionDirectoryPanel.java      |   2 +-
 .../tasks/ProvisioningTaskDirectoryPanel.java   |   3 +-
 .../syncope/client/console/tasks/PullTasks.java |   6 +-
 .../console/tasks/SchedTaskDirectoryPanel.java  |   5 -
 .../console/tasks/TaskDirectoryPanel.java       |   4 +-
 .../console/topology/TopologyTogglePanel.java   |   2 +-
 .../html/repeater/data/table/ActionColumn.java  |   6 -
 .../bootstrap/buttons/PrimaryModalButton.java   |  35 ----
 .../markup/html/bootstrap/dialog/BaseModal.java |  11 +-
 .../wicket/markup/html/form/ActionLink.java     |   1 +
 .../markup/html/form/ActionLinksPanel.java      |  20 ++
 .../markup/html/form/AjaxPalettePanel.java      |   2 +-
 .../client/console/widgets/AlertWidget.java     |   2 +-
 .../console/wizards/AjaxWizardBuilder.java      |   2 +-
 .../wizards/TypeExtensionWizardBuilder.java     | 135 ++++++++++++
 .../client/console/wizards/WizardMgtPanel.java  |   2 +-
 .../console/wizards/any/AnyWizardBuilder.java   |   8 +
 .../client/console/wizards/any/AuxClasses.java  | 118 +----------
 .../client/console/wizards/any/Groups.java      | 127 ++++++++++++
 .../console/panels/DirectoryPanel.properties    |   1 +
 .../console/panels/DirectoryPanel_it.properties |   1 +
 .../panels/DirectoryPanel_pt_BR.properties      |   1 +
 .../console/panels/DirectoryPanel_ru.properties |   1 +
 .../TypeExtensionDirectoryPanel.properties      |  18 ++
 .../TypeExtensionDirectoryPanel_it.properties   |  18 ++
 ...TypeExtensionDirectoryPanel_pt_BR.properties |  18 ++
 .../TypeExtensionDirectoryPanel_ru.properties   |  18 ++
 .../markup/html/bootstrap/dialog/BaseModal.html |   2 +-
 .../markup/html/form/ActionLinksPanel.html      |   5 +
 .../TypeExtensionWizardBuilder$Details.html     |  47 +++++
 .../client/console/wizards/any/AuxClasses.html  |  59 ++----
 .../console/wizards/any/AuxClasses.properties   |   4 +-
 .../wizards/any/AuxClasses_it.properties        |   4 +-
 .../wizards/any/AuxClasses_pt_BR.properties     |   4 +-
 .../wizards/any/AuxClasses_ru.properties        |   7 +-
 .../client/console/wizards/any/Groups.html      |  47 +++++
 .../console/wizards/any/Groups.properties       |  18 ++
 .../console/wizards/any/Groups_it.properties    |  18 ++
 .../console/wizards/any/Groups_pt_BR.properties |  18 ++
 .../console/wizards/any/Groups_ru.properties    |  21 ++
 .../ResourceProvisionPanel_it.properties        |   2 +-
 .../ResourceProvisionPanel_pt_BR.properties     |   2 +-
 .../syncope/common/lib/AnyOperations.java       |   3 +
 .../core/persistence/jpa/entity/JPARealm.java   |   2 +-
 .../jpa/entity/task/JPAPushTask.java            |   2 +-
 .../panels/CamelRoutesDirectoryPanel.java       |   2 +-
 .../src/test/resources/rebel.xml                |   2 +-
 66 files changed, 870 insertions(+), 273 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
index b176205..1973cd7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
@@ -60,7 +60,7 @@ public class ApprovalDirectoryPanel
         disableCheckBoxes();
 
         setFooterVisibility(true);
-        modal.addSumbitButton();
+        modal.addSubmitButton();
         modal.size(Modal.Size.Large);
 
         restClient = new UserWorkflowRestClient();

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
index f5367cf..dc0d90b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalModal.java
@@ -62,11 +62,13 @@ public class ApprovalModal extends Panel implements ModalPanel<WorkflowFormTO> {
     public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
         try {
             new UserWorkflowRestClient().submitForm(formTO);
+
             this.modal.show(false);
             this.modal.close(target);
-            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+
+            info(getString(Constants.OPERATION_SUCCEEDED));
         } catch (SyncopeClientException e) {
-            SyncopeConsoleSession.get().error(getString(Constants.ERROR) + ": " + e.getMessage());
+            error(getString(Constants.ERROR) + ": " + e.getMessage());
         }
         SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/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 74f2ac9..141b7e5 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
@@ -120,6 +120,8 @@ public final class Constants {
 
     public static final String PREF_PUSH_TASKS_PAGINATOR_ROWS = "pushtasks.paginator.rows";
 
+    public static final String PREF_TYPE_EXTENSIONS_PAGINATOR_ROWS = "typeextensions.paginator.rows";
+
     public static final String PREF_TODO_PAGINATOR_ROWS = "todo.paginator.rows";
 
     public static final String PREF_REPORT_PAGINATOR_ROWS = "report.paginator.rows";

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java b/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java
index 211aa25..2d275c3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java
@@ -25,6 +25,8 @@ public class AnyObjectFormLayoutInfo extends AbstractAnyFormLayout<AnyObjectTO,
 
     private static final long serialVersionUID = -5573691733739618500L;
 
+    private boolean groups = true;
+
     private boolean relationships = true;
 
     @Override
@@ -32,6 +34,14 @@ public class AnyObjectFormLayoutInfo extends AbstractAnyFormLayout<AnyObjectTO,
         return AnyObjectWizardBuilder.class;
     }
 
+    public boolean isGroups() {
+        return groups;
+    }
+
+    public void setGroups(final boolean groups) {
+        this.groups = groups;
+    }
+
     public boolean isRelationships() {
         return relationships;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java b/client/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java
index 9296300..354a8d0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java
@@ -29,7 +29,7 @@ public class GroupFormLayoutInfo extends AbstractAnyFormLayout<GroupTO, GroupFor
 
     private boolean dynamicMemberships = true;
 
-    private boolean typeExtension = true;
+    private boolean typeExtensions = true;
 
     @Override
     protected Class<? extends GroupForm> getDefaultFormClass() {
@@ -52,12 +52,12 @@ public class GroupFormLayoutInfo extends AbstractAnyFormLayout<GroupTO, GroupFor
         this.dynamicMemberships = dynamicMemberships;
     }
 
-    public boolean isTypeExtension() {
-        return typeExtension;
+    public boolean isTypeExtensions() {
+        return typeExtensions;
     }
 
-    public void setTypeExtension(final boolean typeExtension) {
-        this.typeExtension = typeExtension;
+    public void setTypeExtensions(final boolean typeExtensions) {
+        this.typeExtensions = typeExtensions;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java b/client/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java
index c100143..68a67b9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java
@@ -29,6 +29,8 @@ public class UserFormLayoutInfo extends AbstractAnyFormLayout<UserTO, UserForm>
 
     private boolean roles = true;
 
+    private boolean groups = true;
+
     private boolean relationships = true;
 
     @Override
@@ -52,6 +54,14 @@ public class UserFormLayoutInfo extends AbstractAnyFormLayout<UserTO, UserForm>
         this.roles = roles;
     }
 
+    public boolean isGroups() {
+        return groups;
+    }
+
+    public void setGroups(final boolean groups) {
+        this.groups = groups;
+    }
+
     public boolean isRelationships() {
         return relationships;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
index b6fee1a..a781f4c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
@@ -67,13 +67,13 @@ public class MailTemplateDirectoryPanel
         disableCheckBoxes();
 
         modal.size(Modal.Size.Small);
-        modal.addSumbitButton();
+        modal.addSubmitButton();
         setFooterVisibility(true);
 
         addOuterObject(utilityModal);
         setWindowClosedReloadCallback(utilityModal);
         utilityModal.size(Modal.Size.Large);
-        utilityModal.addSumbitButton();
+        utilityModal.addSubmitButton();
 
         addNewItemPanelBuilder(new AbstractModalPanelBuilder<MailTemplateTO>(new MailTemplateTO(), pageRef) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
index b2e3356..94d47df 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
@@ -122,7 +122,7 @@ public class Realms extends BasePage {
                         true);
                 target.add(modal.setContent(panel));
 
-                modal.addSumbitButton();
+                modal.addSubmitButton();
                 modal.show(true);
             }
 
@@ -141,7 +141,7 @@ public class Realms extends BasePage {
                         false);
                 target.add(modal.setContent(panel));
 
-                modal.addSumbitButton();
+                modal.addSubmitButton();
                 modal.show(true);
             }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
index 67eb2e2..8969e32 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
@@ -214,7 +214,7 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO> {
                     public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
                         target.add(displayAttributeModal.setContent(new AnyObjectDisplayAttributesModalPanel<>(
                                 displayAttributeModal, page.getPageReference(), pSchemaNames, dSchemaNames, type)));
-                        displayAttributeModal.addSumbitButton();
+                        displayAttributeModal.addSubmitButton();
                         displayAttributeModal.header(new ResourceModel("any.attr.display"));
                         displayAttributeModal.show(true);
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
index bd2e3f1..4207df4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
@@ -155,6 +155,7 @@ public abstract class DirectoryPanel<
 
         altDefaultModal.size(Modal.Size.Medium);
         displayAttributeModal.size(Modal.Size.Medium);
+        displayAttributeModal.addSubmitButton();
     }
 
     protected abstract DP dataProvider();
@@ -235,7 +236,7 @@ public abstract class DirectoryPanel<
     }
 
     /**
-     * Caled before build. Override it to customize result table.
+     * Called before build. Override it to customize result table.
      *
      * @param resultTableBuilder result table builder.
      */

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index 017925c..129705b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -32,6 +33,7 @@ import org.apache.syncope.client.console.status.StatusModal;
 import org.apache.syncope.client.console.tasks.AnyPropagationTasks;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
+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.ActionLink.ActionType;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -60,8 +62,15 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
 
     private static final long serialVersionUID = -1100228004207271270L;
 
+    private final BaseModal<Serializable> typeExtensionsModal = new BaseModal<>("outer");
+
     protected GroupDirectoryPanel(final String id, final Builder builder) {
         super(id, builder);
+
+        typeExtensionsModal.size(Modal.Size.Large);
+        addOuterObject(typeExtensionsModal);
+        setWindowClosedReloadCallback(typeExtensionsModal);
+        typeExtensionsModal.addSubmitButton();
     }
 
     @Override
@@ -137,13 +146,24 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
                                 new AjaxWizard.EditItemActionEvent<>(new GroupWrapper(
                                         new GroupRestClient().read(model.getObject().getKey())), target));
                     }
-                }, ActionType.EDIT, StandardEntitlement.GROUP_READ).add(new ActionLink<GroupTO>() {
+                }, ActionType.EDIT, StandardEntitlement.GROUP_UPDATE).add(new ActionLink<GroupTO>() {
 
-                    private static final long serialVersionUID = -7978723352517770644L;
+                    private static final long serialVersionUID = 6242834621660352855L;
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
-                        final GroupTO clone = SerializationUtils.clone(model.getObject());
+                        target.add(typeExtensionsModal.setContent(new TypeExtensionDirectoryPanel(
+                                typeExtensionsModal, model.getObject(), pageRef)));
+                        typeExtensionsModal.header(new StringResourceModel("typeExtensions", model));
+                        typeExtensionsModal.show(true);
+                    }
+                }, ActionType.TYPE_EXTENSIONS, StandardEntitlement.GROUP_UPDATE).add(new ActionLink<GroupTO>() {
+
+                    private static final long serialVersionUID = 6242834621660352855L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
+                        GroupTO clone = SerializationUtils.clone(model.getObject());
                         clone.setKey(null);
                         send(GroupDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.NewItemActionEvent<>(new GroupWrapper(clone), target));
@@ -156,7 +176,6 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
                     public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
                         target.add(utilityModal.setContent(new AnyPropagationTasks(
                                 utilityModal, AnyTypeKind.GROUP, model.getObject().getKey(), pageRef)));
-
                         utilityModal.header(new StringResourceModel("any.propagation.tasks", model));
                         utilityModal.show(true);
                     }
@@ -170,7 +189,6 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
                                 new NotificationTasks(AnyTypeKind.GROUP, model.getObject().getKey(), pageRef)));
                         utilityModal.header(new StringResourceModel("any.notification.tasks", model));
                         utilityModal.show(true);
-                        target.add(utilityModal);
                     }
                 }, ActionType.NOTIFICATION_TASKS, StandardEntitlement.TASK_LIST).add(new ActionLink<GroupTO>() {
 
@@ -206,7 +224,6 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
                     public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
                         target.add(displayAttributeModal.setContent(new GroupDisplayAttributesModalPanel<>(
                                 displayAttributeModal, page.getPageReference(), pSchemaNames, dSchemaNames)));
-                        displayAttributeModal.addSumbitButton();
                         displayAttributeModal.header(new ResourceModel("any.attr.display"));
                         displayAttributeModal.show(true);
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/ModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ModalPanel.java
index 11a9f78..ef1e015 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ModalPanel.java
@@ -25,9 +25,9 @@ import org.apache.wicket.request.component.IRequestableComponent;
 
 public interface ModalPanel<T extends Serializable> extends IRequestableComponent, Serializable {
 
-    void onSubmit(final AjaxRequestTarget target, final Form<?> form);
+    void onSubmit(AjaxRequestTarget target, Form<?> form);
 
-    void onError(final AjaxRequestTarget target, final Form<?> form);
+    void onError(AjaxRequestTarget target, Form<?> form);
 
     T getItem();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
index df265fd..5c83530 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
@@ -151,7 +151,7 @@ public class ParametersPanel extends DirectoryPanel<
                             @Override
                             public void onClick(final AjaxRequestTarget target, final AttrTO ignore) {
                                 target.add(modalDetails);
-                                modalDetails.addSumbitButton();
+                                modalDetails.addSubmitButton();
                                 modalDetails.header(new StringResourceModel("any.edit"));
                                 modalDetails.setContent(
                                         new ParametersEditModalPanel(modalDetails, model.getObject(), pageRef));

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
index ba2d44b..ffccc48 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
@@ -66,7 +66,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleHandler, Role
         addOuterObject(utilityModal);
         setWindowClosedReloadCallback(utilityModal);
         utilityModal.size(Modal.Size.Large);
-        utilityModal.addSumbitButton();
+        utilityModal.addSubmitButton();
 
         MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.ROLE_CREATE);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 1735620..50ae8c9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -81,7 +81,7 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
         }, true);
 
         setFooterVisibility(true);
-        modal.addSumbitButton();
+        modal.addSubmitButton();
         modal.size(Modal.Size.Large);
         initResultTable();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
new file mode 100644
index 0000000..f2a32c2
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
@@ -0,0 +1,207 @@
+/*
+ * 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.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.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.TypeExtensionDirectoryPanel.TypeExtensionDataProvider;
+import org.apache.syncope.client.console.rest.BaseRestClient;
+import org.apache.syncope.client.console.rest.GroupRestClient;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+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.ActionLinksPanel;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.TypeExtensionWizardBuilder;
+import org.apache.syncope.common.lib.patch.GroupPatch;
+import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.TypeExtensionTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
+
+public class TypeExtensionDirectoryPanel
+        extends DirectoryPanel<TypeExtensionTO, TypeExtensionTO, TypeExtensionDataProvider, BaseRestClient>
+        implements ModalPanel<Serializable> {
+
+    private static final long serialVersionUID = -4117015319209624858L;
+
+    private final BaseModal<Serializable> baseModal;
+
+    private final GroupTO groupTO;
+
+    protected TypeExtensionDirectoryPanel(
+            final BaseModal<Serializable> baseModal,
+            final GroupTO groupTO,
+            final PageReference pageRef) {
+
+        super(BaseModal.CONTENT_ID, pageRef, false);
+
+        this.baseModal = baseModal;
+        this.groupTO = groupTO;
+
+        TypeExtensionWizardBuilder builder = new TypeExtensionWizardBuilder(
+                groupTO,
+                new TypeExtensionTO(),
+                new StringResourceModel("anyType", this).getObject(),
+                new StringResourceModel("auxClasses", this).getObject(),
+                pageRef);
+        builder.setEventSink(this);
+        this.addNewItemPanelBuilder(builder, true);
+
+        setShowResultPage(false);
+        initResultTable();
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+        GroupPatch patch = new GroupPatch();
+        patch.setKey(groupTO.getKey());
+        patch.getTypeExtensions().addAll(groupTO.getTypeExtensions());
+
+        try {
+            new GroupRestClient().update(groupTO.getETagValue(), patch);
+
+            this.baseModal.show(false);
+            this.baseModal.close(target);
+
+            info(getString(Constants.OPERATION_SUCCEEDED));
+        } catch (Exception e) {
+            LOG.error("Group update failure", e);
+            error(getString(Constants.ERROR) + ": " + e.getMessage());
+
+        }
+        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target, final Form<?> form) {
+        error(getString(Constants.OPERATION_ERROR));
+        SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
+    }
+
+    @Override
+    protected TypeExtensionDataProvider dataProvider() {
+        return new TypeExtensionDataProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_TYPE_EXTENSIONS_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected List<IColumn<TypeExtensionTO, String>> getColumns() {
+        List<IColumn<TypeExtensionTO, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<TypeExtensionTO, String>(
+                Model.of("Any Type"), "anyType", "anyType"));
+        columns.add(new PropertyColumn<TypeExtensionTO, String>(
+                new StringResourceModel("auxClasses", this, null), "auxClasses", "auxClasses"));
+
+        columns.add(new ActionColumn<TypeExtensionTO, String>(new ResourceModel("actions", "")) {
+
+            private static final long serialVersionUID = 2054811145491901166L;
+
+            @Override
+            public ActionLinksPanel<TypeExtensionTO> getActions(
+                    final String componentId, final IModel<TypeExtensionTO> model) {
+
+                final TypeExtensionTO typeExtension = model.getObject();
+
+                return ActionLinksPanel.<TypeExtensionTO>builder().add(new ActionLink<TypeExtensionTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435501L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final TypeExtensionTO ignore) {
+                        send(TypeExtensionDirectoryPanel.this, Broadcast.EXACT,
+                                new AjaxWizard.EditItemActionEvent<>(typeExtension, target));
+                    }
+                }, ActionLink.ActionType.EDIT).add(new ActionLink<TypeExtensionTO>() {
+
+                    private static final long serialVersionUID = -3722207913631435501L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final TypeExtensionTO ignore) {
+                        groupTO.getTypeExtensions().remove(
+                                groupTO.getTypeExtension(typeExtension.getAnyType()));
+                        target.add(container);
+                    }
+                }, ActionLink.ActionType.DELETE).build(componentId);
+            }
+        });
+
+        return columns;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBulkActions() {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public TypeExtensionTO getItem() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    protected class TypeExtensionDataProvider extends DirectoryDataProvider<TypeExtensionTO> {
+
+        private static final long serialVersionUID = 4533123471004692755L;
+
+        public TypeExtensionDataProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            //Default sorting
+            setSort("anyKey", SortOrder.DESCENDING);
+        }
+
+        @Override
+        public Iterator<? extends TypeExtensionTO> iterator(final long first, final long count) {
+            return groupTO.getTypeExtensions().subList((int) first, (int) (first + count)).iterator();
+        }
+
+        @Override
+        public long size() {
+            return groupTO.getTypeExtensions().size();
+        }
+
+        @Override
+        public IModel<TypeExtensionTO> model(final TypeExtensionTO object) {
+            return new CompoundPropertyModel<>(object);
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/TypesDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/TypesDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/TypesDirectoryPanel.java
index cceb1e6..4e1d53a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/TypesDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/TypesDirectoryPanel.java
@@ -32,7 +32,7 @@ public abstract class TypesDirectoryPanel<T extends AbstractBaseBean, DP extends
     public TypesDirectoryPanel(final String id, final PageReference pageRef) {
         super(id, pageRef);
         setFooterVisibility(true);
-        modal.addSumbitButton();
+        modal.addSubmitButton();
         modal.size(Modal.Size.Large);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index f918f05..4905ca5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -259,7 +259,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO> {
                                 displayAttributeModal, page.getPageReference(), pSchemaNames, dSchemaNames)));
 
                         displayAttributeModal.header(new ResourceModel("any.attr.display"));
-                        displayAttributeModal.addSumbitButton();
+                        displayAttributeModal.addSubmitButton();
                         displayAttributeModal.show(true);
                     }
                 }, ActionType.CHANGE_VIEW, StandardEntitlement.USER_READ).add(

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/WorkflowTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/WorkflowTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/WorkflowTogglePanel.java
index 88aaeb1..9c1076f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/WorkflowTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/WorkflowTogglePanel.java
@@ -23,13 +23,13 @@ import java.io.File;
 import org.apache.syncope.client.console.SyncopeConsoleApplication;
 import org.apache.syncope.client.console.pages.ActivitiModelerPopupPage;
 import org.apache.syncope.client.console.rest.WorkflowRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.buttons.PrimaryModalButton;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.link.VeilPopupSettings;
 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.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -70,7 +70,7 @@ public class WorkflowTogglePanel extends TogglePanel<String> {
         }
         activitiModeler.setEnabled(activitiModelerEnabled);
 
-        PrimaryModalButton xmlEditorSubmit = modal.addSumbitButton();
+        AjaxSubmitLink xmlEditorSubmit = modal.addSubmitButton();
         MetaDataRoleAuthorizationStrategy.authorize(xmlEditorSubmit, ENABLE, StandardEntitlement.WORKFLOW_DEF_UPDATE);
         modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
index 17b8aa0..c77598d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
@@ -145,7 +145,7 @@ public abstract class AnySelectionDirectoryPanel<T extends AnyTO> extends AnyDir
                         target.add(altDefaultModal.setContent(new AnyObjectDisplayAttributesModalPanel<>(
                                 altDefaultModal, page.getPageReference(), pSchemaNames, dSchemaNames, type)));
 
-                        altDefaultModal.addSumbitButton();
+                        altDefaultModal.addSubmitButton();
                         altDefaultModal.header(new ResourceModel("any.attr.display"));
                         altDefaultModal.show(true);
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
index 6d1554c..0c36f0a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
@@ -93,7 +94,7 @@ public abstract class ProvisioningTaskDirectoryPanel<T extends AbstractProvision
         columns.add(new PropertyColumn<T, String>(
                 new StringResourceModel("latestExecStatus", this, null), "latestExecStatus", "latestExecStatus"));
 
-        columns.add(new PropertyColumn<T, String>(
+        columns.add(new BooleanPropertyColumn<T>(
                 new StringResourceModel("active", this, null), "active", "active"));
 
         return columns;

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTasks.java
index 39540f5..120998e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PullTasks.java
@@ -32,13 +32,13 @@ public class PullTasks extends AbstractTasks {
     private static final long serialVersionUID = -4013796607157549641L;
 
     public <T extends AnyTO> PullTasks(
-            final BaseModal<?> baseModal, final PageReference pageReference, final String resource) {
+            final BaseModal<?> baseModal, final PageReference pageRef, final String resource) {
         super(BaseModal.CONTENT_ID);
 
         final MultilevelPanel mlp = new MultilevelPanel("tasks");
         add(mlp);
 
-        mlp.setFirstLevel(new PullTaskDirectoryPanel(baseModal, mlp, resource, pageReference) {
+        mlp.setFirstLevel(new PullTaskDirectoryPanel(baseModal, mlp, resource, pageRef) {
 
             private static final long serialVersionUID = -2195387360323687302L;
 
@@ -46,7 +46,7 @@ public class PullTasks extends AbstractTasks {
             protected void viewTask(final PullTaskTO taskTO, final AjaxRequestTarget target) {
                 mlp.next(
                         new StringResourceModel("task.view", this, new Model<>(taskTO)).getObject(),
-                        new TaskExecutionDetails<>(baseModal, taskTO, pageReference), target);
+                        new TaskExecutionDetails<>(baseModal, taskTO, pageRef), target);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/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 ac8f210..709205a 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
@@ -157,11 +157,6 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
             private static final long serialVersionUID = 2054811145491901166L;
 
             @Override
-            public String getCssClass() {
-                return "action";
-            }
-
-            @Override
             public ActionLinksPanel<T> getActions(
                     final String componentId, final IModel<T> model) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
index 547c27b..5484b8b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
@@ -48,7 +48,7 @@ public abstract class TaskDirectoryPanel<T extends AbstractTaskTO>
 
     private final BaseModal<?> baseModal;
 
-    protected final MultilevelPanel multiLevelPanelRef;
+    private final MultilevelPanel multiLevelPanelRef;
 
     protected TaskDirectoryPanel(
             final BaseModal<?> baseModal, final MultilevelPanel multiLevelPanelRef, final PageReference pageRef) {
@@ -79,7 +79,7 @@ public abstract class TaskDirectoryPanel<T extends AbstractTaskTO>
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
-    protected abstract void viewTask(final T taskTO, final AjaxRequestTarget target);
+    protected abstract void viewTask(T taskTO, AjaxRequestTarget target);
 
     protected abstract class TasksProvider<T extends AbstractTaskTO> extends DirectoryDataProvider<T> {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index 3ecbf11..0d2aca3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -83,7 +83,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
         provisionModal = new BaseModal<>("outer");
         provisionModal.size(Modal.Size.Large);
-        provisionModal.addSumbitButton();
+        provisionModal.addSubmitButton();
         addOuterObject(provisionModal);
 
         container = new WebMarkupContainer("container");

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
index 3118157..e1ec878 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table;
 
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
-import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.markup.repeater.Item;
@@ -43,11 +42,6 @@ public abstract class ActionColumn<T, S> extends AbstractColumn<T, S> {
     }
 
     @Override
-    public Component getHeader(final String componentId) {
-        return super.getHeader(componentId);
-    }
-
-    @Override
     public void populateItem(final Item<ICellPopulator<T>> item, final String componentId, final IModel<T> rowModel) {
         item.add(getActions(componentId, rowModel));
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java
deleted file mode 100644
index 336f85e..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java
+++ /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.
- */
-package org.apache.syncope.client.console.wicket.markup.html.bootstrap.buttons;
-
-import com.googlecode.wicket.jquery.ui.markup.html.link.AjaxSubmitLink;
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.ButtonBehavior;
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
-import org.apache.wicket.markup.html.form.Form;
-
-public class PrimaryModalButton extends AjaxSubmitLink {
-
-    private static final long serialVersionUID = -1097993976905448580L;
-
-    public PrimaryModalButton(final String id, final String name, final Form<?> form) {
-        super(id, form);
-        add(new ButtonBehavior(Buttons.Type.Primary, Buttons.Size.Medium));
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
index e49b1cf..0025f79 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
@@ -29,10 +29,10 @@ import org.apache.syncope.client.console.panels.AbstractModalPanel;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.NotificationPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.buttons.DefaultModalCloseButton;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.buttons.PrimaryModalButton;
 import org.apache.wicket.Component;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow.WindowClosedCallback;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -66,7 +66,7 @@ public class BaseModal<T extends Serializable> extends Modal<T> {
 
     private Panel content;
 
-    private PrimaryModalButton submitButton;
+    private AjaxSubmitLink submitButton;
 
     private final Form<T> form;
 
@@ -177,11 +177,10 @@ public class BaseModal<T extends Serializable> extends Modal<T> {
         }
     }
 
-    public PrimaryModalButton addSumbitButton() {
+    public AjaxSubmitLink addSubmitButton() {
+        AjaxSubmitLink submit = new AjaxSubmitLink(SUBMIT, form) {
 
-        final PrimaryModalButton submit = new PrimaryModalButton(SUBMIT, SUBMIT, form) {
-
-            private static final long serialVersionUID = -958724007591692537L;
+            private static final long serialVersionUID = -5783994974426198290L;
 
             @Override
             protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
index 3d2007d..730bf9c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
@@ -46,6 +46,7 @@ public abstract class ActionLink<T extends Serializable> implements Serializable
         CLONE("create"),
         CREATE("create"),
         EDIT("read"),
+        TYPE_EXTENSIONS("read"),
         HTML_EDIT("read"),
         TEXT_EDIT("read"),
         LAYOUT_EDIT("read"),

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
index 3d6e4ee..53cdaf0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
@@ -61,6 +61,7 @@ public final class ActionLinksPanel<T extends Serializable> extends Panel {
         super.add(new Fragment("panelClone", "emptyFragment", this));
         super.add(new Fragment("panelCreate", "emptyFragment", this));
         super.add(new Fragment("panelEdit", "emptyFragment", this));
+        super.add(new Fragment("panelTypeExtensions", "emptyFragment", this));
         super.add(new Fragment("panelHtmlEdit", "emptyFragment", this));
         super.add(new Fragment("panelTextEdit", "emptyFragment", this));
         super.add(new Fragment("panelLayoutEdit", "emptyFragment", this));
@@ -310,6 +311,25 @@ public final class ActionLinksPanel<T extends Serializable> extends Panel {
                 }.setVisible(link.isEnabled(model.getObject())));
                 break;
 
+            case TYPE_EXTENSIONS:
+                fragment = new Fragment("panelTypeExtensions", "fragmentTypeExtensions", this);
+
+                fragment.addOrReplace(new IndicatingAjaxLink<Void>("typeExtensionsLink") {
+
+                    private static final long serialVersionUID = -1876519166660008562L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        link.onClick(target, model.getObject());
+                    }
+
+                    @Override
+                    public String getAjaxIndicatorMarkupId() {
+                        return disableIndicator ? StringUtils.EMPTY : super.getAjaxIndicatorMarkupId();
+                    }
+                }.setVisible(link.isEnabled(model.getObject())));
+                break;
+
             case HTML_EDIT:
                 fragment = new Fragment("panelHtmlEdit", "fragmentHtmlEdit", this);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
index 0af6e61..b0b5e94 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
@@ -271,7 +271,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
         public abstract static class Query<T extends Serializable> implements Serializable {
 
-            private static final long serialVersionUID = 1L;
+            private static final long serialVersionUID = 3582312993557742858L;
 
             public abstract List<T> execute(final String filter);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/widgets/AlertWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/AlertWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/AlertWidget.java
index d3371cd..5b9438c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/AlertWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/AlertWidget.java
@@ -121,7 +121,7 @@ public abstract class AlertWidget<T extends Serializable> extends Panel {
     protected abstract IModel<List<T>> getLatestAlerts();
 
     protected Panel getAlertLink(final String panelid, final T alert) {
-        return new AlertLink<T>(panelid, alert);
+        return new AlertLink<>(panelid, alert);
     }
 
     protected abstract AbstractLink getEventsLink(final String linkid);

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
index c509856..9d6d76a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizardBuilder.java
@@ -80,7 +80,7 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
 
         return new AjaxWizard<T>(id, modelObject, buildModelSteps(modelObject, new WizardModel()), mode) {
 
-            private static final long serialVersionUID = 1L;
+            private static final long serialVersionUID = 7770507663760640735L;
 
             @Override
             protected void onCancelInternal() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder.java
new file mode 100644
index 0000000..b3d64ed
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/TypeExtensionWizardBuilder.java
@@ -0,0 +1,135 @@
+/*
+ * 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.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.common.lib.EntityTOUtils;
+import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.TypeExtensionTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.event.IEventSink;
+import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.ListModel;
+
+public class TypeExtensionWizardBuilder extends AjaxWizardBuilder<TypeExtensionTO> {
+
+    private static final long serialVersionUID = -7185214439144835423L;
+
+    private final GroupTO groupTO;
+
+    private final String anyTypeLabel;
+
+    private final String auxClassesLabel;
+
+    public TypeExtensionWizardBuilder(
+            final GroupTO groupTO,
+            final TypeExtensionTO defaultItem,
+            final String anyTypeLabel,
+            final String auxClassesLabel,
+            final PageReference pageRef) {
+
+        super(defaultItem, pageRef);
+
+        this.groupTO = groupTO;
+        this.anyTypeLabel = anyTypeLabel;
+        this.auxClassesLabel = auxClassesLabel;
+    }
+
+    public void setEventSink(final IEventSink eventSink) {
+        this.eventSink = eventSink;
+    }
+
+    @Override
+    protected WizardModel buildModelSteps(final TypeExtensionTO modelObject, final WizardModel wizardModel) {
+        wizardModel.add(new Details(modelObject.getAnyType()));
+        return wizardModel;
+    }
+
+    @Override
+    protected void onCancelInternal(final TypeExtensionTO modelObject) {
+        this.groupTO.getTypeExtensions().remove(modelObject);
+    }
+
+    public class Details extends WizardStep {
+
+        private static final long serialVersionUID = 6472869166547883903L;
+
+        public Details(final String anyType) {
+            super();
+            setOutputMarkupId(true);
+
+            TypeExtensionTO typeExtensionTO;
+            if (groupTO.getTypeExtension(anyType) == null) {
+                typeExtensionTO = new TypeExtensionTO();
+                typeExtensionTO.setAnyType(anyType);
+                groupTO.getTypeExtensions().add(typeExtensionTO);
+            } else {
+                typeExtensionTO = groupTO.getTypeExtension(anyType);
+            }
+
+            add(new Label("anyType.label", anyTypeLabel));
+
+            if (typeExtensionTO.getAnyType() == null) {
+                List<String> anyTypes = CollectionUtils.collect(new AnyTypeRestClient().list(),
+                        EntityTOUtils.keyTransformer(), new ArrayList<String>());
+                anyTypes.remove(AnyTypeKind.GROUP.name());
+                CollectionUtils.filter(anyTypes, new Predicate<String>() {
+
+                    @Override
+                    public boolean evaluate(final String anyType) {
+                        return groupTO.getTypeExtension(anyType) == null;
+                    }
+                });
+
+                AjaxDropDownChoicePanel<String> anyTypeComponent = new AjaxDropDownChoicePanel<>(
+                        "anyType.component", "anyType", new PropertyModel<String>(typeExtensionTO, "anyType"));
+                anyTypeComponent.setChoices(anyTypes);
+                anyTypeComponent.addRequiredLabel();
+                add(anyTypeComponent.hideLabel().setOutputMarkupId(true));
+            } else {
+                AjaxTextFieldPanel anyTypeComponent = new AjaxTextFieldPanel(
+                        "anyType.component", "anyType", new PropertyModel<String>(typeExtensionTO, "anyType"));
+                anyTypeComponent.setEnabled(false);
+                add(anyTypeComponent.hideLabel());
+            }
+
+            add(new Label("auxClasses.label", auxClassesLabel));
+
+            List<String> anyTypeClasses = CollectionUtils.collect(new AnyTypeClassRestClient().list(),
+                    EntityTOUtils.keyTransformer(), new ArrayList<String>());
+            AjaxPalettePanel<String> auxClassesPalette = new AjaxPalettePanel.Builder<String>().build(
+                    "auxClasses.palette",
+                    new PropertyModel<List<String>>(typeExtensionTO, "auxClasses"),
+                    new ListModel<>(anyTypeClasses));
+            add(auxClassesPalette.hideLabel().setOutputMarkupId(true));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
index 144e2f4..42d98b1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
@@ -111,7 +111,7 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
 
         addAjaxLink = new AjaxLink<T>("add") {
 
-            private static final long serialVersionUID = 1L;
+            private static final long serialVersionUID = -7978723352517770644L;
 
             @Override
             public void onClick(final AjaxRequestTarget target) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
index c387cea..3d86030 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
@@ -106,6 +106,14 @@ public abstract class AnyWizardBuilder<A extends AnyTO> extends AjaxWizardBuilde
             wizardModel.add(new AuxClasses(modelObject.getInnerObject(), anyTypeClasses));
         }
 
+        if (formLayoutInfo instanceof UserFormLayoutInfo
+                && UserFormLayoutInfo.class.cast(formLayoutInfo).isGroups()
+                || formLayoutInfo instanceof AnyObjectFormLayoutInfo
+                && AnyObjectFormLayoutInfo.class.cast(formLayoutInfo).isGroups()) {
+
+            wizardModel.add(new Groups(modelObject.getInnerObject()));
+        }
+
         // attributes panel steps
         if (formLayoutInfo.isPlainAttrs()) {
             wizardModel.add(new PlainAttrs(

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
index b70a1c0..744c159 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
@@ -19,24 +19,12 @@
 package org.apache.syncope.client.console.wizards.any;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
-import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
-import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
-import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.syncope.common.lib.to.GroupableTO;
-import org.apache.syncope.common.lib.to.MembershipTO;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import org.apache.wicket.extensions.wizard.WizardStep;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.markup.html.panel.Fragment;
-import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.util.ListModel;
 
@@ -44,112 +32,20 @@ public class AuxClasses extends WizardStep {
 
     private static final long serialVersionUID = 552437609667518888L;
 
-    private final GroupRestClient groupRestClient = new GroupRestClient();
+    public <T extends AnyTO> AuxClasses(final T anyTO, final List<String> anyTypeClasses) {
+        super();
+        setOutputMarkupId(true);
 
-    public <T extends AnyTO> AuxClasses(final T entityTO, final List<String> anyTypeClasses) {
-        this.setOutputMarkupId(true);
+        List<AnyTypeClassTO> allAnyTypeClasses = new AnyTypeClassRestClient().list();
 
-        final Fragment fragment;
-        if (entityTO instanceof GroupTO) {
-            fragment = new Fragment("groups", "emptyFragment", this);
-        } else {
-            fragment = new Fragment("groups", "groupsFragment", this);
-
-            final List<MembershipTO> memberships;
-            final List<String> dyngroups;
-
-            if (entityTO instanceof GroupableTO) {
-                memberships = GroupableTO.class.cast(entityTO).getMemberships();
-                dyngroups = GroupableTO.class.cast(entityTO).getDynGroups();
-            } else {
-                memberships = Collections.<MembershipTO>emptyList();
-                dyngroups = Collections.<String>emptyList();
-            }
-
-            final AjaxPalettePanel.Builder<MembershipTO> builder = new AjaxPalettePanel.Builder<MembershipTO>().
-                    setRenderer(new IChoiceRenderer<MembershipTO>() {
-
-                        private static final long serialVersionUID = -3086661086073628855L;
-
-                        @Override
-                        public Object getDisplayValue(final MembershipTO object) {
-                            return object.getGroupName();
-                        }
-
-                        @Override
-                        public String getIdValue(final MembershipTO object, final int index) {
-                            return object.getGroupName();
-                        }
-
-                        @Override
-                        public MembershipTO getObject(
-                                final String id, final IModel<? extends List<? extends MembershipTO>> choices) {
-                            for (MembershipTO membershipTO : choices.getObject()) {
-                                if (id.equalsIgnoreCase(membershipTO.getGroupName())) {
-                                    return membershipTO;
-                                }
-                            }
-                            return null;
-                        }
-                    });
-
-            fragment.add(builder.setAllowOrder(true).withFilter().build(
-                    "groups", new ListModel<>(memberships),
-                    new AjaxPalettePanel.Builder.Query<MembershipTO>() {
-
-                private static final long serialVersionUID = -7223078772249308813L;
-
-                @Override
-                public List<MembershipTO> execute(final String filter) {
-                    return CollectionUtils.collect(
-                            groupRestClient.search(
-                                    entityTO.getRealm(),
-                                    SyncopeClient.getGroupSearchConditionBuilder().
-                                    isAssignable().and().is("name").equalTo(filter).query(),
-                                    -1, -1,
-                                    new SortParam<>("name", true),
-                                    null),
-                            new Transformer<GroupTO, MembershipTO>() {
-
-                        @Override
-                        public MembershipTO transform(final GroupTO input) {
-                            final MembershipTO membershipTO = new MembershipTO();
-                            membershipTO.setGroupName(input.getName());
-                            membershipTO.setRightKey(input.getKey() == null ? null : input.getKey());
-                            membershipTO.setRightType(input.getType());
-                            membershipTO.setLeftKey(entityTO.getKey() == null ? null : entityTO.getKey());
-                            membershipTO.setLeftType(entityTO.getType());
-                            return membershipTO;
-                        }
-                    }, new ArrayList<MembershipTO>());
-                }
-            }).hideLabel().setOutputMarkupId(true));
-
-            List<String> dynamics = CollectionUtils.collect(dyngroups, new Transformer<String, String>() {
-
-                @Override
-                public String transform(final String input) {
-                    final GroupTO groupTO = groupRestClient.read(input);
-                    return String.format("[%s] %s", groupTO.getKey(), groupTO.getName());
-                }
-            }, new ArrayList<String>());
-
-            fragment.add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build(
-                    "dyngroups",
-                    new ListModel<>(dynamics),
-                    new ListModel<>(dynamics)).hideLabel().setEnabled(false).setOutputMarkupId(true));
-        }
-        add(fragment);
-
-        final List<String> choices = new ArrayList<>();
-        for (AnyTypeClassTO aux : new AnyTypeClassRestClient().list()) {
+        List<String> choices = new ArrayList<>();
+        for (AnyTypeClassTO aux : allAnyTypeClasses) {
             if (!anyTypeClasses.contains(aux.getKey())) {
                 choices.add(aux.getKey());
             }
         }
-
         add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build("auxClasses",
-                new PropertyModel<List<String>>(entityTO, "auxClasses"),
+                new PropertyModel<List<String>>(anyTO, "auxClasses"),
                 new ListModel<>(choices)).hideLabel().setOutputMarkupId(true));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
new file mode 100644
index 0000000..5766db7
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -0,0 +1,127 @@
+/*
+ * 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.wizards.any;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
+import org.apache.syncope.client.console.rest.GroupRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
+import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.GroupableTO;
+import org.apache.syncope.common.lib.to.MembershipTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.util.lang.Args;
+
+public class Groups extends WizardStep {
+
+    private static final long serialVersionUID = 552437609667518888L;
+
+    private final GroupRestClient groupRestClient = new GroupRestClient();
+
+    public <T extends AnyTO> Groups(final T anyTO) {
+        super();
+        setOutputMarkupId(true);
+
+        Args.isTrue((anyTO instanceof UserTO) || (anyTO instanceof AnyObjectTO), "Expected user or anyObject");
+
+        AjaxPalettePanel.Builder<MembershipTO> builder = new AjaxPalettePanel.Builder<MembershipTO>().
+                setRenderer(new IChoiceRenderer<MembershipTO>() {
+
+                    private static final long serialVersionUID = -3086661086073628855L;
+
+                    @Override
+                    public Object getDisplayValue(final MembershipTO object) {
+                        return object.getGroupName();
+                    }
+
+                    @Override
+                    public String getIdValue(final MembershipTO object, final int index) {
+                        return object.getGroupName();
+                    }
+
+                    @Override
+                    public MembershipTO getObject(
+                            final String id, final IModel<? extends List<? extends MembershipTO>> choices) {
+                        for (MembershipTO membershipTO : choices.getObject()) {
+                            if (id.equalsIgnoreCase(membershipTO.getGroupName())) {
+                                return membershipTO;
+                            }
+                        }
+                        return null;
+                    }
+                });
+
+        add(builder.setAllowOrder(true).withFilter().build(
+                "groups", new ListModel<>(GroupableTO.class.cast(anyTO).getMemberships()),
+                new AjaxPalettePanel.Builder.Query<MembershipTO>() {
+
+            private static final long serialVersionUID = -7223078772249308813L;
+
+            @Override
+            public List<MembershipTO> execute(final String filter) {
+                return CollectionUtils.collect(
+                        groupRestClient.search(
+                                anyTO.getRealm(),
+                                SyncopeClient.getGroupSearchConditionBuilder().
+                                isAssignable().and().is("name").equalTo(filter).query(),
+                                -1, -1,
+                                new SortParam<>("name", true),
+                                null),
+                        new Transformer<GroupTO, MembershipTO>() {
+
+                    @Override
+                    public MembershipTO transform(final GroupTO input) {
+                        final MembershipTO membershipTO = new MembershipTO();
+                        membershipTO.setGroupName(input.getName());
+                        membershipTO.setRightKey(input.getKey() == null ? null : input.getKey());
+                        membershipTO.setRightType(input.getType());
+                        membershipTO.setLeftKey(anyTO.getKey() == null ? null : anyTO.getKey());
+                        membershipTO.setLeftType(anyTO.getType());
+                        return membershipTO;
+                    }
+                }, new ArrayList<MembershipTO>());
+            }
+        }).hideLabel().setOutputMarkupId(true));
+
+        List<String> dynamics = CollectionUtils.collect(GroupableTO.class.cast(anyTO).getDynGroups(),
+                new Transformer<String, String>() {
+
+            @Override
+            public String transform(final String input) {
+                final GroupTO groupTO = groupRestClient.read(input);
+                return String.format("[%s] %s", groupTO.getKey(), groupTO.getName());
+            }
+        }, new ArrayList<String>());
+
+        add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build(
+                "dyngroups",
+                new ListModel<>(dynamics),
+                new ListModel<>(dynamics)).hideLabel().setEnabled(false).setOutputMarkupId(true));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
index 6f9dee9..6164282 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
@@ -41,3 +41,4 @@ any.propagation.tasks=Propagation tasks for ${type} ${key}
 any.notification.tasks=Notification tasks for ${type} ${key}
 notification.tasks=Tasks about notification ${key}
 
+typeExtensions=Type extensions for GROUP ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
index 1087e6c..10cc7ec 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
@@ -40,3 +40,4 @@ bulk.action=Operazioni di gruppo
 any.propagation.tasks=Task di propagazione per ${type} ${key}
 any.notification.tasks=Task di notifica per ${type} ${key}
 notification.tasks=Task relativi alla notifica ${key}
+typeExtensions=Type extensions per GROUP ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/eed24866/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
index 4f013dd..dff561e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
@@ -40,3 +40,4 @@ bulk.action=A\u00e7\u00e3o Composta
 any.propagation.tasks=Propagation tasks for ${type} ${key}
 any.notification.tasks=Notification tasks for ${type} ${key}
 notification.tasks=Tasks about notification ${key}
+typeExtensions=Type extensions for GROUP ${key}