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
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
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());
 
        }
 

Reply via email to