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/09/17 12:37:38 UTC
[isis] branch master updated: ISIS-2871: remove parseable facet
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 f759d34 ISIS-2871: remove parseable facet
f759d34 is described below
commit f759d34e1a42668e276d59aba7276884a6eeb53c
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 17 14:35:40 2021 +0200
ISIS-2871: remove parseable facet
---
.../internal/binding/_BindableAbstract.java | 18 ++-
.../choices/enums/EnumValueSemanticsProvider.java | 6 +-
.../facets/object/parseable/ParseableFacet.java | 54 --------
.../parseable/ParseableFacetUsingParser.java | 154 ---------------------
...ionOrAnyMatchingValueSemanticsFacetFactory.java | 4 -
.../ValueFacetUsingSemanticsProviderFactory.java | 3 -
.../ValueSemanticsProviderAndFacetAbstract.java | 16 ++-
.../chg/v2/ChangesDtoValueSemanticsProvider.java | 4 +-
.../cmd/v2/CommandDtoValueSemanticsProvider.java | 4 +-
.../v2/InteractionDtoValueSemanticsProvider.java | 4 +-
.../ValueSemanticsProviderAbstractTemporal.java | 2 +-
.../BigIntegerValueSemanticsProvider.java | 2 +-
.../bytes/ByteValueSemanticsProviderAbstract.java | 2 +-
.../chars/CharValueSemanticsProviderAbstract.java | 2 +-
.../JodaLocalDateValueSemanticsProvider.java | 4 +-
.../JodaLocalDateTimeValueSemanticsProvider.java | 4 +-
.../DoubleValueSemanticsProviderAbstract.java | 2 +-
.../FloatValueSemanticsProviderAbstract.java | 2 +-
.../image/ImageValueSemanticsProviderAbstract.java | 2 +-
.../integer/IntValueSemanticsProviderAbstract.java | 2 +-
.../longs/LongValueSemanticsProviderAbstract.java | 2 +-
.../ShortValueSemanticsProviderAbstract.java | 2 +-
.../TemporalValueSemanticsProviderAbstract.java | 2 +-
.../managed/ParameterNegotiationModel.java | 21 +--
.../managed/PropertyNegotiationModel.java | 28 ++--
.../interactions/managed/_BindingUtil.java | 97 +++++++++++++
.../core/metamodel/spec/ObjectSpecification.java | 10 --
.../specimpl/ObjectSpecificationAbstract.java | 6 -
.../core/metamodel/util/snapshot/XmlSnapshot.java | 13 +-
.../parseable/ParseableFacetUsingParserTest.java | 124 -----------------
.../facets/object/parseable/ValueProxy.java | 23 ---
.../ValueSemanticsProviderAbstractTestCase.java | 10 --
.../testspec/ObjectSpecificationStub.java | 5 -
.../binding/NumberConverterForStringComponent.java | 8 +-
.../viewer/wicket/model/models/ScalarModel.java | 26 +---
35 files changed, 164 insertions(+), 504 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java b/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java
index d1075cf..c43e178 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java
@@ -154,18 +154,24 @@ public abstract class _BindableAbstract<T> implements Bindable<T> {
if(isReverseUpdating.get()) {
return;
}
- isForwardUpdating.set(true);
- newBindable.setValue(forwardMapper.apply(n));
- isForwardUpdating.set(false);
+ try {
+ isForwardUpdating.set(true);
+ newBindable.setValue(forwardMapper.apply(n));
+ } finally {
+ isForwardUpdating.set(false);
+ }
});
newBindable.addListener((e,o,n)->{
if(isForwardUpdating.get()) {
return;
}
- isReverseUpdating.set(true);
- setValue(reverseMapper.apply(n));
- isReverseUpdating.set(false);
+ try {
+ isReverseUpdating.set(true);
+ setValue(reverseMapper.apply(n));
+ } finally {
+ isReverseUpdating.set(false);
+ }
});
return newBindable;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
index ca3c2e9..1f53a39 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
@@ -106,7 +106,7 @@ implements EnumFacet {
@Override
public String toEncodedString(final T object) {
- return titleString(object);
+ return asTitleString(object);
}
@Override
@@ -116,7 +116,7 @@ implements EnumFacet {
@Override
- protected String titleString(final Object object) {
+ protected String asTitleString(final T object) {
val translationService = getTranslationService();
if (titleMethod != null) {
@@ -139,7 +139,7 @@ implements EnumFacet {
}
// simply translate the enum constant's name
- val objectAsEnum = (Enum<?>) object;
+ val objectAsEnum = object;
val translationContext = TranslationContext.forEnum(objectAsEnum);
final String friendlyNameOfEnum = Enums.getFriendlyNameOf(objectAsEnum.name());
return translationService.translate(translationContext, friendlyNameOfEnum);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacet.java
deleted file mode 100644
index d0c9f40..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacet.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.object.parseable;
-
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-/**
- * Indicates that this class can parse an entry string.
- */
-public interface ParseableFacet extends Facet {
-
- /**
- * Parses a text entry made by a user and sets the domain object's value.
- *
- * <p>
- * Equivalent to <tt>Parser#parseTextEntry(Object, String)</tt>, though may
- * be implemented through some other mechanism.
- */
- ManagedObject parseTextEntry(
- final ManagedObject original,
- final String text,
- final InteractionInitiatedBy interactionInitiatedBy);
-
- /**
- * A title for the object that is valid but which may be easier to edit than
- * the title provided by a {@link TitleFacet}.
- *
- * <p>
- * The idea here is that the viewer can display a parseable title for an
- * existing object when, for example, the user initially clicks in the
- * field. So, a date might be rendered via a {@link TitleFacet} as
- * <tt>May 2, 2007</tt>, but its parseable form might be <tt>20070502</tt>.
- */
- String parseableTextRepresentation(ManagedObject obj);
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
deleted file mode 100644
index f4cc772..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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.object.parseable;
-
-import java.util.IllegalFormatException;
-import java.util.function.BiConsumer;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.adapters.ParsingException;
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
-import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
-import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.consent.InteractionResultSet;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
-import org.apache.isis.core.metamodel.interactions.InteractionHead;
-import org.apache.isis.core.metamodel.interactions.InteractionUtils;
-import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
-import org.apache.isis.core.metamodel.interactions.ParseValueContext;
-import org.apache.isis.core.metamodel.interactions.ValidityContext;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects.UnwrapUtil;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-import lombok.NonNull;
-import lombok.val;
-
-public final class ParseableFacetUsingParser
-extends FacetAbstract
-implements ParseableFacet {
-
- private final @NonNull Parser<?> parser;
-
- public static ParseableFacetUsingParser create(
- final Parser<?> parser,
- final FacetHolder holder) {
- return new ParseableFacetUsingParser(parser, holder);
- }
-
- private ParseableFacetUsingParser(
- final Parser<?> parser,
- final FacetHolder holder) {
-
- super(ParseableFacet.class, holder);
- this.parser = parser;
- }
-
- @Override
- public boolean semanticEquals(final @NonNull Facet other) {
- return other instanceof ParseableFacetUsingParser
- ? this.parser.getClass() == ((ParseableFacetUsingParser)other).parser.getClass()
- : false;
- }
-
- @Override
- public void visitAttributes(final BiConsumer<String, Object> visitor) {
- super.visitAttributes(visitor);
- visitor.accept("parser", parser.toString());
- }
-
- @Override
- public ManagedObject parseTextEntry(
- final @Nullable ManagedObject contextAdapter,
- final String entry,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- if (entry == null) {
- throw new IllegalArgumentException("An entry must be provided");
- }
-
- // check string is valid
- // (eg pick up any @RegEx on value type)
- if (contextAdapter!=null
- && getFacetHolder().containsFacet(ValueFacet.class)) {
-
- val entryAdapter = getObjectManager().adapt(entry);
- final Identifier identifier = getFacetHolder().getFeatureIdentifier();
- final ParseValueContext parseValueContext =
- new ParseValueContext(
- InteractionHead.regular(contextAdapter), identifier, entryAdapter, interactionInitiatedBy
- );
- validate(parseValueContext);
- }
-
- try {
- final Object parsed = parser.parseTextRepresentation(valueSemanticsContext(), entry);
- if (parsed == null) {
- return null;
- }
-
- // check resultant object is also valid
- // (eg pick up any validate() methods on it)
- val adapter = getObjectManager().adapt(parsed);
- final ObjectSpecification specification = adapter.getSpecification();
- final ObjectValidityContext validateContext =
- specification.createValidityInteractionContext(
- adapter, interactionInitiatedBy);
- validate(validateContext);
-
- return adapter;
- } catch (final NumberFormatException | IllegalFormatException | ParsingException e) {
- throw new TextEntryParseException(e.getMessage(), e);
- }
- }
-
- private void validate(final ValidityContext validityContext) {
- final InteractionResultSet resultSet = new InteractionResultSet();
- InteractionUtils.isValidResultSet(getFacetHolder(), validityContext, resultSet);
- if (resultSet.isVetoed()) {
- throw new IllegalArgumentException(resultSet.getInteractionResult().getReason());
- }
- }
-
- @Override
- public String parseableTextRepresentation(final ManagedObject contextAdapter) {
- final Object pojo = UnwrapUtil.single(contextAdapter);
-
- return parser.parseableTextRepresentation(valueSemanticsContext(), _Casts.uncheckedCast(pojo));
- }
-
- private ValueSemanticsProvider.Context valueSemanticsContext() {
- val iaProvider = super.getInteractionProvider();
- if(iaProvider==null) {
- return null; // JUnit context
- }
- return ValueSemanticsProvider.Context.of(
- ((FacetHolderAbstract)getFacetHolder()).getFeatureIdentifier(),
- iaProvider.currentInteractionContext().orElse(null));
- }
-
-}
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 997e6f1..90304b4 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
@@ -36,7 +36,6 @@ import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionFacet;
-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.vsp.ValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.annotation.LogicalTypeFacetForValueAnnotation;
@@ -58,9 +57,6 @@ import lombok.extern.log4j.Log4j2;
* <p>
* In addition, the following facets may be installed:
* <ul>
- * <li> {@link ParseableFacet} - if a {@link Parser} has been specified
- * explicitly in the annotation (or is picked up through an external
- * configuration file)</li>
* <li> {@link EncodableFacet} - if an {@link EncoderDecoder} has been specified
* explicitly in the annotation (or is picked up through an external
* configuration file)</li>
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
index 2348af4..db4fe5d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
@@ -25,14 +25,12 @@ import org.apache.isis.applib.adapters.Renderer;
import org.apache.isis.applib.adapters.ValueSemanticsProvider;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.Facet;
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.FacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetUsingDefaultsProvider;
import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetUsingParser;
import org.apache.isis.core.metamodel.facets.object.title.parser.TitleFacetUsingRenderer;
import org.apache.isis.core.metamodel.facets.object.value.ImmutableFacetViaValueSemantics;
import org.apache.isis.core.metamodel.facets.object.value.MaxLengthFacetUsingParser;
@@ -90,7 +88,6 @@ extends FacetFactoryAbstract {
//holder.getServiceInjector().injectServicesInto(parser);
- holder.addFacet(ParseableFacetUsingParser.create(parser, holder));
holder.addFacet(new TypicalLengthFacetUsingParser(parser, holder));
final int maxLength = parser.maxLength();
if(maxLength >=0) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
index e1ff842..9ecb561 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
@@ -38,7 +38,9 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@Deprecated
public abstract class ValueSemanticsProviderAndFacetAbstract<T>
extends FacetAbstract
-implements ValueSemanticsProvider<T>, Renderer<T>, EncoderDecoder<T>, Parser<T>, DefaultsProvider<T> {
+implements
+ ValueSemanticsProvider<T>,
+ Renderer<T>, EncoderDecoder<T>, Parser<T>, DefaultsProvider<T> {
private final Class<T> adaptedClass;
private final int typicalLength;
@@ -188,29 +190,29 @@ implements ValueSemanticsProvider<T>, Renderer<T>, EncoderDecoder<T>, Parser<T>,
}
@Override
- public String presentationValue(final ValueSemanticsProvider.Context context, final Object object) {
+ public String presentationValue(final ValueSemanticsProvider.Context context, final T object) {
if (object == null) {
return "";
}
- return titleString(object);
+ return asTitleString(object);
}
/**
- * Defaults to {@link Parser#presentationValue(org.apache.isis.applib.adapters.Parser.Context, Object)}.
+ * Defaults to {@link Parser#parseableTextRepresentation(org.apache.isis.applib.adapters.ValueSemanticsProvider.Context, Object)
*/
@Override
- public String parseableTextRepresentation(final ValueSemanticsProvider.Context context, final Object existing) {
+ public String parseableTextRepresentation(final ValueSemanticsProvider.Context context, final T existing) {
return presentationValue(context, existing);
}
- protected String titleString(final Format formatter, final Object object) {
+ protected String titleString(final Format formatter, final T object) {
return object == null ? "" : formatter.format(object);
}
/**
* Return a string representation of aforesaid object.
*/
- protected abstract String titleString(Object object);
+ protected abstract String asTitleString(T object);
@Override
public final int typicalLength() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java
index 35b3acf..4cd4dd3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java
@@ -52,9 +52,9 @@ implements ChangesDtoValueFacet {
}
@Override
- public String titleString(final Object object) {
+ public String asTitleString(final ChangesDto object) {
if (object == null) return "[null]";
- final ChangesDto changesDto = (ChangesDto) object;
+ final ChangesDto changesDto = object;
return ChangesDtoUtils.toXml(changesDto);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java
index 2d706d2..966a089 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java
@@ -51,9 +51,9 @@ implements CommandDtoValueFacet {
}
@Override
- public String titleString(final Object object) {
+ public String asTitleString(final CommandDto object) {
if (object == null) return "[null]";
- val commandDto = (CommandDto) object;
+ val commandDto = object;
return CommandDtoUtils.toXml(commandDto);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java
index 401bf8f..ce9a4d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java
@@ -51,9 +51,9 @@ implements InteractionDtoValueFacet {
}
@Override
- public String titleString(final Object object) {
+ public String asTitleString(final InteractionDto object) {
if (object == null) return "[null]";
- final InteractionDto interactionDto = (InteractionDto) object;
+ final InteractionDto interactionDto = object;
return InteractionDtoUtils.toXml(interactionDto);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
index c3813f0..c5bda7a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
@@ -221,7 +221,7 @@ implements DateValueFacet {
// ///////////////////////////////////////////////////////////////////////////
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final T value) {
if (value == null) {
return null;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
index 53c56b8..13479a8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
@@ -75,7 +75,7 @@ implements BigIntegerValueFacet {
}
@Override
- public String titleString(final Object object) {
+ public String asTitleString(final BigInteger object) {
return titleString(format, object);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
index eac566f..9f0e4b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
@@ -69,7 +69,7 @@ implements ByteValueFacet {
}
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final Byte value) {
return titleString(format, value);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java
index 71ef2b7..b797b07 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java
@@ -55,7 +55,7 @@ implements CharValueFacet {
}
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final Character value) {
return value == null ? "" : value.toString();
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
index 5aee141..be6f8ff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
@@ -175,11 +175,11 @@ implements JodaLocalDateValueFacet {
// ///////////////////////////////////////////////////////////////////////////
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final LocalDate value) {
if (value == null) {
return null;
}
- final LocalDate date = (LocalDate) value;
+ final LocalDate date = value;
DateTimeFormatter f = titleStringFormatter.withLocale(Locale.getDefault());
return JodaLocalDateUtil.titleString(f, date);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
index 7a7619f..33fbf54 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
@@ -177,11 +177,11 @@ implements JodaLocalDateTimeValueFacet {
// ///////////////////////////////////////////////////////////////////////////
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final LocalDateTime value) {
if (value == null) {
return null;
}
- final LocalDateTime dateTime = (LocalDateTime) value;
+ final LocalDateTime dateTime = value;
final DateTimeFormatter f = titleStringFormatter.withLocale(Locale.getDefault());
return JodaLocalDateTimeUtil.titleString(f, dateTime);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
index 63c36fa..a3a10f0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
@@ -73,7 +73,7 @@ implements DoubleFloatingPointValueFacet {
// ///////////////////////////////////////////////////////////////////////////
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final Double value) {
return titleString(format, value);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
index 20c4719..8957c77 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
@@ -70,7 +70,7 @@ implements FloatingPointValueFacet {
}
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final Float value) {
return titleString(format, value);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
index 9c17a8e..292968d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
@@ -50,7 +50,7 @@ implements ImageValueFacet {
}
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final T value) {
return "image";
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
index 73e4651..a46f00d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
@@ -74,7 +74,7 @@ implements IntegerValueFacet {
}
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final Integer value) {
return titleString(format, value);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
index 478972a..d3388ab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
@@ -70,7 +70,7 @@ implements LongValueFacet {
}
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final Long value) {
return titleString(format, value);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
index 087ae92..22e39d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
@@ -72,7 +72,7 @@ implements ShortValueFacet {
}
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final Short value) {
return titleString(format, value);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
index 680261f..b08afc7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
@@ -228,7 +228,7 @@ implements TemporalValueFacet<T> {
// -- TITLE
@Override
- public String titleString(final Object value) {
+ public String asTitleString(final T value) {
if (value == null) {
return null;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index 781b526..993da19 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -227,7 +227,7 @@ public class ParameterNegotiationModel {
@Getter @NonNull private final _BindableAbstract<String> bindableParamSearchArgument;
@Getter @NonNull private final LazyObservable<Can<ManagedObject>> observableParamChoices;
- private final @NonNull Bindable<String> bindableParamAsText;
+ private Bindable<String> bindableParamAsText;
private ParameterModel(
final int paramNr,
@@ -245,21 +245,6 @@ public class ParameterNegotiationModel {
getNegotiationModel().onNewParamValue();
});
- // value types should have associated parsers/formatters via value semantics
- bindableParamAsText = action.getReturnType().lookupFacet(ValueFacet.class)
- .map(valueFacet->valueFacet.selectParserForParameterElseFallback(metaModel))
- .map(parser->bindableParamValue
- .mapToBindable(
- value->parser.parseableTextRepresentation(null, value.getPojo()),
- text->ManagedObject.of(null, parser.parseTextRepresentation(null, text)))
- )
- .orElseGet(()->
- // fallback Bindable that is floating free (unbound)
- // writing to it has no effect on the domain
- _Bindables.forValue(String.format("Could not find a ValueFacet for type %s",
- action.getReturnType().getLogicalType()))
- );
-
// has either autoComplete, choices, or none
observableParamChoices = metaModel.hasAutoComplete()
? _Observables.forFactory(()->
@@ -323,6 +308,10 @@ public class ParameterNegotiationModel {
@Override
public Bindable<String> getValueAsParsableText() {
+ if(bindableParamAsText==null) {
+ // value types should have associated parsers/formatters via value semantics
+ bindableParamAsText = _BindingUtil.bindAsParsableText(metaModel, bindableParamValue);
+ }
return bindableParamAsText;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
index 91f03da..df0cfa3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
@@ -26,13 +26,11 @@ import org.apache.isis.commons.internal.binding._Bindables;
import org.apache.isis.commons.internal.binding._Observables;
import org.apache.isis.commons.internal.binding._Observables.LazyObservable;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import lombok.NonNull;
-import lombok.val;
public class PropertyNegotiationModel implements ManagedValue {
@@ -41,7 +39,7 @@ public class PropertyNegotiationModel implements ManagedValue {
private final @NonNull _BindableAbstract<String> searchArgument;
private final @NonNull LazyObservable<Can<ManagedObject>> choices;
private final @NonNull ManagedProperty managedProperty;
- private final @NonNull Bindable<String> proposedValueAsText;
+ private Bindable<String> proposedValueAsText;
PropertyNegotiationModel(final ManagedProperty managedProperty) {
this.managedProperty = managedProperty;
@@ -49,8 +47,8 @@ public class PropertyNegotiationModel implements ManagedValue {
validationFeedbackActive = _Bindables.forValue(false);
- val currentValue = managedProperty.getPropertyValue();
- val defaultValue = ManagedObjects.isNullOrUnspecifiedOrEmpty(currentValue)
+ final var currentValue = managedProperty.getPropertyValue();
+ final var defaultValue = ManagedObjects.isNullOrUnspecifiedOrEmpty(currentValue)
? propMeta.getDefault(managedProperty.getOwner())
: currentValue;
@@ -59,21 +57,6 @@ public class PropertyNegotiationModel implements ManagedValue {
invalidateChoicesAndValidation();
});
- // value types should have associated parsers/formatters via value semantics
- proposedValueAsText = propMeta.getOnType().lookupFacet(ValueFacet.class)
- .map(valueFacet->valueFacet.selectParserForPropertyElseFallback(propMeta))
- .map(parser->proposedValue
- .mapToBindable(
- value->parser.parseableTextRepresentation(null, value.getPojo()),
- text->ManagedObject.of(null, parser.parseTextRepresentation(null, text)))
- )
- .orElseGet(()->
- // fallback Bindable that is floating free (unbound)
- // writing to it has no effect on the domain
- _Bindables.forValue(String.format("Could not find a ValueFacet for type %s",
- propMeta.getOnType().getLogicalType()))
- );
-
// has either autoComplete, choices, or none
choices = propMeta.hasAutoComplete()
? _Observables.forFactory(()->
@@ -115,6 +98,11 @@ public class PropertyNegotiationModel implements ManagedValue {
@Override
public Bindable<String> getValueAsParsableText() {
+ if(proposedValueAsText==null) {
+ // value types should have associated parsers/formatters via value semantics
+ proposedValueAsText = _BindingUtil
+ .bindAsParsableText(managedProperty.getMetaModel(), proposedValue);
+ }
return proposedValueAsText;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/_BindingUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/_BindingUtil.java
new file mode 100644
index 0000000..9299d38
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/_BindingUtil.java
@@ -0,0 +1,97 @@
+/*
+ * 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.interactions.managed;
+
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.adapters.ValueSemanticsProvider.Context;
+import org.apache.isis.commons.binding.Bindable;
+import org.apache.isis.commons.internal.binding._BindableAbstract;
+import org.apache.isis.commons.internal.binding._Bindables;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+
+import lombok.NonNull;
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+class _BindingUtil {
+
+ Bindable<String> bindAsParsableText(
+ final @NonNull ObjectActionParameter param,
+ final @NonNull _BindableAbstract<ManagedObject> bindableParamValue) {
+
+ final var spec = param.getSpecification();
+
+ if(param.getFeatureType() == FeatureType.ACTION_PARAMETER_COLLECTION) {
+ _Bindables.forValue(String.format("Non-scalar action parameters are not parseable: %s",
+ param.getFeatureIdentifier()));
+ }
+
+ // value types should have associated parsers/formatters via value semantics
+ return spec.lookupFacet(ValueFacet.class)
+ .map(valueFacet->valueFacet.selectParserForParameterElseFallback(param))
+ .map(parser->bindAsParsableText(spec, bindableParamValue, parser, null))
+ .orElseGet(()->
+ // fallback Bindable that is floating free (unbound)
+ // writing to it has no effect on the domain
+ _Bindables.forValue(String.format("Could not find a ValueFacet for type %s",
+ spec.getLogicalType()))
+ );
+
+ }
+
+ Bindable<String> bindAsParsableText(
+ final @NonNull OneToOneAssociation prop,
+ final @NonNull _BindableAbstract<ManagedObject> bindablePropertyValue) {
+
+ final var spec = prop.getSpecification();
+
+ // value types should have associated parsers/formatters via value semantics
+ return spec.lookupFacet(ValueFacet.class)
+ .map(valueFacet->valueFacet.selectParserForPropertyElseFallback(prop))
+ .map(parser->bindAsParsableText(spec, bindablePropertyValue, parser, null))
+ .orElseGet(()->
+ // fallback Bindable that is floating free (unbound)
+ // writing to it has no effect on the domain
+ _Bindables.forValue(String.format("Could not find a ValueFacet for type %s",
+ spec.getLogicalType()))
+ );
+
+ }
+
+ private Bindable<String> bindAsParsableText(
+ final @NonNull ObjectSpecification spec,
+ final @NonNull _BindableAbstract<ManagedObject> bindableValue,
+ final @NonNull Parser parser,
+ final Context context) {
+
+ return bindableValue.mapToBindable(
+ value->{
+ final var pojo = ManagedObjects.UnwrapUtil.single(value);
+ return parser.parseableTextRepresentation(context, pojo);
+ },
+ text->ManagedObject.of(spec, parser.parseTextRepresentation(context, text)));
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 54d5a5f..f6cab8f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -57,7 +57,6 @@ import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
import org.apache.isis.core.metamodel.facets.object.icon.ObjectIcon;
import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionFacet;
-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.ValueFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
@@ -374,15 +373,6 @@ extends
}
/**
- * Determines if objects of this type can be set up from a text entry
- * string.
- *
- * <p>
- * In effect, means has got a {@link ParseableFacet}.
- */
- boolean isParseable();
-
- /**
* Determines if objects of this type can be converted to a data-stream.
*
* <p>
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 2d9706d..0913d6b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -68,7 +68,6 @@ import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet
import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
import org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacet;
import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionFacet;
-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.interactions.InteractionContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
@@ -853,11 +852,6 @@ implements ObjectSpecification {
}
@Override
- public boolean isParseable() {
- return containsFacet(ParseableFacet.class);
- }
-
- @Override
public boolean isEncodeable() {
return containsFacet(EncodableFacet.class);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
index c510489..11d26a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
@@ -47,7 +47,6 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjects;
@@ -57,7 +56,6 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import lombok.val;
import lombok.extern.log4j.Log4j2;
/**
@@ -450,7 +448,7 @@ public class XmlSnapshot implements Snapshot {
final ObjectSpecification nos = object.getSpecification();
// HACK: really want a ObjectSpecification.hasField method to
// check first.
- val field = nos.getAssociation(fieldName).orElse(null);
+ final var field = nos.getAssociation(fieldName).orElse(null);
if (field == null) {
if (log.isInfoEnabled()) {
log.info("includeField(Pl, Vec, Str): could not locate field, skipping");
@@ -464,7 +462,7 @@ public class XmlSnapshot implements Snapshot {
if (log.isDebugEnabled()) {
log.debug("includeField(Pl, Vec, Str): locating corresponding XML element");
}
- val xmlFieldElements = elementsUnder(xmlElement, field.getId());
+ final var xmlFieldElements = elementsUnder(xmlElement, field.getId());
if (xmlFieldElements.size() != 1) {
if (log.isInfoEnabled()) {
log.info("includeField(Pl, Vec, Str): could not locate {}",
@@ -708,13 +706,10 @@ public class XmlSnapshot implements Snapshot {
// XML
isisMetaModel.setAttributesForValue(xmlValueElement, valueNos.getShortIdentifier());
- // return parsed string, else encoded string, else title.
+ // return encoded string, else title.
String valueStr;
- final ParseableFacet parseableFacet = fieldNos.getFacet(ParseableFacet.class);
final EncodableFacet encodeableFacet = fieldNos.getFacet(EncodableFacet.class);
- if (parseableFacet != null) {
- valueStr = parseableFacet.parseableTextRepresentation(value);
- } else if (encodeableFacet != null) {
+ if (encodeableFacet != null) {
valueStr = encodeableFacet.toEncodedString(value);
} else {
valueStr = value.titleString();
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
deleted file mode 100644
index 2942a92..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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.object.parseable;
-
-import java.util.IllegalFormatWidthException;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.adapters.ParsingException;
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
-import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
-import org.apache.isis.applib.services.iactn.InteractionProvider;
-import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
-
-public class ParseableFacetUsingParserTest {
-
- @Rule
- public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
- @Mock private FacetHolder mockFacetHolder;
- @Mock private InteractionProvider mockInteractionProvider;
- @Mock private ServiceInjector mockServicesInjector;
- @Mock private ServiceRegistry mockServiceRegistry;
-
- protected MetaModelContext metaModelContext;
- private ParseableFacetUsingParser parseableFacetUsingParser;
-
- @Before
- public void setUp() throws Exception {
-
- metaModelContext = MetaModelContext_forTesting.builder()
- //.interactionProvider(mockInteractionProvider)
- .build();
-
-
- context.checking(new Expectations() {
- {
- never(mockInteractionProvider);
- //never(mockAdapterManager);
-
- allowing(mockFacetHolder).getMetaModelContext();
- will(returnValue(metaModelContext));
-
- allowing(mockFacetHolder).containsFacet(ValueFacet.class);
- will(returnValue(Boolean.FALSE));
-
- allowing(mockFacetHolder).getInteractionProvider();
- will(returnValue(null));
-
- }
- });
-
- final Parser<String> parser = new Parser<String>() {
- @Override
- public String parseTextRepresentation(final ValueSemanticsProvider.Context context, final String entry) {
- if (entry.equals("invalid")) {
- throw new ParsingException();
- }
- if (entry.equals("number")) {
- throw new NumberFormatException();
- }
- if (entry.equals("format")) {
- throw new IllegalFormatWidthException(2);
- }
- return entry.toUpperCase();
- }
-
- @Override
- public int typicalLength() {
- return 0;
- }
-
- @Override
- public String parseableTextRepresentation(final ValueSemanticsProvider.Context context, final String existing) {
- return null;
- }
- };
- parseableFacetUsingParser = ParseableFacetUsingParser.create(parser, mockFacetHolder);
- }
-
- @Test(expected = TextEntryParseException.class)
- public void parsingExceptionRethrown() throws Exception {
- parseableFacetUsingParser.parseTextEntry(null, "invalid", InteractionInitiatedBy.USER);
- }
-
- @Test(expected = TextEntryParseException.class)
- public void numberFormatExceptionRethrown() throws Exception {
- parseableFacetUsingParser.parseTextEntry(null, "number", InteractionInitiatedBy.USER);
- }
-
- @Test(expected = TextEntryParseException.class)
- public void illegalFormatExceptionRethrown() throws Exception {
- parseableFacetUsingParser.parseTextEntry(null, "format", InteractionInitiatedBy.USER);
- }
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ValueProxy.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ValueProxy.java
deleted file mode 100644
index 7b131cc..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ValueProxy.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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.object.parseable;
-
-public class ValueProxy {
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index 87bff2a..57e157f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -46,8 +46,6 @@ import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetUsingParser;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
import org.apache.isis.core.metamodel.facets.value.string.StringValueSemantics;
import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -66,7 +64,6 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
//private ValueSemanticsProviderAndFacetAbstract<?> valueSemanticsProvider;
private ValueSemanticsProvider<?> valueSemanticsProvider;
private EncodableFacetUsingEncoderDecoder encodeableFacet;
- private ParseableFacetUsingParser parseableFacet;
@Before
public void setUp() throws Exception {
@@ -108,7 +105,6 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
this.encodeableFacet = new EncodableFacetUsingEncoderDecoder(
value,
mockFacetHolder);
- this.parseableFacet = ParseableFacetUsingParser.create(value, mockFacetHolder);
}
protected void setSemanitcs(final AbstractValueSemanticsProvider<?> valueSemantics) {
@@ -116,10 +112,8 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
this.encodeableFacet = new EncodableFacetUsingEncoderDecoder(
valueSemantics.getEncoderDecoder(),
mockFacetHolder);
- this.parseableFacet = ParseableFacetUsingParser.create(valueSemantics.getParser(), mockFacetHolder);
}
-
protected <T> ValueSemanticsProviderAndFacetAbstract<T> getValue(final Class<T> type) {
return _Casts.uncheckedCast(valueSemanticsProvider);
}
@@ -128,10 +122,6 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
return encodeableFacet;
}
- protected ParseableFacet getParseableFacet() {
- return parseableFacet;
- }
-
protected ManagedObject createAdapter(final Object object) {
return mockAdapter;
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index a6bf81c..d24a87c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -241,11 +241,6 @@ implements ObjectSpecification {
}
@Override
- public boolean isParseable() {
- return false;
- }
-
- @Override
public boolean isParented() {
return false;
}
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
index 49fce46..ea34c2d 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.common.model.binding;
import java.util.Optional;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -33,14 +33,14 @@ implements BindingConverter<String> {
@Getter(onMethod_ = {@Override})
private final ObjectSpecification valueSpecification;
- private final ParseableFacet parsableFacet;
+ private final ValueFacet valueFacet;
@SuppressWarnings("unchecked")
public NumberConverterForStringComponent(final ObjectSpecification valueSpecification) {
this.valueSpecification = valueSpecification;
- this.parsableFacet = lookupFacet(ParseableFacet.class)
- .orElseThrow(()->_Exceptions.noSuchElement("missing 'ParseableFacet'"));
+ this.valueFacet = lookupFacet(ValueFacet.class)
+ .orElseThrow(()->_Exceptions.noSuchElement("missing 'ValueFacet'"));
}
@Override
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 11fdbbf..4ff8339 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -21,19 +21,13 @@ package org.apache.isis.viewer.wicket.model.models;
import java.util.List;
import java.util.Optional;
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.id.LogicalType;
import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.base._Either;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
-import org.apache.isis.core.metamodel.interactions.managed.ManagedParameter;
-import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
import org.apache.isis.core.metamodel.interactions.managed.ManagedValue;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -52,7 +46,6 @@ import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
-import lombok.val;
/**
* Represents a scalar of an entity, either a {@link Kind#PROPERTY property} or
@@ -191,33 +184,16 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
if (adapter == null) {
return null;
}
- val spec = adapter.getSpecification();
+ final var spec = adapter.getSpecification();
if(spec.isValue()) {
managedValue().getValueAsParsableText().getValue();
-
-// val parseableFacet = getTypeOfSpecification().getFacet(ParseableFacet.class);
-// if (parseableFacet == null) {
-// throw new RuntimeException("unable to find a parser for " + spec.getFullIdentifier());
-// }
-// return parseableFacet.parseableTextRepresentation(adapter);
}
return adapter.titleString();
}
public void setObjectAsString(final String enteredText) {
- // parse text to get adapter
-
managedValue().getValueAsParsableText().setValue(enteredText);
setObject(managedValue().getValue().getValue());
-
-// val parseableFacet = getTypeOfSpecification().getFacet(ParseableFacet.class);
-// if (parseableFacet == null) {
-// throw new RuntimeException("unable to find a parser for " + getTypeOfSpecification().getFullIdentifier());
-// }
-// ManagedObject adapter = parseableFacet.parseTextEntry(getObject(), enteredText,
-// InteractionInitiatedBy.USER);
-//
-// setObject(adapter);
}
public abstract ManagedValue managedValue();