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/12/21 11:52:27 UTC

[isis] branch master updated: ISIS-2882: properly implement facets for typ.len./max.len./defaults

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 a8cefd0  ISIS-2882: properly implement facets for  typ.len./max.len./defaults
a8cefd0 is described below

commit a8cefd07c2ac5acbfce0ebc9dee2f8d46173cffa
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 21 12:52:20 2021 +0100

    ISIS-2882: properly implement facets for  typ.len./max.len./defaults
    
    - as now based on ValueFacet
---
 ...ider.java => DefaultedFacetFromValueFacet.java} | 16 ++++++---
 ...rser.java => MaxLengthFacetFromValueFacet.java} | 25 ++++++++++----
 ....java => TypicalLengthFacetFromValueFacet.java} | 13 ++++++--
 .../metamodel/facets/object/value/ValueFacet.java  |  7 +++-
 .../facets/object/value/ValueFacetAbstract.java    | 13 ++++++++
 ...ionOrAnyMatchingValueSemanticsFacetFactory.java | 39 ++++------------------
 6 files changed, 66 insertions(+), 47 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetUsingDefaultsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFromValueFacet.java
similarity index 71%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetUsingDefaultsProvider.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFromValueFacet.java
index d168f89..df2614d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetUsingDefaultsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFromValueFacet.java
@@ -18,19 +18,27 @@
  */
 package org.apache.isis.core.metamodel.facets.object.defaults;
 
+import java.util.Optional;
+
 import org.apache.isis.applib.value.semantics.DefaultsProvider;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 
