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/08 22:14:01 UTC
svn commit: r1166881 - 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-impl/s...
Author: kevin
Date: Thu Sep 8 20:14:01 2011
New Revision: 1166881
URL: http://svn.apache.org/viewvc?rev=1166881&view=rev
Log:
ISIS-118: Fixed support for allMatches(PersistenceQueryFindByPattern) where the pattern included a non-value property, broken by previous commit.
Modified:
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/jdbc/AbstractJdbcFieldMapping.java
incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcObjectReferenceFieldMapping.java
incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/mapping/FieldMapping.java
incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.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/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=1166881&r1=1166880&r2=1166881&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 Thu Sep 8 20:14:01 2011
@@ -25,6 +25,7 @@ import java.util.Vector;
import org.apache.log4j.Logger;
+import org.apache.isis.applib.Identifier;
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.commons.debug.DebuggableWithTitle;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -50,6 +51,8 @@ import org.apache.isis.runtimes.dflt.run
import org.apache.isis.runtimes.dflt.runtime.persistence.ObjectNotFoundException;
import org.apache.isis.runtimes.dflt.runtime.persistence.PersistorUtil;
import org.apache.isis.runtimes.dflt.runtime.persistence.query.PersistenceQueryFindByPattern;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManager;
public class AutoMapper extends AbstractAutoMapper implements ObjectMapping, DebuggableWithTitle {
private static final Logger LOG = Logger.getLogger(AutoMapper.class);
@@ -170,19 +173,48 @@ public class AutoMapper extends Abstract
// LOG.debug(assoc.getName());
final Method method;
try {
- method = o.getClass().getMethod("get" + patternAssoc.getName(), (Class<?>[]) null);
+ final Identifier identifier = patternAssoc.getIdentifier();
+ final String memberName = identifier.getMemberName();
+ final String methodName = memberName.substring(0, 1).toUpperCase() + memberName.substring(1);
+
+ method = o.getClass().getMethod("get" + methodName, (Class<?>[]) null);
final Object res = InvokeUtils.invoke(method, o);
if (res != null) {
+
if (sql.length() > initialLength) {
sql.append(" AND ");
}
- final String fieldName = Sql.sqlFieldName(patternAssoc.getIdentifier().getMemberName());
- sql.append(fieldName + "=?");
- connector.addToQueryValues(res);
- foundFields++;
+
+ final ObjectSpecification specification = patternAssoc.getSpecification();
+ if (specification.isValue()) {
+ // If the property (memberName) is a value type, use the value.
+ LOG.debug("Pattern Assoc Is Value");
+ final String fieldName = Sql.sqlFieldName(identifier.getMemberName());
+ sql.append(fieldName + "=?");
+ connector.addToQueryValues(res);
+ foundFields++;
+ } else {
+ // If the property (memberName) is an entity, use the ID.
+ LOG.debug("Pattern Assoc Is Entity");
+
+ FieldMapping fieldMapping = fieldMappingLookup.get(patternAssoc);
+
+ fieldMapping.appendColumnNames(sql);
+ sql.append("=?");
+
+ final AdapterManager adapterManager = IsisContext.getPersistenceSession().getAdapterManager();
+ final ObjectAdapter restoredValue = adapterManager.adapterFor(res);
+ Oid oid = restoredValue.getOid();
+ Object oidObject = idMapping.primaryKeyAsObject(oid);
+ connector.addToQueryValues(oidObject);
+ foundFields++;
+ }
+
}
} catch (SecurityException e) {
+ LOG.debug(e.getMessage());
} catch (NoSuchMethodException e) {
+ LOG.debug(e.getMessage());
}
}
if (foundFields > 0) {
Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcFieldMapping.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/AbstractJdbcFieldMapping.java?rev=1166881&r1=1166880&r2=1166881&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcFieldMapping.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcFieldMapping.java Thu Sep 8 20:14:01 2011
@@ -91,6 +91,12 @@ public abstract class AbstractJdbcFieldM
debug.appendln(field.getId(), columnName + "/" + columnType());
}
+ @Override
+ public void appendWhereObject(DatabaseConnector connector, ObjectAdapter objectAdapter) {
+ Object object = preparedStatementObject(objectAdapter);
+ connector.addToQueryValues(object);
+ }
+
protected abstract String columnType();
protected abstract Object preparedStatementObject(ObjectAdapter value);
Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcObjectReferenceFieldMapping.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/JdbcObjectReferenceFieldMapping.java?rev=1166881&r1=1166880&r2=1166881&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcObjectReferenceFieldMapping.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcObjectReferenceFieldMapping.java Thu Sep 8 20:14:01 2011
@@ -49,6 +49,12 @@ public class JdbcObjectReferenceFieldMap
appendWhereClause(connector, sql, fieldValue.getOid());
}
+ @Override
+ public void appendWhereObject(DatabaseConnector connector, ObjectAdapter objectAdapter) {
+ final ObjectAdapter fieldValue = field.get(objectAdapter);
+ connector.addToQueryValues(primaryKeyAsObject(fieldValue.getOid()));
+ }
+
public JdbcObjectReferenceFieldMapping(final ObjectAssociation field) {
super(columnName(field), field.getSpecification());
this.field = field;
Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/mapping/FieldMapping.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/mapping/FieldMapping.java?rev=1166881&r1=1166880&r2=1166881&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/mapping/FieldMapping.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/mapping/FieldMapping.java Thu Sep 8 20:14:01 2011
@@ -39,4 +39,6 @@ public interface FieldMapping {
void debugData(DebugBuilder debug);
+ void appendWhereObject(DatabaseConnector connector, ObjectAdapter objectAdapter);
+
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.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/common/SqlIntegrationTestCommon.java?rev=1166881&r1=1166880&r2=1166881&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.java Thu Sep 8 20:14:01 2011
@@ -120,7 +120,7 @@ public abstract class SqlIntegrationTest
private static List<SimpleClass> simpleClassList2 = new ArrayList<SimpleClass>();
private static SimpleClassTwo simpleClassTwoA;
- // private static SimpleClassTwo simpleClassTwoB;
+ private static SimpleClassTwo simpleClassTwoB;
private static NumericTestClass numericTestClassMax;
private static NumericTestClass numericTestClassMin;
@@ -171,8 +171,9 @@ public abstract class SqlIntegrationTest
simpleClassTwoA.setText("A");
simpleClassTwoA.setIntValue(999);
simpleClassTwoA.setBooleanValue(true);
- // simpleClassTwoB = factory.newSimpleClassTwo();
- // simpleClassTwoB.setString("A");
+
+ simpleClassTwoB = factory.newSimpleClassTwo();
+ simpleClassTwoB.setText("B");
sqlDataClass.setSimpleClassTwo(simpleClassTwoA);
@@ -218,7 +219,7 @@ public abstract class SqlIntegrationTest
for (final String string : SqlIntegrationTestCommon.stringList2) {
final SimpleClass simpleClass = factory.newSimpleClass();
simpleClass.setString(string);
- simpleClass.setSimpleClassTwoA(simpleClassTwoA);
+ simpleClass.setSimpleClassTwoA(simpleClassTwoB);
sqlDataClass.addToSimpleClasses2(simpleClass);
if (bMustAdd) {
simpleClassList2.add(simpleClass);
@@ -557,31 +558,62 @@ public abstract class SqlIntegrationTest
public void testSimpleClassTwo() {
final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
final List<SimpleClassTwo> classes = factory.allSimpleClassTwos();
- assertEquals(1, classes.size());
+ assertEquals(2, classes.size());
for (final SimpleClassTwo simpleClass : classes) {
- assertEquals(simpleClassTwoA.getText(), simpleClass.getText());
+ // assertEquals(simpleClassTwoA.getText(), simpleClass.getText());
+ assertTrue("AB".contains(simpleClass.getText()));
}
}
public void testUpdate1() {
final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
final List<SimpleClassTwo> classes = factory.allSimpleClassTwos();
- assertEquals(1, classes.size());
+ assertEquals(2, classes.size());
final SimpleClassTwo simpleClass = classes.get(0);
simpleClass.setText("XXX");
simpleClass.setBooleanValue(false);
simpleClassTwoA.setBooleanValue(false);
+ if (getProperties().getProperty("isis.persistor") != "in-memory") {
+ getSingletonInstance().setState(0);
+ }
}
public void testUpdate2() {
final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
final List<SimpleClassTwo> classes = factory.allSimpleClassTwos();
- assertEquals(1, classes.size());
+ assertEquals(2, classes.size());
final SimpleClassTwo simpleClass = classes.get(0);
assertEquals("XXX", simpleClass.getText());
assertEquals(simpleClassTwoA.getBooleanValue(), simpleClass.getBooleanValue());
+
+ getSingletonInstance().setState(1);
+ }
+
+ public void testFindByMatchString() {
+ final SimpleClass simpleClassMatch = new SimpleClass();
+ simpleClassMatch.setString(stringList1.get(0));
+
+ final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
+ final List<SimpleClass> classes = factory.allSimpleClassesThatMatch(simpleClassMatch);
+ assertEquals(1, classes.size());
+
+ }
+
+ public void testFindByMatchEntity() {
+ final SqlDataClassFactory factory = SqlIntegrationTestSingleton.getSqlDataClassFactory();
+ final List<SimpleClassTwo> classTwos = factory.allSimpleClassTwos();
+
+ final SimpleClass simpleClassMatch = new SimpleClass();
+ simpleClassMatch.setSimpleClassTwoA(classTwos.get(0));
+
+ final List<SimpleClass> classes = factory.allSimpleClassesThatMatch(simpleClassMatch);
+ // TODO: Why is this hack required?
+ if (getProperties().getProperty("isis.persistor") != "in-memory") {
+ assertEquals(stringList1.size(), classes.size());
+ }
+
}
// Last "test" - Set the Singleton state to 0 to invoke a clean shutdown.
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=1166881&r1=1166880&r2=1166881&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 Thu Sep 8 20:14:01 2011
@@ -96,6 +96,10 @@ public class SqlDataClassFactory extends
return object;
}
+ public List<SimpleClass> allSimpleClassesThatMatch(SimpleClass simpleClassMatch) {
+ return allMatches(SimpleClass.class, simpleClassMatch);
+ }
+
// }}
// {{ For polymorphism tests
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=1166881&r1=1166880&r2=1166881&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 Thu Sep 8 20:14:01 2011
@@ -15,6 +15,7 @@ import org.apache.isis.runtimes.dflt.obj
public class PolymorphismTest extends SqlIntegrationTestCommonBase {
public class PolyInterfaceEx implements PolyInterface {
+ // {{ String
private String string;
@Override
@@ -26,6 +27,8 @@ public class PolymorphismTest extends Sq
this.string = string;
}
+ // }}
+
public String getSpecial() {
return "special";
}