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/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 0cf236194d ISIS-3010: JDO: adds support for Entity and Table 
annotations
0cf236194d is described below

commit 0cf236194da5c6e00a9054f478604934f554436a
Author: andi-huber <[email protected]>
AuthorDate: Fri Apr 15 10:28:17 2022 +0200

    ISIS-3010: JDO: adds support for Entity and Table annotations
---
 .../facets/object/entity/EntityFacet.java          |   4 +-
 ...sistenceStandard.java => PersistenceStack.java} |   2 +-
 .../object/entity/_EntityFacetForTesting.java      |   2 +-
 .../isis/core/metamodel/spec/ManagedObjects.java   |   6 +-
 .../metamodel/facets/entity/JdoEntityFacet.java    |   6 +-
 .../JdoPersistenceCapableFacetFactory.java         |  50 +++++++--
 ...oPersistenceCapableFacetFromJpaAnnotations.java | 112 +++++++++++++++++++++
 .../testing/AbstractFacetFactoryTest.java          |   4 +-
 .../integration/entity/JpaEntityFacetFactory.java  |   6 +-
 .../isis/testdomain/HasPersistenceStandard.java    |   4 +-
 .../testdomain/jdo/HasPersistenceStandardJdo.java  |   6 +-
 .../testdomain/jpa/HasPersistenceStandardJpa.java  |   6 +-
 12 files changed, 179 insertions(+), 29 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
