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 04ea3b7 ISIS-2877: clean up SchemaValueMarshaller(s)
04ea3b7 is described below
commit 04ea3b76870169488143ce3381a5150e25b6bce2
Author: Andi Huber <[email protected]>
AuthorDate: Fri Feb 4 13:41:30 2022 +0100
ISIS-2877: clean up SchemaValueMarshaller(s)
---
.../schema/SchemaValueMarshallerAbstract.java | 12 +--
.../command/SchemaValueMarshallerDefault.java | 86 +++++++---------------
2 files changed, 31 insertions(+), 67 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/schema/SchemaValueMarshallerAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/schema/SchemaValueMarshallerAbstract.java
index 2536dd3..5d5e8b3 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/schema/SchemaValueMarshallerAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/schema/SchemaValueMarshallerAbstract.java
@@ -74,15 +74,13 @@ implements SchemaValueMarshaller {
final ObjectFeature feature,
final ValueSemanticsProvider<T> semantics) {
- return of(correspondingClass, feature, Optional.of(semantics),
- semantics!=null
- ? Optional.ofNullable(semantics.getConverter())
- : Optional.empty());
+ return of(correspondingClass, feature, semantics,
+ Optional.ofNullable(semantics.getConverter()));
}
private final @NonNull Class<T> correspondingClass;
private final @NonNull ObjectFeature feature;
- private final @NonNull Optional<ValueSemanticsProvider<T>> semantics;
+ private final @NonNull ValueSemanticsProvider<T> semantics;
private final @NonNull Optional<Converter<T, ?>> converter;
public ObjectSpecification getElementType() {
@@ -90,9 +88,7 @@ implements SchemaValueMarshaller {
}
public ValueType getSchemaValueType() {
- return semantics
- .map(ValueSemanticsProvider::getSchemaValueType)
- .orElse(ValueType.REFERENCE); // fallback
+ return semantics.getSchemaValueType();
}
}
diff --git
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/SchemaValueMarshallerDefault.java
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/SchemaValueMarshallerDefault.java
index 41dbe1c..8f2134a 100644
---
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/SchemaValueMarshallerDefault.java
+++
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/SchemaValueMarshallerDefault.java
@@ -23,7 +23,6 @@ import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
@@ -74,7 +73,7 @@ extends SchemaValueMarshallerAbstract {
switch (context.getSchemaValueType()) {
case COMPOSITE:
- valueDto.setComposite(toTypedTuple(context, (T)value.getPojo()));
+ valueDto.setComposite(toTypedTuple(context,
_Casts.<T>uncheckedCast(value.getPojo())));
return valueDto;
case COLLECTION:
recordValues(context, valueDto,
((PackedManagedObject)value).unpack());
@@ -87,19 +86,12 @@ extends SchemaValueMarshallerAbstract {
break;
}
- //TODO[ISIS-2877] remove conditional, once composer is always present
- if(context.getSemantics().isPresent()) {
- CommonDtoUtils.copy(
-
context.getSemantics().get().decompose(_Casts.uncheckedCast(value.getPojo()))
- .leftIfAny(),
- valueDto);
- return valueDto;
- }
+ val decomposedValueDto = context.getSemantics()
+ .decompose(_Casts.uncheckedCast(value.getPojo()))
+ .leftIfAny();
- CommonDtoUtils.recordFundamentalValue(
- context.getSchemaValueType(),
- valueDto,
- toFundamentalValue(context,
_Casts.uncheckedCast(value.getPojo())));
+ // copy the decomposedValueDto into valueDto
+ CommonDtoUtils.copy(decomposedValueDto, valueDto);
return valueDto;
}
@@ -116,33 +108,6 @@ extends SchemaValueMarshallerAbstract {
return valueWithTypeDto;
}
- // -- RECOVER VALUES FROM DTO
-
- @Override
- protected ManagedObject recoverScalarValue(
- @NonNull final Context<?> context,
- @NonNull final ValueWithTypeDto valueDto) {
-
- val elementSpec = context.getElementType();
-
- val recoveredValueAsPojo = valueDto.getType()==ValueType.COMPOSITE
- ? fromTypedTuple(context, valueDto.getComposite())
- : context.getSemantics().isPresent()
- ?
context.getSemantics().get().compose(ValueDecomposition.ofFundamental(valueDto))
- : fromFundamentalValue(context,
CommonDtoUtils.getValueAsObject(valueDto));
-
- if(recoveredValueAsPojo==null) {
- return ManagedObject.empty(context.getElementType());
- }
-
- val recoveredValue = recoveredValueAsPojo!=null
- ? ManagedObject.of(elementSpec, recoveredValueAsPojo)
- : ManagedObject.empty(context.getElementType());
- return recoveredValue;
- }
-
- // -- HELPER - RECORDING
-
private <T> CollectionDto asCollectionDto(
final Context<T> context,
final Can<ManagedObject> values) {
@@ -164,38 +129,41 @@ extends SchemaValueMarshallerAbstract {
private <T> TypedTupleDto toTypedTuple(final Context<T> context, final T
valuePojo) {
return context.getSemantics()
- .orElseThrow()
.decompose(valuePojo)
.rightIfAny();
}
- private <T> Object toFundamentalValue(final Context<T> context, final T
valuePojo) {
- return context.getConverter()
-
.<Object>map(converter->converter.toDelegateValue(valuePojo))
- .orElse(valuePojo);
- }
+ // -- RECOVER VALUES FROM DTO
- // -- HELPER - RECOVERY
+ @Override
+ protected ManagedObject recoverScalarValue(
+ @NonNull final Context<?> context,
+ @NonNull final ValueWithTypeDto valueDto) {
+
+ val elementSpec = context.getElementType();
+
+ val recoveredValueAsPojo = valueDto.getType()==ValueType.COMPOSITE
+ ? fromTypedTuple(context, valueDto.getComposite())
+ :
context.getSemantics().compose(ValueDecomposition.ofFundamental(valueDto));
+
+ if(recoveredValueAsPojo==null) {
+ return ManagedObject.empty(context.getElementType());
+ }
+
+ val recoveredValue = recoveredValueAsPojo!=null
+ ? ManagedObject.of(elementSpec, recoveredValueAsPojo)
+ : ManagedObject.empty(context.getElementType());
+ return recoveredValue;
+ }
private <T> T fromTypedTuple(final Context<T> context, final TypedTupleDto
typedTupleDto) {
if(typedTupleDto==null) {
return null;
}
return context.getSemantics()
- .orElseThrow()
.compose(ValueDecomposition.ofComposite(typedTupleDto));
}
- private <T> T fromFundamentalValue(final Context<T> context, final
@Nullable Object fundamentalValue) {
- if(fundamentalValue==null) {
- return null;
- }
- val valuePojo = context.getConverter()
-
.<T>map(converter->converter.fromDelegateValue(_Casts.uncheckedCast(fundamentalValue)))
- .orElse(_Casts.uncheckedCast(fundamentalValue));
- return valuePojo;
- }
-
// -- DEPENDENCIES
@Override