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