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/11/04 16:18:50 UTC

[syncope] branch master updated: [SYNCOPE-1410] Empower SpringBoot's capabilities to configure actual implementations on IdRepo / IdM Console variants

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 b0df00f  [SYNCOPE-1410] Empower SpringBoot's capabilities to configure actual implementations on IdRepo / IdM Console variants
b0df00f is described below

commit b0df00f3be5203fc2244d6fc8298f5cc1cafef51
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Mon Nov 4 17:18:38 2019 +0100

    [SYNCOPE-1410] Empower SpringBoot's capabilities to configure actual implementations on IdRepo / IdM Console variants
---
 .../client/console/SyncopeIdMConsoleContext.java   |  75 +++++++++++++
 .../commons/IdMImplementationInfoProvider.java     |   5 -
 .../panels/search/ConnObjectSearchPanel.java       |   5 +-
 .../client/console/SyncopeConsoleApplication.java  |  20 ----
 .../console/SyncopeIdRepoConsoleContext.java       | 101 +++++++++++++++++
 .../client/console/SyncopeWebApplication.java      |  15 ++-
 .../commons/IdRepoImplementationInfoProvider.java  |  10 +-
 .../init/ClassPathScanImplementationLookup.java    | 123 +--------------------
 .../apache/syncope/client/console/pages/Login.java |   5 +-
 .../implementations/MyPropagationActions.groovy    |   5 +-
 .../syncope/fit/console/AbstractConsoleITCase.java |  20 +---
 11 files changed, 199 insertions(+), 185 deletions(-)

diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/SyncopeIdMConsoleContext.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/SyncopeIdMConsoleContext.java
new file mode 100644
index 0000000..5e3f387
--- /dev/null
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/SyncopeIdMConsoleContext.java
@@ -0,0 +1,75 @@
+/*
+ * 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;
+
+import org.apache.syncope.client.console.commons.AnyDirectoryPanelAditionalActionLinksProvider;
+import org.apache.syncope.client.console.commons.AnyWizardBuilderAdditionalSteps;
+import org.apache.syncope.client.console.commons.ExternalResourceProvider;
+import org.apache.syncope.client.console.commons.IdMAnyDirectoryPanelAditionalActionLinksProvider;
+import org.apache.syncope.client.console.commons.IdMAnyWizardBuilderAdditionalSteps;
+import org.apache.syncope.client.console.commons.IdMExternalResourceProvider;
+import org.apache.syncope.client.console.commons.IdMImplementationInfoProvider;
+import org.apache.syncope.client.console.commons.IdMPolicyTabProvider;
+import org.apache.syncope.client.console.commons.IdMStatusProvider;
+import org.apache.syncope.client.console.commons.IdMVirSchemaDetailsPanelProvider;
+import org.apache.syncope.client.console.commons.ImplementationInfoProvider;
+import org.apache.syncope.client.console.commons.PolicyTabProvider;
+import org.apache.syncope.client.console.commons.StatusProvider;
+import org.apache.syncope.client.console.commons.VirSchemaDetailsPanelProvider;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class SyncopeIdMConsoleContext {
+
+    @Bean
+    public ExternalResourceProvider resourceProvider() {
+        return new IdMExternalResourceProvider();
+    }
+
+    @Bean
+    public AnyWizardBuilderAdditionalSteps anyWizardBuilderAdditionalSteps() {
+        return new IdMAnyWizardBuilderAdditionalSteps();
+    }
+
+    @Bean
+    public StatusProvider statusProvider() {
+        return new IdMStatusProvider();
+    }
+
+    @Bean
+    public VirSchemaDetailsPanelProvider virSchemaDetailsPanelProvider() {
+        return new IdMVirSchemaDetailsPanelProvider();
+    }
+
+    @Bean
+    public AnyDirectoryPanelAditionalActionLinksProvider anyDirectoryPanelAditionalActionLinksProvider() {
+        return new IdMAnyDirectoryPanelAditionalActionLinksProvider();
+    }
+
+    @Bean
+    public ImplementationInfoProvider implementationInfoProvider() {
+        return new IdMImplementationInfoProvider();
+    }
+
+    @Bean
+    public PolicyTabProvider policyTabProvider() {
+        return new IdMPolicyTabProvider();
+    }
+}
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
index 19c783b..1ceacaf 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
-import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
 import org.apache.syncope.client.console.rest.ImplementationRestClient;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.ImplementationTO;
@@ -34,10 +33,6 @@ public class IdMImplementationInfoProvider extends IdRepoImplementationInfoProvi
 
     private static final long serialVersionUID = -5385695412826366167L;
 
-    public IdMImplementationInfoProvider(final ClassPathScanImplementationLookup lookup) {
-        super(lookup);
-    }
-
     @Override
     public ViewMode getViewMode(final ImplementationTO implementation) {
         return IdMImplementationType.PULL_CORRELATION_RULE.equals(implementation.getType())
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/search/ConnObjectSearchPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/search/ConnObjectSearchPanel.java
index 54142ab..918eced 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/search/ConnObjectSearchPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/search/ConnObjectSearchPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels.search;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -81,7 +80,7 @@ public class ConnObjectSearchPanel extends AbstractSearchPanel {
 
             @Override
             protected List<SearchClause.Type> load() {
-                return Collections.singletonList(SearchClause.Type.ATTRIBUTE);
+                return List.of(SearchClause.Type.ATTRIBUTE);
             }
         };
 
@@ -91,7 +90,7 @@ public class ConnObjectSearchPanel extends AbstractSearchPanel {
 
             @Override
             protected List<String> load() {
-                return Collections.emptyList();
+                return List.of();
             }
         };
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
index 9e24a56..0fda265 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
@@ -19,16 +19,12 @@
 package org.apache.syncope.client.console;
 
 import com.giffing.wicket.spring.boot.starter.web.config.WicketWebInitializerAutoConfig.WebSocketWicketWebInitializerAutoConfiguration;
-import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
-import org.apache.syncope.client.console.init.MIMETypesLoader;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
 import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Bean;
 
 @SpringBootApplication(exclude = {
     ErrorMvcAutoConfiguration.class,
@@ -44,20 +40,4 @@ public class SyncopeConsoleApplication extends SpringBootServletInitializer {
         builder.properties(WebSocketWicketWebInitializerAutoConfiguration.REGISTER_SERVER_ENDPOINT_ENABLED + "=false");
         return super.configure(builder);
     }
-
-    @ConditionalOnMissingBean(name = "classPathScanImplementationLookup")
-    @Bean
-    public ClassPathScanImplementationLookup classPathScanImplementationLookup() {
-        ClassPathScanImplementationLookup lookup = new ClassPathScanImplementationLookup();
-        lookup.load();
-        return lookup;
-    }
-
-    @ConditionalOnMissingBean(name = "mimeTypesLoader")
-    @Bean
-    public MIMETypesLoader mimeTypesLoader() {
-        MIMETypesLoader mimeTypesLoader = new MIMETypesLoader();
-        mimeTypesLoader.load();
-        return mimeTypesLoader;
-    }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeIdRepoConsoleContext.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeIdRepoConsoleContext.java
new file mode 100644
index 0000000..b38185a
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeIdRepoConsoleContext.java
@@ -0,0 +1,101 @@
+/*
+ * 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;
+
+import org.apache.syncope.client.console.commons.AnyDirectoryPanelAditionalActionLinksProvider;
+import org.apache.syncope.client.console.commons.AnyWizardBuilderAdditionalSteps;
+import org.apache.syncope.client.console.commons.ExternalResourceProvider;
+import org.apache.syncope.client.console.commons.IdRepoAnyDirectoryPanelAditionalActionLinksProvider;
+import org.apache.syncope.client.console.commons.IdRepoAnyWizardBuilderAdditionalSteps;
+import org.apache.syncope.client.console.commons.IdRepoExternalResourceProvider;
+import org.apache.syncope.client.console.commons.IdRepoImplementationInfoProvider;
+import org.apache.syncope.client.console.commons.IdRepoPolicyTabProvider;
+import org.apache.syncope.client.console.commons.IdRepoStatusProvider;
+import org.apache.syncope.client.console.commons.IdRepoVirSchemaDetailsPanelProvider;
+import org.apache.syncope.client.console.commons.ImplementationInfoProvider;
+import org.apache.syncope.client.console.commons.PolicyTabProvider;
+import org.apache.syncope.client.console.commons.StatusProvider;
+import org.apache.syncope.client.console.commons.VirSchemaDetailsPanelProvider;
+import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
+import org.apache.syncope.client.console.init.MIMETypesLoader;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class SyncopeIdRepoConsoleContext {
+
+    @ConditionalOnMissingBean(name = "classPathScanImplementationLookup")
+    @Bean
+    public ClassPathScanImplementationLookup classPathScanImplementationLookup() {
+        ClassPathScanImplementationLookup lookup = new ClassPathScanImplementationLookup();
+        lookup.load();
+        return lookup;
+    }
+
+    @ConditionalOnMissingBean(name = "mimeTypesLoader")
+    @Bean
+    public MIMETypesLoader mimeTypesLoader() {
+        MIMETypesLoader mimeTypesLoader = new MIMETypesLoader();
+        mimeTypesLoader.load();
+        return mimeTypesLoader;
+    }
+
+    @ConditionalOnMissingBean(name = "resourceProvider")
+    @Bean
+    public ExternalResourceProvider resourceProvider() {
+        return new IdRepoExternalResourceProvider();
+    }
+
+    @ConditionalOnMissingBean(name = "anyWizardBuilderAdditionalSteps")
+    @Bean
+    public AnyWizardBuilderAdditionalSteps anyWizardBuilderAdditionalSteps() {
+        return new IdRepoAnyWizardBuilderAdditionalSteps();
+    }
+
+    @ConditionalOnMissingBean(name = "statusProvider")
+    @Bean
+    public StatusProvider statusProvider() {
+        return new IdRepoStatusProvider();
+    }
+
+    @ConditionalOnMissingBean(name = "virSchemaDetailsPanelProvider")
+    @Bean
+    public VirSchemaDetailsPanelProvider virSchemaDetailsPanelProvider() {
+        return new IdRepoVirSchemaDetailsPanelProvider();
+    }
+
+    @ConditionalOnMissingBean(name = "anyDirectoryPanelAditionalActionLinksProvider")
+    @Bean
+    public AnyDirectoryPanelAditionalActionLinksProvider anyDirectoryPanelAditionalActionLinksProvider() {
+        return new IdRepoAnyDirectoryPanelAditionalActionLinksProvider();
+    }
+
+    @ConditionalOnMissingBean(name = "implementationInfoProvider")
+    @Bean
+    public ImplementationInfoProvider implementationInfoProvider() {
+        return new IdRepoImplementationInfoProvider();
+    }
+
+    @ConditionalOnMissingBean(name = "policyTabProvider")
+    @Bean
+    public PolicyTabProvider policyTabProvider() {
+        return new IdRepoPolicyTabProvider();
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
index d291d1c..0b451fa 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
@@ -118,18 +118,25 @@ public class SyncopeWebApplication extends WicketBootSecuredWebApplication {
 
     private Integer queueCapacity;
 
+    @Autowired
     private ExternalResourceProvider resourceProvider;
 
+    @Autowired
     private AnyWizardBuilderAdditionalSteps anyWizardBuilderAdditionalSteps;
 
+    @Autowired
     private StatusProvider statusProvider;
 
+    @Autowired
     private VirSchemaDetailsPanelProvider virSchemaDetailsPanelProvider;
 
+    @Autowired
     private AnyDirectoryPanelAditionalActionLinksProvider anyDirectoryPanelAditionalActionLinksProvider;
 
+    @Autowired
     private ImplementationInfoProvider implementationInfoProvider;
 
+    @Autowired
     private PolicyTabProvider policyTabProvider;
 
     private Map<String, Class<? extends BasePage>> pageClasses;
@@ -209,14 +216,6 @@ public class SyncopeWebApplication extends WicketBootSecuredWebApplication {
 
         getSecuritySettings().setAuthorizationStrategy(new MetaDataRoleAuthorizationStrategy(this));
 
-        resourceProvider = lookup.getResourceProvider();
-        anyWizardBuilderAdditionalSteps = lookup.getAnyWizardBuilderAdditionalSteps();
-        statusProvider = lookup.getStatusProvider();
-        virSchemaDetailsPanelProvider = lookup.getVirSchemaDetailsPanelProvider();
-        anyDirectoryPanelAditionalActionLinksProvider = lookup.getAnyDirectoryPanelAditionalActionLinksProvider();
-        implementationInfoProvider = lookup.getImplementationInfoProvider();
-        policyTabProvider = lookup.getPolicyTabProvider();
-
         lookup.getPageClasses().
                 forEach(cls -> MetaDataRoleAuthorizationStrategy.authorize(cls, Constants.ROLE_AUTHENTICATED));
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
index 2ed938d..e61e195 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
@@ -33,16 +33,14 @@ import org.apache.syncope.common.lib.types.IdRepoImplementationType;
 import org.apache.syncope.common.lib.types.ImplementationEngine;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.LoadableDetachableModel;
+import org.springframework.beans.factory.annotation.Autowired;
 
 public class IdRepoImplementationInfoProvider implements ImplementationInfoProvider {
 
     private static final long serialVersionUID = -6620368595630782392L;
 
-    protected final ClassPathScanImplementationLookup lookup;
-
-    public IdRepoImplementationInfoProvider(final ClassPathScanImplementationLookup lookup) {
-        this.lookup = lookup;
-    }
+    @Autowired
+    protected ClassPathScanImplementationLookup lookup;
 
     @Override
     public ViewMode getViewMode(final ImplementationTO implementation) {
@@ -62,7 +60,7 @@ public class IdRepoImplementationInfoProvider implements ImplementationInfoProvi
             Optional<JavaImplInfo> javaClasses = SyncopeConsoleSession.get().getPlatformInfo().
                     getJavaImplInfo(implementation.getType());
             classes = javaClasses.map(javaImplInfo -> new ArrayList<>(javaImplInfo.getClasses()))
-                .orElseGet(ArrayList::new);
+                    .orElseGet(ArrayList::new);
         } else if (viewMode == ViewMode.JSON_BODY) {
             switch (implementation.getType()) {
                 case IdRepoImplementationType.REPORTLET:
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
index f243261..332948c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
@@ -40,11 +40,6 @@ import org.apache.syncope.client.console.annotations.IdMPage;
 import org.apache.syncope.client.console.annotations.Resource;
 import org.apache.syncope.client.console.commons.AnyDirectoryPanelAditionalActionLinksProvider;
 import org.apache.syncope.client.console.commons.AnyWizardBuilderAdditionalSteps;
-import org.apache.syncope.client.console.commons.IdRepoAnyDirectoryPanelAditionalActionLinksProvider;
-import org.apache.syncope.client.console.commons.IdRepoAnyWizardBuilderAdditionalSteps;
-import org.apache.syncope.client.console.commons.IdRepoExternalResourceProvider;
-import org.apache.syncope.client.console.commons.IdRepoStatusProvider;
-import org.apache.syncope.client.console.commons.IdRepoVirSchemaDetailsPanelProvider;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.ui.commons.panels.BaseSSOLoginFormPanel;
 import org.apache.syncope.client.ui.commons.markup.html.form.preview.AbstractBinaryPreviewer;
@@ -65,8 +60,6 @@ import org.springframework.context.annotation.ClassPathScanningCandidateComponen
 import org.springframework.core.type.filter.AssignableTypeFilter;
 import org.springframework.util.ClassUtils;
 import org.apache.syncope.client.console.commons.ExternalResourceProvider;
-import org.apache.syncope.client.console.commons.IdRepoImplementationInfoProvider;
-import org.apache.syncope.client.console.commons.IdRepoPolicyTabProvider;
 import org.apache.syncope.client.console.commons.ImplementationInfoProvider;
 import org.apache.syncope.client.console.commons.PolicyTabProvider;
 import org.apache.syncope.client.console.commons.StatusProvider;
@@ -105,22 +98,6 @@ public class ClassPathScanImplementationLookup {
         });
     }
 
-    private ExternalResourceProvider resourceProvider = new IdRepoExternalResourceProvider();
-
-    private AnyWizardBuilderAdditionalSteps anyWizardBuilderAdditionalSteps =
-            new IdRepoAnyWizardBuilderAdditionalSteps();
-
-    private StatusProvider statusProvider = new IdRepoStatusProvider();
-
-    private VirSchemaDetailsPanelProvider virSchemaDetailsPanelProvider = new IdRepoVirSchemaDetailsPanelProvider();
-
-    private AnyDirectoryPanelAditionalActionLinksProvider anyDirectoryPanelAditionalActionLinksProvider =
-            new IdRepoAnyDirectoryPanelAditionalActionLinksProvider();
-
-    private ImplementationInfoProvider implementationInfoProvider = new IdRepoImplementationInfoProvider(this);
-
-    private PolicyTabProvider policyTabProvider = new IdRepoPolicyTabProvider();
-
     private List<Class<? extends BasePage>> pages;
 
     private List<Class<? extends AbstractBinaryPreviewer>> previewers;
@@ -199,7 +176,7 @@ public class ClassPathScanImplementationLookup {
         scanner.findCandidateComponents(getBasePackage()).forEach(bd -> {
             try {
                 Class<?> clazz = ClassUtils.resolveClassName(
-                    Objects.requireNonNull(bd.getBeanClassName()), ClassUtils.getDefaultClassLoader());
+                        Objects.requireNonNull(bd.getBeanClassName()), ClassUtils.getDefaultClassLoader());
                 boolean isAbstractClazz = Modifier.isAbstract(clazz.getModifiers());
                 if (!isAbstractClazz) {
                     if (BaseExtPage.class.isAssignableFrom(clazz)) {
@@ -252,61 +229,6 @@ public class ClassPathScanImplementationLookup {
                             LOG.error("Could not find annotation {} in {}, ignoring",
                                     Resource.class.getName(), clazz.getName());
                         }
-                    } else if (ExternalResourceProvider.class.isAssignableFrom(clazz)) {
-                        if (!clazz.equals(IdRepoExternalResourceProvider.class)
-                                && !clazz.isInstance(resourceProvider)) {
-
-                            resourceProvider = (ExternalResourceProvider) clazz.
-                                    getConstructor().newInstance();
-                        }
-                    } else if (AnyWizardBuilderAdditionalSteps.class.isAssignableFrom(clazz)) {
-                        if (!clazz.equals(IdRepoAnyWizardBuilderAdditionalSteps.class)
-                                && !clazz.isInstance(anyWizardBuilderAdditionalSteps)) {
-
-                            anyWizardBuilderAdditionalSteps = (AnyWizardBuilderAdditionalSteps) clazz.
-                                    getConstructor().newInstance();
-                        }
-                    } else if (StatusProvider.class.isAssignableFrom(clazz)) {
-                        if (!clazz.equals(IdRepoStatusProvider.class)
-                                && !clazz.isInstance(statusProvider)) {
-
-                            statusProvider = (StatusProvider) clazz.
-                                    getConstructor().newInstance();
-                        }
-                    } else if (VirSchemaDetailsPanelProvider.class.isAssignableFrom(clazz)) {
-                        if (!clazz.equals(IdRepoVirSchemaDetailsPanelProvider.class)
-                                && !clazz.isInstance(virSchemaDetailsPanelProvider)) {
-
-                            virSchemaDetailsPanelProvider = (VirSchemaDetailsPanelProvider) clazz.
-                                    getConstructor().newInstance();
-                        }
-                    } else if (AnyDirectoryPanelAditionalActionLinksProvider.class.isAssignableFrom(clazz)) {
-                        if (!clazz.equals(IdRepoAnyDirectoryPanelAditionalActionLinksProvider.class)
-                                && !clazz.isInstance(anyDirectoryPanelAditionalActionLinksProvider)) {
-
-                            anyDirectoryPanelAditionalActionLinksProvider =
-                                    (AnyDirectoryPanelAditionalActionLinksProvider) clazz.
-                                            getConstructor().newInstance();
-
-                        }
-                    } else if (ImplementationInfoProvider.class.isAssignableFrom(clazz)) {
-                        if (!clazz.equals(IdRepoImplementationInfoProvider.class)
-                                && !clazz.isInstance(implementationInfoProvider)) {
-
-                            implementationInfoProvider =
-                                    (ImplementationInfoProvider) clazz.
-                                            getConstructor(ClassPathScanImplementationLookup.class).newInstance(this);
-
-                        }
-                    } else if (PolicyTabProvider.class.isAssignableFrom(clazz)) {
-                        if (!clazz.equals(IdRepoPolicyTabProvider.class)
-                                && !clazz.isInstance(policyTabProvider)) {
-
-                            policyTabProvider =
-                                    (PolicyTabProvider) clazz.
-                                            getConstructor().newInstance();
-
-                        }
                     }
                 }
             } catch (Throwable t) {
@@ -362,21 +284,6 @@ public class ClassPathScanImplementationLookup {
         LOG.debug("Pull Correlation Rule configurations found: {}", pullCorrelationRuleConfs);
         LOG.debug("Push Correlation Rule configurations found: {}", pushCorrelationRuleConfs);
         LOG.debug("Wicket Resources found: {}", resources);
-
-        LOG.debug("{}: {}", ExternalResourceProvider.class.getSimpleName(),
-                resourceProvider.getClass().getSimpleName());
-        LOG.debug("{}: {}", AnyWizardBuilderAdditionalSteps.class.getSimpleName(),
-                anyWizardBuilderAdditionalSteps.getClass().getSimpleName());
-        LOG.debug("{}: {}", StatusProvider.class.getSimpleName(),
-                statusProvider.getClass().getSimpleName());
-        LOG.debug("{}: {}", VirSchemaDetailsPanelProvider.class.getSimpleName(),
-                virSchemaDetailsPanelProvider.getClass().getSimpleName());
-        LOG.debug("{}: {}", AnyDirectoryPanelAditionalActionLinksProvider.class.getSimpleName(),
-                anyDirectoryPanelAditionalActionLinksProvider.getClass().getSimpleName());
-        LOG.debug("{}: {}", ImplementationInfoProvider.class.getSimpleName(),
-                implementationInfoProvider.getClass().getSimpleName());
-        LOG.debug("{}: {}", PolicyTabProvider.class.getSimpleName(),
-                policyTabProvider.getClass().getSimpleName());
     }
 
     public Class<? extends AbstractBinaryPreviewer> getPreviewerClass(final String mimeType) {
@@ -444,32 +351,4 @@ public class ClassPathScanImplementationLookup {
     public List<Class<? extends AbstractResource>> getResources() {
         return resources;
     }
-
-    public ExternalResourceProvider getResourceProvider() {
-        return resourceProvider;
-    }
-
-    public AnyWizardBuilderAdditionalSteps getAnyWizardBuilderAdditionalSteps() {
-        return anyWizardBuilderAdditionalSteps;
-    }
-
-    public StatusProvider getStatusProvider() {
-        return statusProvider;
-    }
-
-    public VirSchemaDetailsPanelProvider getVirSchemaDetailsPanelProvider() {
-        return virSchemaDetailsPanelProvider;
-    }
-
-    public AnyDirectoryPanelAditionalActionLinksProvider getAnyDirectoryPanelAditionalActionLinksProvider() {
-        return anyDirectoryPanelAditionalActionLinksProvider;
-    }
-
-    public ImplementationInfoProvider getImplementationInfoProvider() {
-        return implementationInfoProvider;
-    }
-
-    public PolicyTabProvider getPolicyTabProvider() {
-        return policyTabProvider;
-    }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
index 3facd54..9009d37 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
@@ -80,8 +80,9 @@ public class Login extends BaseLogin {
     }
 
     @Override
-    protected void authenticate(final String username, final String password, final AjaxRequestTarget target) throws
-            AccessControlException {
+    protected void authenticate(final String username, final String password, final AjaxRequestTarget target)
+            throws AccessControlException {
+
         if (SyncopeWebApplication.get().getAnonymousUser().equals(username)) {
             throw new AccessControlException("Illegal username");
         }
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
index 6f58ce0..f0156eb 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
@@ -18,7 +18,6 @@
  * under the License.
  */
 import groovy.transform.CompileStatic
