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 2019/05/07 13:52:47 UTC

[syncope] branch master updated: [SYNCOPE-1459] Adding console view

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 9b11510  [SYNCOPE-1459] Adding console view
9b11510 is described below

commit 9b115109b940470e6f1c183e0bd602b9d73ed9d1
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Tue May 7 15:52:32 2019 +0200

    [SYNCOPE-1459] Adding console view
---
 .../client/console/commons/IdMConstants.java       |  16 +++
 .../ConnInstanceHistoryConfDirectoryPanel.java     |   3 +-
 .../console/panels/RemediationDirectoryPanel.java  |   3 +-
 .../panels/ResourceHistoryConfDirectoryPanel.java  |   3 +-
 .../markup/html/list/ConnConfPropertyListView.java |   5 +-
 .../syncope/client/ui/commons/Constants.java       |  96 --------------
 .../client/console/commons/IdRepoConstants.java    | 106 +++++++++++++++
 .../notifications/MailTemplateDirectoryPanel.java  |   3 +-
 .../notifications/NotificationDirectoryPanel.java  |   3 +-
 .../syncope/client/console/pages/BasePage.java     |   6 +
 .../client/console/pages/NetworkServices.java      |  63 +++++++++
 .../console/panels/AccessTokenDirectoryPanel.java  |   3 +-
 .../console/panels/AnyObjectDirectoryPanel.java    |   3 +-
 .../client/console/panels/AnyTypeClassesPanel.java |   3 +-
 .../client/console/panels/AnyTypesPanel.java       |   3 +-
 .../console/panels/ApplicationDirectoryPanel.java  |   3 +-
 .../syncope/client/console/panels/ConfParam.java   |   4 -
 .../console/panels/DynRealmDirectoryPanel.java     |   3 +-
 .../client/console/panels/GroupDirectoryPanel.java |   3 +-
 .../panels/ImplementationDirectoryPanel.java       |   4 +-
 .../panels/NetworkServiceDirectoryPanel.java       | 144 +++++++++++++++++++++
 .../console/panels/ParametersDirectoryPanel.java   |   6 +-
 .../console/panels/PrivilegeDirectoryPanel.java    |   3 +-
 .../console/panels/RelationshipTypesPanel.java     |   3 +-
 .../client/console/panels/RoleDirectoryPanel.java  |   3 +-
 .../client/console/panels/SchemaTypePanel.java     |   3 +-
 .../console/panels/SecurityQuestionsPanel.java     |   3 +-
 .../panels/TypeExtensionDirectoryPanel.java        |   3 +-
 .../client/console/panels/UserDirectoryPanel.java  |   3 +-
 .../search/AnyObjectSelectionDirectoryPanel.java   |   4 +-
 .../search/GroupSelectionDirectoryPanel.java       |   4 +-
 .../panels/search/UserSelectionDirectoryPanel.java |   4 +-
 .../console/policies/PolicyDirectoryPanel.java     |   3 +-
 .../console/policies/PolicyRuleDirectoryPanel.java |   3 +-
 .../console/reports/ReportDirectoryPanel.java      |   3 +-
 .../reports/ReportTemplateDirectoryPanel.java      |   3 +-
 .../console/reports/ReportletDirectoryPanel.java   |   3 +-
 .../console/tasks/ExecutionsDirectoryPanel.java    |   3 +-
 .../tasks/NotificationTaskDirectoryPanel.java      |   3 +-
 .../tasks/PropagationTaskDirectoryPanel.java       |   3 +-
 .../console/tasks/PullTaskDirectoryPanel.java      |   4 +-
 .../console/tasks/PushTaskDirectoryPanel.java      |   4 +-
 .../console/tasks/SchedTaskDirectoryPanel.java     |   3 +-
 .../console/SyncopeWebApplication.properties       |   1 +
 .../console/SyncopeWebApplication_it.properties    |   1 +
 .../console/SyncopeWebApplication_ja.properties    |   1 +
 .../console/SyncopeWebApplication_pt_BR.properties |   1 +
 .../console/SyncopeWebApplication_ru.properties    |   1 +
 .../syncope/client/console/pages/BasePage.html     |   1 +
 .../client/console/pages/NetworkServices.html      |  36 ++++++
 .../panels/NetworkServiceDirectoryPanel.properties |  19 +++
 .../NetworkServiceDirectoryPanel_it.properties     |  19 +++
 .../NetworkServiceDirectoryPanel_ja.properties     |  19 +++
 .../NetworkServiceDirectoryPanel_pt_BR.properties  |  19 +++
 .../NetworkServiceDirectoryPanel_ru.properties     |  20 +++
 .../console/panels/BpmnProcessDirectoryPanel.java  |   4 +-
 .../apache/syncope/fit/core/KeymasterITCase.java   |  40 ++++--
 57 files changed, 582 insertions(+), 154 deletions(-)

diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMConstants.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMConstants.java
index e90960e..b5d5209 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMConstants.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMConstants.java
@@ -24,6 +24,22 @@ public final class IdMConstants {
 
     public static final String PREF_RESOURCE_STATUS_PAGINATOR_ROWS = "resource.status.paginator.rows";
 
+    public static final String PREF_CONNECTOR_HISTORY_CONF_PAGINATOR_ROWS = "connectorhistoryconf.paginator.rows";
+
+    public static final String PREF_RESOURCE_HISTORY_CONF_PAGINATOR_ROWS = "resourcehistoryconf.paginator.rows";
+
+    public static final String PREF_REMEDIATION_PAGINATOR_ROWS = "remediation.paginator.rows";
+
+    /**
+     * ConnId's GuardedString is not in the classpath.
+     */
+    public static final String GUARDED_STRING = "org.identityconnectors.common.security.GuardedString";
+
+    /**
+     * ConnId's GuardedByteArray is not in the classpath.
+     */
+    public static final String GUARDED_BYTE_ARRAY = "org.identityconnectors.common.security.GuardedByteArray";
+
     private IdMConstants() {
         // private constructor for static utility class
     }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
index be5029c..bcdb0f9 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
@@ -27,6 +27,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdMConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.ConnInstanceHistoryConfDirectoryPanel.CHConfProvider;
@@ -170,7 +171,7 @@ public abstract class ConnInstanceHistoryConfDirectoryPanel extends DirectoryPan
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_CONNECTOR_HISTORY_CONF_PAGINATOR_ROWS;
+        return IdMConstants.PREF_CONNECTOR_HISTORY_CONF_PAGINATOR_ROWS;
     }
 
     protected abstract void viewConfiguration(ConnInstanceHistoryConfTO connHistoryTO,
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
index 0abf33b..1f4b45f 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdMConstants;
 import org.apache.syncope.client.console.layout.AnyObjectFormLayoutInfo;
 import org.apache.syncope.client.console.layout.FormLayoutInfoUtils;
 import org.apache.syncope.client.console.layout.GroupFormLayoutInfo;
@@ -306,7 +307,7 @@ public class RemediationDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_REMEDIATION_PAGINATOR_ROWS;
+        return IdMConstants.PREF_REMEDIATION_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
index 156fddd..0eda8fd 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
@@ -27,6 +27,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdMConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.ResourceHistoryConfDirectoryPanel.RHConfProvider;
@@ -171,7 +172,7 @@ public abstract class ResourceHistoryConfDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_RESOURCE_HISTORY_CONF_PAGINATOR_ROWS;
+        return IdMConstants.PREF_RESOURCE_HISTORY_CONF_PAGINATOR_ROWS;
     }
 
     protected abstract void viewConfiguration(ResourceHistoryConfTO resHistoryTO,
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
index f69f375..276a92b 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
@@ -24,6 +24,7 @@ import java.io.Serializable;
 import java.util.List;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.commons.IdMConstants;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.ui.commons.markup.html.form.AbstractFieldPanel;
@@ -79,8 +80,8 @@ public class ConnConfPropertyListView extends ListView<ConnConfProperty> {
         boolean isArray = false;
 
         if (property.getSchema().isConfidential()
-                || Constants.GUARDED_STRING.equalsIgnoreCase(property.getSchema().getType())
-                || Constants.GUARDED_BYTE_ARRAY.equalsIgnoreCase(property.getSchema().getType())) {
+                || IdMConstants.GUARDED_STRING.equalsIgnoreCase(property.getSchema().getType())
+                || IdMConstants.GUARDED_BYTE_ARRAY.equalsIgnoreCase(property.getSchema().getType())) {
 
             field = new AjaxPasswordFieldPanel("panel", label, new Model<>(), false);
             ((PasswordTextField) field.getField()).setResetPassword(false);
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java
index 541b5b7..579db02 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java
@@ -79,92 +79,6 @@ public final class Constants {
 
     public static final String PARAM_PASSWORD_RESET_TOKEN = "pwdResetToken";
 
-    public static final String PREF_CONF_SCHEMA_PAGINATOR_ROWS = "conf.schema.paginator.rows";
-
-    public static final String PREF_USER_PLAIN_SCHEMA_PAGINATOR_ROWS = "user.schema.paginator.rows";
-
-    public static final String PREF_USER_DER_SCHEMA_PAGINATOR_ROWS = "user.derived.schema.paginator.rows";
-
-    public static final String PREF_USER_VIR_SCHEMA_PAGINATOR_ROWS = "user.virtual.schema.paginator.rows";
-
-    public static final String PREF_ANYTYPE_PAGINATOR_ROWS = "anytype.paginator.rows";
-
-    public static final String PREF_SECURITY_QUESTIONS_PAGINATOR_ROWS = "security.questions.paginator.rows";
-
-    public static final String PREF_PARAMETERS_PAGINATOR_ROWS = "parameters.paginator.rows";
-
-    public static final String PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS = "relationshiptype.painator.rows";
-
-    public static final String PREF_GROUP_PLAIN_SCHEMA_PAGINATOR_ROWS = "group.schema.paginator.rows";
-
-    public static final String PREF_GROUP_DER_SCHEMA_PAGINATOR_ROWS = "group.derived.schema.paginator.rows";
-
-    public static final String PREF_GROUP_VIR_SCHEMA_PAGINATOR_ROWS = "group.virtual.schema.paginator.rows";
-
-    public static final String PREF_MEMBERSHIP_PLAIN_SCHEMA_PAGINATOR_ROWS = "membership.schema.paginator.rows";
-
-    public static final String PREF_MEMBERSHIP_DER_SCHEMA_PAGINATOR_ROWS = "membership.derived.aschema.paginator.rows";
-
-    public static final String PREF_MEMBERSHIP_VIR_SCHEMA_PAGINATOR_ROWS = "membership.virtual.aschema.paginator.rows";
-
-    public static final String PREF_USERS_PAGINATOR_ROWS = "users.paginator.rows";
-
-    public static final String PREF_ANYOBJECT_PAGINATOR_ROWS = "anyobject.paginator.rows";
-
-    public static final String PREF_GROUP_PAGINATOR_ROWS = "group.paginator.rows";
-
-    public static final String PREF_CONNOBJECTS_PAGINATOR_ROWS = "connobjects.paginator.rows";
-
-    public static final String PREF_ROLE_PAGINATOR_ROWS = "role.paginator.rows";
-
-    public static final String PREF_APPLICATION_PAGINATOR_ROWS = "application.paginator.rows";
-
-    public static final String PREF_PRIVILEGE_PAGINATOR_ROWS = "privilege.paginator.rows";
-
-    public static final String PREF_DYNREALM_PAGINATOR_ROWS = "dynRealm.paginator.rows";
-
-    public static final String PREF_ACCESS_TOKEN_PAGINATOR_ROWS = "accessToken.paginator.rows";
-
-    public static final String PREF_REMEDIATION_PAGINATOR_ROWS = "remediation.paginator.rows";
-
-    public static final String PREF_NOTIFICATION_PAGINATOR_ROWS = "notification.paginator.rows";
-
-    public static final String PREF_IMPLEMENTATION_PAGINATOR_ROWS = "implementation.paginator.rows";
-
-    public static final String PREF_MAIL_TEMPLATE_PAGINATOR_ROWS = "mail.template.paginator.rows";
-
-    public static final String PREF_PROPAGATION_TASKS_PAGINATOR_ROWS = "proagationtasks.paginator.rows";
-
-    public static final String PREF_CONNECTOR_HISTORY_CONF_PAGINATOR_ROWS = "connectorhistoryconf.paginator.rows";
-
-    public static final String PREF_RESOURCE_HISTORY_CONF_PAGINATOR_ROWS = "resourcehistoryconf.paginator.rows";
-
-    public static final String PREF_REPORT_TASKS_PAGINATOR_ROWS = "report.paginator.rows";
-
-    public static final String PREF_REPORTLET_TASKS_PAGINATOR_ROWS = "reportlet.paginator.rows";
-
-    public static final String PREF_POLICY_RULE_PAGINATOR_ROWS = "policy.rules.paginator.rows";
-
-    public static final String PREF_POLICY_PAGINATOR_ROWS = "policy.paginator.rows";
-
-    public static final String PREF_TASK_EXECS_PAGINATOR_ROWS = "task.execs.paginator.rows";
-
-    public static final String PREF_NOTIFICATION_TASKS_PAGINATOR_ROWS = "notificationtasks.paginator.rows";
-
-    public static final String PREF_SCHED_TASKS_PAGINATOR_ROWS = "schedtasks.paginator.rows";
-
-    public static final String PREF_PULL_TASKS_PAGINATOR_ROWS = "pulltasks.paginator.rows";
-
-    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";
-
-    public static final String PREF_WORKFLOW_PAGINATOR_ROWS = "workflow.paginator.rows";
-
     public static final String PAGEPARAM_CREATE = "CREATE";
 
     public static final String PAGEPARAM_CURRENT_PAGE = "_current_page";
@@ -189,16 +103,6 @@ public final class Constants {
 
     public static final String NOTIFICATION_LEVEL_PARAM = "notificationLevel";
 
-    /**
-     * ConnId's GuardedString is not in the classpath.
-     */
-    public static final String GUARDED_STRING = "org.identityconnectors.common.security.GuardedString";
-
-    /**
-     * ConnId's GuardedByteArray is not in the classpath.
-     */
-    public static final String GUARDED_BYTE_ARRAY = "org.identityconnectors.common.security.GuardedByteArray";
-
     public static Component getJEXLPopover(final Component caller, final TooltipConfig.Placement placement) {
         return getJEXLPopover(caller, placement, caller.getString("jexl_ex1"), caller.getString("jexl_ex2"));
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoConstants.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoConstants.java
new file mode 100644
index 0000000..fd2819d
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoConstants.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.commons;
+
+public final class IdRepoConstants {
+
+    public static final String PREF_CONF_SCHEMA_PAGINATOR_ROWS = "conf.schema.paginator.rows";
+
+    public static final String PREF_USER_PLAIN_SCHEMA_PAGINATOR_ROWS = "user.schema.paginator.rows";
+
+    public static final String PREF_USER_DER_SCHEMA_PAGINATOR_ROWS = "user.derived.schema.paginator.rows";
+
+    public static final String PREF_USER_VIR_SCHEMA_PAGINATOR_ROWS = "user.virtual.schema.paginator.rows";
+
+    public static final String PREF_ANYTYPE_PAGINATOR_ROWS = "anytype.paginator.rows";
+
+    public static final String PREF_SECURITY_QUESTIONS_PAGINATOR_ROWS = "security.questions.paginator.rows";
+
+    public static final String PREF_PARAMETERS_PAGINATOR_ROWS = "parameters.paginator.rows";
+
+    public static final String PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS = "relationshiptype.painator.rows";
+
+    public static final String PREF_GROUP_PLAIN_SCHEMA_PAGINATOR_ROWS = "group.schema.paginator.rows";
+
+    public static final String PREF_GROUP_DER_SCHEMA_PAGINATOR_ROWS = "group.derived.schema.paginator.rows";
+
+    public static final String PREF_GROUP_VIR_SCHEMA_PAGINATOR_ROWS = "group.virtual.schema.paginator.rows";
+
+    public static final String PREF_MEMBERSHIP_PLAIN_SCHEMA_PAGINATOR_ROWS = "membership.schema.paginator.rows";
+
+    public static final String PREF_MEMBERSHIP_DER_SCHEMA_PAGINATOR_ROWS = "membership.derived.aschema.paginator.rows";
+
+    public static final String PREF_MEMBERSHIP_VIR_SCHEMA_PAGINATOR_ROWS = "membership.virtual.aschema.paginator.rows";
+
+    public static final String PREF_USERS_PAGINATOR_ROWS = "users.paginator.rows";
+
+    public static final String PREF_ANYOBJECT_PAGINATOR_ROWS = "anyobject.paginator.rows";
+
+    public static final String PREF_GROUP_PAGINATOR_ROWS = "group.paginator.rows";
+
+    public static final String PREF_CONNOBJECTS_PAGINATOR_ROWS = "connobjects.paginator.rows";
+
+    public static final String PREF_ROLE_PAGINATOR_ROWS = "role.paginator.rows";
+
+    public static final String PREF_APPLICATION_PAGINATOR_ROWS = "application.paginator.rows";
+
+    public static final String PREF_PRIVILEGE_PAGINATOR_ROWS = "privilege.paginator.rows";
+
+    public static final String PREF_DYNREALM_PAGINATOR_ROWS = "dynRealm.paginator.rows";
+
+    public static final String PREF_ACCESS_TOKEN_PAGINATOR_ROWS = "accessToken.paginator.rows";
+
+    public static final String PREF_NOTIFICATION_PAGINATOR_ROWS = "notification.paginator.rows";
+
+    public static final String PREF_IMPLEMENTATION_PAGINATOR_ROWS = "implementation.paginator.rows";
+
+    public static final String PREF_NETWORK_SERVICE_PAGINATOR_ROWS = "network.service.paginator.rows";
+
+    public static final String PREF_MAIL_TEMPLATE_PAGINATOR_ROWS = "mail.template.paginator.rows";
+
+    public static final String PREF_PROPAGATION_TASKS_PAGINATOR_ROWS = "proagationtasks.paginator.rows";
+
+    public static final String PREF_REPORT_TASKS_PAGINATOR_ROWS = "report.paginator.rows";
+
+    public static final String PREF_REPORTLET_TASKS_PAGINATOR_ROWS = "reportlet.paginator.rows";
+
+    public static final String PREF_POLICY_RULE_PAGINATOR_ROWS = "policy.rules.paginator.rows";
+
+    public static final String PREF_POLICY_PAGINATOR_ROWS = "policy.paginator.rows";
+
+    public static final String PREF_TASK_EXECS_PAGINATOR_ROWS = "task.execs.paginator.rows";
+
+    public static final String PREF_NOTIFICATION_TASKS_PAGINATOR_ROWS = "notificationtasks.paginator.rows";
+
+    public static final String PREF_SCHED_TASKS_PAGINATOR_ROWS = "schedtasks.paginator.rows";
+
+    public static final String PREF_PULL_TASKS_PAGINATOR_ROWS = "pulltasks.paginator.rows";
+
+    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";
+
+    private IdRepoConstants() {
+        // private constructor for static utility class
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
index cf0799f..f9b47cf 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.TemplateContent;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.notifications.MailTemplateDirectoryPanel.MailTemplateProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -182,7 +183,7 @@ public class MailTemplateDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_MAIL_TEMPLATE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_MAIL_TEMPLATE_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
index e3ace93..d0219ac 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
@@ -28,6 +28,7 @@ import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.notifications.NotificationDirectoryPanel.NotificationProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -157,7 +158,7 @@ public class NotificationDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_NOTIFICATION_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_NOTIFICATION_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index 71615a0..a2379a3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -222,6 +222,12 @@ public class BasePage extends BaseWebPage {
         MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.LOG_LIST);
         liContainer.add(link);
 
+        liContainer = new WebMarkupContainer(getLIContainerId("networkServices"));
+        confULContainer.add(liContainer);
+        link = BookmarkablePageLinkBuilder.build("networkServices", NetworkServices.class);
+        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.INTERNAL_STORAGE_EXPORT);
+        liContainer.add(link);
+
         liContainer = new WebMarkupContainer(getLIContainerId("types"));
         confULContainer.add(liContainer);
         link = BookmarkablePageLinkBuilder.build("types", Types.class);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java
new file mode 100644
index 0000000..c5e3460
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.pages;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.panels.NetworkServiceDirectoryPanel;
+import org.apache.syncope.common.keymaster.client.api.NetworkService;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class NetworkServices extends BasePage {
+
+    private static final long serialVersionUID = -4562707092152823781L;
+
+    public NetworkServices(final PageParameters parameters) {
+        super(parameters);
+
+        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
+
+        WebMarkupContainer content = new WebMarkupContainer("content");
+        content.setOutputMarkupId(true);
+        content.setMarkupId("networkServices");
+        content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
+        body.add(content);
+    }
+
+    private List<ITab> buildTabList() {
+        return Stream.of(NetworkService.Type.values()).
+                sorted().
+                map(type -> new AbstractTab(Model.of(type.name())) {
+
+            private static final long serialVersionUID = -5861786415855103549L;
+
+            @Override
+            public WebMarkupContainer getPanel(final String panelId) {
+                return new NetworkServiceDirectoryPanel(panelId, type, getPageReference());
+            }
+        }).collect(Collectors.toList());
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
index 17020f9..eb492b1 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
@@ -30,6 +30,7 @@ import org.apache.cxf.rs.security.jose.jws.JwsJwtCompactConsumer;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.AccessTokenDirectoryPanel.AccessTokenDataProvider;
 import org.apache.syncope.client.console.rest.AccessTokenRestClient;
@@ -76,7 +77,7 @@ public class AccessTokenDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_ACCESS_TOKEN_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_ACCESS_TOKEN_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
index 8552a4d..ac20106 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
@@ -24,6 +24,7 @@ import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeWebApplication;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.notifications.NotificationTasks;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -60,7 +61,7 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO, AnyO
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_ANYOBJECT_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_ANYOBJECT_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
index 1533a35..aa27c0d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
@@ -107,7 +108,7 @@ public class AnyTypeClassesPanel extends TypesDirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_ANYTYPE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_ANYTYPE_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
index f01623b..182246e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.rest.AnyTypeRestClient;
@@ -106,7 +107,7 @@ public class AnyTypesPanel extends TypesDirectoryPanel<AnyTypeTO, AnyTypesPanel.
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_ANYTYPE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_ANYTYPE_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
index 4e457c0..a727423 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.ApplicationDirectoryPanel.ApplicationDataProvider;
@@ -124,7 +125,7 @@ public class ApplicationDirectoryPanel extends
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_APPLICATION_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_APPLICATION_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConfParam.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConfParam.java
index 83ecbc2..d3b40fd 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConfParam.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConfParam.java
@@ -23,15 +23,11 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class ConfParam implements Serializable {
 
     private static final long serialVersionUID = -9162995157523535429L;
 
-    private static final Logger LOG = LoggerFactory.getLogger(ConfParam.class);
-
     private String schema;
 
     private final List<Serializable> values = new ArrayList<>();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
index fe5e849..85de24a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DynRealmDirectoryPanel.DynRealmDataProvider;
@@ -104,7 +105,7 @@ public class DynRealmDirectoryPanel extends
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_DYNREALM_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_DYNREALM_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index ad1e328..41736c9 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.SyncopeWebApplication;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.layout.FormLayoutInfoUtils;
 import org.apache.syncope.client.console.notifications.NotificationTasks;
@@ -173,7 +174,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_GROUP_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_GROUP_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
index 2490e6c..6ed390c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.ImplementationDirectoryPanel.ImplementationProvider;
@@ -180,7 +181,7 @@ public class ImplementationDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_IMPLEMENTATION_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_IMPLEMENTATION_PAGINATOR_ROWS;
     }
 
     @Override
@@ -226,5 +227,4 @@ public class ImplementationDirectoryPanel extends DirectoryPanel<
             };
         }
     }
-
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
new file mode 100644
index 0000000..3d3d94c
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
+import org.apache.syncope.client.console.panels.NetworkServiceDirectoryPanel.NetworkServiceProvider;
+import org.apache.syncope.client.console.rest.SyncopeRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.common.keymaster.client.api.NetworkService;
+import org.apache.syncope.common.keymaster.client.api.ServiceOps;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+public class NetworkServiceDirectoryPanel extends DirectoryPanel<
+        NetworkService, NetworkService, NetworkServiceProvider, SyncopeRestClient> {
+
+    private static final long serialVersionUID = 1868839768348072635L;
+
+    @SpringBean
+    private ServiceOps serviceOps;
+
+    private final NetworkService.Type type;
+
+    public NetworkServiceDirectoryPanel(final String id, final NetworkService.Type type, final PageReference pageRef) {
+        super(id, pageRef, true);
+        this.type = type;
+
+        NetworkService service = new NetworkService();
+        service.setType(type);
+
+        disableCheckBoxes();
+
+        modal.size(Modal.Size.Large);
+        modal.addSubmitButton();
+        modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
+
+            private static final long serialVersionUID = 8804221891699487139L;
+
+            @Override
+            public void onClose(final AjaxRequestTarget target) {
+                updateResultTable(target);
+                modal.show(false);
+            }
+        });
+        setFooterVisibility(true);
+
+        initResultTable();
+    }
+
+    @Override
+    protected List<IColumn<NetworkService, String>> getColumns() {
+        List<IColumn<NetworkService, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<>(new StringResourceModel("address", this), "address", "address"));
+
+        return columns;
+    }
+
+    @Override
+    protected ActionsPanel<NetworkService> getActions(final IModel<NetworkService> model) {
+        return super.getActions(model);
+    }
+
+    @Override
+    protected NetworkServiceProvider dataProvider() {
+        return new NetworkServiceProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return IdRepoConstants.PREF_NETWORK_SERVICE_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBatches() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    protected class NetworkServiceProvider extends DirectoryDataProvider<NetworkService> {
+
+        private static final long serialVersionUID = 8594921866993979224L;
+
+        public NetworkServiceProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            setSort("address", SortOrder.ASCENDING);
+        }
+
+        @Override
+        public Iterator<NetworkService> iterator(final long first, final long count) {
+            List<NetworkService> list = serviceOps.list(type);
+            return list.subList((int) first, (int) first + (int) count).iterator();
+        }
+
+        @Override
+        public long size() {
+            return serviceOps.list(type).size();
+        }
+
+        @Override
+        public IModel<NetworkService> model(final NetworkService service) {
+            return new IModel<NetworkService>() {
+
+                private static final long serialVersionUID = 999513782683391483L;
+
+                @Override
+                public NetworkService getObject() {
+                    return service;
+                }
+            };
+        }
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersDirectoryPanel.java
index 6f4f47d..4d03c83 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersDirectoryPanel.java
@@ -29,8 +29,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.ParametersDirectoryPanel.ParametersProvider;
 import org.apache.syncope.client.console.rest.SyncopeRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
@@ -55,7 +57,7 @@ import org.apache.wicket.model.StringResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
 public class ParametersDirectoryPanel
-        extends DirectoryPanel<ConfParam, ConfParam, ParametersDirectoryPanel.ParametersProvider, SyncopeRestClient> {
+        extends DirectoryPanel<ConfParam, ConfParam, ParametersProvider, SyncopeRestClient> {
 
     private static final long serialVersionUID = 2765863608539154422L;
 
@@ -102,7 +104,7 @@ public class ParametersDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_PARAMETERS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_PARAMETERS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
index cd9dc6d..a87dbef 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
@@ -27,6 +27,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.rest.ApplicationRestClient;
@@ -141,7 +142,7 @@ public class PrivilegeDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_PRIVILEGE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_PRIVILEGE_PAGINATOR_ROWS;
     }
 
     protected class PrivilegeDataProvider extends DirectoryDataProvider<PrivilegeTO> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
index b244c6a..71ac26c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.RelationshipTypesPanel.RelationshipTypeProvider;
@@ -109,7 +110,7 @@ public class RelationshipTypesPanel extends TypesDirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
index a424402..a15d688 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.layout.ConsoleLayoutInfo;
 import org.apache.syncope.client.console.layout.FormLayoutInfoUtils;
@@ -103,7 +104,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_ROLE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_ROLE_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index 8213dd1..fd667db 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -32,6 +32,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.SchemaTypePanel.SchemaProvider;
@@ -113,7 +114,7 @@ public class SchemaTypePanel extends TypesDirectoryPanel<SchemaTO, SchemaProvide
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_ANYTYPE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_ANYTYPE_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 0e6bb32..8b73da3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.SecurityQuestionsPanel.SecurityQuestionsProvider;
@@ -116,7 +117,7 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_SECURITY_QUESTIONS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_SECURITY_QUESTIONS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
index b0f4bb7..e32e46a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.TypeExtensionDirectoryPanel.TypeExtensionDataProvider;
 import org.apache.syncope.client.console.rest.BaseRestClient;
@@ -118,7 +119,7 @@ public class TypeExtensionDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_TYPE_EXTENSIONS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_TYPE_EXTENSIONS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index 29537a8..e2359fe 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -26,6 +26,7 @@ import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeWebApplication;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.notifications.NotificationTasks;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -80,7 +81,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_USERS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_USERS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionDirectoryPanel.java
index 7f9b210..80245ff 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionDirectoryPanel.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
-import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.panels.AnyObjectDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.AnyObjectRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
@@ -39,7 +39,7 @@ public final class AnyObjectSelectionDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_ANYOBJECT_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_ANYOBJECT_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java
index 9fe7990..fc199da 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionDirectoryPanel.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
-import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.panels.GroupDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
@@ -38,7 +38,7 @@ public final class GroupSelectionDirectoryPanel extends AnySelectionDirectoryPan
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_GROUP_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_GROUP_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java
index c534a9f..28f9401 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionDirectoryPanel.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
-import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.panels.UserDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.UserRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
@@ -38,7 +38,7 @@ public final class UserSelectionDirectoryPanel extends AnySelectionDirectoryPane
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_USERS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_USERS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
index 79ace7c..f2a4a37 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -205,7 +206,7 @@ public abstract class PolicyDirectoryPanel<T extends PolicyTO>
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_POLICY_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_POLICY_PAGINATOR_ROWS;
     }
 
     protected class PolicyDataProvider extends DirectoryDataProvider<T> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
index 22dfc09..8188ba7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -216,7 +217,7 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_POLICY_RULE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_POLICY_RULE_PAGINATOR_ROWS;
     }
 
     protected class PolicyRuleDataProvider extends DirectoryDataProvider<PolicyRuleWrapper> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
index cf47a1b..2ce05b8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -274,7 +275,7 @@ public abstract class ReportDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_REPORT_TASKS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_REPORT_TASKS_PAGINATOR_ROWS;
     }
 
     protected abstract void viewReport(ReportTO reportTO, AjaxRequestTarget target);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
index 27b673a..3174c62 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
@@ -29,6 +29,7 @@ import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.TemplateContent;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.notifications.TemplateModal;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -201,7 +202,7 @@ public class ReportTemplateDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_MAIL_TEMPLATE_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_MAIL_TEMPLATE_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
index f08b67a..e9a5f5c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -202,7 +203,7 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_REPORTLET_TASKS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_REPORTLET_TASKS_PAGINATOR_ROWS;
     }
 
     protected class ReportDataProvider extends DirectoryDataProvider<ReportletWrapper> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java
index 7ba4742..bf53630 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.panels.AjaxDataTablePanel;
@@ -153,7 +154,7 @@ public abstract class ExecutionsDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_TASK_EXECS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_TASK_EXECS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
index 579365c..93c9604 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -190,7 +191,7 @@ public abstract class NotificationTaskDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_NOTIFICATION_TASKS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_NOTIFICATION_TASKS_PAGINATOR_ROWS;
     }
 
     protected class NotificationTasksProvider extends TaskDataProvider<NotificationTaskTO> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index 8703fd9..caa00aa 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -197,7 +198,7 @@ public abstract class PropagationTaskDirectoryPanel
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_PROPAGATION_TASKS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_PROPAGATION_TASKS_PAGINATOR_ROWS;
     }
 
     protected class PropagationTasksProvider extends TaskDataProvider<PropagationTaskTO> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java
