You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/04/19 07:48:23 UTC

[2/2] isis git commit: ISIS-1601: fixes the type of Oid used to map parented collection pojos.

ISIS-1601: fixes the type of Oid used to map parented collection pojos.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/29d1f766
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/29d1f766
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/29d1f766

Branch: refs/heads/master
Commit: 29d1f766d3a81e2312b5d05a28685f9fcbcc25e1
Parents: 0ff91f9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Apr 19 09:46:48 2017 +0200
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Apr 19 09:46:48 2017 +0200

----------------------------------------------------------------------
 .../accessor/CollectionAccessorFacetViaAccessor.java      | 10 +++++++++-
 .../runtime/system/persistence/PersistenceSession.java    |  6 ++++++
 2 files changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/29d1f766/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
index 63f87f6..6faa784 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
@@ -35,6 +35,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.CollectionUtils;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacetAbstract;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 public class CollectionAccessorFacetViaAccessor
@@ -77,7 +78,14 @@ public class CollectionAccessorFacetViaAccessor
             final InteractionInitiatedBy interactionInitiatedBy) {
         final Object collectionOrArray = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
 
-        final ObjectAdapter collectionAdapter = getAdapterManager().adapterFor(collectionOrArray);
+        // previously implementation adds the collection with a RootOid rather than a ParentedCollectionOid:
+        // final ObjectAdapter collectionAdapter = getAdapterManager().adapterFor(collectionOrArray);
+
+        // instead, should use this API:
+        OneToManyAssociation oneToManyAssociation = (OneToManyAssociation) owningAdapter.getSpecification()
+                .getAssociation(getIdentified().getIdentifier().getMemberName());
+        final ObjectAdapter collectionAdapter = getAdapterManager().adapterFor(collectionOrArray, owningAdapter, oneToManyAssociation);
+
 
         boolean filterForVisibility = getConfiguration().getBoolean("isis.reflector.facet.filterVisibility", true);
         if(filterForVisibility) {

http://git-wip-us.apache.org/repos/asf/isis/blob/29d1f766/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index a4e6981..ac718e1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -1714,6 +1714,12 @@ public class PersistenceSession implements
 
         // persistence of collection follows the parent
         final ParentedCollectionOid collectionOid = new ParentedCollectionOid((RootOid) parentOid, otma);
+
+        ObjectAdapter existingAdapter = getAdapterFor(collectionOid);
+        if(existingAdapter != null) {
+            return existingAdapter;
+        }
+
         final ObjectAdapter collectionAdapter = createCollectionAdapter(pojo, collectionOid);
 
         // we copy over the type onto the adapter itself