You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/08/29 15:58:03 UTC
svn commit: r990578 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/access/ test/java/org/apache/cayenne/access/
test/java/org/apache/cayenne/unit/
Author: aadamchik
Date: Sun Aug 29 13:58:03 2010
New Revision: 990578
URL: http://svn.apache.org/viewvc?rev=990578&view=rev
Log:
CAY-1479 EntitySorter refactoring: make it DI-based, internalize Ashowood lib
* stopped using DataNode.entitySorter
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataNodeTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/MockDataNode.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?rev=990578&r1=990577&r2=990578&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java Sun Aug 29 13:58:03 2010
@@ -106,7 +106,7 @@ public class DataDomain implements Query
/**
* @since 1.2
*/
- EntitySorter entitySorter;
+ protected EntitySorter entitySorter;
/**
* @since 3.0
@@ -155,25 +155,14 @@ public class DataDomain implements Query
}
/**
- * @since 1.2
+ * @since 3.1
*/
- // TODO: andrus, 4/12/2006 - after 1.2 API freeze is over, replace DataNode
- // EntitySorter with this one ... maybe even make it a part of server-side
- // EntityResolver?
- EntitySorter getEntitySorter() {
+ public EntitySorter getEntitySorter() {
if (entitySorter == null) {
synchronized (this) {
if (entitySorter == null) {
-
- // backwards compatibility mode... only possible in a single-node case
- // see TODO above
- if (nodes.size() == 1) {
- entitySorter = nodes.values().iterator().next().getEntitySorter();
- }
- else {
- entitySorter = new AshwoodEntitySorter(getDataMaps());
- }
+ entitySorter = new AshwoodEntitySorter(getDataMaps());
}
}
}
@@ -185,9 +174,9 @@ public class DataDomain implements Query
* Exists as a backdoor to override domain sorter until the sorter API is moved from
* DataNode.
*
- * @since 1.2
+ * @since 3.1
*/
- void setEntitySorter(EntitySorter entitySorter) {
+ public void setEntitySorter(EntitySorter entitySorter) {
this.entitySorter = entitySorter;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java?rev=990578&r1=990577&r2=990578&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java Sun Aug 29 13:58:03 2010
@@ -55,6 +55,9 @@ public class DataNode implements QueryEn
protected EntityResolver entityResolver;
protected SchemaUpdateStrategy schemaUpdateStrategy;
+ /**
+ * @deprecated since 3.1 EntitySorter is located at the DataDomain level.
+ */
protected EntitySorter entitySorter;
protected Map<String, DataMap> dataMaps;
@@ -313,6 +316,8 @@ public class DataNode implements QueryEn
/**
* Returns EntitySorter used by the DataNode.
+ *
+ * @deprecated since 3.1 EntitySorter only exists at the DataDomain level.
*/
public EntitySorter getEntitySorter() {
return entitySorter;
@@ -322,6 +327,7 @@ public class DataNode implements QueryEn
* Sets an EntitySorter that is used to order objects on commit.
*
* @since 1.2
+ * @deprecated since 3.1 EntitySorter only exists at the DataDomain level.
*/
public void setEntitySorter(EntitySorter entitySorter) {
this.entitySorter = entitySorter;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java?rev=990578&r1=990577&r2=990578&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java Sun Aug 29 13:58:03 2010
@@ -29,7 +29,9 @@ import java.util.Map;
import org.apache.cayenne.CayenneException;
import org.apache.cayenne.DataRow;
import org.apache.cayenne.access.util.IteratedSelectObserver;
+import org.apache.cayenne.map.AshwoodEntitySorter;
import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.EntitySorter;
import org.apache.cayenne.query.InsertBatchQuery;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.SQLTemplate;
@@ -100,7 +102,8 @@ public class DataPort {
// sort entities for insertion
List sorted = new ArrayList(entities);
- destinationNode.getEntitySorter().sortDbEntities(sorted, false);
+ EntitySorter sorter = new AshwoodEntitySorter(destinationNode.getDataMaps());
+ sorter.sortDbEntities(sorted, false);
if (cleaningDestination) {
// reverse insertion order for deletion
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java?rev=990578&r1=990577&r2=990578&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java Sun Aug 29 13:58:03 2010
@@ -39,11 +39,13 @@ import org.apache.cayenne.conn.DriverDat
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.map.AshwoodEntitySorter;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbJoin;
import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.EntitySorter;
import org.apache.cayenne.validation.SimpleValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
import org.apache.commons.logging.Log;
@@ -566,9 +568,8 @@ public class DbGenerator {
// sort table list
if (tables.size() > 1) {
- DataNode node = new DataNode("temp");
- node.addDataMap(map);
- node.getEntitySorter().sortDbEntities(tables, false);
+ EntitySorter sorter = new AshwoodEntitySorter(Collections.singleton(map));
+ sorter.sortDbEntities(tables, false);
}
this.dbEntitiesInInsertOrder = tables;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataNodeTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataNodeTest.java?rev=990578&r1=990577&r2=990578&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataNodeTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataNodeTest.java Sun Aug 29 13:58:03 2010
@@ -22,7 +22,6 @@ package org.apache.cayenne.access;
import junit.framework.TestCase;
import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.map.EntitySorter;
public class DataNodeTest extends TestCase {
@@ -62,22 +61,16 @@ public class DataNodeTest extends TestCa
public void testAdapter() throws Exception {
DataNode node = new DataNode();
- // entity sorter should have been created ... and since 1.2 shouldn't change no
- // matter what adapter we use.
- EntitySorter sorter = node.getEntitySorter();
- assertNotNull(sorter);
assertNull(node.getAdapter());
JdbcAdapter a1 = new JdbcAdapter();
node.setAdapter(a1);
assertSame(a1, node.getAdapter());
- assertSame(sorter, node.getEntitySorter());
JdbcAdapter a2 = new JdbcAdapter();
node.setAdapter(a2);
assertSame(a2, node.getAdapter());
- assertSame(sorter, node.getEntitySorter());
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/MockDataNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/MockDataNode.java?rev=990578&r1=990577&r2=990578&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/MockDataNode.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/MockDataNode.java Sun Aug 29 13:58:03 2010
@@ -150,6 +150,9 @@ public class MockDataNode extends DataNo
return node.getEntityResolver();
}
+ /**
+ * @deprecated since 3.1
+ */
@Override
public EntitySorter getEntitySorter() {
return node.getEntitySorter();
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java?rev=990578&r1=990577&r2=990578&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java Sun Aug 29 13:58:03 2010
@@ -29,13 +29,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.DbGenerator;
import org.apache.cayenne.access.QueryLogger;
@@ -86,11 +84,7 @@ public class SimpleAccessStack implement
return resources.getAccessStackAdapter(node.getAdapter().getClass().getName());
}
- protected DataDomain getDomain() {
- return domain;
- }
-
- protected void initNode(DataMap map) throws Exception {
+ private void initNode(DataMap map) throws Exception {
DataNode node = resources.newDataNode(map.getName());
// setup test extended types
@@ -176,19 +170,19 @@ public class SimpleAccessStack implement
* Helper method that orders DbEntities to satisfy referential constraints and returns
* an ordered list.
*/
- protected List dbEntitiesInInsertOrder(DataNode node, DataMap map) {
- List entities = new ArrayList(map.getDbEntities());
+ private List<DbEntity> dbEntitiesInInsertOrder(DataNode node, DataMap map) {
+ List<DbEntity> entities = new ArrayList<DbEntity>(map.getDbEntities());
- // filter varios unsupported tests...
+ // filter various unsupported tests...
// LOBs
boolean excludeLOB = !getAdapter(node).supportsLobs();
boolean excludeBinPK = !getAdapter(node).supportsBinaryPK();
if (excludeLOB || excludeBinPK) {
- Iterator it = entities.iterator();
- List filtered = new ArrayList();
- while (it.hasNext()) {
- DbEntity ent = (DbEntity) it.next();
+
+ List<DbEntity> filtered = new ArrayList<DbEntity>();
+
+ for (DbEntity ent : entities) {
// check for LOB attributes
if (excludeLOB) {
@@ -236,14 +230,14 @@ public class SimpleAccessStack implement
entities = filtered;
}
- node.getEntitySorter().sortDbEntities(entities, false);
+ domain.getEntitySorter().sortDbEntities(entities, false);
return entities;
}
- protected void deleteTestData(DataNode node, DataMap map) throws Exception {
+ private void deleteTestData(DataNode node, DataMap map) throws Exception {
Connection conn = node.getDataSource().getConnection();
- List list = this.dbEntitiesInInsertOrder(node, map);
+ List<DbEntity> list = dbEntitiesInInsertOrder(node, map);
try {
if (conn.getAutoCommit()) {
conn.setAutoCommit(false);
@@ -251,9 +245,9 @@ public class SimpleAccessStack implement
Statement stmt = conn.createStatement();
- ListIterator it = list.listIterator(list.size());
+ ListIterator<DbEntity> it = list.listIterator(list.size());
while (it.hasPrevious()) {
- DbEntity ent = (DbEntity) it.previous();
+ DbEntity ent = it.previous();
boolean status;
if (ent.getDataMap() != null
@@ -297,14 +291,14 @@ public class SimpleAccessStack implement
}
}
- protected void dropSchema(DataNode node, DataMap map) throws Exception {
+ private void dropSchema(DataNode node, DataMap map) throws Exception {
Connection conn = node.getDataSource().getConnection();
- List list = dbEntitiesInInsertOrder(node, map);
+ List<DbEntity> list = dbEntitiesInInsertOrder(node, map);
try {
DatabaseMetaData md = conn.getMetaData();
ResultSet tables = md.getTables(null, null, "%", null);
- List allTables = new ArrayList();
+ List<String> allTables = new ArrayList<String>();
while (tables.next()) {
// 'toUpperCase' is needed since most databases
@@ -321,9 +315,9 @@ public class SimpleAccessStack implement
// drop all tables in the map
Statement stmt = conn.createStatement();
- ListIterator it = list.listIterator(list.size());
+ ListIterator<DbEntity> it = list.listIterator(list.size());
while (it.hasPrevious()) {
- DbEntity ent = (DbEntity) it.previous();
+ DbEntity ent = it.previous();
if (!allTables.contains(ent.getName().toUpperCase())) {
continue;
}
@@ -349,25 +343,24 @@ public class SimpleAccessStack implement
}
- protected void dropPKSupport(DataNode node, DataMap map) throws Exception {
- List filteredEntities = dbEntitiesInInsertOrder(node, map);
+ private void dropPKSupport(DataNode node, DataMap map) throws Exception {
+ List<DbEntity> filteredEntities = dbEntitiesInInsertOrder(node, map);
node.getAdapter().getPkGenerator().dropAutoPk(node, filteredEntities);
}
- protected void createPKSupport(DataNode node, DataMap map) throws Exception {
- List filteredEntities = dbEntitiesInInsertOrder(node, map);
+ private void createPKSupport(DataNode node, DataMap map) throws Exception {
+ List<DbEntity> filteredEntities = dbEntitiesInInsertOrder(node, map);
node.getAdapter().getPkGenerator().createAutoPk(node, filteredEntities);
}
- protected void createSchema(DataNode node, DataMap map) throws Exception {
+ private void createSchema(DataNode node, DataMap map) throws Exception {
Connection conn = node.getDataSource().getConnection();
try {
getAdapter(node).willCreateTables(conn, map);
Statement stmt = conn.createStatement();
- Iterator it = tableCreateQueries(node, map);
- while (it.hasNext()) {
- String query = (String) it.next();
+
+ for (String query : tableCreateQueries(node, map)) {
QueryLogger.logQuery(query, Collections.EMPTY_LIST);
stmt.execute(query);
}
@@ -381,33 +374,29 @@ public class SimpleAccessStack implement
/**
* Returns iterator of preprocessed table create queries.
*/
- protected Iterator tableCreateQueries(DataNode node, DataMap map) throws Exception {
+ private Collection<String> tableCreateQueries(DataNode node, DataMap map)
+ throws Exception {
DbAdapter adapter = node.getAdapter();
- DbGenerator gen = new DbGenerator(adapter, map, null, getDomain());
+ DbGenerator gen = new DbGenerator(adapter, map, null, domain);
- List orderedEnts = dbEntitiesInInsertOrder(node, map);
- List queries = new ArrayList();
+ List<DbEntity> orderedEnts = dbEntitiesInInsertOrder(node, map);
+ List<String> queries = new ArrayList<String>();
// table definitions
- Iterator it = orderedEnts.iterator();
- while (it.hasNext()) {
- DbEntity ent = (DbEntity) it.next();
+ for (DbEntity ent : orderedEnts) {
queries.add(adapter.createTable(ent));
}
// FK constraints
-
- it = orderedEnts.iterator();
- while (it.hasNext()) {
- DbEntity ent = (DbEntity) it.next();
+ for (DbEntity ent : orderedEnts) {
if (!getAdapter(node).supportsFKConstraints(ent)) {
continue;
}
- List qs = gen.createConstraintsQueries(ent);
+ List<String> qs = gen.createConstraintsQueries(ent);
queries.addAll(qs);
}
- return queries.iterator();
+ return queries;
}
}