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:27 UTC

[isis] branch ISIS-1976-rethink-object-adapters updated (2c70410 -> 67d3c09)

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

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


    from 2c70410  ISIS-1976: fixes StackOverflow with ObjectAdapterContext.specificationForViewModel()
     add 3d49fc7  Merge pull request #120 from apache/ISIS-1976-rethink-object-adapters
     add 8533556  ISIS-1976: fixing some tests
     add 58061be  ISIS-1976: further fixing some tests
     add 6704695  ISIS-1895: fix SwaggerServiceDefault throws on initialization for tests
     add 2fcfc93  ISIS-1976: minor polishing
     new 1d8dfcf  ISIS-1976: make ObjectAdapter.pojo final
     new 2ebc19e  ISIS-1976: removing ObjectAdapter.replacePojo(Object pojo)
     new 2491edc  ISIS-1976: let JavaCollectionFacet no longer change OA's pojo
     new b83de86  ISIS-1976: let ObjectAdapterContext.replaceRootAdapter(ObjectAdapter, RootAndCollectionAdapters) no longer use OA's replacePojo
     new 67d3c09  ISIS-1976: prepare removal of OA's replacePojo

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/isis/commons/internal/base/_Lazy.java   | 64 ++++++++++------------
 .../base/{_Lazy.java => _Lazy_Simple.java}         | 38 ++-----------
 ...{_LazyThreadSafe.java => _Lazy_ThreadSafe.java} | 39 ++-----------
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 49 ++++++++---------
 .../actions/action/invocation/CommandUtil.java     |  2 +-
 .../javautilcollection/JavaArrayFacet.java         |  4 +-
 .../javautilcollection/JavaCollectionFacet.java    | 16 ++----
 .../facets/collections/modify/CollectionFacet.java |  3 +-
 .../BooleanPrimitiveValueSemanticsProvider.java    | 32 +++++------
 .../facets/value/booleans/BooleanValueFacet.java   | 10 ++--
 .../BooleanWrapperValueSemanticsProvider.java      | 42 +++++++-------
 .../services/swagger/SwaggerServiceDefault.java    |  8 ++-
 .../specimpl/OneToOneAssociationDefault.java       |  2 +-
 .../CollectionFacetOnStandaloneList.java           |  3 +-
 .../system/persistence/PersistenceSession4.java    | 28 ++++++----
 .../persistence/PersistenceSessionFactory4.java    |  6 +-
 .../system/persistence/PersistenceSession5.java    | 28 ++++++----
 .../persistence/PersistenceSessionFactory5.java    |  6 +-
 .../runtime/persistence/adapter/PojoAdapter.java   | 34 +++++++++---
 .../adaptermanager/ObjectAdapterContext.java       | 43 +++++++++++----
 .../ObjectAdapterContext_MementoSupport.java       |  6 +-
 .../objectstore/jdo/service/RegisterEntities.java  |  4 +-
 .../server/ResourceContextTest_getArg.java         | 12 ++--
 ..._ensureCompatibleAcceptHeader_ContractTest.java | 18 +++---
 .../model/mementos/ObjectAdapterMemento.java       |  2 +-
 .../wicket/model/models/EntityCollectionModel.java |  2 +-
 26 files changed, 246 insertions(+), 255 deletions(-)
 copy core/commons/src/main/java/org/apache/isis/commons/internal/base/{_Lazy.java => _Lazy_Simple.java} (57%)
 rename core/commons/src/main/java/org/apache/isis/commons/internal/base/{_LazyThreadSafe.java => _Lazy_ThreadSafe.java} (57%)


[isis] 02/05: ISIS-1976: removing ObjectAdapter.replacePojo(Object pojo)

Posted by ah...@apache.org.
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 2ebc19e35c2878810332059ffaf9cb51c03698b1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 5 15:56:32 2018 +0200

    ISIS-1976: removing ObjectAdapter.replacePojo(Object pojo)
    
    also cleaning up
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../apache/isis/core/metamodel/adapter/ObjectAdapter.java   | 13 -------------
 .../facets/actions/action/invocation/CommandUtil.java       |  2 +-
 .../collections/javautilcollection/JavaArrayFacet.java      |  3 ++-
 .../collections/javautilcollection/JavaCollectionFacet.java |  9 +++++----
 .../facets/collections/modify/CollectionFacet.java          |  3 ++-
 .../specloader/specimpl/OneToOneAssociationDefault.java     |  2 +-
 .../standalonelist/CollectionFacetOnStandaloneList.java     |  3 ++-
 .../viewer/wicket/model/mementos/ObjectAdapterMemento.java  |  2 +-
 .../viewer/wicket/model/models/EntityCollectionModel.java   |  2 +-
 9 files changed, 15 insertions(+), 24 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 48b4745..fc67020 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