index 395dd7d..0ddbcdd 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PullTaskDirectoryPanel.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.client.console.tasks;
 
-import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -45,7 +45,7 @@ public abstract class PullTaskDirectoryPanel extends ProvisioningTaskDirectoryPa
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_PUSH_TASKS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_PUSH_TASKS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskDirectoryPanel.java
index 1e9b3a7..94c5e23 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskDirectoryPanel.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.client.console.tasks;
 
-import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.to.PushTaskTO;
@@ -42,7 +42,7 @@ public abstract class PushTaskDirectoryPanel extends ProvisioningTaskDirectoryPa
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_PUSH_TASKS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_PUSH_TASKS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index dff4ecd..8bfccb6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -27,6 +27,7 @@ import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -275,7 +276,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_SCHED_TASKS_PAGINATOR_ROWS;
+        return IdRepoConstants.PREF_SCHED_TASKS_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
index 8e44a85..c6ec2c3 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
@@ -74,3 +74,4 @@ timeout=Operation is taking too long: it will be executed in background. Please
 security=Security
 before=Before
 after=After
+networkServices=Network Services
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
index 4480641..cb11db3 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
@@ -74,3 +74,4 @@ timeout=L'operazione sta durando troppo: sar\u00e0 eseguita in background. Verif
 security=Sicurezza
 before=Prima
 after=Dopo
