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

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


The following commit(s) were added to refs/heads/master by this push:
     new d8c508843f CAUSEWAY-3411: fixes PersistenceStack auto-detection
d8c508843f is described below

commit d8c508843f579eae98e256ad2f9084bab45594bf
Author: Andi Huber <[email protected]>
AuthorDate: Tue Apr 4 19:27:54 2023 +0200

    CAUSEWAY-3411: fixes PersistenceStack auto-detection
---
 core/config/src/main/java/module-info.java         |  7 ++--
 .../core/config/beans/CausewayBeanMetaData.java    | 43 ++++++++++++++--------
 .../beans/CausewayBeanTypeClassifierDefault.java   |  8 ++--
 .../config/beans/CausewayBeanTypeRegistry.java     | 18 ++++-----
 .../core/config/beans/PersistenceStack.java        | 16 ++++----
 .../jdo/metamodel/beans/JdoBeanTypeClassifier.java |  4 +-
 6 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/core/config/src/main/java/module-info.java 
b/core/config/src/main/java/module-info.java
index b1e40e92d1..0d733bb2dd 100644
--- a/core/config/src/main/java/module-info.java
+++ b/core/config/src/main/java/module-info.java
@@ -34,6 +34,10 @@ module org.apache.causeway.core.config {
     exports org.apache.causeway.core.config.validators;
     exports org.apache.causeway.core.config.viewer.web;
 
+    requires static lombok;
+
+    requires transitive org.apache.causeway.applib;
+    requires transitive org.apache.causeway.commons;
     requires jakarta.activation;
     requires java.annotation;
     requires java.persistence;
@@ -41,9 +45,6 @@ module org.apache.causeway.core.config {
     requires java.validation;
     requires java.ws.rs;
     requires java.inject;
-    requires lombok;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
     requires org.apache.logging.log4j;
     requires org.eclipse.persistence.core;
     requires org.hibernate.validator;
diff --git 
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
 
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
index ef507d741c..c9abb20f5e 100644
--- 
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
+++ 
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
@@ -18,6 +18,8 @@
  */
 package org.apache.causeway.core.config.beans;
 
+import java.util.Optional;
+
 import org.apache.causeway.applib.id.LogicalType;
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 
@@ -33,9 +35,6 @@ public class CausewayBeanMetaData {
         SPRING,
         /** other Spring managed component, or not managed at all */
         INDIFFERENT,
-        /** @deprecated in support of deprecated {@code 
@DomainService(logicalTypeName=...)}*/
-        @Deprecated
-        SPRING_NAMED_BY_CAUSEWAY,
         ;
         public boolean isNone() { return this == NONE; }
         public boolean isCauseway() { return this == CAUSEWAY; }
@@ -53,12 +52,16 @@ public class CausewayBeanMetaData {
          * Whether we interfere with Spring's naming strategy.
          */
         public boolean isBeanNameOverride() {
-            return this == CAUSEWAY
-                    || this == SPRING_NAMED_BY_CAUSEWAY;
+            return this == CAUSEWAY;
         }
     }
 
     private final @NonNull BeanSort beanSort;
+    /**
+     * Optionally the {@link PersistenceStack},
+     * based on whether {@link #getBeanSort()} is {@link BeanSort#ENTITY}.
+     */
+    private final @NonNull Optional<PersistenceStack> persistenceStack;
     private final @NonNull LogicalType logicalType;
     private @NonNull ManagedBy managedBy;
 
@@ -75,7 +78,7 @@ public class CausewayBeanMetaData {
     public static CausewayBeanMetaData notManaged(
             final @NonNull BeanSort beanSort,
             final @NonNull LogicalType logicalType) {
-        return of(beanSort, logicalType, ManagedBy.NONE);
+        return of(beanSort, Optional.empty(), logicalType, ManagedBy.NONE);
     }
 
     public static CausewayBeanMetaData notManaged(
@@ -87,16 +90,16 @@ public class CausewayBeanMetaData {
     public static CausewayBeanMetaData injectable(
             final @NonNull BeanSort beanSort,
             final @NonNull LogicalType logicalType) {
-        return of(beanSort, logicalType, ManagedBy.SPRING);
+        return of(beanSort, Optional.empty(), logicalType, ManagedBy.SPRING);
     }
 
-    /** @deprecated in support of deprecated {@code 
@DomainService(logicalTypeName=...)}*/
-    @Deprecated
-    public static CausewayBeanMetaData injectableNamedByCauseway(
-            final @NonNull BeanSort beanSort,
-            final @NonNull LogicalType logicalType) {
-        return of(beanSort, logicalType, ManagedBy.SPRING_NAMED_BY_CAUSEWAY);
-    }
+//    /** @deprecated in support of deprecated {@code 
@DomainService(logicalTypeName=...)}*/
+//    @Deprecated
+//    public static CausewayBeanMetaData injectableNamedByCauseway(
+//            final @NonNull BeanSort beanSort,
+//            final @NonNull LogicalType logicalType) {
+//        return of(beanSort, logicalType, ManagedBy.SPRING_NAMED_BY_CAUSEWAY);
+//    }
 
     /**
      * Let <i>Spring</i> decide.
@@ -104,14 +107,20 @@ public class CausewayBeanMetaData {
     public static CausewayBeanMetaData indifferent(
             final @NonNull BeanSort beanSort,
             final @NonNull Class<?> type) {
-        return of(beanSort, LogicalType.infer(type),
+        return of(beanSort, Optional.empty(), LogicalType.infer(type),
                 ManagedBy.INDIFFERENT);
     }
 
+    public static CausewayBeanMetaData entity(
+            final @NonNull PersistenceStack persistenceStack,
+            final @NonNull LogicalType logicalType) {
+        return of(BeanSort.ENTITY, Optional.of(persistenceStack), logicalType, 
ManagedBy.CAUSEWAY);
+    }
+
     public static CausewayBeanMetaData causewayManaged(
             final @NonNull BeanSort beanSort,
             final @NonNull LogicalType logicalType) {
-        return of(beanSort, logicalType, ManagedBy.CAUSEWAY);
+        return of(beanSort, Optional.empty(), logicalType, ManagedBy.CAUSEWAY);
     }
 
     public static CausewayBeanMetaData causewayManaged(
@@ -120,4 +129,6 @@ public class CausewayBeanMetaData {
         return causewayManaged(beanSort, LogicalType.infer(type));
     }
 
+
+
 }
diff --git 
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
 
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
index c6789ad558..da5a5cc183 100644
--- 
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
+++ 
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
@@ -51,7 +51,6 @@ implements CausewayBeanTypeClassifier {
     private final Can<CausewayBeanTypeClassifier> classifierPlugins = 
CausewayBeanTypeClassifier.get();
 
     // handle arbitrary types ...
-    @SuppressWarnings("deprecation")
     @Override
     public CausewayBeanMetaData classify(
             final @NonNull Class<?> type) {
@@ -126,20 +125,19 @@ implements CausewayBeanTypeClassifier {
 
         val entityAnnotation = _Annotations.synthesize(type, 
Entity.class).orElse(null);
         if(entityAnnotation!=null) {
-            return CausewayBeanMetaData.causewayManaged(BeanSort.ENTITY, 
LogicalType.infer(type));
+            return CausewayBeanMetaData.entity(PersistenceStack.JPA, 
LogicalType.infer(type));
         }
 
         val aDomainObject = _Annotations.synthesize(type, 
DomainObject.class).orElse(null);
         if(aDomainObject!=null) {
             switch (aDomainObject.nature()) {
             case BEAN:
-                val logicalType = LogicalType.infer(type);
                 return CausewayBeanMetaData
-                        
.injectableNamedByCauseway(BeanSort.MANAGED_BEAN_CONTRIBUTING, logicalType);
+                        .indifferent(BeanSort.MANAGED_BEAN_CONTRIBUTING, type);
             case MIXIN:
                 return CausewayBeanMetaData.causewayManaged(BeanSort.MIXIN, 
type);
             case ENTITY:
-                return CausewayBeanMetaData.causewayManaged(BeanSort.ENTITY, 
type);
+                return 
CausewayBeanMetaData.entity(PersistenceStack.UNSPECIFIED, 
LogicalType.infer(type));
             case VIEW_MODEL:
             case NOT_SPECIFIED:
                 //because object is not associated with a persistence context 
unless discovered above
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 2394dcc0e6..5de5d01821 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
@@ -55,17 +55,17 @@ public interface CausewayBeanTypeRegistry {
     }
 
     /**
-     * Returns either 'JDO' or 'JPA' based on what {@link 
CausewayBeanTypeClassifier} we find
-     * registered with <i>Spring</i>.
-     * Alternative implementations could be considered, however this works for 
now.
+     * Returns 'JDO' or 'JPA' based on metadata found during {@link 
CausewayBeanTypeClassifier type-classification}.
+     * If no (concrete) entity type is found, returns 'UNSPECIFIED'.
      */
     default PersistenceStack determineCurrentPersistenceStack() {
-        return CausewayBeanTypeClassifier.get().stream()
-                .map(CausewayBeanTypeClassifier::getClass)
-                .map(Class::getSimpleName)
-                .anyMatch(classifierName->classifierName.startsWith("Jdo"))
-                ? PersistenceStack.JDO
-                : PersistenceStack.JPA;
+        return getEntityTypes().values().stream()
+            .map(meta->meta.getPersistenceStack())
+            .filter(Optional::isPresent)
+            .map(Optional::get)
+            .filter(persistenceStack->!persistenceStack.isUnspecified())
+            .findFirst()
+            .orElse(PersistenceStack.UNSPECIFIED);
     }
 
 }
\ No newline at end of file
diff --git 
a/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
 
b/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
index 547bb80306..4c562ce353 100644
--- 
a/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
+++ 
b/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
@@ -23,16 +23,14 @@ import org.apache.causeway.commons.internal.base._Strings;
 public enum PersistenceStack {
     JPA,
     JDO,
-    OTHER,
+    /**
+     * eg. abstract entity type
+     */
+    UNSPECIFIED,
     ;
-
-    public boolean isJpa() {
-        return this == JPA;
-    }
-
-    public boolean isJdo() {
-        return this == JDO;
-    }
+    public boolean isJpa() { return this == JPA; }
+    public boolean isJdo() { return this == JDO; }
+    public boolean isUnspecified() { return this == UNSPECIFIED; }
 
     public String titleCase() {
         return _Strings.capitalize(_Strings.lower(name()));
diff --git 
a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
 
b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
index 97e31d96ec..eb0dc0aead 100644
--- 
a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
+++ 
b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
@@ -23,11 +23,11 @@ import java.util.Locale;
 import javax.jdo.annotations.EmbeddedOnly;
 
 import org.apache.causeway.applib.id.LogicalType;
-import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.reflection._Annotations;
 import org.apache.causeway.core.config.beans.CausewayBeanMetaData;
 import org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier;
+import org.apache.causeway.core.config.beans.PersistenceStack;
 
 import lombok.val;
 
@@ -73,7 +73,7 @@ public class JdoBeanTypeClassifier implements 
CausewayBeanTypeClassifier {
                 }
             }
 
-            return CausewayBeanMetaData.causewayManaged(BeanSort.ENTITY, 
logicalType);
+            return CausewayBeanMetaData.entity(PersistenceStack.JDO, 
logicalType);
         }
 
         return null; // we don't see fit to classify given type

Reply via email to