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 2018/09/05 15:31:28 UTC

[isis] 01/05: ISIS-1976: make ObjectAdapter.pojo final

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 1d8dfcf1f80933c3fcb8bdf159171e8d39c15e57
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 5 15:43:52 2018 +0200

    ISIS-1976: make ObjectAdapter.pojo final
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 36 +++++++++++--------
 .../javautilcollection/JavaArrayFacet.java         |  2 +-
 .../BooleanPrimitiveValueSemanticsProvider.java    | 32 ++++++++---------
 .../facets/value/booleans/BooleanValueFacet.java   | 10 +++---
 .../BooleanWrapperValueSemanticsProvider.java      | 42 +++++++++++-----------
 .../runtime/persistence/adapter/PojoAdapter.java   | 34 +++++++++++++-----
 .../adaptermanager/ObjectAdapterContext.java       |  4 +--
 7 files changed, 92 insertions(+), 68 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index a17fac2..48b4745 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -108,13 +108,6 @@ public interface ObjectAdapter extends Instance {
     Instance getInstance(Specification specification);
 
     /**
-     * Sometimes it is necessary to manage the replacement of the underlying
-     * domain object (by another component such as an object store). This method
-     * allows the adapter to be kept while the domain object is replaced.
-     */
-    void replacePojo(Object pojo);
-
-    /**
      * For (stand-alone) collections, returns the element type.
      *
      * <p>
@@ -169,12 +162,6 @@ public interface ObjectAdapter extends Instance {
      */
     Oid getOid();
 
-//    /**
-//     * Since {@link Oid}s are now immutable, it is the reference from the
-//     * {@link ObjectAdapter} to its {@link Oid} that must now be updated.
-//     */
-//    void replaceOid(Oid persistedOid);
-
     /**
      * Returns either itself (if this is a root) or the parented collections, the
      * adapter corresponding to their {@link ParentedCollectionOid#getRootOid() root oid}.
@@ -499,11 +486,32 @@ public interface ObjectAdapter extends Instance {
 
     /**
      * 
-     * @param persistedRootOid
+     * @param newOid
      * @return a copy of this adapter, having a new RootOid 
      * @since 2.0.0-M2
      */
     ObjectAdapter withOid(RootOid newOid);
 
+    /**
+     * 
+     * @param newPojo
+     * @return a copy of this adapter, having a new Pojo 
+     * @since 2.0.0-M2
+     */
+    ObjectAdapter withPojo(Object newPojo);
+
+    @Deprecated
+    public static interface Friend {
+      /**
+      * Sometimes it is necessary to manage the replacement of the underlying
+      * domain object (by another component such as an object store). This method
+      * allows the adapter to be kept while the domain object is replaced.
+      */
+     void replacePojo(Object pojo);
+    }
+    
+    @Deprecated
+    Friend friend();
+
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
index be02897..315027c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
@@ -49,7 +49,7 @@ public class JavaArrayFacet extends CollectionFacetAbstract {
         for (int i = 0; i < length; i++) {
             array[i] = initData[i].getObject();
         }
-        arrayAdapter.replacePojo(array);
+        arrayAdapter.friend().replacePojo(array);
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
index d359c94..c0bfdd3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
@@ -56,21 +56,21 @@ public class BooleanPrimitiveValueSemanticsProvider extends BooleanValueSemantic
     // BooleanValueFacet impl
     // //////////////////////////////////////////////////////////////////
 
-    @Override
-    public void reset(final ObjectAdapter object) {
-        object.replacePojo(Boolean.FALSE);
-    }
-
-    @Override
-    public void set(final ObjectAdapter object) {
-        object.replacePojo(Boolean.TRUE);
-    }
-
-    @Override
-    public void toggle(final ObjectAdapter object) {
-        final boolean current = ((Boolean) object.getObject()).booleanValue();
-        final boolean toggled = !current;
-        object.replacePojo(Boolean.valueOf(toggled));
-    }
+//    @Override
+//    public void reset(final ObjectAdapter object) {
+//        object.replacePojo(Boolean.FALSE);
+//    }
+//
+//    @Override
+//    public void set(final ObjectAdapter object) {
+//        object.replacePojo(Boolean.TRUE);
+//    }
+//
+//    @Override
+//    public void toggle(final ObjectAdapter object) {
+//        final boolean current = ((Boolean) object.getObject()).booleanValue();
+//        final boolean toggled = !current;
+//        object.replacePojo(Boolean.valueOf(toggled));
+//    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueFacet.java
index 785c0e1..2e61cc2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueFacet.java
@@ -26,9 +26,9 @@ public interface BooleanValueFacet extends Facet {
 
     boolean isSet(ObjectAdapter object);
 
-    void set(ObjectAdapter object);
-
-    void reset(ObjectAdapter object);
-
-    void toggle(ObjectAdapter object);
+//    void set(ObjectAdapter object);
+//
+//    void reset(ObjectAdapter object);
+//
+//    void toggle(ObjectAdapter object);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueSemanticsProvider.java
index 234684d..69431bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueSemanticsProvider.java
@@ -46,26 +46,26 @@ public class BooleanWrapperValueSemanticsProvider extends BooleanValueSemanticsP
     // BooleanValueFacet impl
     // //////////////////////////////////////////////////////////////////
 
-    @Override
-    public void reset(final ObjectAdapter adapter) {
-        adapter.replacePojo(Boolean.FALSE);
-    }
-
-    @Override
-    public void set(final ObjectAdapter adapter) {
-        adapter.replacePojo(Boolean.TRUE);
-    }
-
-    @Override
-    public void toggle(final ObjectAdapter adapter) {
-        final Object currentObj = adapter.getObject();
-        if (currentObj == null) {
-            set(adapter);
-            return;
-        }
-        final boolean current = ((Boolean) currentObj).booleanValue();
-        final boolean toggled = !current;
-        adapter.replacePojo(Boolean.valueOf(toggled));
-    }
+//    @Override
+//    public void reset(final ObjectAdapter adapter) {
+//        adapter.replacePojo(Boolean.FALSE);
+//    }
+//
+//    @Override
+//    public void set(final ObjectAdapter adapter) {
+//        adapter.replacePojo(Boolean.TRUE);
+//    }
+//
+//    @Override
+//    public void toggle(final ObjectAdapter adapter) {
+//        final Object currentObj = adapter.getObject();
+//        if (currentObj == null) {
+//            set(adapter);
+//            return;
+//        }
+//        final boolean current = ((Boolean) currentObj).booleanValue();
+//        final boolean toggled = !current;
+//        adapter.replacePojo(Boolean.valueOf(toggled));
+//    }
 
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 91a32a7..f80048c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -108,15 +108,15 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return pojo;
     }
 
-    /**
-     * Sometimes it is necessary to manage the replacement of the underlying
-     * domain object (by another component such as an object store). This method
-     * allows the adapter to be kept while the domain object is replaced.
-     */
-    @Override
-    public void replacePojo(final Object pojo) {
-        this.pojo = pojo;
-    }
+//    /**
+//     * Sometimes it is necessary to manage the replacement of the underlying
+//     * domain object (by another component such as an object store). This method
+//     * allows the adapter to be kept while the domain object is replaced.
+//     */
+//    @Override
+//    public void replacePojo(final Object pojo) {
+//        this.pojo = pojo;
+//    }
 
     // -- getOid
     @Override
@@ -401,5 +401,21 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
     public ObjectAdapter withOid(RootOid newOid) {
         return new PojoAdapter(pojo, newOid, authenticationSession, specificationLoader, persistenceSession);
     }
+    
+    @Override
+    public ObjectAdapter withPojo(Object newPojo) {
+        return new PojoAdapter(newPojo, oid, authenticationSession, specificationLoader, persistenceSession);
+    }
+
+
+    @Override
+    public Friend friend() {
+        return new Friend() {
+            @Override
+            public void replacePojo(Object pojo) {
+                PojoAdapter.this.pojo = pojo;
+            }
+        };
+    }
 
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index a01bb45..a13a6cc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -427,7 +427,7 @@ public class ObjectAdapterContext {
 
             if (collectionPojoActuallyOnPojo != collectionPojoWrappedByAdapter) {
                 pojoAdapterMap.remove(collectionAdapter);
-                collectionAdapter.replacePojo(collectionPojoActuallyOnPojo);
+                collectionAdapter.friend().replacePojo(collectionPojoActuallyOnPojo);
                 pojoAdapterMap.add(collectionPojoActuallyOnPojo, collectionAdapter);
             }
         }
@@ -470,7 +470,7 @@ public class ObjectAdapterContext {
     @Deprecated
     public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
         removeAdapterFromCache(adapter);
-        adapter.replacePojo(pojo);
+        adapter.friend().replacePojo(pojo);
         mapAndInjectServices(adapter);
     }