+networkServices=Servizi di Rete
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
index 4433d8a..8ea9b6b 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
@@ -72,3 +72,4 @@ timeout=\u64cd\u4f5c\u306b\u9577\u6642\u9593\u304b\u304b\u3063\u3066\u3044\u307e
 security=Security
 before=Before
 after=After
+networkServices=Network Services
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
index 9682b4b..0fe6396 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
@@ -74,3 +74,4 @@ timeout=Operation is taking too long: it will be executed in background. Please
 security=Security
 before=Before
 after=After
+networkServices=Network Services
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
index 71708ba..d19cc40 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
@@ -73,3 +73,4 @@ timeout=Operation is taking too long: it will be executed in background. Please
 security=Security
 before=Before
 after=After
+networkServices=Network Services
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
index 3559dac..13dc038 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
@@ -123,6 +123,7 @@ under the License.
                 <li wicket:id="auditLI"><a href="#" wicket:id="audit"><i class="fa fa-check-square-o"></i><wicket:message key="audit"/></a></li>
                 <li wicket:id="implementationsLI"><a href="#" wicket:id="implementations"><i class="fa fa-file-code-o"></i><wicket:message key="implementations"/></a></li>
                 <li wicket:id="logsLI"><a href="#" wicket:id="logs"><i class="fa fa-file-text-o"></i><wicket:message key="logs"/></a></li>
