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 2022/07/21 12:00:04 UTC
[isis] branch master updated: ISIS-3088: fixes enum dropdown value recovery from mementos
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 3576aebe9c ISIS-3088: fixes enum dropdown value recovery from mementos
3576aebe9c is described below
commit 3576aebe9c327da3ae369d96ecb5d5a4a978d24e
Author: andi-huber <ah...@apache.org>
AuthorDate: Thu Jul 21 13:59:55 2022 +0200
ISIS-3088: fixes enum dropdown value recovery from mementos
---
.../specimpl/OneToOneAssociationDefault.java | 34 +++++++++-------------
.../viewer/wicket/ui/components/scalars/_Util.java | 15 ++++++++--
2 files changed, 26 insertions(+), 23 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
index 5506f56c29..1caa140ea8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -30,7 +30,6 @@ import org.apache.isis.commons.internal.reflection._Annotations;
import org.apache.isis.core.metamodel.commons.ToString;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
@@ -104,32 +103,29 @@ implements OneToOneAssociation {
private ValidityContext createValidateInteractionContext(
final ManagedObject ownerAdapter,
- final ManagedObject proposedToReferenceAdapter,
+ final ManagedObject proposedValue,
final InteractionInitiatedBy interactionInitiatedBy) {
+
+ val head = headFor(ownerAdapter);
+
return new PropertyModifyContext(
- headFor(ownerAdapter),
+ head,
getFeatureIdentifier(),
- proposedToReferenceAdapter,
- ()->getFriendlyName(()->headFor(ownerAdapter).getTarget()),
+ proposedValue,
+ ()->getFriendlyName(head::getTarget),
interactionInitiatedBy);
}
@Override
public Consent isAssociationValid(
final ManagedObject ownerAdapter,
- final ManagedObject proposedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return isAssociationValidResult(ownerAdapter, proposedAdapter, interactionInitiatedBy).createConsent();
- }
-
- private InteractionResult isAssociationValidResult(
- final ManagedObject ownerAdapter,
- final ManagedObject proposedToReferenceAdapter,
+ final ManagedObject proposedValue,
final InteractionInitiatedBy interactionInitiatedBy) {
- final ValidityContext validityContext =
- createValidateInteractionContext(
- ownerAdapter, proposedToReferenceAdapter, interactionInitiatedBy);
- return InteractionUtils.isValidResult(this, validityContext);
+ return InteractionUtils.isValidResult(
+ this,
+ createValidateInteractionContext(
+ ownerAdapter, proposedValue, interactionInitiatedBy))
+ .createConsent();
}
// -- INIT
@@ -168,9 +164,7 @@ implements OneToOneAssociation {
@Override
public boolean isEmpty(final ManagedObject ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
final ManagedObject referencedObject = get(ownerAdapter, interactionInitiatedBy);
- // TODO: perhaps this should instead check if it returns an empty ManagedObject.
- // however, that's a far-reaching change to make.
- return referencedObject == null;
+ return ManagedObjects.isNullOrUnspecifiedOrEmpty(referencedObject);
}
// -- ACCESS (set)
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java
index 69220c683d..0e538962ef 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.util.Facets;
@@ -98,7 +99,7 @@ class _Util {
private static final long serialVersionUID = 1L;
@Override
public void validate(final IValidatable<Object> validatable) {
- recoverProposedValue(validatable, scalarModel)
+ recoverProposedValue(validatable.getValue(), scalarModel)
.ifPresent(proposedAdapter->{
_Strings.nonEmpty(scalarModel.validate(proposedAdapter))
.ifPresent(validationFeedback->
@@ -127,13 +128,21 @@ class _Util {
}
private Optional<ManagedObject> recoverProposedValue(
- final IValidatable<Object> validatable,
+ final Object valueObject,
final ScalarModel scalarModel){
+ if(valueObject instanceof ObjectMemento) {
+ // seeing this code-path particularly with enum choices
+ return Optional.ofNullable(
+ scalarModel
+ .getCommonContext()
+ .reconstructObject((ObjectMemento)valueObject));
+ }
+
return Optional.ofNullable(
scalarModel
.getObjectManager()
- .adapt(validatable.getValue()));
+ .adapt(valueObject));
}
// -- HELPER