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/10/13 09:13:35 UTC

[isis] branch master updated: ISIS-3247: change precedence order of ViewModelFacets

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 6e30a45839 ISIS-3247: change precedence order of ViewModelFacets
6e30a45839 is described below

commit 6e30a45839320b21071b774acca8ab9021d50413
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 13 11:13:22 2022 +0200

    ISIS-3247: change precedence order of ViewModelFacets
    
    - have JAXB strategy be overruled by others except 'fallback'
---
 .../object/viewmodel/ViewModelFacetFactory.java    | 22 ++++++++++------------
 .../ViewModelFacetForDomainObjectAnnotation.java   |  4 ++--
 .../ViewModelFacetForSerializableInterface.java    |  2 +-
 .../ViewModelFacetForViewModelInterface.java       |  2 +-
 .../ViewModelFacetForXmlRootElementAnnotation.java | 20 +++++++++++++++++---
 5 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java
index bb935d73df..a883641459 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java
@@ -65,27 +65,25 @@ implements
         val type = processClassContext.getCls();
         val postConstructMethodCache = this;
 
-        // (with default precedence)
+        // XmlRootElement annotation (with default precedence)
+        val xmlRootElementIfAny = processClassContext.synthesizeOnType(XmlRootElement.class);
+        FacetUtil
+        .addFacetIfPresent(
+                ViewModelFacetForXmlRootElementAnnotation
+                .create(xmlRootElementIfAny, facetHolder, postConstructMethodCache));
+
+        // (with high precedence)
         FacetUtil
         .addFacetIfPresent(
-            // either ViewModel interface
+            // either ViewModel interface (highest precedence)
             ViewModelFacetForViewModelInterface.create(type, facetHolder, postConstructMethodCache)
             // or Serializable interface (if any)
             .or(()->ViewModelFacetForSerializableInterface.create(type, facetHolder, postConstructMethodCache)));
 
-        // XmlRootElement annotation (with higher precedence)
-        val xmlRootElementIfAny = processClassContext.synthesizeOnType(XmlRootElement.class);
-        if(xmlRootElementIfAny.isPresent()) {
-            FacetUtil.addFacet(
-                    new ViewModelFacetForXmlRootElementAnnotation(
-                            facetHolder, postConstructMethodCache));
-        }
-
-        // DomainObject(nature=VIEW_MODEL) is managed by the DomainObjectAnnotationFacetFactory
+        // DomainObject(nature=VIEW_MODEL) is managed by the DomainObjectAnnotationFacetFactory as a fallback strategy
     }
 
 
-
     // //////////////////////////////////////
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
index c7183b3e98..2819bd79aa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
@@ -88,8 +88,8 @@ extends ViewModelFacetAbstract {
     protected ViewModelFacetForDomainObjectAnnotation(
             final FacetHolder holder,
             final HasPostConstructMethodCache postConstructMethodCache) {
-
-        super(holder, postConstructMethodCache, Precedence.LOW); // is overruled by any other ViewModelFacet type
+        // is overruled by any other ViewModelFacet type
+        super(holder, postConstructMethodCache, Precedence.LOW);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java
index 5a116af20c..7fd681bff8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java
@@ -57,7 +57,7 @@ extends ViewModelFacetAbstract {
     protected ViewModelFacetForSerializableInterface(
             final FacetHolder holder,
             final HasPostConstructMethodCache postConstructMethodCache) {
-        super(holder, postConstructMethodCache);
+        super(holder, postConstructMethodCache, Precedence.HIGH);
     }
 
     @SneakyThrows
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
index 9f6f6daa2a..14c133a226 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
@@ -68,7 +68,7 @@ extends ViewModelFacetAbstract {
     protected ViewModelFacetForViewModelInterface(
             final FacetHolder holder,
             final HasPostConstructMethodCache postConstructMethodCache) {
-        super(holder, postConstructMethodCache);
+        super(holder, postConstructMethodCache,  Precedence.HIGH);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
index 58c6325f9e..ba9b0a4c6d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
@@ -18,6 +18,10 @@
  */
 package org.apache.isis.core.metamodel.facets.object.viewmodel;
 
+import java.util.Optional;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
@@ -35,11 +39,21 @@ import lombok.val;
 public class ViewModelFacetForXmlRootElementAnnotation
 extends ViewModelFacetAbstract {
 
-    public ViewModelFacetForXmlRootElementAnnotation(
-            final FacetHolder holder,
+    public static Optional<ViewModelFacet> create(
+            final Optional<XmlRootElement> xmlRootElementIfAny,
+            final FacetHolder facetHolder,
             final HasPostConstructMethodCache postConstructMethodCache) {
 
-        super(holder, postConstructMethodCache, Precedence.HIGH); // overrules any other ViewModelFacet type
+        return xmlRootElementIfAny.map(xmlRootElement->
+            new ViewModelFacetForXmlRootElementAnnotation(
+                    facetHolder, postConstructMethodCache));
+    }
+
+    private ViewModelFacetForXmlRootElementAnnotation(
+            final FacetHolder facetHolder,
+            final HasPostConstructMethodCache postConstructMethodCache) {
+        // overruled by other non fallback ViewModelFacet types
+        super(facetHolder, postConstructMethodCache, Precedence.DEFAULT);
     }
 
     @Override