+                <li wicket:id="networkServicesLI"><a href="#" wicket:id="networkServices"><i class="fa fa-server"></i><wicket:message key="networkServices"/></a></li>
                 <li wicket:id="notificationsLI"><a href="#" wicket:id="notifications"><i class="fa fa-envelope-o"></i><wicket:message key="notifications"/></a></li>
                 <li wicket:id="parametersLI"><a href="#" wicket:id="parameters"><i class="fa fa-cog"></i><wicket:message key="parameters"/></a></li>
                 <li wicket:id="policiesLI"><a href="#" wicket:id="policies"><i class="fa fa-list"></i><wicket:message key="policies"/></a></li>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/NetworkServices.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/NetworkServices.html
new file mode 100644
index 0000000..4645abf
--- /dev/null
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/NetworkServices.html
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:extend>
+    <section class="content-header">
+      <h1>&nbsp;</h1>
+      <ol class="breadcrumb">
+        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"></wicket:message></a></li>
+        <li class="active"><wicket:message key="configuration"/></li>
+        <li class="active"><wicket:message key="networkServices"></wicket:message></li>
+      </ol>
+    </section>
+
+    <section class="content" wicket:id="content">
+      <div class="box">
+        <div class="box-body" wicket:id="tabbedPanel"/>
+      </div>
+    </section>
+  </wicket:extend>
+</html>
\ No newline at end of file
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.properties
new file mode 100644
index 0000000..e0ee557
--- /dev/null
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.properties
@@ -0,0 +1,19 @@
+# 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.
+any.edit=Edit implementation ${key}
+any.new=New ${type} implementation
+address=Address
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_it.properties
new file mode 100644
index 0000000..4ef085a
--- /dev/null
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_it.properties
@@ -0,0 +1,19 @@
+# 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.
+any.edit=Modifica implementazione ${key}
+any.new=Nuova implementazione di ${type}
+address=Indirizzo
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_ja.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_ja.properties
new file mode 100644
index 0000000..b19ccb5
--- /dev/null
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_ja.properties
@@ -0,0 +1,19 @@
+# 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.
+any.edit=\u5c0e\u5165 ${key} \u3092\u7de8\u96c6
+any.new=\u65b0\u3057\u3044 ${type} \u5c0e\u5165
+address=Address
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_pt_BR.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_pt_BR.properties
new file mode 100644
index 0000000..e0ee557
--- /dev/null
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_pt_BR.properties
@@ -0,0 +1,19 @@
+# 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.
+any.edit=Edit implementation ${key}
+any.new=New ${type} implementation
+address=Address
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_ru.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_ru.properties
new file mode 100644
index 0000000..ad0f9f6
--- /dev/null
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel_ru.properties
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+any.edit=Edit implementation ${key}
+any.new=New ${type} implementation
+address=Address
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java
index 43d2d9a..e420949 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java
@@ -74,6 +74,8 @@ public class BpmnProcessDirectoryPanel extends DirectoryPanel<
 
     private static final long serialVersionUID = 2705668831139984998L;
 
