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 2021/06/08 07:24:33 UTC

[isis] branch master updated: ISIS-2724: MM/ValueFacet: housekeeping

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 2681d9b  ISIS-2724: MM/ValueFacet: housekeeping
2681d9b is described below

commit 2681d9b8e6e6b38e7214f53f8e986e779e21715f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jun 8 09:24:18 2021 +0200

    ISIS-2724: MM/ValueFacet: housekeeping
---
 .../facets/object/value/ValueFacetAbstract.java    |  5 +--
 .../value/annotcfg/ValueFacetAnnotation.java       | 38 ++++++++--------------
 ...ValueFacetAnnotationOrConfigurationFactory.java | 34 +++++++------------
 3 files changed, 29 insertions(+), 48 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
index 11014a7..1d6703b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
@@ -91,7 +91,8 @@ implements ValueFacet {
         // the metamodel.
         // so, we defer until we use the parser.
 
-        if (!isValid() && !addFacetsIfInvalid.shouldAddFacetsIfInvalid()) {
+        if (!hasSemanticsProvider()
+                && !addFacetsIfInvalid.shouldAddFacetsIfInvalid()) {
             return;
         }
 
@@ -147,7 +148,7 @@ implements ValueFacet {
         }
     }
 
-    public boolean isValid() {
+    public boolean hasSemanticsProvider() {
         return this.semanticsProvider != null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java
index bfb6c30..b8079a0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java
@@ -26,47 +26,37 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderUtil;
 
+import lombok.NonNull;
+
 public class ValueFacetAnnotation extends ValueFacetAbstract {
 
     public ValueFacetAnnotation(
-            IsisConfiguration config,
-            Class<?> annotatedClass,
-            FacetHolder holder) {
+            final @NonNull Value value,
+            final @NonNull IsisConfiguration config,
+            final @NonNull Class<?> annotatedClass,
+            final @NonNull FacetHolder holder) {
 
         super(ValueSemanticsProviderUtil
                 .valueSemanticsProviderOrNull(
-                        semanticsProviderClass(annotatedClass),
-                        semanticsProviderName(config, annotatedClass)),
+                        value.semanticsProviderClass(),
+                        semanticsProviderName(value, config, annotatedClass)),
                 AddFacetsIfInvalidStrategy.DO_ADD,
                 holder);
     }
 
-    /**
-     * Always valid, even if the specified semanticsProviderName might have been
-     * wrong.
-     */
-    @Override
-    public boolean isValid() {
-        return true;
-    }
-
     // -- HELPER
 
-    private static String semanticsProviderName(IsisConfiguration config, Class<?> annotatedClass) {
+    private static String semanticsProviderName(
+            final Value value,
+            final IsisConfiguration config,
+            final Class<?> annotatedClass) {
 
-        final Value annotation = annotatedClass.getAnnotation(Value.class);
-        final String semanticsProviderName = annotation.semanticsProviderName();
-        if (!_Strings.isNullOrEmpty(semanticsProviderName)) {
+        final String semanticsProviderName = value.semanticsProviderName();
+        if (_Strings.isNotEmpty(semanticsProviderName)) {
             return semanticsProviderName;
         }
         return ValueSemanticsProviderUtil
                 .semanticsProviderNameFromConfiguration(config, annotatedClass);
     }
 
-    private static Class<?> semanticsProviderClass(final Class<?> annotatedClass) {
-        final Value annotation = annotatedClass.getAnnotation(Value.class);
-        return annotation.semanticsProviderClass();
-    }
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
index cd186f4..3d44c05 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
@@ -23,10 +23,8 @@ import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
@@ -35,7 +33,6 @@ import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionF
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.facets.object.value.EqualByContentFacet;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderUtil;
 
 import lombok.val;
@@ -75,38 +72,31 @@ public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbst
     @Override
     public void process(final ProcessClassContext processClassContext) {
 
-        FacetUtil.addFacet(create(processClassContext.getCls(), processClassContext.getFacetHolder()));
-    }
-
-    /**
-     * Returns a {@link ValueFacet} implementation.
-     */
-    private ValueFacet create(final Class<?> cls, final FacetHolder holder) {
-
+        val cls = processClassContext.getCls();
+        val facetHolder = processClassContext.getFacetHolder();
+        val valueIfAny = processClassContext.synthesizeOnType(Value.class);
         val config = super.getMetaModelContext().getConfiguration();
 
         // create from annotation, if present
-        final Value annotation = Annotations.getAnnotation(cls, Value.class);
-        if (annotation != null) {
-            final ValueFacetAnnotation facet = new ValueFacetAnnotation(config, cls, holder);
-            if (facet.isValid()) {
-                return facet;
-            }
+        if (valueIfAny.isPresent()) {
+            FacetUtil.addFacet(new ValueFacetAnnotation(valueIfAny.get(), config, cls, facetHolder));
+            return;
         }
 
         // otherwise, try to create from configuration, if present
         final String semanticsProviderName = ValueSemanticsProviderUtil
                 .semanticsProviderNameFromConfiguration(config, cls);
 
-        if (!_Strings.isNullOrEmpty(semanticsProviderName)) {
-            final ValueFacetFromConfiguration facet = new ValueFacetFromConfiguration(semanticsProviderName, holder);
-            if (facet.isValid()) {
-                return facet;
+        if (_Strings.isNotEmpty(semanticsProviderName)) {
+            val valueFacet = new ValueFacetFromConfiguration(semanticsProviderName, facetHolder);
+            if (valueFacet.hasSemanticsProvider()) {
+                FacetUtil.addFacet(valueFacet);
+                return;
             }
         }
 
         // otherwise, no value semantic
-        return null;
+
     }