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/07 20:14:59 UTC
svn commit: r1166295 - in
/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql:
sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/
sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/
sql-tests-commo...
Author: kevin
Date: Wed Sep 7 18:14:58 2011
New Revision: 1166295
URL: http://svn.apache.org/viewvc?rev=1166295&view=rev
Log:
ISIS-118 and ISIS-119: Working on getting collections to load and resolve properly. Added support for allInstances to return instances of subclasses, too.
Modified:
incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlObjectStore.java
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-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/SqlDataClassFactory.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/SqlObjectStore.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/SqlObjectStore.java?rev=1166295&r1=1166294&r2=1166295&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlObjectStore.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlObjectStore.java Wed Sep 7 18:14:58 2011
@@ -22,6 +22,8 @@ package org.apache.isis.runtimes.dflt.ob
import java.util.List;
import java.util.Vector;
+import org.apache.log4j.Logger;
+
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.commons.debug.DebugString;
import org.apache.isis.core.commons.exceptions.IsisException;
@@ -44,7 +46,6 @@ import org.apache.isis.runtimes.dflt.run
import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
import org.apache.isis.runtimes.dflt.runtime.system.transaction.MessageBroker;
import org.apache.isis.runtimes.dflt.runtime.system.transaction.UpdateNotifier;
-import org.apache.log4j.Logger;
public final class SqlObjectStore implements ObjectStore {
private static final String TABLE_NAME = "isis_admin_services";
@@ -207,8 +208,11 @@ public final class SqlObjectStore implem
private ObjectAdapter[] findByPattern(final PersistenceQueryFindByPattern query) {
final ObjectSpecification specification = query.getSpecification();
final DatabaseConnector connector = connectionPool.acquire();
+
+ // TODO find derived types, too.
final ObjectMapping mapper = objectMappingLookup.getMapping(specification, connector);
final ObjectAdapter instances[] = mapper.getInstances(connector, specification, query);
+
connectionPool.release(connector);
return instances;
}
@@ -218,21 +222,38 @@ public final class SqlObjectStore implem
return allInstances(spec);
}
- // TODO: allInstances of should find all derived types, too.
private ObjectAdapter[] allInstances(final ObjectSpecification spec) {
final DatabaseConnector connector = connectionPool.acquire();
- final ObjectMapping mapper = objectMappingLookup.getMapping(spec, connector);
- final ObjectAdapter[] instances = mapper.getInstances(connector, spec);
final Vector<ObjectAdapter> matchingInstances = new Vector<ObjectAdapter>();
- for (final ObjectAdapter instance : instances) {
- matchingInstances.addElement(instance);
+
+ // Abstract entities will never be created.
+ if (!spec.isAbstract()) {
+ addSpecInstances(spec, connector, matchingInstances);
}
+
+ // Search for subclasses, too.
+ if (spec.hasSubclasses()) {
+ final List<ObjectSpecification> subclasses = spec.subclasses();
+ for (ObjectSpecification subclassSpec : subclasses) {
+ addSpecInstances(subclassSpec, connector, matchingInstances);
+ }
+ }
+
connectionPool.release(connector);
final ObjectAdapter[] instanceArray = new ObjectAdapter[matchingInstances.size()];
matchingInstances.copyInto(instanceArray);
return instanceArray;
}
+ private void addSpecInstances(ObjectSpecification spec, DatabaseConnector connector,
+ Vector<ObjectAdapter> matchingInstances) {
+ final ObjectMapping mapper = objectMappingLookup.getMapping(spec, connector);
+ final ObjectAdapter[] instances = mapper.getInstances(connector, spec);
+ for (final ObjectAdapter instance : instances) {
+ matchingInstances.addElement(instance);
+ }
+ }
+
private ObjectAdapter[] findByTitle(final PersistenceQueryFindByTitle criteria) {
final ObjectSpecification spec = criteria.getSpecification();
final DatabaseConnector connector = connectionPool.acquire();
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=1166295&r1=1166294&r2=1166295&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 Wed Sep 7 18:14:58 2011
@@ -117,7 +117,17 @@ public abstract class AbstractAutoMapper
for (ObjectSpecification subclass : subclasses) {
final List<? extends ObjectAssociation> subAssociations = subclass.getAssociations();
for (ObjectAssociation subA : subAssociations) {
- if (fields.contains(subA) == false) {
+ boolean found = false;
+ String name = subA.getName();
+
+ for (ObjectAssociation existingField : fields) {
+ if (existingField.getName().equals(name)) {
+ found = true;
+ continue;
+ }
+ }
+
+ if (found == false) {
fields.add(subA);
}
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/SqlDataClassFactory.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/SqlDataClassFactory.java?rev=1166295&r1=1166294&r2=1166295&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/SqlDataClassFactory.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/testsystem/SqlDataClassFactory.java Wed Sep 7 18:14:58 2011
@@ -29,6 +29,7 @@ import org.apache.isis.runtimes.dflt.obj
import org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.SimpleClass;
import org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.SimpleClassTwo;
import org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.SqlDataClass;
+import org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.polymorphism.PolyInterface;
import org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.polymorphism.PolyInterfaceImplA;
import org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.polymorphism.PolyInterfaceImplB;
import org.apache.isis.runtimes.dflt.objectstores.sql.testsystem.dataclasses.polymorphism.PolySelfRefClass;
@@ -132,6 +133,10 @@ public class SqlDataClassFactory extends
return object;
}
+ public List<PolyInterface> allPolyInterfaces() {
+ return allInstances(PolyInterface.class);
+ }
+
// }}
}
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=1166295&r1=1166294&r2=1166295&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 Wed Sep 7 18:14:58 2011
@@ -159,8 +159,9 @@ public class PolymorphismTest extends Sq
assertEquals(CHILD_1, polySelfRefChild1.title());
final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
- factory.resolve(polySelfRefChild1);
List<PolySelfRefClass> list2 = polySelfRefChild1.getPolySelfRefClasses();
+ factory.resolve(polySelfRefChild1);
+ list2 = polySelfRefChild1.getPolySelfRefClasses();
assertEquals(1, list2.size());
}
@@ -188,7 +189,12 @@ public class PolymorphismTest extends Sq
final PolyTestClass polyTestClass = SqlIntegrationTestSingleton.getStaticPolyTestClass();
PolyInterface loaded = polyTestClass.getPolyInterfaceType();
assertEquals(polyIntImpB.getString(), loaded.getString());
+ }
+ public void testAllInterfacesInstancesLoaded() {
+ final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
+ List<PolyInterface> list = factory.allPolyInterfaces();
+ assertEquals(2, list.size());
}
// Last "test" - Set the Singleton state to 0 to invoke a clean shutdown.