-import java.util.Collections
 import java.util.Set
 import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit
 import org.apache.syncope.core.persistence.api.entity.resource.Provision
@@ -32,12 +31,12 @@ class MyPropagationActions implements PropagationActions {
   
   @Override
   Set<String> moreAttrsToGet(PropagationTask task, OrgUnit orgUnit) {
-    return Collections.emptySet();
+    return Set.of();
   }
 
   @Override
   Set<String> moreAttrsToGet(PropagationTask task, Provision provision) {
-    return Collections.emptySet();
+    return Set.of();
   }
 
   @Override
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
index 3d9fdb6..973c3c0 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
@@ -25,10 +25,10 @@ import com.giffing.wicket.spring.boot.starter.configuration.extensions.core.sett
 import com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator.WicketEndpointRepositoryDefault;
 
 import java.util.List;
+import org.apache.syncope.client.console.SyncopeIdMConsoleContext;
+import org.apache.syncope.client.console.SyncopeIdRepoConsoleContext;
 import org.apache.syncope.client.console.SyncopeWebApplication;
 import org.apache.syncope.client.console.commons.PreviewUtils;
-import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
-import org.apache.syncope.client.console.init.MIMETypesLoader;
 import org.apache.syncope.client.console.pages.Login;
 import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
 import org.apache.syncope.common.keymaster.client.self.SelfKeymasterClientContext;
@@ -72,20 +72,6 @@ public abstract class AbstractConsoleITCase extends AbstractUITCase {
         }
 
         @Bean
-        public ClassPathScanImplementationLookup classPathScanImplementationLookup() {
-            ClassPathScanImplementationLookup lookup = new ClassPathScanImplementationLookup();
-            lookup.load();
-            return lookup;
-        }
-
-        @Bean
-        public MIMETypesLoader mimeTypesLoader() {
-            MIMETypesLoader mimeTypesLoader = new MIMETypesLoader();
-            mimeTypesLoader.load();
-            return mimeTypesLoader;
-        }
-
-        @Bean
         public PreviewUtils previewUtils() {
             return new PreviewUtils();
         }
@@ -98,6 +84,8 @@ public abstract class AbstractConsoleITCase extends AbstractUITCase {
                 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
                 ctx.register(SyncopeConsoleWebApplicationTestConfig.class);
                 ctx.register(SyncopeWebApplication.class);
+                ctx.register(SyncopeIdRepoConsoleContext.class);
+                ctx.register(SyncopeIdMConsoleContext.class);
                 ctx.refresh();
 
                 UTILITY_UI = new UtilityUIT(new WicketTester(ctx.getBean(SyncopeWebApplication.class)));