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 618d2e2 ISIS-2340: fixes Password marshaling 618d2e2 is described below commit 618d2e2c02f0d0da3fcf342f29257cd200967525 Author: Andi Huber <ahu...@apache.org> AuthorDate: Tue May 5 10:07:47 2020 +0200 ISIS-2340: fixes Password marshaling --- .../org/apache/isis/applib/value/Password.java | 20 ++++++++++++++++++ .../password/PasswordValueSemanticsProvider.java | 5 +++-- .../isis/core/metamodel/spec/ManagedObjects.java | 24 ++++++++++++++++++++++ .../wicket/model/models/ScalarPropertyModel.java | 13 ++---------- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java index fe536dd..81ff445 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java +++ b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java @@ -22,11 +22,15 @@ package org.apache.isis.applib.value; import java.io.Serializable; import java.util.Objects; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + import org.apache.isis.applib.annotation.Value; // tag::refguide[] // end::refguide[] @Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.password.PasswordValueSemanticsProvider") +@XmlAccessorType(XmlAccessType.FIELD) @lombok.Value public class Password implements Serializable { @@ -36,6 +40,16 @@ public class Password implements Serializable { private final String password; + // in support of XML un-marshaling + @SuppressWarnings("unused") + private Password() { + this(""); + } + + public Password(String password) { + this.password = password; + } + public boolean checkPassword(final String password) { return Objects.equals(this.password, password); } @@ -47,4 +61,10 @@ public class Password implements Serializable { } return STARS; } + + + + + + } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java index 448aab5..5f16e75 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java @@ -28,8 +28,9 @@ import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProv import org.apache.isis.core.metamodel.spec.ManagedObject; -public class PasswordValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<Password> implements -PasswordValueFacet { +public class PasswordValueSemanticsProvider +extends ValueSemanticsProviderAndFacetAbstract<Password> +implements PasswordValueFacet { public static Class<? extends Facet> type() { return PasswordValueFacet.class; diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java index b0bd1e5..80b5604 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java @@ -25,6 +25,7 @@ import javax.annotation.Nullable; import org.apache.isis.core.commons.internal.base._NullSafe; import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; +import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import lombok.val; @@ -82,6 +83,29 @@ public final class ManagedObjects { } }; + + // -- COPY UTILITIES + + @Nullable + public static ManagedObject copyOfIfClonable(@Nullable ManagedObject adapter) { + + if(adapter==null) { + return null; + } + + val viewModelFacet = adapter.getSpecification().getFacet(ViewModelFacet.class); + if(viewModelFacet != null) { + val viewModelPojo = adapter.getPojo(); + if(viewModelFacet.isCloneable(viewModelPojo)) { + return ManagedObject.of( + adapter.getSpecification(), + viewModelFacet.clone(viewModelPojo)); + } + } + + return adapter; + + } } diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java index cc42369..81e519a 100644 --- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java +++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java @@ -33,6 +33,7 @@ import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengt import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet; import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider; import org.apache.isis.core.metamodel.spec.ManagedObject; +import org.apache.isis.core.metamodel.spec.ManagedObjects; import org.apache.isis.core.metamodel.spec.ObjectSpecId; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.ObjectAction; @@ -349,18 +350,8 @@ public class ScalarPropertyModel extends ScalarModel { val associate = getObject(); property.set(adapter, associate, InteractionInitiatedBy.USER); - final ViewModelFacet recreatableObjectFacet = adapter.getSpecification().getFacet(ViewModelFacet.class); - if(recreatableObjectFacet != null) { - final Object viewModel = adapter.getPojo(); - final boolean cloneable = recreatableObjectFacet.isCloneable(viewModel); - if(cloneable) { - //XXX lombok issue, no val - Object newViewModelPojo = recreatableObjectFacet.clone(viewModel); - adapter = super.getPojoToAdapter().apply(newViewModelPojo); - } - } + return ManagedObjects.copyOfIfClonable(adapter); - return adapter; } @Override