You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/01/28 08:06:45 UTC

[isis] branch master updated: ISIS-2948: ensure @DomainObject(logicalTypeName=...) wins over @LogicalTypeName(...)

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 b59647b  ISIS-2948: ensure @DomainObject(logicalTypeName=...) wins over @LogicalTypeName(...)
b59647b is described below

commit b59647b817e3028393019831117b239b872f4be0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 28 09:06:15 2022 +0100

    ISIS-2948: ensure @DomainObject(logicalTypeName=...) wins over
    @LogicalTypeName(...)
    
    - clearly defines facet precedence
---
 .../LogicalTypeFacetForDomainObjectAnnotation.java |  3 ++-
 ...gicalTypeFacetForLogicalTypeNameAnnotation.java |  6 +++--
 .../object/logicaltype/LogicalTypeFacet.java       | 27 ++++++++++++++++------
 .../domaintypes/DomainTypeReprRenderer.java        |  8 +++++--
 4 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java
index 5a7994b..fba6579 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java
@@ -27,7 +27,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacetAbstract;
 
-public class LogicalTypeFacetForDomainObjectAnnotation extends LogicalTypeFacetAbstract {
+public class LogicalTypeFacetForDomainObjectAnnotation
+extends LogicalTypeFacetAbstract {
 
     public static Optional<LogicalTypeFacet> create(
             final Optional<DomainObject> domainObjectIfAny,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java
index b4f6714..602abab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java
@@ -27,7 +27,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacetAbstract;
 
-public class LogicalTypeFacetForLogicalTypeNameAnnotation extends LogicalTypeFacetAbstract {
+public class LogicalTypeFacetForLogicalTypeNameAnnotation
+extends LogicalTypeFacetAbstract {
 
     public static Optional<LogicalTypeFacet> create(
             final Optional<LogicalTypeName> logicalTypeIfAny,
@@ -45,6 +46,7 @@ public class LogicalTypeFacetForLogicalTypeNameAnnotation extends LogicalTypeFac
     private LogicalTypeFacetForLogicalTypeNameAnnotation(
             final LogicalType logicalType,
             final FacetHolder holder) {
-        super(logicalType, holder);
+        // Precedence.LOW ensures, to get overruled by @DomainObject(logicalTypeName=...)
+        super(logicalType, holder, Precedence.LOW);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacet.java
index d8094b1..3c615f4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacet.java
@@ -18,18 +18,31 @@
  */
 package org.apache.isis.core.metamodel.facets.object.logicaltype;
 
-
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.LogicalTypeName;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 
-
 /**
- *  Corresponds to the value of {@link DomainObject#logicalTypeName()},
- *  that specifies the <i>logical type name</i> of a domain object.
- *  <p>
- *  The <i>logical type name</i> must be unique among non-abstract classes,
- *  but is allowed to be shared with interfaces and abstract classes.
+ * Corresponds to the value of {@link DomainObject#logicalTypeName()} or
+ * {@link LogicalTypeName#value()}, that specifies the <i>logical type name</i>
+ * of a domain object.
+ * <p>
+ * The <i>logical type name</i> must be unique, among non-abstract classes, but
+ * is allowed to be shared with interfaces and abstract classes.
+ * <p>
+ * Given an arbitrary type hierarchy
+ * <pre>
+ * class A
+ * |__class B
+ *    |__abstract class C
+ *       |__interface D
+ *          |__interface F
+ *       |__interface E
+ * </pre>
+ * Class A and B must have different logical types. Types B, C, D, E, F are
+ * in principle allowed to share the same logical type-name. In which case reverse
+ * lookup from logical-type-name to type must always resolve the most specific one (B).
  */
 public interface LogicalTypeFacet extends Facet {
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
index 3fb832f..ae6c6d2 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
@@ -36,7 +36,8 @@ import lombok.val;
 public class DomainTypeReprRenderer
 extends ReprRendererAbstract<ObjectSpecification> {
 
-    public static LinkBuilder newLinkToBuilder(final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpec) {
+    public static LinkBuilder newLinkToBuilder(
+            final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpec) {
         final String typeFullName = objectSpec.getLogicalTypeName();
         final String url = String.format("domain-types/%s", typeFullName);
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.DOMAIN_TYPE, url);
@@ -53,7 +54,10 @@ extends ReprRendererAbstract<ObjectSpecification> {
 
     private ObjectSpecification objectSpecification;
 
-    public DomainTypeReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public DomainTypeReprRenderer(
+            final IResourceContext resourceContext,
+            final LinkFollowSpecs linkFollower,
+            final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.DOMAIN_TYPE, representation);
     }