@@ -469,19 +469,6 @@ public interface ObjectAdapter extends Instance {
             return Util::unwrap;
         }
 
-        public static Function<Object, ObjectAdapter> adapterForUsing(final ObjectAdapterProvider adapterProvider) {
-            return adapterProvider::adapterFor;
-        }
-
-        @Deprecated
-        public static com.google.common.base.Function<Object, ObjectAdapter> adapter_ForUsing(final ObjectAdapterProvider adapterProvider) {
-            return new com.google.common.base.Function<Object, ObjectAdapter>() {
-                @Override
-                public ObjectAdapter apply(final Object pojo) {
-                    return adapterProvider.adapterFor(pojo);
-                }
-            };
-        }
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
index aea2939..f0f9112 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -103,7 +103,7 @@ public class CommandUtil {
 
     public static ObjectAdapter[] adaptersFor(final Object[] args, final ObjectAdapterProvider adapterProvider) {
         return _NullSafe.stream(args)
-                .map(ObjectAdapter.Functions.adapterForUsing(adapterProvider))
+                .map(adapterProvider::adapterFor)
                 .collect(_Arrays.toArray(ObjectAdapter.class, _NullSafe.size(args)));
     }
 
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 315027c..94ffea2 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
@@ -43,13 +43,14 @@ public class JavaArrayFacet extends CollectionFacetAbstract {
      * Expected to be called with a {@link ObjectAdapter} wrapping an array.
      */
     @Override
-    public void init(final ObjectAdapter arrayAdapter, final ObjectAdapter[] initData) {
+    public ObjectAdapter init(final ObjectAdapter arrayAdapter, final ObjectAdapter[] initData) {
         final int length = initData.length;
         final Object[] array = new Object[length];
         for (int i = 0; i < length; i++) {
             array[i] = initData[i].getObject();
         }
         arrayAdapter.friend().replacePojo(array);
+        return arrayAdapter;
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
index 84360f9..a1fe10d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
@@ -21,10 +21,10 @@ package org.apache.isis.core.metamodel.facets.collections.javautilcollection;
 
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.function.Function;
 
 import com.google.common.collect.Collections2;
 
-import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -40,13 +40,14 @@ public class JavaCollectionFacet extends CollectionFacetAbstract {
     }
     
     @Override
-    public void init(final ObjectAdapter collection, final ObjectAdapter[] initData) {
+    public ObjectAdapter init(final ObjectAdapter collection, final ObjectAdapter[] initData) {
         final Collection<? super Object> pojoCollection = pojoCollection(collection);
         pojoCollection.clear();
         for (final ObjectAdapter element : initData) {
             final Object pojo = element.getObject();
             pojoCollection.add(pojo);
         }
+        return collection;
     }
     
     @Override
@@ -55,8 +56,8 @@ public class JavaCollectionFacet extends CollectionFacetAbstract {
         
         //TODO [ahuber] java doc states, this is a live view, don't know if this is needed, 
         // or if a copy is sufficient
-        return Collections2.transform(pojoCollection,
-                ObjectAdapter.Functions.adapter_ForUsing(getObjectAdapterProvider()));
+        return Collections2.transform(pojoCollection, adapterProvider::adapterFor);
+                
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
index 97d3798..fb6019f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
@@ -56,8 +56,9 @@ public interface CollectionFacet extends Facet {
 
     /**
      * Set the contents of this collection.
+     * @return a possibly new instance
      */
-    void init(ObjectAdapter collectionAdapter, ObjectAdapter[] elements);
+    ObjectAdapter init(ObjectAdapter collectionAdapter, ObjectAdapter[] elements);
 
     /**
      * Convenience method that returns the {@link TypeOfFacet} on this facet's
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 bd313fa..7418bda 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
@@ -272,7 +272,7 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
                 getSpecificationLoader(),
                 interactionInitiatedBy);
         List<ObjectAdapter> adapters = _NullSafe.stream(pojoOptions)
-                .map( ObjectAdapter.Functions.adapterForUsing( getObjectAdapterProvider() ) )
+                .map(  getObjectAdapterProvider()::adapterFor )
                 .collect(Collectors.toList());
         return adapters.toArray(new ObjectAdapter[]{});
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
index cca3801..e03fda9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
@@ -64,7 +64,8 @@ public class CollectionFacetOnStandaloneList extends CollectionFacetAbstract {
      * Does nothing.
      */
     @Override
-    public void init(final ObjectAdapter collection, final ObjectAdapter[] initData) {
+    public ObjectAdapter init(final ObjectAdapter collection, final ObjectAdapter[] initData) {
+        return collection;
     }
 
 }
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index f4079cb..243cbac 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -134,7 +134,7 @@ public class ObjectAdapterMemento implements Serializable {
                 final List<Object> listOfPojos =
                         _Lists.transform(oam.list, Functions.toPojo(persistenceSession, specificationLoader));
 
-                return ObjectAdapter.Functions.adapterForUsing(persistenceSession).apply(listOfPojos);
+                return persistenceSession.adapterFor(listOfPojos);
             }
 
             @Override
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index fafc912..5970611 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -176,7 +176,7 @@ UiHintContainer {
 
                 final List<ObjectAdapter> adapterList =
                         _Lists.transform(objectList,
-                                ObjectAdapter.Functions.adapterForUsing( entityCollectionModel.getPersistenceSession() ));
+                                entityCollectionModel.getPersistenceSession()::adapterFor);
 
                 return adapterList;
             }


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

Posted by ah...@apache.org.
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);
     }
 


[isis] 03/05: ISIS-1976: let JavaCollectionFacet no longer change OA's pojo

Posted by ah...@apache.org.
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 2491edc72a088831e1c4bd55d44ab02d26f87e66
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 5 16:06:51 2018 +0200

    ISIS-1976: let JavaCollectionFacet no longer change OA's pojo
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../facets/collections/javautilcollection/JavaArrayFacet.java    | 3 +--
 .../collections/javautilcollection/JavaCollectionFacet.java      | 9 ---------
 .../adaptermanager/ObjectAdapterContext_MementoSupport.java      | 6 +++---
 3 files changed, 4 insertions(+), 14 deletions(-)

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 94ffea2..5a86a12 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,8 +49,7 @@ public class JavaArrayFacet extends CollectionFacetAbstract {
         for (int i = 0; i < length; i++) {
             array[i] = initData[i].getObject();
         }
-        arrayAdapter.friend().replacePojo(array);
-        return arrayAdapter;
+        return arrayAdapter.withPojo(array);  
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
index a1fe10d..63a5f55 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.facets.collections.javautilcollection;
 
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.function.Function;
 
 import com.google.common.collect.Collections2;
 
@@ -79,12 +78,4 @@ public class JavaCollectionFacet extends CollectionFacetAbstract {
         return (Collection<? super Object>) collectionAdapter.getObject();
     }
 
-    // //////////////////////////////////////////////////////////////////////
-    // Dependencies (from constructor)
-    // //////////////////////////////////////////////////////////////////////
-
-    private ObjectAdapterProvider getObjectAdapterProvider() {
-        return adapterProvider;
-    }
-
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
index acb2e11..beaadae 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
@@ -74,7 +74,7 @@ class ObjectAdapterContext_MementoSupport implements MementoRecreateObjectSuppor
 
             final Object recreatedPojo = persistenceSession.instantiateAndInjectServices(spec);
             adapter = objectAdapterContext.addRecreatedPojoToCache(oid, recreatedPojo);
-            populateCollection(adapter, (CollectionData) data);
+            adapter = populateCollection(adapter, (CollectionData) data);
 
         } else {
             Assert.assertTrue("oid must be a RootOid representing an object because spec is not a collection and cannot be a value", oid instanceof RootOid);
@@ -138,14 +138,14 @@ class ObjectAdapterContext_MementoSupport implements MementoRecreateObjectSuppor
         }
     }
     
-    private void populateCollection(final ObjectAdapter collectionAdapter, final CollectionData state) {
+    private ObjectAdapter populateCollection(final ObjectAdapter collectionAdapter, final CollectionData state) {
         final ObjectAdapter[] initData = new ObjectAdapter[state.getElements().length];
         int i = 0;
         for (final Data elementData : state.getElements()) {
             initData[i++] = recreateReference(elementData);
         }
         final CollectionFacet facet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
-        facet.init(collectionAdapter, initData);
+        return facet.init(collectionAdapter, initData);
     }
     
     private void updateFieldsAndResolveState(final ObjectAdapter objectAdapter, final Data data) {


[isis] 04/05: ISIS-1976: let ObjectAdapterContext.replaceRootAdapter(ObjectAdapter, RootAndCollectionAdapters) no longer use OA's replacePojo

Posted by ah...@apache.org.
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 b83de867d4bf9ad4a1bbdc5a3fbff3ec27ce328a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 5 16:16:10 2018 +0200

    ISIS-1976: let ObjectAdapterContext.replaceRootAdapter(ObjectAdapter,
    RootAndCollectionAdapters) no longer use OA's replacePojo
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/adaptermanager/ObjectAdapterContext.java   | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

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 a13a6cc..e7fd814 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,8 +427,8 @@ public class ObjectAdapterContext {
 
             if (collectionPojoActuallyOnPojo != collectionPojoWrappedByAdapter) {
                 pojoAdapterMap.remove(collectionAdapter);
-                collectionAdapter.friend().replacePojo(collectionPojoActuallyOnPojo);
-                pojoAdapterMap.add(collectionPojoActuallyOnPojo, collectionAdapter);
+                final ObjectAdapter newCollectionAdapter = collectionAdapter.withPojo(collectionPojoActuallyOnPojo);
+                pojoAdapterMap.add(collectionPojoActuallyOnPojo, newCollectionAdapter);
             }
         }
         
@@ -470,8 +470,12 @@ public class ObjectAdapterContext {
     @Deprecated
     public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
         removeAdapterFromCache(adapter);
+        
         adapter.friend().replacePojo(pojo);
         mapAndInjectServices(adapter);
+        
+        //final ObjectAdapter newAdapter = adapter.withPojo(pojo);
+        //mapAndInjectServices(newAdapter);
     }
 
 


[isis] 05/05: ISIS-1976: prepare removal of OA's replacePojo

Posted by ah...@apache.org.
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 67d3c0978067c2375e3263f8dd6d9cf4309a8014
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 5 17:31:09 2018 +0200

    ISIS-1976: prepare removal of OA's replacePojo
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/PersistenceSession4.java    | 28 ++++++++++++++--------
 .../system/persistence/PersistenceSession5.java    | 26 +++++++++++++-------
 .../adaptermanager/ObjectAdapterContext.java       | 23 +++++++++++++-----
 3 files changed, 52 insertions(+), 25 deletions(-)

diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 7c554f6..d22ef39 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -1140,15 +1140,17 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         final Version datastoreVersion = getVersionIfAny(pc);
 
         final RootOid originalOid;
-        ObjectAdapter adapter = objectAdapterContext.lookupAdapterFor(pojo);
-        if (adapter != null) {
-            ensureRootObject(pojo);
-            originalOid = (RootOid) adapter.getOid();
+        final ObjectAdapter originalAdapter = objectAdapterContext.lookupAdapterFor(pojo);
+        final ObjectAdapter newAdapter;
+        
+        if (originalAdapter != null) {
+            ensureRootObject(pojo); //[ahuber] while already mapped has no side-effect
+            originalOid = (RootOid) originalAdapter.getOid();
 
-            final Version originalVersion = adapter.getVersion();
+            final Version originalVersion = originalAdapter.getVersion();
 
             // sync the pojo held by the adapter with that just loaded
-            objectAdapterContext.remapRecreatedPojo(adapter, pojo);
+            newAdapter = objectAdapterContext.remapRecreatedPojo(originalAdapter, pojo);
 
             // since there was already an adapter, do concurrency check
             // (but don't set abort cause if checking is suppressed through thread-local)
@@ -1171,24 +1173,30 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
                     LOG.info("concurrency conflict detected but suppressed, on {} ({})", thisOid, otherVersion);
                 }
             }
+            
         } else {
             originalOid = createPersistentOrViewModelOid(pojo);
 
+            ObjectAdapter adapter;
+            
             // it appears to be possible that there is already an adapter for this Oid,
             // ie from ObjectStore#resolveImmediately()
             adapter = objectAdapterContext.lookupAdapterFor(originalOid);
             if (adapter != null) {
-                objectAdapterContext.remapRecreatedPojo(adapter, pojo);
+                adapter = objectAdapterContext.remapRecreatedPojo(adapter, pojo);
             } else {
                 adapter = objectAdapterContext.addRecreatedPojoToCache(originalOid, pojo);
 
                 CallbackFacet.Util.callCallback(adapter, LoadedCallbackFacet.class);
                 postLifecycleEventIfRequired(adapter, LoadedLifecycleEventFacet.class);
             }
+        
+            newAdapter = adapter;
+            
         }
-
-        adapter.setVersion(datastoreVersion);
-
+        
+        newAdapter.setVersion(datastoreVersion);
+        
         return objectAdapterContext.lookupAdapterFor(pojo);
     }
 
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index 90886dc..8fdeef5 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -1132,15 +1132,17 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         final Version datastoreVersion = getVersionIfAny(pc);
 
         final RootOid originalOid;
-        ObjectAdapter adapter = objectAdapterContext.lookupAdapterFor(pojo);
-        if (adapter != null) {
+        final ObjectAdapter originalAdapter = objectAdapterContext.lookupAdapterFor(pojo);
+        final ObjectAdapter newAdapter;
+        
+        if (originalAdapter != null) {
             ensureRootObject(pojo); //[ahuber] while already mapped has no side-effect
-            originalOid = (RootOid) adapter.getOid();
+            originalOid = (RootOid) originalAdapter.getOid();
 
-            final Version originalVersion = adapter.getVersion();
+            final Version originalVersion = originalAdapter.getVersion();
 
             // sync the pojo held by the adapter with that just loaded
-            objectAdapterContext.remapRecreatedPojo(adapter, pojo);
+            newAdapter = objectAdapterContext.remapRecreatedPojo(originalAdapter, pojo);
 
             // since there was already an adapter, do concurrency check
             // (but don't set abort cause if checking is suppressed through thread-local)
@@ -1163,24 +1165,30 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
                     LOG.info("concurrency conflict detected but suppressed, on {} ({})", thisOid, otherVersion);
                 }
             }
+            
         } else {
             originalOid = createPersistentOrViewModelOid(pojo);
 
+            ObjectAdapter adapter;
+            
             // it appears to be possible that there is already an adapter for this Oid,
             // ie from ObjectStore#resolveImmediately()
             adapter = objectAdapterContext.lookupAdapterFor(originalOid);
             if (adapter != null) {
-                objectAdapterContext.remapRecreatedPojo(adapter, pojo);
+                adapter = objectAdapterContext.remapRecreatedPojo(adapter, pojo);
             } else {
                 adapter = objectAdapterContext.addRecreatedPojoToCache(originalOid, pojo);
 
                 CallbackFacet.Util.callCallback(adapter, LoadedCallbackFacet.class);
                 postLifecycleEventIfRequired(adapter, LoadedLifecycleEventFacet.class);
             }
+        
+            newAdapter = adapter;
+            
         }
-
-        adapter.setVersion(datastoreVersion);
-
+        
+        newAdapter.setVersion(datastoreVersion);
+        
         return objectAdapterContext.lookupAdapterFor(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 e7fd814..cc59c62 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
@@ -41,6 +41,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.memento.Data;
+import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
 /**
@@ -468,14 +469,24 @@ public class ObjectAdapterContext {
      * @deprecated https://issues.apache.org/jira/browse/ISIS-1976
      */
     @Deprecated
-    public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
-        removeAdapterFromCache(adapter);
+    public ObjectAdapter remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
+        final ObjectAdapter newAdapter = adapter.withPojo(pojo);
+        pojoAdapterMap.remove(adapter);
+        pojoAdapterMap.remove(newAdapter);
         
-        adapter.friend().replacePojo(pojo);
-        mapAndInjectServices(adapter);
+        oidAdapterMap.remove(adapter.getOid());
+        oidAdapterMap.remove(newAdapter.getOid());
+
+        //FIXME[ISIS-1976] can't remove yet, does have strange side-effects 
+        if(true){
+            adapter.friend().replacePojo(pojo);
+            mapAndInjectServices(adapter);
+            return adapter;
+        }
+        //---
         
-        //final ObjectAdapter newAdapter = adapter.withPojo(pojo);
-        //mapAndInjectServices(newAdapter);
+        mapAndInjectServices(newAdapter);
+        return newAdapter;
     }