-public class DefaultedFacetUsingDefaultsProvider
+public class DefaultedFacetFromValueFacet
 extends DefaultedFacetAbstract
 implements DefaultedFacet {
 
-    public DefaultedFacetUsingDefaultsProvider(
+    public static Optional<DefaultedFacet> create(final ValueFacet<?> valueFacet, final FacetHolder holder) {
+        return valueFacet.selectDefaultDefaultsProvider()
+                .map(defaultsProvider->new DefaultedFacetFromValueFacet(defaultsProvider, holder));
+    }
+
+    // -- CONSTRUCTION
+
+    private DefaultedFacetFromValueFacet(
             final DefaultsProvider<?> defaultsProvider,
             final FacetHolder holder) {
         super(defaultsProvider, holder);
     }
 
-   
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetFromValueFacet.java
similarity index 73%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetFromValueFacet.java
index 7460d64..86298fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetFromValueFacet.java
@@ -18,25 +18,30 @@
  */
 package org.apache.isis.core.metamodel.facets.object.value;
 
+import java.util.Optional;
 import java.util.function.BiConsumer;
 
 import org.apache.isis.applib.value.semantics.Parser;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacetAbstract;
 
-public class MaxLengthFacetUsingParser
+public class MaxLengthFacetFromValueFacet
 extends MaxLengthFacetAbstract{
 
     private final Parser<?> parser;
 
-    public MaxLengthFacetUsingParser(final Parser<?> parser, final FacetHolder holder) {
-        super(parser.maxLength(), holder);
-        this.parser = parser;
+    public static Optional<MaxLengthFacet> create(final ValueFacet<?> valueFacet, final FacetHolder holder) {
+        return valueFacet.selectDefaultParser()
+                .filter(parser->parser.maxLength()>=0)
+                .map(parser->new MaxLengthFacetFromValueFacet(parser, holder));
     }
 
-    @Override
-    public String toString() {
-        return "maxLength=" + value();
+    // -- CONSTRUCTION
+
+    private MaxLengthFacetFromValueFacet(final Parser<?> parser, final FacetHolder holder) {
+        super(parser.maxLength(), holder);
+        this.parser = parser;
     }
 
     @Override
@@ -44,4 +49,10 @@ extends MaxLengthFacetAbstract{
         super.visitAttributes(visitor);
         visitor.accept("parser", parser.toString());
     }
+
+    @Override
+    public String toString() {
+        return "maxLength=" + value();
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/TypicalLengthFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/TypicalLengthFacetFromValueFacet.java
similarity index 73%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/TypicalLengthFacetUsingParser.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/TypicalLengthFacetFromValueFacet.java
index cd7c623..b3db0d8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/TypicalLengthFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/TypicalLengthFacetFromValueFacet.java
@@ -18,18 +18,27 @@
  */
 package org.apache.isis.core.metamodel.facets.object.value;
 
+import java.util.Optional;
 import java.util.function.BiConsumer;
 
 import org.apache.isis.applib.value.semantics.Parser;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacetAbstract;
 
-public class TypicalLengthFacetUsingParser
+public class TypicalLengthFacetFromValueFacet
 extends TypicalLengthFacetAbstract {
 
     private final Parser<?> parser;
 
-    public TypicalLengthFacetUsingParser(final Parser<?> parser, final FacetHolder holder) {
+    public static Optional<TypicalLengthFacet> create(final ValueFacet<?> valueFacet, final FacetHolder holder) {
+        return valueFacet.selectDefaultParser()
+                .map(parser->new TypicalLengthFacetFromValueFacet(parser, holder));
+    }
+
+    // -- CONSTRUCTION
+
+    private TypicalLengthFacetFromValueFacet(final Parser<?> parser, final FacetHolder holder) {
         super(parser.typicalLength(), holder);
         this.parser = parser;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java
index 3d3d45f..30c5039 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java
@@ -25,6 +25,7 @@ import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
+import org.apache.isis.applib.value.semantics.DefaultsProvider;
 import org.apache.isis.applib.value.semantics.EncoderDecoder;
 import org.apache.isis.applib.value.semantics.OrderRelation;
 import org.apache.isis.applib.value.semantics.Parser;
@@ -67,6 +68,11 @@ public interface ValueFacet<T> extends Facet {
     /** no qualifiers allowed on the default semantics provider*/
     Optional<OrderRelation<T, ?>> selectDefaultOrderRelation();
 
+    // -- DEFAULTS PROVIDER
+
+    /** no qualifiers allowed on the default semantics provider*/
+    Optional<DefaultsProvider<T>> selectDefaultDefaultsProvider();
+
     // -- ENCODER DECODER
 
     /** no qualifiers allowed on the default semantics provider*/
@@ -127,5 +133,4 @@ public interface ValueFacet<T> extends Facet {
     }
 
 
-
 }
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 f1b7a7c..6a1abb8 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
@@ -27,6 +27,7 @@ import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
+import org.apache.isis.applib.value.semantics.DefaultsProvider;
 import org.apache.isis.applib.value.semantics.EncoderDecoder;
 import org.apache.isis.applib.value.semantics.OrderRelation;
 import org.apache.isis.applib.value.semantics.Parser;
@@ -120,6 +121,18 @@ implements ValueFacet<T> {
                 .map(rel->(OrderRelation<T, ?>)rel);
     }
 
+    // -- DEFAULTS PROVIDER
+
+    @Override
+    public Optional<DefaultsProvider<T>> selectDefaultDefaultsProvider() {
+        return getValueSemantics()
+                .stream()
+                .filter(isMatchingAnyOf(Can.empty()))
+                .map(ValueSemanticsProvider::getDefaultsProvider)
+                .filter(_NullSafe::isPresent)
+                .findFirst();
+    }
+
     // -- ENCODER DECODER
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java
index 4016ab2..3431e93 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java
@@ -21,9 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.value.annotcfg;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.applib.value.semantics.DefaultsProvider;
 import org.apache.isis.applib.value.semantics.EncoderDecoder;
-import org.apache.isis.applib.value.semantics.Parser;
 import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
 import org.apache.isis.applib.value.semantics.ValueSemanticsResolver;
 import org.apache.isis.commons.collections.Can;
@@ -32,7 +30,7 @@ import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetUsingDefaultsProvider;
+import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFromValueFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetFromValueFacet;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
@@ -41,8 +39,8 @@ import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionF
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.facets.object.title.parser.TitleFacetUsingValueFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ImmutableFacetViaValueSemantics;
-import org.apache.isis.core.metamodel.facets.object.value.MaxLengthFacetUsingParser;
-import org.apache.isis.core.metamodel.facets.object.value.TypicalLengthFacetUsingParser;
+import org.apache.isis.core.metamodel.facets.object.value.MaxLengthFacetFromValueFacet;
+import org.apache.isis.core.metamodel.facets.object.value.TypicalLengthFacetFromValueFacet;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProvider;
 import org.apache.isis.core.metamodel.facets.value.annotation.LogicalTypeFacetForValueAnnotation;
 
@@ -134,34 +132,9 @@ extends FacetFactoryAbstract {
         addFacet(TitleFacetUsingValueFacet.create(valueFacet, holder));
 
         addFacetIfPresent(EncodableFacetFromValueFacet.create(valueFacet, holder));
-
-        semanticsProviders
-        .forEach(semanticsProvider->{
-
-            // install the ParseableFacet and other facets if we've been given a
-            // Parser
-            final Parser<?> parser = semanticsProvider.getParser();
-            if (parser != null) {
-
-                //holder.getServiceInjector().injectServicesInto(parser);
-               //FIXME[ISIS-2882] convert to using value-facet, see EncodableFacetFromValueFacet
-                holder.addFacet(new TypicalLengthFacetUsingParser(parser, holder));
-                final int maxLength = parser.maxLength();
-                if(maxLength >=0) {
-                   //FIXME convert to using value-facet
-                    addFacet(new MaxLengthFacetUsingParser(parser, holder));
-                }
-            }
-
-            // install the DefaultedFacet if we've been given a DefaultsProvider
-            final DefaultsProvider<?> defaultsProvider = semanticsProvider.getDefaultsProvider();
-            if (defaultsProvider != null) {
-                //holder.getServiceInjector().injectServicesInto(defaultsProvider);
-                //FIXME[ISIS-2882] convert to using value-facet, see EncodableFacetFromValueFacet
-                addFacet(new DefaultedFacetUsingDefaultsProvider(defaultsProvider, holder));
-            }
-
-        });
+        addFacetIfPresent(TypicalLengthFacetFromValueFacet.create(valueFacet, holder));
+        addFacetIfPresent(MaxLengthFacetFromValueFacet.create(valueFacet, holder));
+        addFacetIfPresent(DefaultedFacetFromValueFacet.create(valueFacet, holder));
 
     }