You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2024/11/11 06:28:20 UTC
(causeway) 01/02: CAUSEWAY-2297: flattens CausewayBeanTypeRegistry
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v3
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 7d4f5ea0ed17f1fa7b60a63e387b7efedb090a9a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Nov 11 06:36:41 2024 +0100
CAUSEWAY-2297: flattens CausewayBeanTypeRegistry
---
.../core/config/CausewayModuleCoreConfig.java | 2 -
.../CausewayBeanFactoryPostProcessorForSpring.java | 6 +-
.../config/beans/CausewayBeanTypeRegistry.java | 101 +++++++++++++---
.../beans/CausewayBeanTypeRegistryDefault.java | 128 ---------------------
.../_testing/MetaModelContext_forTesting.java | 3 +-
.../bootstrapping/AutoConfigurationTest.java | 2 -
6 files changed, 89 insertions(+), 153 deletions(-)
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayModuleCoreConfig.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayModuleCoreConfig.java
index 1c029f18f3f..cc418b57783 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayModuleCoreConfig.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayModuleCoreConfig.java
@@ -24,7 +24,6 @@ import org.springframework.context.annotation.Import;
import org.apache.causeway.core.config.applib.RestfulPathProvider;
import org.apache.causeway.core.config.beans.CausewayBeanFactoryPostProcessorForSpring;
-import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistryDefault;
import org.apache.causeway.core.config.converters.PatternsConverter;
import org.apache.causeway.core.config.datasources.DataSourceIntrospectionService;
import org.apache.causeway.core.config.environment.CausewayLocaleInitializer;
@@ -46,7 +45,6 @@ import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
// @Service
DataSourceIntrospectionService.class,
- CausewayBeanTypeRegistryDefault.class,
CausewaySystemEnvironment.class,
WebAppContextPath.class,
})
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessorForSpring.java b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessorForSpring.java
index 991a7166795..5335565f307 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessorForSpring.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessorForSpring.java
@@ -104,14 +104,14 @@ implements
: (causewayBeanTypeClassifier = CausewayBeanTypeClassifier.createInstance()); // JUnit support
}
- @Bean("causeway.bean-meta-data")
- public Can<CausewayBeanMetaData> getComponentScanResult() {
+ @Bean
+ public CausewayBeanTypeRegistry getComponentScanResult() {
if(log.isDebugEnabled()) {
componentScanResult.forEach(type->{
log.debug("to be introspected: {}", type);
});
}
- return componentScanResult;
+ return new CausewayBeanTypeRegistry(componentScanResult);
}
}
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
index d55365d3dc6..cfa13340905 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
@@ -18,33 +18,67 @@
*/
package org.apache.causeway.core.config.beans;
+import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
-import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.base._NullSafe;
+import org.apache.causeway.commons.internal.collections._Maps;
+import lombok.Getter;
import lombok.NonNull;
/**
* Holds the set of domain services, persistent entities and fixture scripts etc., but not values.
* @since 2.0
*/
-public interface CausewayBeanTypeRegistry {
+public class CausewayBeanTypeRegistry {
- Optional<CausewayBeanMetaData> lookupIntrospectableType(Class<?> type);
- Stream<CausewayBeanMetaData> streamIntrospectableTypes();
+ // -- CONSTRUCTOR
- @NonNull Map<Class<?>, CausewayBeanMetaData> getManagedBeansContributing();
- @NonNull Map<Class<?>, CausewayBeanMetaData> getEntityTypes();
- @NonNull Map<Class<?>, CausewayBeanMetaData> getMixinTypes();
- @NonNull Map<Class<?>, CausewayBeanMetaData> getViewModelTypes();
- /** discovered per {@code @Value} annotation (vs. registered using a {@link ValueSemanticsProvider})*/
- @NonNull Map<Class<?>, CausewayBeanMetaData> getDiscoveredValueTypes();
+ public CausewayBeanTypeRegistry(final @NonNull Can<CausewayBeanMetaData> introspectableTypes) {
+ this.introspectableTypes = introspectableTypes;
+
+ introspectableTypes.forEach(typeMeta->{
+
+ var cls = typeMeta.getCorrespondingClass();
+
+ introspectableTypesByClass.put(typeMeta.getCorrespondingClass(), typeMeta);
+
+ switch (typeMeta.getBeanSort()) {
+ case MANAGED_BEAN_CONTRIBUTING:
+ managedBeansContributing.put(cls, typeMeta);
+ return;
+ case MIXIN:
+ mixinTypes.put(cls, typeMeta);
+ return;
+ case ENTITY:
+ entityTypes.put(cls, typeMeta);
+ return;
+ case VIEW_MODEL:
+ viewModelTypes.put(cls, typeMeta);
+ return;
+ case VALUE:
+ discoveredValueTypes.put(cls, typeMeta);
+ return;
+
+ // skip introspection for these
+ case MANAGED_BEAN_NOT_CONTRIBUTING:
+ case COLLECTION:
+ case ABSTRACT: // <-- unexpected code reach
+ case VETOED:
+ case UNKNOWN:
+ return;
+ }
+ });
+
+ }
// -- SHORTCUTS
- default Stream<Class<?>> streamMixinTypes() {
+ public Stream<Class<?>> streamMixinTypes() {
return getMixinTypes().keySet().stream();
}
@@ -54,10 +88,8 @@ public interface CausewayBeanTypeRegistry {
* If given type is part of the meta-model and is available for injection,
* returns the <em>Managed Bean's</em> name (id) as
* recognized by the IoC container.
- *
- * @param type
*/
- default Optional<String> lookupManagedBeanNameForType(final Class<?> type) {
+ public Optional<String> lookupManagedBeanNameForType(final Class<?> type) {
return Optional.ofNullable(getManagedBeansContributing().get(type))
.map(CausewayBeanMetaData::getBeanName);
}
@@ -67,7 +99,7 @@ public interface CausewayBeanTypeRegistry {
* If no (concrete) entity type is found, returns 'UNSPECIFIED'.
* @implNote assumes that there can be only one persistence stack
*/
- default PersistenceStack determineCurrentPersistenceStack() {
+ public PersistenceStack determineCurrentPersistenceStack() {
return getEntityTypes().values().stream()
.map(meta->meta.getPersistenceStack())
.filter(Optional::isPresent)
@@ -77,4 +109,41 @@ public interface CausewayBeanTypeRegistry {
.orElse(PersistenceStack.UNSPECIFIED);
}
-}
\ No newline at end of file
+
+ /**
+ * (immutable) scan result, as used by the SpecificationLoader for introspection
+ */
+ private final Can<CausewayBeanMetaData> introspectableTypes;
+
+ private final Map<Class<?>, CausewayBeanMetaData> introspectableTypesByClass = _Maps.newHashMap();
+
+ // -- DISTINCT CATEGORIES OF BEAN SORTS
+
+ @Getter
+ private final Map<Class<?>, CausewayBeanMetaData> managedBeansContributing = new HashMap<>();
+
+ @Getter
+ private final Map<Class<?>, CausewayBeanMetaData> entityTypes = new HashMap<>();
+
+ @Getter
+ private final Map<Class<?>, CausewayBeanMetaData> mixinTypes = new HashMap<>();
+
+ @Getter
+ private final Map<Class<?>, CausewayBeanMetaData> viewModelTypes = new HashMap<>();
+
+ @Getter
+ private final Map<Class<?>, CausewayBeanMetaData> discoveredValueTypes = new HashMap<>();
+
+ // -- LOOKUPS
+
+ public Optional<CausewayBeanMetaData> lookupIntrospectableType(final Class<?> type) {
+ return Optional.ofNullable(introspectableTypesByClass.get(type));
+ }
+
+ // -- ITERATORS
+
+ public Stream<CausewayBeanMetaData> streamIntrospectableTypes() {
+ return _NullSafe.stream(introspectableTypes);
+ }
+
+}
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistryDefault.java b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistryDefault.java
deleted file mode 100644
index 8eb5076be5d..00000000000
--- a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistryDefault.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.config.beans;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import jakarta.annotation.Priority;
-import jakarta.inject.Inject;
-import jakarta.inject.Named;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._NullSafe;
-import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.core.config.CausewayModuleCoreConfig;
-
-import lombok.Getter;
-import lombok.NonNull;
-
-@Service
-@Named(CausewayModuleCoreConfig.NAMESPACE + "..CausewayBeanTypeRegistryImpl")
-@Priority(PriorityPrecedence.EARLY)
-@Qualifier("Default")
-public class CausewayBeanTypeRegistryDefault
-implements CausewayBeanTypeRegistry {
-
- /**
- * (immutable) scan result, as used by the SpecificationLoader for introspection
- */
- private final Can<CausewayBeanMetaData> introspectableTypes;
-
- private final Map<Class<?>, CausewayBeanMetaData> introspectableTypesByClass = _Maps.newHashMap();
-
- // -- DISTINCT CATEGORIES OF BEAN SORTS
-
- @Getter(onMethod_ = {@Override})
- private final Map<Class<?>, CausewayBeanMetaData> managedBeansContributing = new HashMap<>();
-
- @Getter(onMethod_ = {@Override})
- private final Map<Class<?>, CausewayBeanMetaData> entityTypes = new HashMap<>();
-
- @Getter(onMethod_ = {@Override})
- private final Map<Class<?>, CausewayBeanMetaData> mixinTypes = new HashMap<>();
-
- @Getter(onMethod_ = {@Override})
- private final Map<Class<?>, CausewayBeanMetaData> viewModelTypes = new HashMap<>();
-
- @Getter(onMethod_ = {@Override})
- private final Map<Class<?>, CausewayBeanMetaData> discoveredValueTypes = new HashMap<>();
-
- // -- LOOKUPS
-
- @Override
- public Optional<CausewayBeanMetaData> lookupIntrospectableType(final Class<?> type) {
- return Optional.ofNullable(introspectableTypesByClass.get(type));
- }
-
- // -- ITERATORS
-
- @Override
- public Stream<CausewayBeanMetaData> streamIntrospectableTypes() {
- return _NullSafe.stream(introspectableTypes);
- }
-
- // -- CONSTRUCTOR
-
- @Inject @Named("causeway.bean-meta-data")
- public CausewayBeanTypeRegistryDefault(final @NonNull Can<CausewayBeanMetaData> introspectableTypes) {
- this.introspectableTypes = introspectableTypes;
-
- introspectableTypes.forEach(typeMeta->{
-
- var cls = typeMeta.getCorrespondingClass();
-
- introspectableTypesByClass.put(typeMeta.getCorrespondingClass(), typeMeta);
-
- switch (typeMeta.getBeanSort()) {
- case MANAGED_BEAN_CONTRIBUTING:
- managedBeansContributing.put(cls, typeMeta);
- return;
- case MIXIN:
- mixinTypes.put(cls, typeMeta);
- return;
- case ENTITY:
- entityTypes.put(cls, typeMeta);
- return;
- case VIEW_MODEL:
- viewModelTypes.put(cls, typeMeta);
- return;
- case VALUE:
- discoveredValueTypes.put(cls, typeMeta);
- return;
-
- // skip introspection for these
- case MANAGED_BEAN_NOT_CONTRIBUTING:
- case COLLECTION:
- case ABSTRACT: // <-- unexpected code reach
- case VETOED:
- case UNKNOWN:
- return;
- }
- });
-
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
index e627750eb7f..7cca0dc74a6 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -66,7 +66,6 @@ import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.core.config.beans.CausewayBeanFactoryPostProcessorForSpring;
import org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier;
import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistry;
-import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistryDefault;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
@@ -352,7 +351,7 @@ extends MetaModelContext {
public CausewayBeanTypeRegistry getCausewayBeanTypeRegistry() {
if(causewayBeanTypeRegistry==null) {
- causewayBeanTypeRegistry = new CausewayBeanTypeRegistryDefault(Can.empty());
+ causewayBeanTypeRegistry = new CausewayBeanTypeRegistry(Can.empty());
}
return causewayBeanTypeRegistry;
}
diff --git a/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/AutoConfigurationTest.java b/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/AutoConfigurationTest.java
index a1f8bad160f..ac6bd3820ce 100644
--- a/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/AutoConfigurationTest.java
+++ b/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/AutoConfigurationTest.java
@@ -37,7 +37,6 @@ import org.springframework.test.context.TestPropertySource;
import org.apache.causeway.applib.services.registry.ServiceRegistry;
import org.apache.causeway.core.config.beans.CausewayBeanFactoryPostProcessorForSpring;
import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistry;
-import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistryDefault;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
import org.apache.causeway.core.config.presets.CausewayPresets;
import org.apache.causeway.core.metamodel.context.MetaModelContextFactory;
@@ -53,7 +52,6 @@ import org.apache.causeway.testdomain.model.stereotypes.MyView;
CausewaySystemEnvironment.class,
MetaModelContextFactory.class,
CausewayBeanFactoryPostProcessorForSpring.class,
- CausewayBeanTypeRegistryDefault.class,
Configuration_usingStereotypes.class,
ServiceRegistryDefault.class
},