+    private static final String PREF_WORKFLOW_PAGINATOR_ROWS = "workflow.paginator.rows";
+
     private static final String FLOWABLE_MODELER_CTX = "flowable-modeler";
 
     private final BaseModal<String> utility;
@@ -155,7 +157,7 @@ public class BpmnProcessDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected String paginatorRowsKey() {
-        return Constants.PREF_WORKFLOW_PAGINATOR_ROWS;
+        return PREF_WORKFLOW_PAGINATOR_ROWS;
     }
 
     @Override
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
index 735a466..778bfab 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
@@ -27,10 +27,12 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.function.Function;
 import org.apache.syncope.common.keymaster.client.api.KeymasterException;
 import org.apache.syncope.common.keymaster.client.api.NetworkService;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -130,6 +132,32 @@ public class KeymasterITCase extends AbstractITCase {
         assertTrue(services.isEmpty());
     }
 
+    private List<NetworkService> findNetworkServices(
+            final NetworkService.Type type,
+            final Function<List<NetworkService>, Boolean> check,
+            final int maxWaitSeconds) {
+
+        int i = 0;
+        int maxit = maxWaitSeconds;
+
+        List<NetworkService> list = Collections.emptyList();
+        do {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+            }
+
+            list = serviceOps.list(type);
+
+            i++;
+        } while (check.apply(list) && i < maxit);
+        if (check.apply(list)) {
+            fail("Timeout when looking for network services of type " + type);
+        }
+
+        return list;
+    }
+
     @Test
     public void serviceRun() {
         List<NetworkService> list = serviceOps.list(NetworkService.Type.SRA);
@@ -140,13 +168,7 @@ public class KeymasterITCase extends AbstractITCase {
         sra1.setAddress("http://localhost:9080/syncope-sra");
         serviceOps.register(sra1);
 
-        try {
-            Thread.sleep(3000);
-        } catch (InterruptedException e) {
-            // ignore
-        }
-
-        list = serviceOps.list(NetworkService.Type.SRA);
+        list = findNetworkServices(NetworkService.Type.SRA, List::isEmpty, 30);
         assertFalse(list.isEmpty());
         assertEquals(1, list.size());
         assertEquals(sra1, list.get(0));
@@ -159,7 +181,7 @@ public class KeymasterITCase extends AbstractITCase {
         assertEquals(sra1, sra2);
         serviceOps.register(sra2);
 
-        list = serviceOps.list(NetworkService.Type.SRA);
+        list = findNetworkServices(NetworkService.Type.SRA, List::isEmpty, 30);
         assertFalse(list.isEmpty());
         assertEquals(1, list.size());
         assertEquals(sra1, list.get(0));
@@ -167,7 +189,7 @@ public class KeymasterITCase extends AbstractITCase {
         assertEquals(sra1, serviceOps.get(NetworkService.Type.SRA));
 
         serviceOps.unregister(sra1);
-        list = serviceOps.list(NetworkService.Type.SRA);
+        list = findNetworkServices(NetworkService.Type.SRA, l -> !l.isEmpty(), 30);
         assertTrue(list.isEmpty());
 
         try {