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