index 310c15dddf..195c075d97 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
@@ -56,12 +56,12 @@ public interface EntityFacet extends Facet {
 
     <T> T detach(T pojo);
 
-    PersistenceStandard getPersistenceStandard();
+    PersistenceStack getPersistenceStack();
 
     // -- JUNIT SUPPORT
 
     static EntityFacet forTesting(
-            final PersistenceStandard persistenceStandard,
+            final PersistenceStack persistenceStandard,
             final FacetHolder facetHolder) {
         return new _EntityFacetForTesting(persistenceStandard, facetHolder);
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStandard.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStack.java
similarity index 96%
rename from 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStandard.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStack.java
index cb02c17e66..22926c60e4 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStandard.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStack.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.object.entity;
 
-public enum PersistenceStandard {
+public enum PersistenceStack {
     JPA,
     JDO,
     OTHER,
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
index cca3abb381..157392c68b 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
@@ -37,7 +37,7 @@ import lombok.RequiredArgsConstructor;
 @RequiredArgsConstructor
 class _EntityFacetForTesting implements EntityFacet {
 
-    @Getter private final PersistenceStandard persistenceStandard;
+    @Getter private final PersistenceStack persistenceStack;
     @Getter private final FacetHolder facetHolder;
 
     @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index 54af11bf4f..bc396e4a20 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -57,7 +57,7 @@ import org.apache.isis.core.metamodel.commons.ClassExtensions;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
+import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
 import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.interactions.InteractionHead;
@@ -593,7 +593,7 @@ public final class ManagedObjects {
     public static final class EntityUtil {
 
         @NonNull
-        public static Optional<PersistenceStandard> 
getPersistenceStandard(final @Nullable ManagedObject adapter) {
+        public static Optional<PersistenceStack> getPersistenceStandard(final 
@Nullable ManagedObject adapter) {
             if(adapter==null) {
                 return Optional.empty();
             }
@@ -607,7 +607,7 @@ public final class ManagedObjects {
                 return Optional.empty();
             }
 
-            return Optional.of(entityFacet.getPersistenceStandard());
+            return Optional.of(entityFacet.getPersistenceStack());
         }
 
         @NonNull
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
index 923fe45fea..54299872d6 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
@@ -50,7 +50,7 @@ import 
org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
+import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -87,8 +87,8 @@ implements EntityFacet {
     }
 
     @Override
-    public PersistenceStandard getPersistenceStandard() {
-        return PersistenceStandard.JDO;
+    public PersistenceStack getPersistenceStack() {
+        return PersistenceStack.JDO;
     }
 
     @Override
diff --git 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetFactory.java
 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetFactory.java
index d67990b87d..78925c5eda 100644
--- 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetFactory.java
+++ 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetFactory.java
@@ -22,6 +22,8 @@ package 
org.apache.isis.persistence.jdo.metamodel.facets.object.persistencecapab
 import javax.inject.Inject;
 import javax.jdo.annotations.EmbeddedOnly;
 import javax.jdo.annotations.PersistenceCapable;
+import javax.persistence.Entity;
+import javax.persistence.Table;
 
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -53,24 +55,61 @@ implements ObjectTypeFacetFactory {
 
     @Override
     public void process(final ObjectTypeFacetFactory.ProcessObjectTypeContext 
processClassContext) {
+        if(!processJdoAnnotations(processClassContext)) {
+            processJpaAnnotations(processClassContext);
+        }
+    }
+
+    // -- HELPER
+
+    private boolean processJdoAnnotations(final ProcessObjectTypeContext 
processClassContext) {
         val cls = processClassContext.getCls();
-        val facetHolder = processClassContext.getFacetHolder();
 
         // only applies to JDO entities; ignore any view models
         if(!jdoFacetContext.isPersistenceEnhanced(cls)) {
-            return;
+            return false;
         }
 
         val persistenceCapableIfAny = 
processClassContext.synthesizeOnType(PersistenceCapable.class);
         if (!persistenceCapableIfAny.isPresent()) {
-            return;
+            return false;
         }
 
         val embeddedOnlyIfAny = 
processClassContext.synthesizeOnType(EmbeddedOnly.class);
+        val facetHolder = processClassContext.getFacetHolder();
 
-        FacetUtil.addFacetIfPresent(
+        return FacetUtil.addFacetIfPresent(
                 JdoPersistenceCapableFacetFromAnnotation
                 .create(persistenceCapableIfAny, embeddedOnlyIfAny, cls, 
facetHolder))
+        .map(jdoPersistenceCapableFacet->{
+
+            FacetUtil.addFacetIfPresent(
+                    LogicalTypeFacetFromJdoPersistenceCapableAnnotation
+                    .create(jdoPersistenceCapableFacet, cls, facetHolder));
+
+            FacetUtil.addFacet(
+                    jdoFacetContext.createEntityFacet(facetHolder));
+
+            return true; // jdoPersistenceCapableFacet was created
+        })
+        .orElse(false);
+    }
+
+    private void processJpaAnnotations(final ProcessObjectTypeContext 
processClassContext) {
+        val entityIfAny = processClassContext.synthesizeOnType(Entity.class);
+        if(!entityIfAny.isPresent()) {
+            return;
+        }
+
+        val cls = processClassContext.getCls();
+        val facetHolder = processClassContext.getFacetHolder();
+
+        //val embeddedOnlyIfAny = 
processClassContext.synthesizeOnType(Embeddable.class);
+        val tableIfAny = processClassContext.synthesizeOnType(Table.class);
+
+        FacetUtil.addFacetIfPresent(
+                JdoPersistenceCapableFacetFromJpaAnnotations
+                .create(entityIfAny, tableIfAny, cls, facetHolder))
         .ifPresent(jdoPersistenceCapableFacet->{
 
             FacetUtil.addFacetIfPresent(
@@ -80,9 +119,8 @@ implements ObjectTypeFacetFactory {
             FacetUtil.addFacet(
                     jdoFacetContext.createEntityFacet(facetHolder));
 
-        });
 
+        });
     }
 
-
 }
diff --git 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetFromJpaAnnotations.java
 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetFromJpaAnnotations.java
new file mode 100644
index 0000000000..9cc96f11e3
--- /dev/null
+++ 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetFromJpaAnnotations.java
@@ -0,0 +1,112 @@
+/*
+ *  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.isis.persistence.jdo.metamodel.facets.object.persistencecapable;
+
+import java.util.Optional;
+import java.util.function.BiConsumer;
+
+import javax.jdo.annotations.IdentityType;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.persistence.jdo.provider.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
+
+import lombok.val;
+
+public class JdoPersistenceCapableFacetFromJpaAnnotations
+extends FacetAbstract
+implements JdoPersistenceCapableFacet {
+
+    private final String schema;
+    private final String table;
+    private final IdentityType identityType;
+
+    public static Optional<JdoPersistenceCapableFacet> create(
+            final Optional<Entity> entityIfAny,
+            final Optional<Table> tableIfAny,
+            final Class<?> cls,
+            final FacetHolder facetHolder) {
+
+        if(!entityIfAny.isPresent()) {
+            return Optional.empty();
+        }
+
+        //val entity = entityIfAny.get(); // optionally has a name, we don't 
use yet
+
+        val table = tableIfAny
+            .map(tableAnnot->tableAnnot.name())
+            .map(_Strings::emptyToNull)
+            .orElseGet(cls::getSimpleName);
+
+        val schema = tableIfAny
+                .map(tableAnnot->tableAnnot.schema())
+                .map(_Strings::emptyToNull)
+                .orElseGet(cls::getSimpleName);
+
+
+        val identityType = IdentityType.UNSPECIFIED;
+
+        return Optional.of(new JdoPersistenceCapableFacetFromJpaAnnotations(
+                schema,
+                table,
+                identityType,
+                facetHolder));
+
+    }
+
+    private JdoPersistenceCapableFacetFromJpaAnnotations(
+            final String schemaName,
+            final String tableOrTypeName,
+            final IdentityType identityType,
+            final FacetHolder holder) {
+
+        super(JdoPersistenceCapableFacet.class, holder);
+        this.schema = schemaName;
+        this.table = tableOrTypeName;
+        this.identityType = identityType;
+    }
+
+    @Override
+    public IdentityType getIdentityType() {
+        return identityType;
+    }
+
+    @Override
+    public String getSchema() {
+        return schema;
+    }
+
+    @Override
+    public String getTable() {
+        return table;
+    }
+
+    @Override
+    public void visitAttributes(final BiConsumer<String, Object> visitor) {
+        super.visitAttributes(visitor);
+        visitor.accept("schema", schema);
+        visitor.accept("table", table);
+        visitor.accept("identityType", identityType);
+    }
+
+
+}
diff --git 
a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
 
b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
index 1576e944fa..51601ef26a 100644
--- 
a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
+++ 
b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
@@ -40,7 +40,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
+import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.security.authentication.InteractionContextFactory;
@@ -164,7 +164,7 @@ public abstract class AbstractFacetFactoryTest extends 
TestCase {
             }
             @Override
             public EntityFacet createEntityFacet(final FacetHolder 
facetHolder) {
-                return EntityFacet.forTesting(PersistenceStandard.JDO, 
facetHolder);
+                return EntityFacet.forTesting(PersistenceStack.JDO, 
facetHolder);
             }
         };
     }
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
index 1c289ac07b..9851d41230 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
@@ -53,7 +53,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
+import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -108,8 +108,8 @@ extends FacetFactoryAbstract {
         // -- ENTITY FACET
 
         @Override
-        public PersistenceStandard getPersistenceStandard() {
-            return PersistenceStandard.JPA;
+        public PersistenceStack getPersistenceStack() {
+            return PersistenceStack.JPA;
         }
 
         @Override
diff --git 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
index 44bd64250d..add3355275 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
@@ -19,11 +19,11 @@
 package org.apache.isis.testdomain;
 
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
+import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
 
 public interface HasPersistenceStandard {
 
-    PersistenceStandard getPersistenceStandard();
+    PersistenceStack getPersistenceStandard();
 
     default String formatPersistenceStandardSpecificLowerCase(final String 
format) {
         return String.format(
diff --git 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
index ba1fbb0937..b8a8e3985a 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
@@ -18,15 +18,15 @@
  */
 package org.apache.isis.testdomain.jdo;
 
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
+import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
 import org.apache.isis.testdomain.HasPersistenceStandard;
 
 public interface HasPersistenceStandardJdo
 extends HasPersistenceStandard {
 
     @Override
-    default PersistenceStandard getPersistenceStandard() {
-        return PersistenceStandard.JDO;
+    default PersistenceStack getPersistenceStandard() {
+        return PersistenceStack.JDO;
     }
 
 }
diff --git 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
index dac259a0fd..5e246851ed 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
@@ -18,15 +18,15 @@
  */
 package org.apache.isis.testdomain.jpa;
 
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
+import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
 import org.apache.isis.testdomain.HasPersistenceStandard;
 
 public interface HasPersistenceStandardJpa
 extends HasPersistenceStandard {
 
     @Override
-    default PersistenceStandard getPersistenceStandard() {
-        return PersistenceStandard.JPA;
+    default PersistenceStack getPersistenceStandard() {
+        return PersistenceStack.JPA;
     }
 
 }

Reply via email to