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/03 21:20:32 UTC

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

Author: kevin
Date: Sat Sep  3 19:20:31 2011
New Revision: 1164915

URL: http://svn.apache.org/viewvc?rev=1164915&view=rev
Log:
ISIS-118 and ISIS-117: Implemented some support for collections and sub-classes. Recursive collections has been added (the collection of a class can be of the same type as the class). 

Modified:
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AbstractAutoMapper.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/MultiColumnCombinedCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/dataclasses/polymorphism/PolyTestClass.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/test/java/org/apache/isis/runtimes/dflt/objectstores/sql/PolymorphismTest.java

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AbstractAutoMapper.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/AbstractAutoMapper.java?rev=1164915&r1=1164914&r2=1164915&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AbstractAutoMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AbstractAutoMapper.java Sat Sep  3 19:20:31 2011
@@ -45,13 +45,11 @@ import org.apache.isis.runtimes.dflt.run
 
 public abstract class AbstractAutoMapper extends AbstractMapper {
     private static final Logger LOG = Logger.getLogger(AbstractAutoMapper.class);
-    protected CollectionMapper collectionMappers[];
-    protected boolean dbCreatesId;
 
-    protected ObjectSpecification specification;
-    protected String table;
-    protected List<FieldMapping> fieldMappings = new ArrayList<FieldMapping>();
-    protected Map<ObjectAssociation, FieldMapping> fieldMappingLookup = new HashMap<ObjectAssociation, FieldMapping>();
+    final String className;
+    final String parameterBase;
+    final FieldMappingLookup lookup;
+    final ObjectMappingLookup objectMapperLookup;
 
     protected AbstractAutoMapper(final String className, final String parameterBase, final FieldMappingLookup lookup,
         final ObjectMappingLookup objectMapperLookup) {
@@ -62,9 +60,24 @@ public abstract class AbstractAutoMapper
                     + specification);
             }
         }
+        this.className = className;
+        this.parameterBase = parameterBase;
+        this.lookup = lookup;
+        this.objectMapperLookup = objectMapperLookup;
+    }
+
+    protected void setUpFieldMappers() {
         setUpFieldMappers(lookup, objectMapperLookup, className, parameterBase);
     }
 
+    protected CollectionMapper collectionMappers[];
+    protected boolean dbCreatesId;
+
+    protected ObjectSpecification specification;
+    protected String table;
+    protected List<FieldMapping> fieldMappings = new ArrayList<FieldMapping>();
+    protected Map<ObjectAssociation, FieldMapping> fieldMappingLookup = new HashMap<ObjectAssociation, FieldMapping>();
+
     private void setUpFieldMappers(final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup,
         final String className, final String parameterBase) {
         final IsisConfiguration configParameters = IsisContext.getConfiguration();
@@ -86,9 +99,30 @@ public abstract class AbstractAutoMapper
         LOG.info("table mapping: " + table + " (" + columnList() + ")");
     }
 
