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/03/17 11:31:36 UTC

[isis] branch master updated: ISIS-2577: invoke property clearing with non-null value adapter

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 cb5a32d  ISIS-2577: invoke property clearing with non-null value adapter
cb5a32d is described below

commit cb5a32d22c804baf6939ec4c0ff4e4bc33a13a12
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 17 12:31:26 2021 +0100

    ISIS-2577: invoke property clearing with non-null value adapter
---
 ...tySetterOrClearFacetForDomainEventAbstract.java | 26 +++++++++++++++-------
 .../update/clear/PropertyClearFacet.java           | 10 ++-------
 ...earFacet.java => PropertyClearingAccessor.java} | 10 +++------
 .../update/modify/PropertySetterFacet.java         | 17 +-------------
 ...tterFacet.java => PropertySettingAccessor.java} | 16 +++----------
 5 files changed, 27 insertions(+), 52 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index d930757..f3d77e4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -34,7 +34,9 @@ import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearingAccessor;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySettingAccessor;
 import org.apache.isis.core.metamodel.interactions.InteractionHead;
 import org.apache.isis.core.metamodel.services.ixn.InteractionDtoFactory;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -43,11 +45,15 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
 import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 
+import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 public abstract class PropertySetterOrClearFacetForDomainEventAbstract
-extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
+extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> 
+implements
+    PropertyClearingAccessor,
+    PropertySettingAccessor {
 
     private final DomainEventHelper domainEventHelper;
 
@@ -120,16 +126,20 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
                 final InteractionInitiatedBy interactionInitiatedBy);
     }
 
+    @Override
     public ManagedObject clearProperty(
             final OneToOneAssociation owningProperty,
             final ManagedObject targetAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
-
+        
+        val emptyValueAdapter = ManagedObject.empty(owningProperty.getSpecification());
+        
         return setOrClearProperty(EditingVariant.CLEAR,
-                owningProperty, targetAdapter, /*newValueAdapter*/ null, interactionInitiatedBy);
+                owningProperty, targetAdapter, emptyValueAdapter, interactionInitiatedBy);
 
     }
 
+    @Override
     public ManagedObject setProperty(
             final OneToOneAssociation owningProperty,
             final ManagedObject targetAdapter,
@@ -142,11 +152,11 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
     }
 
     private ManagedObject setOrClearProperty(
-            final EditingVariant style,
-            final OneToOneAssociation owningProperty,
-            final ManagedObject targetAdapter,
-            final ManagedObject newValueAdapter,
-            final InteractionInitiatedBy interactionInitiatedBy) {
+            final @NonNull EditingVariant style,
+            final @NonNull OneToOneAssociation owningProperty,
+            final @NonNull ManagedObject targetAdapter,
+            final @NonNull ManagedObject newValueAdapter,
+            final @NonNull InteractionInitiatedBy interactionInitiatedBy) {
 
         return getTransactionService()
                 .callWithinCurrentTransactionElseCreateNew(() ->
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
index 9b6f16e..44576a4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
@@ -19,10 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.properties.update.clear;
 
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
 /**
  * Mechanism for clearing a property of an object (that is, setting it to
@@ -34,10 +31,7 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
  * fallback the standard model also supports invoking the <tt>setXxx</tt> method
  * with <tt>null</tt>.
  */
-public interface PropertyClearFacet extends Facet {
+public interface PropertyClearFacet extends PropertyClearingAccessor, Facet {
 
-    ManagedObject clearProperty(
-            final OneToOneAssociation owningProperty,
-            final ManagedObject targetAdapter,
-            final InteractionInitiatedBy interactionInitiatedBy);
+    
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearingAccessor.java
similarity index 82%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearingAccessor.java
index 9b6f16e..f74917c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearingAccessor.java
@@ -27,14 +27,10 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 /**
  * Mechanism for clearing a property of an object (that is, setting it to
  * <tt>null</tt>).
- *
- * <p>
- * In the standard Apache Isis Programming Model, typically corresponds to a
- * method named <tt>clearXxx</tt> (for a property <tt>getXxx</tt>). As a
- * fallback the standard model also supports invoking the <tt>setXxx</tt> method
- * with <tt>null</tt>.
+ * @see PropertyClearFacet
+ * @since 2.0
  */
-public interface PropertyClearFacet extends Facet {
+public interface PropertyClearingAccessor extends Facet {
 
     ManagedObject clearProperty(
             final OneToOneAssociation owningProperty,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
index 166bfb1..7268af5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
@@ -19,13 +19,10 @@
 
 package org.apache.isis.core.metamodel.facets.properties.update.modify;
 
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
 /**
  * The mechanism by which the value of the property can be set.
@@ -38,18 +35,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
  * @see PropertyClearFacet
  * @see PropertyInitializationFacet
  */
-public interface PropertySetterFacet extends Facet {
+public interface PropertySetterFacet extends PropertySettingAccessor, Facet {
 
-    /**
-     * Sets the value of this property.
-     *
-     * <p>
-     *     If this is a view model, then the target will be cloned and effectively replaced.
-     * </p>
-     */
-    ManagedObject setProperty(
-            final OneToOneAssociation owningAssociation,
-            final ManagedObject inObject,
-            final ManagedObject value,
-            final InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySettingAccessor.java
similarity index 71%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySettingAccessor.java
index 166bfb1..71d0c7d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySettingAccessor.java
@@ -20,25 +20,15 @@
 package org.apache.isis.core.metamodel.facets.properties.update.modify;
 
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
 /**
  * The mechanism by which the value of the property can be set.
- *
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to invoking the
- * mutator method for a property.
- *
- * @see PropertyOrCollectionAccessorFacet
- * @see PropertyClearFacet
- * @see PropertyInitializationFacet
+ * @see PropertySetterFacet
+ * @since 2.0
  */
-public interface PropertySetterFacet extends Facet {
+public interface PropertySettingAccessor {
 
     /**
      * Sets the value of this property.