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 2020/05/05 08:08:01 UTC

[isis] branch master updated: ISIS-2340: fixes Password marshaling

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 <ah...@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