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:19 UTC
(causeway) branch v3 updated (7d42b094532 -> ee485793cda)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a change to branch v3
in repository https://gitbox.apache.org/repos/asf/causeway.git
from 7d42b094532 Merge pull request #2778 from apache/dependabot/maven/v3/com.github.gavlyukovskiy-datasource-proxy-spring-boot-starter-1.10.0
new 7d4f5ea0ed1 CAUSEWAY-2297: flattens CausewayBeanTypeRegistry
new ee485793cda CAUSEWAY-2297: CausewayBeanTypeRegistry encapsulation
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../core/config/CausewayModuleCoreConfig.java | 2 -
.../CausewayBeanFactoryPostProcessorForSpring.java | 10 +-
.../config/beans/CausewayBeanTypeRegistry.java | 112 ++++++++++++++----
.../beans/CausewayBeanTypeRegistryDefault.java | 128 ---------------------
.../_testing/MetaModelContext_forTesting.java | 3 +-
.../services/registry/ServiceRegistryDefault.java | 4 +-
.../specloader/SpecificationLoaderDefault.java | 10 +-
.../homepage/HomePageResolverServiceDefault.java | 3 +-
.../causeway/tabular/applib/DataTableProvider.java | 3 +-
.../CausewayModulePersistenceJdoDatanucleus.java | 16 +--
.../bootstrapping/AutoConfigurationTest.java | 2 -
11 files changed, 109 insertions(+), 184 deletions(-)
delete mode 100644 core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistryDefault.java
(causeway) 01/02: CAUSEWAY-2297: flattens CausewayBeanTypeRegistry
Posted by ah...@apache.org.
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
},
(causeway) 02/02: CAUSEWAY-2297: CausewayBeanTypeRegistry encapsulation
Posted by ah...@apache.org.
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 ee485793cda9b342e9aa948a721ac3abe977af17
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Nov 11 07:28:13 2024 +0100
CAUSEWAY-2297: CausewayBeanTypeRegistry encapsulation
---
.../CausewayBeanFactoryPostProcessorForSpring.java | 4 +-
.../config/beans/CausewayBeanTypeRegistry.java | 99 +++++++++++-----------
.../services/registry/ServiceRegistryDefault.java | 4 +-
.../specloader/SpecificationLoaderDefault.java | 10 +--
.../homepage/HomePageResolverServiceDefault.java | 3 +-
.../causeway/tabular/applib/DataTableProvider.java | 3 +-
.../CausewayModulePersistenceJdoDatanucleus.java | 16 ++--
7 files changed, 64 insertions(+), 75 deletions(-)
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 5335565f307..6419db41d50 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
@@ -66,11 +66,11 @@ implements
ApplicationContextAware {
private CausewayBeanTypeClassifier causewayBeanTypeClassifier;
- private Can<CausewayBeanMetaData> componentScanResult;
+ private Can<CausewayBeanMetaData> componentScanResult = Can.empty();
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
- causewayBeanTypeClassifier = CausewayBeanTypeClassifier.createInstance(applicationContext);
+ this.causewayBeanTypeClassifier = CausewayBeanTypeClassifier.createInstance(applicationContext);
}
@Override
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 cfa13340905..3ec23286b30 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,24 +18,36 @@
*/
package org.apache.causeway.core.config.beans;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Stream;
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
+ * Holds discovered domain types grouped by bean-sort.
*/
public class CausewayBeanTypeRegistry {
+ /**
+ * (immutable) scan result, as used by the SpecificationLoader for introspection
+ */
+ private final Can<CausewayBeanMetaData> introspectableTypes;
+ private final Map<Class<?>, CausewayBeanMetaData> introspectableTypesByClass = new HashMap<>();
+
+ // -- DISTINCT CATEGORIES OF BEAN SORTS
+
+ private final Map<Class<?>, CausewayBeanMetaData> managedBeansContributing = new HashMap<>();
+ private final Map<Class<?>, CausewayBeanMetaData> entityTypes = new HashMap<>();
+ private final Map<Class<?>, CausewayBeanMetaData> viewmodelTypes = new HashMap<>();
+ private final Map<Class<?>, CausewayBeanMetaData> mixinTypes = new HashMap<>();
+ private final Map<Class<?>, CausewayBeanMetaData> valueTypes = new HashMap<>();
+
// -- CONSTRUCTOR
public CausewayBeanTypeRegistry(final @NonNull Can<CausewayBeanMetaData> introspectableTypes) {
@@ -58,10 +70,10 @@ public class CausewayBeanTypeRegistry {
entityTypes.put(cls, typeMeta);
return;
case VIEW_MODEL:
- viewModelTypes.put(cls, typeMeta);
+ viewmodelTypes.put(cls, typeMeta);
return;
case VALUE:
- discoveredValueTypes.put(cls, typeMeta);
+ valueTypes.put(cls, typeMeta);
return;
// skip introspection for these
@@ -73,16 +85,30 @@ public class CausewayBeanTypeRegistry {
return;
}
});
-
- }
-
- // -- SHORTCUTS
-
- public Stream<Class<?>> streamMixinTypes() {
- return getMixinTypes().keySet().stream();
}
-
- // -- LOOKUPS
+
+ // -- SIZE
+
+ public int managedBeansContributingCount() { return managedBeansContributing.size(); }
+ public int entityTypeCount() { return entityTypes.size(); }
+ public int viewmodelTypeCount() { return viewmodelTypes.size(); }
+ public int mixinTypeCount() { return mixinTypes.size(); }
+ public int valueTypeCount() { return valueTypes.size(); }
+
+ // -- STREAM
+
+ public Stream<CausewayBeanMetaData> streamIntrospectableTypes() { return introspectableTypes.stream(); }
+ public Stream<Class<?>> streamManagedBeansContributing() { return managedBeansContributing.keySet().stream(); }
+ public Stream<Class<?>> streamEntityTypes() { return entityTypes.keySet().stream(); }
+ public Stream<Class<?>> streamViewmodelTypes() { return entityTypes.keySet().stream(); }
+ public Stream<Class<?>> streamMixinTypes() { return mixinTypes.keySet().stream(); }
+ public Stream<Class<?>> streamValueTypes() { return valueTypes.keySet().stream(); }
+
+ // -- AS SET
+
+ public Set<Class<?>> entityTypeSet() { return Collections.unmodifiableSet(entityTypes.keySet()); }
+
+ // -- LOOKUP
/**
* If given type is part of the meta-model and is available for injection,
@@ -90,9 +116,13 @@ public class CausewayBeanTypeRegistry {
* recognized by the IoC container.
*/
public Optional<String> lookupManagedBeanNameForType(final Class<?> type) {
- return Optional.ofNullable(getManagedBeansContributing().get(type))
+ return Optional.ofNullable(managedBeansContributing.get(type))
.map(CausewayBeanMetaData::getBeanName);
}
+
+ public boolean containsManagedBeansContributing(@NonNull Class<?> type) {
+ return managedBeansContributing.containsKey(type);
+ }
/**
* Returns 'JDO' or 'JPA' based on metadata found during {@link CausewayBeanTypeClassifier type-classification}.
@@ -100,7 +130,7 @@ public class CausewayBeanTypeRegistry {
* @implNote assumes that there can be only one persistence stack
*/
public PersistenceStack determineCurrentPersistenceStack() {
- return getEntityTypes().values().stream()
+ return entityTypes.values().stream()
.map(meta->meta.getPersistenceStack())
.filter(Optional::isPresent)
.map(Optional::get)
@@ -109,41 +139,8 @@ public class CausewayBeanTypeRegistry {
.orElse(PersistenceStack.UNSPECIFIED);
}
-
- /**
- * (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/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
index d53540c3708..2fe8b4d2dcd 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
@@ -102,9 +102,9 @@ public final class ServiceRegistryDefault implements ServiceRegistry {
}
private Predicate<_SingletonBeanProvider> contributes() {
- var managedBeansContributing = causewayBeanTypeRegistry.getManagedBeansContributing().keySet();
return singletonProvider->singletonProvider!=null
- ? managedBeansContributing.contains(singletonProvider.getBeanClass()) // do not register unknown sort
+ ? causewayBeanTypeRegistry.containsManagedBeansContributing(singletonProvider.getBeanClass())
+ // do not register unknown sort
: false;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/SpecificationLoaderDefault.java
index 2566f09b184..fb1562df735 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -247,7 +247,7 @@ implements
Stream
.concat(
- causewayBeanTypeRegistry.getDiscoveredValueTypes().keySet().stream(),
+ causewayBeanTypeRegistry.streamValueTypes(),
valueSemanticsResolver.get().streamClassesWithValueSemantics())
.forEach(valueClass -> {
var valueSpec = loadSpecification(valueClass, IntrospectionState.NOT_INTROSPECTED);
@@ -294,17 +294,17 @@ implements
log.info(" - introspecting {} value types", valueTypeSpecs.size());
introspect(Can.ofCollection(valueTypeSpecs.values()), IntrospectionState.FULLY_INTROSPECTED);
- log.info(" - introspecting {} mixins", causewayBeanTypeRegistry.getMixinTypes().size());
+ log.info(" - introspecting {} mixins", causewayBeanTypeRegistry.mixinTypeCount());
introspect(Can.ofCollection(mixinSpecs), IntrospectionState.FULLY_INTROSPECTED);
log.info(" - introspecting {} managed beans contributing (domain services)",
- causewayBeanTypeRegistry.getManagedBeansContributing().size());
+ causewayBeanTypeRegistry.managedBeansContributingCount());
log.info(" - introspecting {} entities ({})",
- causewayBeanTypeRegistry.getEntityTypes().size(),
+ causewayBeanTypeRegistry.entityTypeCount(),
causewayBeanTypeRegistry.determineCurrentPersistenceStack().name());
- log.info(" - introspecting {} view models", causewayBeanTypeRegistry.getViewModelTypes().size());
+ log.info(" - introspecting {} view models", causewayBeanTypeRegistry.viewmodelTypeCount());
serviceRegistry.lookupServiceElseFail(MenuBarsService.class).menuBars();
diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/homepage/HomePageResolverServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/homepage/HomePageResolverServiceDefault.java
index eb3a33495bb..7b6e0ab51bc 100644
--- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/homepage/HomePageResolverServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/homepage/HomePageResolverServiceDefault.java
@@ -67,8 +67,7 @@ public class HomePageResolverServiceDefault implements HomePageResolverService {
@PostConstruct
public void init() {
- var viewModelTypes = causewayBeanTypeRegistry.getViewModelTypes();
- viewModelTypeForHomepage = viewModelTypes.keySet().stream()
+ viewModelTypeForHomepage = causewayBeanTypeRegistry.streamViewmodelTypes()
.filter(viewModelType -> _Annotations.isPresent(viewModelType, HomePage.class))
.findFirst();
}
diff --git a/extensions/vw/tabular/applib/src/main/java/org/apache/causeway/tabular/applib/DataTableProvider.java b/extensions/vw/tabular/applib/src/main/java/org/apache/causeway/tabular/applib/DataTableProvider.java
index 8dd6fae1357..a4af509ff4c 100644
--- a/extensions/vw/tabular/applib/src/main/java/org/apache/causeway/tabular/applib/DataTableProvider.java
+++ b/extensions/vw/tabular/applib/src/main/java/org/apache/causeway/tabular/applib/DataTableProvider.java
@@ -59,8 +59,7 @@ public abstract class DataTableProvider {
}
public Stream<Class<?>> streamEntityClasses() {
- return beanTypeRegistry.getEntityTypes().keySet()
- .stream()
+ return beanTypeRegistry.streamEntityTypes()
//TODO perhaps externalize sorting
.sorted((a, b)->a.getSimpleName().compareTo(b.getSimpleName()));
}
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java
index f6a76ae3c76..f9b14acb50c 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java
@@ -77,7 +77,6 @@ import org.apache.causeway.persistence.jdo.spring.integration.LocalPersistenceMa
import org.apache.causeway.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy;
import lombok.SneakyThrows;
-
import lombok.extern.log4j.Log4j2;
/**
@@ -246,19 +245,14 @@ public class CausewayModulePersistenceJdoDatanucleus {
final List<JdoEntityDiscoveryListener> jdoEntityDiscoveryListeners,
final DatanucleusSettings dnSettings) {
- if(_NullSafe.isEmpty(jdoEntityDiscoveryListeners)) {
- return;
- }
+ if(_NullSafe.isEmpty(jdoEntityDiscoveryListeners)) return;
// assuming, as we instantiate a DN PMF, all entities discovered are JDO entities
- var jdoEntityTypes = beanTypeRegistry.getEntityTypes();
- if(_NullSafe.isEmpty(jdoEntityTypes)) {
- return;
- }
- var jdoEntityTypesView = Collections.unmodifiableSet(jdoEntityTypes.keySet());
+ if(beanTypeRegistry.entityTypeCount()==0) return;
+ var jdoEntityTypes = beanTypeRegistry.entityTypeSet();
var dnProps = Collections.unmodifiableMap(dnSettings.getAsProperties());
jdoEntityDiscoveryListeners
.forEach(listener->
- listener.onEntitiesDiscovered(pmf, jdoEntityTypesView, dnProps));
+ listener.onEntitiesDiscovered(pmf, jdoEntityTypes, dnProps));
}
/**
@@ -301,7 +295,7 @@ public class CausewayModulePersistenceJdoDatanucleus {
var pumd = new PersistenceUnitMetaData(
"dynamic-unit", "RESOURCE_LOCAL", null);
pumd.setExcludeUnlistedClasses(false);
- beanTypeRegistry.getEntityTypes().keySet().stream()
+ beanTypeRegistry.streamEntityTypes()
.map(Class::getName)
.forEach(pumd::addClassName);
return pumd;