+    protected List<ObjectAssociation> fields = new ArrayList<ObjectAssociation>();
+
+    protected void getExtraFields(List<ObjectAssociation> fields) {
+    }
+
     private void setupFullMapping(final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup,
         final String className, final IsisConfiguration configParameters, final String parameterBase) {
-        final List<? extends ObjectAssociation> fields = specification.getAssociations();
+
+        fields.addAll(specification.getAssociations());
+
+        if (specification.hasSubclasses()) {
+            getExtraFields(fields);
+
+            final List<ObjectSpecification> subclasses = specification.subclasses();
+
+            for (ObjectSpecification subclass : subclasses) {
+                final List<? extends ObjectAssociation> subAssociations = subclass.getAssociations();
+                for (ObjectAssociation subA : subAssociations) {
+                    if (fields.contains(subA) == false) {
+                        fields.add(subA);
+                    }
+                }
+            }
+        }
 
         int simpleFieldCount = 0;
         int collectionFieldCount = 0;
@@ -125,9 +159,31 @@ public abstract class AbstractAutoMapper
                     // collectionMappers[collectionFieldNo] = new
                     // CombinedCollectionMapper(oneToManyProperties[collectionFieldNo], parameterBase, lookup,
                     // objectMapperLookup);
-                    collectionMappers[collectionFieldNo] =
-                        new MultiColumnCombinedCollectionMapper(oneToManyProperties[collectionFieldNo], parameterBase,
-                            lookup, objectMapperLookup);
+
+                    CollectionMapper collectionMapper = null;
+
+                    // Trying to detect recursion, here.
+                    // Let MultiColumnCombinedCollectionMapper find itself when a field is a collection of the current
+                    // field type.
+                    if (this instanceof MultiColumnCombinedCollectionMapper) {
+                        MultiColumnCombinedCollectionMapper mc = (MultiColumnCombinedCollectionMapper) this;
+
+                        if (mc.priorField == field) {
+                            collectionMapper = mc;
+                        } else {
+                            collectionMapper =
+                                new MultiColumnCombinedCollectionMapper(oneToManyProperties[collectionFieldNo],
+                                    parameterBase, lookup, objectMapperLookup, this, field);
+                        }
+                    }
+
+                    if (collectionMapper == null) {
+                        collectionMapper =
+                            new MultiColumnCombinedCollectionMapper(oneToManyProperties[collectionFieldNo],
+                                parameterBase, lookup, objectMapperLookup, this, field);
+                    }
+
+                    collectionMappers[collectionFieldNo] = collectionMapper;
 
                 } else if (type.equals("fk-table")) {
                     final String property = parameterBase + field.getId() + ".element-type";

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=1164915&r1=1164914&r2=1164915&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 Sat Sep  3 19:20:31 2011
@@ -60,6 +60,8 @@ public class AutoMapper extends Abstract
         idMapping = lookup.createIdMapping();
         versionMapping = lookup.createVersionMapping();
         titleMapping = lookup.createTitleMapping();
+
+        setUpFieldMappers();
     }
 
     @Override

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=1164915&r1=1164914&r2=1164915&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 Sat Sep  3 19:20:31 2011
@@ -51,12 +51,14 @@ public class CombinedCollectionMapper ex
     private final ObjectReferenceMapping foreignKeyMapping;
     private String foreignKeyName;
     private String columnName;
-    private final ObjectMapping originalMapping;
     private final ObjectMappingLookup objectMapperLookup2;
 
