You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ke...@apache.org on 2011/09/06 21:05:23 UTC

svn commit: r1165786 - in /incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql: ./ auto/

Author: kevin
Date: Tue Sep  6 19:05:23 2011
New Revision: 1165786

URL: http://svn.apache.org/viewvc?rev=1165786&view=rev
Log:
ISIS-118 and ISIS-119: Working on getting collections to load and resolve properly.

Modified:
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/CombinedCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java?rev=1165786&r1=1165785&r2=1165786&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java Tue Sep  6 19:05:23 2011
@@ -24,7 +24,8 @@ import org.apache.isis.core.metamodel.ad
 
 public interface CollectionMapper {
 
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent);
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent,
+        final boolean makeResolved);
 
     public void saveInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent);
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java?rev=1165786&r1=1165785&r2=1165786&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java Tue Sep  6 19:05:23 2011
@@ -22,6 +22,8 @@ package org.apache.isis.runtimes.dflt.ob
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.log4j.Logger;
+
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ResolveState;
@@ -39,7 +41,6 @@ import org.apache.isis.runtimes.dflt.obj
 import org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.JdbcObjectReferenceMapping;
 import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.ObjectReferenceMapping;
 import org.apache.isis.runtimes.dflt.runtime.persistence.PersistorUtil;
-import org.apache.log4j.Logger;
 
 public class AutoCollectionMapper extends AbstractMapper implements CollectionMapper {
     private static final Logger LOG = Logger.getLogger(AutoCollectionMapper.class);
@@ -81,7 +82,8 @@ public class AutoCollectionMapper extend
     }
 
     @Override
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent) {
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent,
+        final boolean makeResolved) {
         final ObjectAdapter collection = field.get(parent);
         if (collection.getResolveState().canChangeTo(ResolveState.RESOLVING)) {
             LOG.debug("loading internal collection " + field);
@@ -105,7 +107,9 @@ public class AutoCollectionMapper extend
             final CollectionFacet collectionFacet = collection.getSpecification().getFacet(CollectionFacet.class);
             collectionFacet.init(collection, list.toArray(new ObjectAdapter[list.size()]));
             rs.close();
-            PersistorUtil.end(collection);
+            if (makeResolved) {
+                PersistorUtil.end(collection);
+            }
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java?rev=1165786&r1=1165785&r2=1165786&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java Tue Sep  6 19:05:23 2011
@@ -241,7 +241,7 @@ public class AutoMapper extends Abstract
     private void loadCollections(final DatabaseConnector connector, final ObjectAdapter instance) {
 
         for (final CollectionMapper mapper : collectionMappers) {
-            mapper.loadInternalCollection(connector, instance);
+            mapper.loadInternalCollection(connector, instance, true);
         }
     }
 
@@ -291,7 +291,7 @@ public class AutoMapper extends Abstract
             rs.close();
 
             for (final CollectionMapper collectionMapper : collectionMappers) {
-                collectionMapper.loadInternalCollection(connector, object);
+                collectionMapper.loadInternalCollection(connector, object, true);
             }
         } else {
             rs.close();
@@ -306,7 +306,7 @@ public class AutoMapper extends Abstract
         if (collectionMappers.length > 0) {
             final DatabaseConnector secondConnector = connector.getConnectionPool().acquire();
             for (final CollectionMapper collectionMapper : collectionMappers) {
-                collectionMapper.loadInternalCollection(secondConnector, object);
+                collectionMapper.loadInternalCollection(secondConnector, object, true);
             }
             connector.getConnectionPool().release(secondConnector);
         }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/CombinedCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/CombinedCollectionMapper.java?rev=1165786&r1=1165785&r2=1165786&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/CombinedCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/CombinedCollectionMapper.java Tue Sep  6 19:05:23 2011
@@ -110,7 +110,8 @@ public class CombinedCollectionMapper ex
     }
 
     @Override
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent) {
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent,
+        final boolean makeResolved) {
         if (collectionMappers == null) {
             // for abstract classes and interfaces
             return;
@@ -142,7 +143,7 @@ public class CombinedCollectionMapper ex
             while (rs.next()) {
                 final Oid oid = idMapping.recreateOid(rs, specification);
                 final ObjectAdapter element = getAdapter(specification, oid);
-                loadFields(element, rs);
+                loadFields(element, rs, makeResolved);
                 LOG.debug("  element  " + element.getOid());
                 list.add(element);
             }
@@ -150,17 +151,30 @@ public class CombinedCollectionMapper ex
             collectionFacet.init(collection, list.toArray(new ObjectAdapter[list.size()]));
             rs.close();
             PersistorUtil.end(collection);
+
+            // TODO: Need to finalise this behaviour. At the moment, all collections will get infinitely resolved. I
+            // don't think this is desirable. Sub-collections should be left "Partially Resolved".
+            if (makeResolved) {
+                for (ObjectAdapter field : list) {
+                    // final ObjectMapping mapping = objectMappingLookup.getMapping(field, connector);
+                    if (field.getSpecification().isOfType(parent.getSpecification())) {
+                        loadInternalCollection(connector, field, false);
+                    }
+                }
+            }
         }
     }
 
-    protected void loadFields(final ObjectAdapter object, final Results rs) {
+    protected void loadFields(final ObjectAdapter object, final Results rs, final boolean makeResolved) {
         if (object.getResolveState().canChangeTo(ResolveState.RESOLVING)) {
             PersistorUtil.start(object, ResolveState.RESOLVING);
             for (final FieldMapping mapping : fieldMappings) {
                 mapping.initializeField(object, rs);
             }
             object.setOptimisticLock(versionMapping.getLock(rs));
-            PersistorUtil.end(object);
+            if (makeResolved) {
+                PersistorUtil.end(object);
+            }
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java?rev=1165786&r1=1165785&r2=1165786&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java Tue Sep  6 19:05:23 2011
@@ -86,7 +86,8 @@ public class ReversedAutoAssociationMapp
     }
 
     @Override
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent) {
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent,
+        final boolean makeResolved) {
         final ObjectAdapter collection = field.get(parent);
         if (collection.getResolveState().canChangeTo(ResolveState.RESOLVING)) {
             LOG.debug("loading internal collection " + field);
@@ -106,7 +107,7 @@ public class ReversedAutoAssociationMapp
             while (rs.next()) {
                 final Oid oid = idMapping.recreateOid(rs, specification);
                 final ObjectAdapter element = getAdapter(specification, oid);
-                loadFields(element, rs);
+                loadFields(element, rs, makeResolved);
                 LOG.debug("  element  " + element.getOid());
                 list.add(element);
             }
@@ -117,7 +118,7 @@ public class ReversedAutoAssociationMapp
         }
     }
 
-    protected void loadFields(final ObjectAdapter object, final Results rs) {
+    protected void loadFields(final ObjectAdapter object, final Results rs, final boolean makeResolved) {
         PersistorUtil.start(object, ResolveState.RESOLVING);
         for (final FieldMapping mapping : fieldMappings) {
             mapping.initializeField(object, rs);
@@ -132,7 +133,9 @@ public class ReversedAutoAssociationMapp
          */
 
         object.setOptimisticLock(versionMapping.getLock(rs));
-        PersistorUtil.end(object);
+        if (makeResolved) {
+            PersistorUtil.end(object);
+        }
 
     }