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;
}
}