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