+    private ObjectMapping originalMapping = null;
+
     public CombinedCollectionMapper(final ObjectAssociation objectAssociation, final String parameterBase,
         final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup) {
         super(objectAssociation.getSpecification().getFullIdentifier(), parameterBase, lookup, objectMapperLookup);
+
         this.field = objectAssociation;
 
         objectMapperLookup2 = objectMapperLookup;
@@ -64,8 +66,6 @@ public class CombinedCollectionMapper ex
         idMapping = lookup.createIdMapping();
         versionMapping = lookup.createVersionMapping();
 
-        originalMapping = objectMapperLookup.getMapping(objectAssociation.getSpecification(), null);
-
         setColumnName(determineColumnName(objectAssociation));
         foreignKeyName = Sql.sqlName("fk_" + getColumnName());
 
@@ -92,6 +92,9 @@ public class CombinedCollectionMapper ex
 
     @Override
     public void startup(final DatabaseConnector connector, final FieldMappingLookup lookup) {
+        if (originalMapping == null) {
+            originalMapping = objectMapperLookup.getMapping(field.getSpecification(), null);
+        }
         originalMapping.startup(connector, objectMapperLookup2);
         super.startup(connector, lookup);
     }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/MultiColumnCombinedCollectionMapper.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/MultiColumnCombinedCollectionMapper.java?rev=1164915&r1=1164914&r2=1164915&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/MultiColumnCombinedCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/MultiColumnCombinedCollectionMapper.java Sat Sep  3 19:20:31 2011
@@ -22,6 +22,10 @@
  */
 package org.apache.isis.runtimes.dflt.objectstores.sql.auto;
 
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationImpl;
@@ -35,10 +39,34 @@ import org.apache.isis.runtimes.dflt.obj
  * @author Kevin
  */
 public class MultiColumnCombinedCollectionMapper extends CombinedCollectionMapper {
+    private static final Logger LOG = Logger.getLogger(CombinedCollectionMapper.class);
 
     public MultiColumnCombinedCollectionMapper(final ObjectAssociation objectAssociation, final String parameterBase,
-        final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup) {
+        final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup,
+        AbstractAutoMapper abstractAutoMapper, ObjectAssociation field) {
         super(objectAssociation, parameterBase, lookup, objectMapperLookup);
+
+        priorFields = abstractAutoMapper.fields;
+        priorField = field;
+
+        setUpFieldMappers();
+    }
+
+    protected final ObjectAssociation priorField; // prevents recursion
+
+    protected final List<ObjectAssociation> priorFields;
+
+    @Override
+    protected void getExtraFields(List<ObjectAssociation> existingFields) {
+        if (priorFields != null) {
+            for (ObjectAssociation priorField1 : priorFields) {
+                if (existingFields.contains(priorField1) == false) {
+                    existingFields.add(priorField1);
+                } else {
+                    LOG.debug("Skipping prior field: " + priorField1.getName());
+                }
+            }
+        }
     }
 
     @Override

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=1164915&r1=1164914&r2=1164915&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 Sat Sep  3 19:20:31 2011
@@ -23,6 +23,8 @@ import java.util.ArrayList;
 import java.util.Date;
 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.mapping.FieldMapping;
 import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.ObjectReferenceMapping;
 import org.apache.isis.runtimes.dflt.runtime.persistence.PersistorUtil;
-import org.apache.log4j.Logger;
 
 /** used where there is a one to many association, and the elements are only known to parent */
 public class ReversedAutoAssociationMapper extends AbstractAutoMapper implements CollectionMapper {
@@ -56,6 +57,8 @@ public class ReversedAutoAssociationMapp
 
         idMapping = lookup.createMapping(field.getSpecification());
         versionMapping = lookup.createVersionMapping();
+
+        setUpFieldMappers();
     }
 
     @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.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/jdbc/JdbcAbstractReferenceFieldMapping.java?rev=1164915&r1=1164914&r2=1164915&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.java Sat Sep  3 19:20:31 2011
@@ -71,7 +71,6 @@ public class JdbcAbstractReferenceFieldM
     @Override
     public void appendCreateColumnDefinitions(final StringBuffer sql) {
         super.appendCreateColumnDefinitions(sql);
-        // add the class instance name preserver
         sql.append(classnameColumn);
         sql.append(" ");
         sql.append(JdbcConnector.TYPE_STRING());
@@ -93,8 +92,13 @@ public class JdbcAbstractReferenceFieldM
     public void appendInsertValues(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
         super.appendInsertValues(connector, sql, object);
         sql.append(",?");
+
         ObjectAdapter objectAdapter = field.get(object);
-        connector.addToQueryValues(objectAdapter.getSpecification().getFullIdentifier());
+        if (objectAdapter != null) {
+            connector.addToQueryValues(objectAdapter.getSpecification().getFullIdentifier());
+        } else {
+            connector.addToQueryValues(null);
+        }
     }
 
     @Override
@@ -106,19 +110,24 @@ public class JdbcAbstractReferenceFieldM
         sql.append(" = ?");
 
         ObjectAdapter objectAdapter = field.get(object);
-        connector.addToQueryValues(objectAdapter.getSpecification().getFullIdentifier());
+        if (objectAdapter != null) {
+            connector.addToQueryValues(objectAdapter.getSpecification().getFullIdentifier());
+        } else {
+            connector.addToQueryValues(null);
+        }
     }
 
     @Override
     public void initializeField(final ObjectAdapter object, final Results rs) {
-        // TODO: find the specification for the field name
         String className = rs.getString(classnameColumn);
-        final ObjectSpecification specification = getReflector().loadSpecification(className);
+        if (className != null) {
+            final ObjectSpecification specification = getReflector().loadSpecification(className);
 
-        final Oid oid = recreateOid(rs, specification);
+            final Oid oid = recreateOid(rs, specification);
 
-        final ObjectAdapter reference = getAdapter(specification, oid);
-        ((OneToOneAssociation) field).initAssociation(object, reference);
+            final ObjectAdapter reference = getAdapter(specification, oid);
+            ((OneToOneAssociation) field).initAssociation(object, reference);
+        }
     }
 
     @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/dataclasses/polymorphism/PolyTestClass.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/dataclasses/polymorphism/PolyTestClass.java?rev=1164915&r1=1164914&r2=1164915&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/dataclasses/polymorphism/PolyTestClass.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/dataclasses/polymorphism/PolyTestClass.java Sat Sep  3 19:20:31 2011
@@ -22,6 +22,9 @@
  */
 package org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.polymorphism;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.isis.applib.AbstractDomainObject;
 
 /**
@@ -60,17 +63,17 @@ public class PolyTestClass extends Abstr
 
     // }}
 
-    // {{ PolyBaseClass collection
-    // private List<PolyTestInterface> polyTestClasses = new ArrayList<PolyTestInterface>();
+    // {{ PolyTestClass collection
+    private List<PolyTestClass> polyTestClasses = new ArrayList<PolyTestClass>();
 
-    // @MemberOrder(sequence = "2")
-    // public List<PolyTestInterface> getPolyTestClasses() {
-    // return polyTestClasses;
-    // }
+    public List<PolyTestClass> getPolyTestClasses() {
+        return polyTestClasses;
+    }
+
+    public void setPolyTestClasses(final List<PolyTestClass> polyTestClasses) {
+        this.polyTestClasses = polyTestClasses;
+    }
 
-    // public void setPolyTestClasses(final List<PolyTestInterface> polyTestClasses) {
-    // this.polyTestClasses = polyTestClasses;
-    // }
     // }}
 
     // {{ PolyTestClass property

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/test/java/org/apache/isis/runtimes/dflt/objectstores/sql/PolymorphismTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/test/java/org/apache/isis/runtimes/dflt/objectstores/sql/PolymorphismTest.java?rev=1164915&r1=1164914&r2=1164915&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/test/java/org/apache/isis/runtimes/dflt/objectstores/sql/PolymorphismTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/test/java/org/apache/isis/runtimes/dflt/objectstores/sql/PolymorphismTest.java Sat Sep  3 19:20:31 2011
@@ -61,8 +61,9 @@ public class PolymorphismTest extends Sq
         final PolyTestClass polyTestClass = factory.newPolyTestClass();
         polyTestClass.setString("polyTestClassString");
 
-        // polyTestClass.getPolyTestClasses().add(polyTestClass);
-        polyTestClass.setPolyTestInterface(polyTestClass);
+        polyTestClass.getPolyTestClasses().add(polyTestClass);
+
+        // polyTestClass.setPolyTestInterface(polyTestClass);
 
         polyIntImpA = factory.newPolyInterfaceImplA();
         polyIntImpA.setString("Impl A String");
@@ -108,11 +109,21 @@ public class PolymorphismTest extends Sq
     public void testInterfaceLoad() {
         final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
         final PolyTestClass polyTestClass = SqlIntegrationTestSingleton.getStaticPolyTestClass();
-        assertEquals(polyTestClass.getClass(), polyTestClass.getPolyTestInterface().getClass());
+        // assertEquals(polyTestClass.getClass(), polyTestClass.getPolyTestInterface().getClass());
+
         PolyInterface loaded = polyTestClass.getPolyInterfaceType();
         factory.resolve(loaded);
         assertEquals(polyIntImpA.getString(), loaded.getString());
+    }
+
+    public void testInterfaceLoadCollection() {
+        final PolyTestClass polyTestClass = SqlIntegrationTestSingleton.getStaticPolyTestClass();
+
+        List<PolyTestClass> list = polyTestClass.getPolyTestClasses();
+        assertEquals(1, list.size());
 
+        PolyInterface loaded = polyTestClass.getPolyInterfaceType();
+        assertEquals(polyIntImpA.getString(), loaded.getString());
     }
 
     public void testInterfaceEditSave() {