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/11/05 12:14:23 UTC
[isis] branch master updated: ISIS-2871: replace experimental
@Property(valueSemantics="qualifierXxx") with new
@ValueSemantics(provider="qualifierXxx")
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 2906c60 ISIS-2871: replace experimental @Property(valueSemantics="qualifierXxx") with new @ValueSemantics(provider="qualifierXxx")
2906c60 is described below
commit 2906c601b3ccb4c60e3a2f6b9554e0e5fd1a339f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Nov 5 13:14:14 2021 +0100
ISIS-2871: replace experimental
@Property(valueSemantics="qualifierXxx")
with new
@ValueSemantics(provider="qualifierXxx")
---
.../applib/adapters/ValueSemanticsAbstract.java | 7 +-
.../apache/isis/applib/annotation/Property.java | 18 ------
.../isis/applib/annotation/ValueSemantics.java | 45 +++++++++++++
.../property/PropertyAnnotationFacetFactory.java | 11 ----
.../ValueSemanticsAnnotationFacetFactory.java | 74 ++++++++++++++++++++++
...ValueSemanticsSelectingFacetForAnnotation.java} | 16 ++---
.../dflt/ProgrammingModelFacetsJava11.java | 3 +
.../facets/param/name/ParameterNameFacetTest.java | 2 +-
.../HasAsciiDocDescription_description.java | 5 +-
.../jdkmath/BigDecimalConverter_roundtrip.java | 12 ----
10 files changed, 139 insertions(+), 54 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java
index d1f9f75..50606a8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java
@@ -130,7 +130,9 @@ implements
}
val format = getNumberFormat(context);
format.setParseBigDecimal(true);
+ System.err.printf("before configure %d%n", format.getMaximumFractionDigits()); //FIXME[ISIS-2741] debug remove
configureDecimalFormat(context, format);
+ System.err.printf("after configure %d%n", format.getMaximumFractionDigits()); //FIXME[ISIS-2741] debug remove
val position = new ParsePosition(0);
try {
@@ -150,8 +152,9 @@ implements
}
return number;
} catch (final NumberFormatException | ParseException e) {
- System.err.printf("suppressed message %s%n", e.getMessage()); //FIXME[ISIS-2741] remove (debug)
- throw new TextEntryParseException("Not a decimal value " + input, e);
+ throw new TextEntryParseException(String.format(
+ "Not a decimal value '%s': %s", input, e.getMessage()),
+ e);
}
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
index 78c4ab0..d6d9ebc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
@@ -24,7 +24,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
import org.apache.isis.applib.events.domain.PropertyDomainEvent;
import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto;
@@ -293,21 +292,4 @@ public @interface Property {
String regexPatternReplacement()
default "Doesn't match pattern";
- /**
- * <i>Experimental Feature</i>
- * <p>
- * Allows to select {@link ValueSemanticsProvider}(s) by qualifiers.
- *
- * TODO not provided yet...
- * @see Parameter#valueSemantics()
- * @see Action#valueSemantics()
- * @see Collection#valueSemantics()
- * @apiNote the selection (qualifier inclusion/exclusion) mechanics is not yet finalized,
- * currently a single qualifier declared here must exactly match that of the targeted bean
- */
- String valueSemantics()
- default "";
-
-
-
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/ValueSemantics.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/ValueSemantics.java
new file mode 100644
index 0000000..1dc60a0
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/ValueSemantics.java
@@ -0,0 +1,45 @@
+package org.apache.isis.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.Locale;
+
+import org.apache.isis.applib.adapters.ValueSemanticsProvider;
+
+/**
+ * Collects all the value-type specific customization attributes.
+ *
+ * @apiNote These are understood to be agnostic to the actual {@link Locale} in use.
+ *
+ * @see Action
+ * @see Collection
+ * @see Property
+ * @see Parameter
+ *
+ * @since 2.x {@index}
+ */
+@Inherited
+@Target({
+ ElementType.METHOD,
+ ElementType.FIELD,
+ ElementType.TYPE,
+ ElementType.ANNOTATION_TYPE
+})
+@Retention(RetentionPolicy.RUNTIME)
+@Domain.Include // meta annotation, in support of meta-model validation
+public @interface ValueSemantics {
+
+ /**
+ * <p>
+ * Allows to select {@link ValueSemanticsProvider}(s) by qualifier.
+ *
+ * @apiNote the selection (qualifier inclusion/exclusion) mechanics is not yet finalized,
+ * currently a single qualifier declared here must exactly match that of the targeted bean
+ */
+ String provider()
+ default "";
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index d9b4028..4a0f8b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -57,7 +57,6 @@ import org.apache.isis.core.metamodel.facets.properties.property.mustsatisfy.Mus
import org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty;
import org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation;
import org.apache.isis.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.property.valuesemantics.ValueSemanticsSelectingFacetForPropertyAnnotation;
import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -99,7 +98,6 @@ extends FacetFactoryAbstract {
processOptional(processMethodContext, propertyIfAny);
processRegEx(processMethodContext, propertyIfAny);
processFileAccept(processMethodContext, propertyIfAny);
- processValueSemantics(processMethodContext, propertyIfAny);
}
void inferIntentWhenOnTypeLevel(final ProcessMethodContext processMethodContext, final Optional<Property> propertyIfAny) {
@@ -380,13 +378,4 @@ extends FacetFactoryAbstract {
.create(propertyIfAny, holder));
}
- void processValueSemantics(final ProcessMethodContext processMethodContext, final Optional<Property> propertyIfAny) {
- val holder = processMethodContext.getFacetHolder();
-
- // check for @Property(valueSemantics=...)
- addFacetIfPresent(
- ValueSemanticsSelectingFacetForPropertyAnnotation
- .create(propertyIfAny, holder));
- }
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
new file mode 100644
index 0000000..5aec743
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.facets.value.semantics;
+
+import java.math.BigDecimal;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.ValueSemantics;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.TypedHolderAbstract;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForAmbiguousMixinAnnotations;
+
+import lombok.val;
+
+public class ValueSemanticsAnnotationFacetFactory
+extends FacetFactoryAbstract {
+
+ @Inject
+ public ValueSemanticsAnnotationFacetFactory(final MetaModelContext mmc) {
+ super(mmc, FeatureType.EVERYTHING);
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+ val valueSemanticsIfAny = processMethodContext
+ .synthesizeOnMethodOrMixinType(
+ ValueSemantics.class,
+ () -> MetaModelValidatorForAmbiguousMixinAnnotations
+ .addValidationFailure(processMethodContext.getFacetHolder(), ValueSemantics.class));
+ processProvider(processMethodContext.getFacetHolder(), valueSemanticsIfAny);
+ }
+
+ @Override
+ public void processParams(final ProcessParameterContext processParameterContext) {
+ if(BigDecimal.class != processParameterContext.getParameterType()) {
+ return;
+ }
+ val valueSemanticsIfAny = processParameterContext.synthesizeOnParameter(ValueSemantics.class);
+ processProvider(processParameterContext.getFacetHolder(), valueSemanticsIfAny);
+ }
+
+ // -- HELPER
+
+ void processProvider(
+ final TypedHolderAbstract facetHolder,
+ final Optional<ValueSemantics> valueSemanticsIfAny) {
+
+ // check for @ValueSemantics(provider=...)
+ addFacetIfPresent(
+ ValueSemanticsSelectingFacetForAnnotation
+ .create(valueSemanticsIfAny, facetHolder));
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/valuesemantics/ValueSemanticsSelectingFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsSelectingFacetForAnnotation.java
similarity index 75%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/valuesemantics/ValueSemanticsSelectingFacetForPropertyAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsSelectingFacetForAnnotation.java
index e1a303b..c07fad5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/valuesemantics/ValueSemanticsSelectingFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsSelectingFacetForAnnotation.java
@@ -16,30 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.properties.property.valuesemantics;
+package org.apache.isis.core.metamodel.facets.value.semantics;
import java.util.Optional;
-import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.ValueSemantics;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.objectvalue.valuesemantics.ValueSemanticsSelectingFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.valuesemantics.ValueSemanticsSelectingFacetAbstract;
-public class ValueSemanticsSelectingFacetForPropertyAnnotation
+public class ValueSemanticsSelectingFacetForAnnotation
extends ValueSemanticsSelectingFacetAbstract {
public static Optional<ValueSemanticsSelectingFacet> create(
- final Optional<Property> propertyIfAny,
+ final Optional<ValueSemantics> valueSemanticsIfAny,
final FacetHolder holder) {
- return propertyIfAny
- .map(Property::valueSemantics)
+ return valueSemanticsIfAny
+ .map(ValueSemantics::provider)
.filter(_Strings::isNotEmpty)
- .map(valueSemantics -> new ValueSemanticsSelectingFacetForPropertyAnnotation(valueSemantics, holder));
+ .map(valueSemantics -> new ValueSemanticsSelectingFacetForAnnotation(valueSemantics, holder));
}
- private ValueSemanticsSelectingFacetForPropertyAnnotation(final String value, final FacetHolder holder) {
+ private ValueSemanticsSelectingFacetForAnnotation(final String value, final FacetHolder holder) {
super(value, holder);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 69fbcbb..336ee59 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -83,6 +83,7 @@ import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyL
import org.apache.isis.core.metamodel.facets.properties.update.PropertySetterFacetFactory;
import org.apache.isis.core.metamodel.facets.properties.validating.dflt.PropertyValidateFacetDefaultFactory;
import org.apache.isis.core.metamodel.facets.properties.validating.method.PropertyValidateFacetViaMethodFactory;
+import org.apache.isis.core.metamodel.facets.value.semantics.ValueSemanticsAnnotationFacetFactory;
import org.apache.isis.core.metamodel.methods.DomainIncludeAnnotationEnforcesMetamodelContributionValidator;
import org.apache.isis.core.metamodel.methods.MethodByClassMap;
import org.apache.isis.core.metamodel.postprocessors.DeriveMixinMembersPostProcessor;
@@ -214,6 +215,8 @@ extends ProgrammingModelAbstract {
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new HiddenTypeFacetDerivedFromAuthorizationFactory(mmc));
+ addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new ValueSemanticsAnnotationFacetFactory(mmc));
+
addFactory(FacetProcessingOrder.F1_LAYOUT, new GridFacetFactory(mmc));
// must come before DomainObjectLayoutFacetFactory
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
index cf5f93e..b10185d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
@@ -67,7 +67,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
@Test
public void verifyProgrammingModelNumberOfFactories() {
- assertEquals(63, programmingModel.streamFactories().count());
+ assertEquals(64, programmingModel.streamFactories().count());
}
@Test //verify we have the javac -parameter flag set when compiling this class
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java
index 698fd21..deb85b1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.annotation.LabelPosition;
import org.apache.isis.applib.annotation.Property;
import org.apache.isis.applib.annotation.PropertyLayout;
import org.apache.isis.applib.annotation.Snapshot;
+import org.apache.isis.applib.annotation.ValueSemantics;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
@@ -31,8 +32,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom._infra.resources.AsciiDocReaderService;
-@Property(snapshot = Snapshot.EXCLUDED
- , valueSemantics = "demo-adoc-pre-processor")
+@Property(snapshot = Snapshot.EXCLUDED)
+@ValueSemantics(provider = "demo-adoc-pre-processor")
@RequiredArgsConstructor
public class HasAsciiDocDescription_description {
diff --git a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java
index 50a68d7..db2f824 100644
--- a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java
+++ b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java
@@ -39,10 +39,8 @@ import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.core.config.valuetypes.ValueSemanticsRegistry;
import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
import org.apache.isis.core.metamodel.valuesemantics.BigDecimalValueSemantics;
import org.apache.isis.core.security._testing.InteractionService_forTesting;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ConverterBasedOnValueSemantics;
import lombok.Getter;
import lombok.Setter;
@@ -61,16 +59,6 @@ class BigDecimalConverter_roundtrip {
private InteractionService interactionService;
private MetaModelContext mmc;
- private static class BigDecimalConverterForFeature
- extends ConverterBasedOnValueSemantics<BigDecimal> {
-
- private static final long serialVersionUID = 1L;
-
- protected BigDecimalConverterForFeature(final ObjectFeature propOrParam) {
- super(propOrParam);
- }
- }
-
@BeforeEach
void setUp() throws Exception {