This patch addresses some DAS code "TODO" statements. Except for the first two, these are mostly no-ops.
1) Refactor ApplyChangesCommand to be part of a single Command heirarchy
2) Removed the instanceof hack in ChangeOperation.java
3) Removed TODO from SDODataTypes -- No longer relevant
4) Removed TODO from CompoundKeyTests -- Statement no longer correct
3) Removed TODO from SDODataTypes -- No longer relevant
4) Removed TODO from CompoundKeyTests -- Statement no longer correct
5) Removed old, dead, commented code from the TopDown test class.
6) Removed TODO in InsertList.java -- Verified that the null check is OK here and added a comment
7) Removed TODO statement from CommandGroupImpl -- Nothing to do here, and no longer relevant
7) Removed TODO statement from CommandGroupImpl -- Nothing to do here, and no longer relevant
Index: src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java
===================================================================
--- src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java
(revision 392391)
+++ src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java
(working copy)
@@ -114,9 +114,8 @@
DataObject order = (DataObject) customer.get("orders[1]");
order.setString("PRODUCT", "Kitchen Sink 001");
- ApplyChangesCommand apply =
Command.FACTORY.createApplyChangesCommand();
- apply.setConnection(getConnection());
- apply.setMapping(getConfig("1xM_mapping_no_cud.xml"));
+ ApplyChangesCommand apply =
Command.FACTORY.createApplyChangesCommand(getConfig("1xM_mapping_no_cud.xml"));
+ apply.setConnection(getConnection());
// Flush changes
apply.execute(root);
Index: src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
===================================================================
--- src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
(revision 392391)
+++ src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
(working copy)
@@ -92,9 +92,7 @@
Key pk = new Key("ANORDER.ID");
read.addPrimaryKey(pk);
-
-
- //TODO - When this is omitted, we fail with NPE. Need a better error
message
+
Key detailsPk = new Key(new String[] { "ORDERDETAILS.ORDERID",
"ORDERDETAILS.PRODUCTID" });
read.addPrimaryKey(detailsPk);
Index: src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java
===================================================================
--- src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java (revision
392391)
+++ src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java (working copy)
@@ -73,67 +73,13 @@
AnOrder order = (AnOrder) customer.getOrders().get(0);
order.setProduct("Kitchen Sink 001");
- ApplyChangesCommand apply =
Command.FACTORY.createApplyChangesCommand();
- apply.setConnection(getConnection());
- apply.setMapping(getConfig("1xM_mapping_no_cud.xml"));
+ ApplyChangesCommand apply =
Command.FACTORY.createApplyChangesCommand(getConfig("1xM_mapping_no_cud.xml"));
+ apply.setConnection(getConnection());
// Flush changes
apply.execute((DataObject) root);
- /*
- * JDBCDAS das = JDBCDAS.FACTORY.create(); // Build the select
command
- * CrudCommand select = CrudCommand.FACTORY.create( "select
CUSTOMER.ID,
- * CUSTOMER.LASTNAME, CUSTOMER.ADDRESS, ANORDER.ID,
ANORDER.PRODUCT,
- * ANORDER.QUANTITY, ANORDER.CUSTOMER_ID from CUSTOMER left
outer join
- * ANORDER on ANORDER.CUSTOMER_ID=CUSTOMER.ID where CUSTOMER.ID
= :ID" ,
- * getMappingModel_1xM_uni_as_stream() , getGraphType()); //
- * Parameterize the command
select.setConnection(getConnection());
- * select.setParameter("ID", new Integer(1)); // Get the graph
- * DataObject root = das.getRootDataObject(select); // Modify a
customer
- * DataObject customer = (DataObject)
root.getList("CUSTOMER").get(0);
- * customer.set("LASTNAME", "Pavick"); // Modify the first order
- * DataObject order =
(DataObject)customer.getList("orders").get(0);
- * order.setString("PRODUCT", "Kitchen Sink 001"); // Build
command for
- * flush ApplyChangesCommand command =
- *
ApplyChangesCommand.FACTORY.create(getMappingModel_1xM_uni_as_stream());
- * command.setConnection(getConnection()); // Flush changes
- * das.applyChanges(root, command);
- */
}
- /*
- * //User provides the model and uses generated classes public void
- * testUserProvidedModelStatic() throws SQLException, IOException {
- *
- * JDBCDAS das = JDBCDAS.FACTORY.create();
- *
- * //Build the select command CrudCommand select =
- * CrudCommand.FACTORY.create( "select CUSTOMER.ID, CUSTOMER.LASTNAME,
- * CUSTOMER.ADDRESS, ANORDER.ID, ANORDER.PRODUCT, ANORDER.QUANTITY,
- * ANORDER.CUSTOMER_ID from CUSTOMER left outer join ANORDER on
- * ANORDER.CUSTOMER_ID=CUSTOMER.ID where CUSTOMER.ID = :ID" ,
- * getMappingModel_1xM_uni_as_stream() , getGraphType());
- *
- * //Parameterize the command select.setConnection(getConnection());
- * select.setParameter("ID", new Integer(1));
- *
- * //Get the graph DataObject root =
das.getRootDataObject(getGraphType(),
- * select);
- *
- * //Modify a customer DataGraphRoot dgRoot = (DataGraphRoot) root; //
TODO
- * Need to cast to Static customer and use "setLastName()"
- *
- * Customer customer = (Customer) dgRoot.getCustomers().get(0);
- * customer.setLastName("Pavick");
- *
- * //Modify the first order AnOrder order = customer.getOrders();
- * order.setProduct("Kitchen Sink 001");
- *
- * //Build command for flush ApplyChangesCommand command =
- *
ApplyChangesCommand.FACTORY.create(getMappingModel_1xM_uni_as_stream());
- * command.setConnection(getConnection());
- *
- * //Flush changes das.applyChanges(root, command); }
- */
}
\ No newline at end of file
Index: src/main/java/org/apache/tuscany/das/rdb/SDODataTypes.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/SDODataTypes.java (revision
392391)
+++ src/main/java/org/apache/tuscany/das/rdb/SDODataTypes.java (working copy)
@@ -22,10 +22,6 @@
/**
* Defines SDO data types. This is used primalirly to type stored procedure
OUT parameters.
*
- * TODO - This maybe be obviated by the move to SDO2. We also need to settle
the question
- * of whether config information is in terms of database or data object types
- *
- *
*/public class SDODataTypes {
static TypeHelper helper = TypeHelper.INSTANCE;
Index: src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java
(working copy)
@@ -22,7 +22,7 @@
import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
import org.apache.tuscany.das.rdb.impl.DeleteCommandImpl;
import org.apache.tuscany.das.rdb.impl.InsertCommandImpl;
-import org.apache.tuscany.das.rdb.impl.WriteCommandImpl;
+import org.apache.tuscany.das.rdb.impl.UpdateCommandImpl;
import commonj.sdo.DataObject;
@@ -51,7 +51,7 @@
return insertGenerator.getInsertCommand(mapping, changedObject,
table);
}
- public WriteCommandImpl getUpdateCommand(MappingWrapper mapping,
+ public UpdateCommandImpl getUpdateCommand(MappingWrapper mapping,
DataObject changedObject, Table table) {
return updateGenerator.getUpdateCommand(mapping, changedObject,
table);
}
Index:
src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
===================================================================
---
src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
(revision 392391)
+++
src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
(working copy)
@@ -31,7 +31,6 @@
import org.apache.tuscany.das.rdb.impl.OptimisticWriteCommandImpl;
import org.apache.tuscany.das.rdb.impl.ParameterImpl;
import org.apache.tuscany.das.rdb.impl.UpdateCommandImpl;
-import org.apache.tuscany.das.rdb.impl.WriteCommandImpl;
import org.apache.tuscany.das.rdb.util.DebugUtil;
import commonj.sdo.ChangeSummary;
@@ -49,7 +48,7 @@
super();
}
- public WriteCommandImpl getUpdateCommand(MappingWrapper mapping,
DataObject changedObject, Table table) {
+ public UpdateCommandImpl getUpdateCommand(MappingWrapper mapping,
DataObject changedObject, Table table) {
ArrayList parameters = new ArrayList();
Type type = changedObject.getType();
TableWrapper t = new TableWrapper(table);
@@ -101,7 +100,7 @@
}
- WriteCommandImpl updateCommand;
+ UpdateCommandImpl updateCommand;
if ( t.getCollisionColumn() != null )
updateCommand = new
OptimisticWriteCommandImpl(statement.toString());
else
Index: src/main/java/org/apache/tuscany/das/rdb/CommandFactory.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/CommandFactory.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/CommandFactory.java
(working copy)
@@ -57,8 +57,7 @@
* Creates an [EMAIL PROTECTED] instance with the provided configuration
* @param mappingModel The provided configuration as a stream over an
xml file
* @return Returns an ApplyChangesCOmmand in stance
- * @throws IOException
- * TODO - Either remove this throws clause or add it to createCommand
+ * @throws IOException
*/
public ApplyChangesCommand createApplyChangesCommand(
InputStream mappingModel) throws IOException;
Index: src/main/java/org/apache/tuscany/das/rdb/ResultSetShape.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/ResultSetShape.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/ResultSetShape.java
(working copy)
@@ -19,7 +19,6 @@
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
-import org.apache.tuscany.das.rdb.graphbuilder.impl.DefaultConverter;
import org.apache.tuscany.das.rdb.graphbuilder.schema.ResultSetTypeMap;
import commonj.sdo.Type;
@@ -32,33 +31,24 @@
* <p>
* There may also be a performance boost when using this interface.
*
- * TODO - This is very preliminary. We need to go over this again and
consider making is as close as possible to
- * to the infromation returned from ResultSetMetadata. For example, we may
want to use JDBC types
- * here rather than SDODataTypes. Also, ResultSetMetadata doe not provide
converters, so, maybe this
- * interface should also not.
*
- *
*/
public class ResultSetShape {
private final String[] columns;
private final String[] tables;
- private final Type[] types;
- //TODO - Are converters really needed here?
- private Converter[] converters;
+ private final Type[] types;
public ResultSetShape(String[] t, String[] c, Type[] dataTypes) {
this.columns = c;
this.tables = t;
- this.types = dataTypes;
- this.converters = new DefaultConverter[c.length];
+ this.types = dataTypes;
}
public ResultSetShape(ResultSetMetaData metadata) throws SQLException {
columns = new String[metadata.getColumnCount()];
tables = new String[metadata.getColumnCount()];
- types = new Type[metadata.getColumnCount()];
- converters = new DefaultConverter[metadata.getColumnCount()];
+ types = new Type[metadata.getColumnCount()];
ResultSetTypeMap typeMap = ResultSetTypeMap.instance;
for (int i = 1; i <= metadata.getColumnCount(); i++) {
@@ -84,21 +74,7 @@
return types[i-1];
}
- public void setConverter(int i, Converter converter) {
- this.converters[i] = converter;
- }
- public Converter getConverter(int i) {
- return this.converters[i-1];
- }
-
- public void setConverterFactory(Converter converter) {
- for ( int i=0; i < getColumnCount(); i++ ) {
- this.converters[i] = converter;
- }
-
- }
-
public String toString() {
StringBuffer result = new StringBuffer();
result.append(" column/table/type: ");
@@ -110,9 +86,7 @@
if ( types[i] == null )
result.append("null");
else
- result.append(types[i].getName());
- result.append('\t');
- result.append(converters[i]);
+ result.append(types[i].getName());
result.append('\n');
}
Index: src/main/java/org/apache/tuscany/das/rdb/ApplyChangesCommand.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/ApplyChangesCommand.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/ApplyChangesCommand.java
(working copy)
@@ -80,11 +80,6 @@
public void execute(DataObject root);
/**
- * TODO - Need to remove this. COnfig now set via factory method
- */
- public void setMapping(InputStream mappingModel) throws IOException;
-
- /**
* Provides the java.sql.Connection to be used for this executing this
* command.
*
Index:
src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java
(working copy)
@@ -23,11 +23,12 @@
import org.apache.tuscany.das.rdb.ApplyChangesCommand;
import org.apache.tuscany.das.rdb.Command;
-import org.apache.tuscany.das.rdb.Key;
import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
import org.apache.tuscany.das.rdb.config.ConnectionProperties;
-import org.apache.tuscany.das.rdb.config.impl.ConfigPackageImpl;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
import org.apache.tuscany.das.rdb.util.DebugUtil;
+import org.apache.tuscany.sdo.util.SDOUtil;
import commonj.sdo.DataObject;
import commonj.sdo.Type;
@@ -37,10 +38,8 @@
/**
*
*/
-public class ApplyChangesCommandImpl implements ApplyChangesCommand {
+public class ApplyChangesCommandImpl extends BaseCommandImpl implements
ApplyChangesCommand {
- private ConnectionImpl dasConnection;
-
private static final boolean debug = false;
private ChangeSummarizer summarizer = new ChangeSummarizer();
@@ -50,33 +49,27 @@
}
// IOException is recoverable, needs to be thrown
- public ApplyChangesCommandImpl(InputStream mappingModel) throws
IOException {
- setMapping(mappingModel);
+ public ApplyChangesCommandImpl(InputStream stream) throws IOException {
+ SDOUtil.registerStaticTypes(ConfigFactory.class);
+ XMLHelper helper = XMLHelper.INSTANCE;
+ XMLDocument doc = helper.load(stream);
+ Config mapping = (Config) doc.getRootObject();
+
+ this.configWrapper = new MappingWrapper(mapping);
+
+ if (mapping.getConnectionProperties() != null)
+ setConnection(mapping.getConnectionProperties());
+
}
public ApplyChangesCommandImpl(Config mappingModel){
- summarizer.setMapping(mappingModel);
-//TODO - Really need to refactor the Command framework. ReadCommand and
ApplychangesCommand should
-// be using the same approach to set connection and should probably share the
same initialization.
-// if (mappingModel.getConnectionProperties() != null)
-// setConnection(mappingModel.getConnectionProperties());
+ this.configWrapper = new MappingWrapper(mappingModel);
}
- public void setConnection(Connection connection) {
- setConnection(new ConnectionImpl(connection));
- }
+ public void setConnection(ConnectionImpl connection) {
+ summarizer.setConnection(connection);
+ }
- public void setConnection(Connection connection, boolean
manageTransaction) {
- ConnectionImpl c = new ConnectionImpl(connection);
- c.setManageTransactions(manageTransaction);
- setConnection(c);
- }
-
- public void setConnection(ConnectionImpl connection) {
- dasConnection = connection;
- summarizer.setConnection(connection);
- }
-
public void setConnection(ConnectionProperties c) {
try {
Connection connection = null;
@@ -93,31 +86,28 @@
}
public void addCreateCommand(Type type, Command cmd) {
- summarizer.addCreateCommand(type, cmd);
- ((CommandImpl) cmd).setConnection(dasConnection);
+ summarizer.addCreateCommand(type, cmd);
}
- public void addUpdateCommand(Type type, Command cmd) {
- // DebugUtil.debugln(getClass(), debug, "Adding update command for type
- // " + type.getName());
- summarizer.addUpdateCommand(type, cmd);
- ((CommandImpl) cmd).setConnection(dasConnection);
+ public void addUpdateCommand(Type type, Command cmd) {
+ summarizer.addUpdateCommand(type, cmd);
}
public void addDeleteCommand(Type type, Command cmd) {
- summarizer.addDeleteCommand(type, cmd);
- ((CommandImpl) cmd).setConnection(dasConnection);
+ summarizer.addDeleteCommand(type, cmd);
}
public void execute(DataObject root) {
DebugUtil.debugln(getClass(), debug, "Executing ApplyChangesCmd");
- if (dasConnection == null)
+ if (summarizer.getConnection() == null)
throw new RuntimeException("A connection must be provided");
if (!root.equals(root.getDataGraph().getRootObject()))
throw new RuntimeException("'root' argument must be the root of
the datagraph");
+ summarizer.setMapping(configWrapper);
+
Changes changes = summarizer.loadChanges(root);
boolean success = false;
@@ -126,51 +116,10 @@
success = true;
} finally {
if (success)
- dasConnection.cleanUp();
+ summarizer.getConnection().cleanUp();
else
- dasConnection.errorCleanUp();
+ summarizer.getConnection().errorCleanUp();
}
}
- public void setMapping(InputStream stream) throws IOException {
- XMLHelper helper = XMLHelper.INSTANCE;
-
- ConfigPackageImpl impl = ConfigPackageImpl.eINSTANCE;
- XMLDocument doc = helper.load(stream);
- Config mapping = (Config) doc.getRootObject();
-
- summarizer.setMapping(mapping);
- if (mapping.getConnectionProperties() != null)
- setConnection(mapping.getConnectionProperties());
-
- }
-
- public void addRelationship(String parent, String child) {
- summarizer.addRelationship(parent, child);
- }
-
- public void addPrimaryKey(String columnName) {
- summarizer.addPrimaryKey(columnName);
- }
-
- public void addCollisionColumn(String columnName) {
- summarizer.addCollisionColumn(columnName);
- }
-
- public void addRelationship(Key parentKey, Key childKey) {
- throw new RuntimeException("Not Implemented");
- }
-
- public void addPrimaryKey(Key key) {
- summarizer.addPrimarykey(key);
- }
-
- public void addGeneratedPrimaryKey(String columnName) {
- summarizer.addGeneratedPrimaryKey(columnName);
- }
-
- public void addConverter(String name, String converterName) {
- summarizer.addConverter(name, converterName);
- }
-
}
Index: src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java
(working copy)
@@ -22,7 +22,7 @@
public class UpdateOperation extends ChangeOperation {
- public UpdateOperation(WriteCommandImpl command, DataObject
changedObject, String id) {
+ public UpdateOperation(UpdateCommandImpl command, DataObject
changedObject, String id) {
super(command, changedObject);
this.propagatedID = id;
}
Index: src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java (revision
392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java (working copy)
@@ -30,8 +30,7 @@
private UpdateList updates = new UpdateList();
private DeleteList deletes = new DeleteList();
-// private static final boolean debug = false;
-
+
public void addInsert(ChangeOperation c) {
inserts.add(c);
}
Index: src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupImpl.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupImpl.java
(revision 392876)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupImpl.java
(working copy)
@@ -43,11 +43,6 @@
* ApplyChangesCommand. This factory is initialized with a configuration that
* defines the commands it produces.
*
- * <p>
- * TODO - This is still underdevelopment and is likely to replace
CommandFactory
- * as the preferred mechanism to set commands at runtime.
- *
- *
*/
public class CommandGroupImpl implements CommandGroup {
Index: src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java
(working copy)
@@ -29,7 +29,7 @@
* Objects deleted from the graph have lost their "settings" and must
* be restored
*/
- public DeleteOperation(WriteCommandImpl command, DataObject
changedObject) {
+ public DeleteOperation(DeleteCommandImpl command, DataObject
changedObject) {
super(command);
this.dObject = new
DatabaseObject(command.getMappingModel(),DataObjectUtil.getRestoredCopy(changedObject));
Index: src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java
(working copy)
@@ -21,7 +21,7 @@
public class CreateOperation extends ChangeOperation {
- public CreateOperation(WriteCommandImpl command, DataObject
changedObject, String ID) {
+ public CreateOperation(InsertCommandImpl command, DataObject
changedObject, String ID) {
super(command, changedObject);
this.propagatedID = ID;
}
Index: src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java
(working copy)
@@ -19,27 +19,22 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
-import java.sql.Connection;
import java.util.List;
import org.apache.tuscany.das.rdb.Command;
-import org.apache.tuscany.das.rdb.Key;
import org.apache.tuscany.das.rdb.Parameter;
import org.apache.tuscany.das.rdb.ResultSetShape;
-import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
import commonj.sdo.DataObject;
import commonj.sdo.Type;
import commonj.sdo.helper.XSDHelper;
-public abstract class CommandImpl implements Command {
+public abstract class CommandImpl extends BaseCommandImpl implements Command {
protected Statement statement;
protected Parameters parameters = new Parameters();
- protected MappingWrapper mappingModel = new MappingWrapper();
-
protected static final boolean debug = false;
protected ResultSetShape resultSetShape;
@@ -128,16 +123,6 @@
return parameters.parameterWithIndex(index).getValue();
}
- public void setConnection(Connection connection) {
- setConnection(new ConnectionImpl(connection));
- }
-
- public void setConnection(Connection connection, boolean
manageTransaction) {
- ConnectionImpl c = new ConnectionImpl(connection);
- c.setManageTransactions(manageTransaction);
- setConnection(c);
- }
-
public void setConnection(ConnectionImpl connection) {
statement.setConnection(connection);
}
@@ -146,29 +131,12 @@
return statement.getConnection();
}
- public void addRelationship(String parentName, String childName) {
- mappingModel.addRelationship(parentName, childName);
- }
- public void addRelationship(Key parentKey, Key childKey) {
- mappingModel.addRelationship(parentKey, childKey);
- }
- public void addPrimaryKey(String pk) {
- mappingModel.addPrimaryKey(pk);
- }
-
- public void addPrimaryKey(Key pk) {
- mappingModel.addPrimaryKey(pk);
- }
-
public void setResultSetShape(ResultSetShape shape) {
this.resultSetShape = shape;
}
- public void addConverter(String name, String converter) {
- mappingModel.addConverter(name, converter);
- }
public void close() {
statement.close();
Index: src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java
(working copy)
@@ -41,6 +41,8 @@
public void add(ChangeOperation op) {
DebugUtil.debugln(getClass(), debug, "Adding insert operation ");
+ // If nothing has been added yet, or this is no ordering, simply
+ // add the operation to the list
if ((order.size() == 0) || (op.getTableName() == null)) {
insertOperations.add(op);
} else {
@@ -62,7 +64,7 @@
String name = (String) i.next();
DebugUtil.debugln(getClass(), debug,
"Adding operations for table " + name);
- // TODO - KJW added null check ... Brent to verify.
+ // A null here means a table is in the config but hasn't been
changed here
if (opsByTableName.get(name) != null)
insertOperations.addAll((Collection) opsByTableName
.get(name));
Index: src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
(working copy)
@@ -24,7 +24,6 @@
import org.apache.tuscany.das.rdb.Command;
import org.apache.tuscany.das.rdb.Key;
import org.apache.tuscany.das.rdb.config.Column;
-import org.apache.tuscany.das.rdb.config.Config;
import org.apache.tuscany.das.rdb.config.Relationship;
import org.apache.tuscany.das.rdb.config.Table;
import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
@@ -186,16 +185,19 @@
public void addCreateCommand(Type type, Command cmd) {
ChangeFactory cf = getRegistry().getFactory(type);
cf.setCreateCommand((InsertCommandImpl) cmd);
+ ((CommandImpl) cmd).setConnection(connection);
}
public void addUpdateCommand(Type type, Command cmd) {
ChangeFactory cf = getRegistry().getFactory(type);
- cf.setUpdateCommand((WriteCommandImpl) cmd);
+ cf.setUpdateCommand((UpdateCommandImpl) cmd);
+ ((CommandImpl) cmd).setConnection(connection);
}
public void addDeleteCommand(Type type, Command cmd) {
ChangeFactory cf = getRegistry().getFactory(type);
- cf.setDeleteCommand((WriteCommandImpl) cmd);
+ cf.setDeleteCommand((DeleteCommandImpl) cmd);
+ ((CommandImpl) cmd).setConnection(connection);
}
@@ -210,8 +212,12 @@
this.connection = connection;
}
- public void setMapping(Config map) {
- this.mapping = new MappingWrapper(map);
+ public void setMapping(MappingWrapper map) {
+ this.mapping = map;
+
+ if ( mapping.getConfig() == null )
+ return;
+
Iterator i = mapping.getConfig().getTable().iterator();
while (i.hasNext()) {
Table t = (Table) i.next();
@@ -254,6 +260,10 @@
mapping.addConverter(name, converterName);
}
+ public ConnectionImpl getConnection() {
+ return this.connection;
+ }
+
}
Index: src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java
(working copy)
@@ -34,15 +34,23 @@
private static final boolean debug = false;
protected String propagatedID = null;
+
+ private boolean isInsert = false;
- public ChangeOperation(WriteCommandImpl command) {
+ public ChangeOperation(DeleteCommandImpl command) {
writeCommand = command;
}
- public ChangeOperation(WriteCommandImpl command, DataObject
changedObject) {
+ public ChangeOperation(InsertCommandImpl command, DataObject
changedObject) {
writeCommand = command;
dObject = new DatabaseObject(command.getMappingModel(),
changedObject);
+ this.isInsert = true;
}
+
+ public ChangeOperation(UpdateCommandImpl command, DataObject
changedObject) {
+ writeCommand = command;
+ dObject = new DatabaseObject(command.getMappingModel(),
changedObject);
+ }
public void execute() {
DebugUtil.debugln(getClass(), debug, "Executing change
operation");
@@ -55,8 +63,8 @@
}
writeCommand.execute();
- //TODO - Added this instanceof hack. Brent to
verify
- if (( propagatedID != null ) && (writeCommand instanceof
InsertCommandImpl)){
+
+ if ( isInsert && ( propagatedID != null )) {
DebugUtil.debugln(getClass(), debug, "Propagating key "
+ propagatedID);
int id = writeCommand.getGeneratedKey();
dObject.setPropagatedID(propagatedID, id);
Index: src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java
(working copy)
@@ -56,7 +56,7 @@
}
public Config getMappingModel() {
- return this.mappingModel.getConfig();
+ return configWrapper.getConfig();
}
Index: src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
(working copy)
@@ -35,9 +35,9 @@
private InsertCommandImpl createCommand;
- private WriteCommandImpl updateCommand;
+ private UpdateCommandImpl updateCommand;
- private WriteCommandImpl deleteCommand;
+ private DeleteCommandImpl deleteCommand;
private static final boolean debug = false;
@@ -61,12 +61,12 @@
createCommand = cmd;
}
- public void setUpdateCommand(WriteCommandImpl cmd) {
+ public void setUpdateCommand(UpdateCommandImpl cmd) {
DebugUtil.debugln(getClass(), debug, "Setting Update Command to
" + cmd);
updateCommand = cmd;
}
- public void setDeleteCommand(WriteCommandImpl cmd) {
+ public void setDeleteCommand(DeleteCommandImpl cmd) {
deleteCommand = cmd;
}
@@ -115,12 +115,12 @@
}
}
createCommand.setConnection(connection);
- createCommand.mappingModel = mapping;
+ createCommand.configWrapper = mapping;
}
return createCommand;
}
- private WriteCommandImpl getDeleteCommand(DataObject changedObject) {
+ private DeleteCommandImpl getDeleteCommand(DataObject changedObject) {
if ( deleteCommand == null ) {
Table table =
mapping.getTable(changedObject.getType().getName());
@@ -141,7 +141,7 @@
return deleteCommand;
}
- private WriteCommandImpl getUpdateCommand(DataObject changedObject) {
+ private UpdateCommandImpl getUpdateCommand(DataObject changedObject) {
if ( updateCommand == null ) {
Table table =
mapping.getTableByPropertyName(changedObject.getType().getName());
@@ -162,7 +162,7 @@
}
updateCommand.setConnection(connection);
- updateCommand.mappingModel = mapping;
+ updateCommand.configWrapper = mapping;
}
DebugUtil.debugln(getClass(), debug, "Returning updateCommand:
" + updateCommand);
return updateCommand;
Index:
src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java
===================================================================
---
src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java
(revision 392391)
+++
src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java
(working copy)
@@ -18,7 +18,7 @@
import java.sql.SQLException;
-public class OptimisticWriteCommandImpl extends WriteCommandImpl {
+public class OptimisticWriteCommandImpl extends UpdateCommandImpl {
public OptimisticWriteCommandImpl(String sqlString) {
super(sqlString);
Index: src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java
(revision 0)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java
(revision 0)
@@ -0,0 +1,54 @@
+package org.apache.tuscany.das.rdb.impl;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.Key;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+
+public abstract class BaseCommandImpl {
+
+ protected MappingWrapper configWrapper = new MappingWrapper();
+
+ public void setConnection(Connection connection) {
+ setConnection(new ConnectionImpl(connection));
+ }
+
+ public void setConnection(Connection connection, boolean
manageTransaction) {
+ ConnectionImpl c = new ConnectionImpl(connection);
+ c.setManageTransactions(manageTransaction);
+ setConnection(c);
+ }
+
+ public abstract void setConnection(ConnectionImpl c);
+
+ public void addRelationship(String parentName, String childName) {
+ configWrapper.addRelationship(parentName, childName);
+ }
+
+ public void addRelationship(Key parentKey, Key childKey) {
+ configWrapper.addRelationship(parentKey, childKey);
+ }
+
+ public void addPrimaryKey(String pk) {
+ configWrapper.addPrimaryKey(pk);
+ }
+
+ public void addPrimaryKey(Key pk) {
+ configWrapper.addPrimaryKey(pk);
+ }
+
+ public void addConverter(String name, String converter) {
+ configWrapper.addConverter(name, converter);
+ }
+
+ public void addCollisionColumn(String columnName) {
+ configWrapper.addCollisionColumn(columnName);
+ }
+
+ public void addGeneratedPrimaryKey(String columnName) {
+ configWrapper.addGeneratedPrimaryKey(columnName);
+ }
+
+
+
+}
Index: src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
(revision 392391)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
(working copy)
@@ -102,7 +102,7 @@
GraphBuilderMetadata gbmd = new GraphBuilderMetadata(results,
- getSchema(), mappingModel.getConfig(),
resultSetShape);
+ getSchema(), configWrapper.getConfig(),
resultSetShape);
DataGraph g = createEDataGraph(gbmd.getSchema());
ChangeSummary summary = g.getChangeSummary();
@@ -154,7 +154,7 @@
}
private void setMappingModel(Config mapping) {
- mappingModel = new MappingWrapper(mapping);
+ configWrapper = new MappingWrapper(mapping);
}
public void setMappingModel(InputStream stream) {
@@ -166,14 +166,14 @@
try {
Config config = (Config)
helper.load(stream).getRootObject();
- mappingModel = new MappingWrapper(config);
+ configWrapper = new MappingWrapper(config);
} catch (IOException e) {
throw new RuntimeException(e);
}
- if (mappingModel.getConfig().getConnectionProperties() != null)
-
setConnection(mappingModel.getConfig().getConnectionProperties());
+ if (configWrapper.getConfig().getConnectionProperties() != null)
+
setConnection(configWrapper.getConfig().getConnectionProperties());
}
