The DAS was not correctly generating code  for insert statements in the case where a DataObject was created and then set as the child of another DataObject. The generator was not including foreign key fields in the insert statement.
 
Brent
 
 
 
Index: src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java
===================================================================
--- src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java      
(revision 379240)
+++ src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java      
(working copy)
@@ -86,11 +86,11 @@
 
         DataObject cust = root.getDataObject("CUSTOMER[1]");
 
-        // Save ID
-        Integer custID = (Integer) cust.get("ID");
-        // save order count
-        Integer custOrderCount = new Integer(cust.getList("ANORDER").size());
-
+        // Save ID and Order Count
+        int custID = cust.getInt("ID");
+        int custOrderCount = cust.getList("ANORDER").size();
+        int rootCount = root.getList("ANORDER").size();
+        
         // Create a new Order and add to customer1
         DataObject order = root.createDataObject("ANORDER");
 
@@ -99,6 +99,7 @@
         order.set("QUANTITY", new Integer(99));
         cust.getList("ANORDER").add(order);
 
+        assertEquals(custOrderCount + 1, cust.getList("ANORDER").size());
         // Build apply changes command
         ApplyChangesCommand apply = 
Command.FACTORY.createApplyChangesCommand();
         apply.setConnection(getConnection());
@@ -122,7 +123,7 @@
         select.addPrimaryKey("ANORDER.ID");
         root = select.executeQuery();
 
-        assertEquals(custOrderCount.intValue() + 1, 
root.getList("CUSTOMER[1]/ANORDER").size());
+        assertEquals(custOrderCount + 1, 
root.getList("CUSTOMER[1]/ANORDER").size());
 
     }
 
Index: src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
===================================================================
--- src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java   
(revision 379240)
+++ src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java   
(working copy)
@@ -31,50 +31,55 @@
 
                CityData city = new CityData(getAutoConnection());
                StateData state = new StateData(getAutoConnection());
-               
+
                city.doDeletes();
                state.doDeletes();
                state.doInserts();
                city.doInserts();
-               
 
        }
 
        protected void tearDown() throws Exception {
                super.tearDown();
        }
-       
+
        public OperationOrderingTests() {
                super();
        }
-       
+
        public void testInsert() throws Exception {
-               Command select = Command.FACTORY.createCommand("Select * from 
STATES inner join CITIES on STATES.ID = CITIES.STATE_ID", 
getConfig("cityStates.xml"));
+               Command select = Command.FACTORY
+                               .createCommand(
+                                               "Select * from STATES inner 
join CITIES on STATES.ID = CITIES.STATE_ID",
+                                               getConfig("cityStates.xml"));
                select.setConnection(getConnection());
                DataObject root = select.executeQuery();
 
+               int numberOfStates = root.getList("STATES").size();
+               int numberOfCities = root.getList("CITIES").size();
+
                DataObject atlanta = root.createDataObject("CITIES");
                atlanta.setString("NAME", "Atlanta");
                atlanta.setInt("ID", 6);
-               
+
                // Create a new Company
                DataObject georgia = root.createDataObject("STATES");
                georgia.setInt("ID", 4);
                georgia.setString("NAME", "GA");
-               
+
                georgia.getList("cities").add(atlanta);
 
                // Create apply command
-               ApplyChangesCommand apply = 
Command.FACTORY.createApplyChangesCommand();
+               ApplyChangesCommand apply = 
Command.FACTORY.createApplyChangesCommand(getConfig("cityStates.xml"));
                apply.setConnection(getConnection());
 
-               // Programatically set minimum metadata necessary
-               apply.addPrimaryKey("STATES.ID");
-               apply.addPrimaryKey("CITIES.ID");
-               apply.addRelationship("STATES.ID", "CITIES.STATE_ID");
-
                // Flush changes
                apply.execute(root);
+
+               select.setConnection(getConnection());
+               root = select.executeQuery();
+               assertEquals(numberOfCities + 1, root.getList("CITIES").size());
+               assertEquals(numberOfStates + 1, root.getList("STATES").size());
        }
 
 }
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 379240)
+++ src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java   
(working copy)
@@ -42,13 +42,13 @@
                return deleteGenerator.getDeleteParameters(table);
        }
 
-       public Collection getCreateParameters(DataObject changedObject, Table 
table) {
-               return insertGenerator.getInsertParameters(changedObject, 
table);
+       public Collection getCreateParameters(MappingWrapper mapping, 
DataObject changedObject, Table table) {
+               return insertGenerator.getInsertParameters(mapping, 
changedObject, table);
        }
 
-       public InsertCommandImpl getInsertCommand(DataObject changedObject,
+       public InsertCommandImpl getInsertCommand(MappingWrapper mapping, 
DataObject changedObject,
                        Table table) {
-               return insertGenerator.getInsertCommand(changedObject, table);
+               return insertGenerator.getInsertCommand(mapping, changedObject, 
table);
        }
 
        public WriteCommandImpl getUpdateCommand(MappingWrapper mapping,
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 379240)
+++ 
src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java    
    (working copy)
@@ -33,10 +33,6 @@
 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 org.apache.tuscany.sdo.impl.AttributeImpl;
-import org.apache.tuscany.sdo.impl.ChangeSummarySettingImpl;
-import org.apache.tuscany.sdo.impl.ReferenceImpl;
-import org.eclipse.emf.ecore.ETypedElement;
 
 import commonj.sdo.ChangeSummary;
 import commonj.sdo.DataObject;
@@ -66,7 +62,7 @@
                Iterator i = getChangedFields(mapping, summary, 
changedObject).iterator();
 
                while (i.hasNext()) {
-                       AttributeImpl attr = (AttributeImpl) i.next();
+                       Property attr = (Property) i.next();
                        Column c = t.getColumnByPropertyName(attr.getName());
                        if ((c != null) && (c.isCollision() || 
c.isPrimaryKey())) {
                                // get rid of comma if OCC or PK is last field
@@ -75,7 +71,7 @@
                                                        
.delete(statement.length() - 2, statement.length());
                                }
                        } else {
-                               
parameters.add(type.getProperty(attr.getName()));
+                               parameters.add(attr);
                                statement.append(c == null ? attr.getName() : 
c.getName());
                                statement.append(" = ?");
                                if (i.hasNext())
@@ -141,17 +137,17 @@
                ArrayList changes = new ArrayList();
                Iterator i = summary.getOldValues(obj).iterator();
                while (i.hasNext()) {
-                       ChangeSummarySettingImpl setting = 
(ChangeSummarySettingImpl) i.next();
-                       if (setting.getFeature() instanceof AttributeImpl)
-                               changes.add(setting.getFeature());
-                       else if ( setting.getFeature() instanceof 
ReferenceImpl) {
-                               ReferenceImpl ref = (ReferenceImpl) 
setting.getFeature();
-                               if ( ref.getUpperBound() != 
ETypedElement.UNBOUNDED_MULTIPLICITY ) {
-                                       RelationshipWrapper r = new 
RelationshipWrapper(mapping.getRelationshipByName(ref.getEOpposite().getName()));
+                       ChangeSummary.Setting setting = (ChangeSummary.Setting) 
i.next();
+                       if (setting.getProperty().getType().isDataType()) {
+                               changes.add(setting.getProperty());
+                       } else  {
+                               Property ref = setting.getProperty();
+                               if ( !ref.isMany() ) {
+                                       RelationshipWrapper r = new 
RelationshipWrapper(mapping.getRelationshipByName(ref.getOpposite().getName()));
                                        Iterator keys = 
r.getForeignKeys().iterator();
                                        while ( keys.hasNext()) {
                                                String key = (String) 
keys.next();
-                                               AttributeImpl p = 
(AttributeImpl) obj.getType().getProperty(key);
+                                               Property p = 
obj.getType().getProperty(key);
                                                changes.add(p);
                                        }
                                }
@@ -183,7 +179,7 @@
                
                Iterator i = getAttributeProperties(changedObject).iterator();
                while (i.hasNext()) {
-                       AttributeImpl attr = (AttributeImpl) i.next();
+                       Property attr = (Property) i.next();
                        String field = attr.getName();
 
                        Parameter p = getParameter(wrapper, 
type.getProperty(field));
Index: 
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
===================================================================
--- 
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java    
    (revision 379240)
+++ 
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java    
    (working copy)
@@ -23,13 +23,14 @@
 
 import org.apache.tuscany.das.rdb.Converter;
 import org.apache.tuscany.das.rdb.Parameter;
+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;
+import org.apache.tuscany.das.rdb.config.wrapper.RelationshipWrapper;
 import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
 import org.apache.tuscany.das.rdb.impl.InsertCommandImpl;
 import org.apache.tuscany.das.rdb.impl.ParameterImpl;
 import org.apache.tuscany.das.rdb.util.DebugUtil;
-import org.apache.tuscany.sdo.impl.AttributeImpl;
-import org.eclipse.emf.ecore.EObject;
 
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
@@ -44,19 +45,19 @@
                super();
        }
 
-       public InsertCommandImpl getInsertCommand(DataObject changedObject, 
Table t) {
+       public InsertCommandImpl getInsertCommand(MappingWrapper config,
+                       DataObject changedObject, Table t) {
                ArrayList parameters = new ArrayList();
                TableWrapper table = new TableWrapper(t);
                StringBuffer statement = new StringBuffer("insert into ");
                statement.append(t.getName());
 
-               Iterator i = getAttributeProperties(changedObject).iterator();
+               Iterator i = getAttributeProperties(changedObject, 
config).iterator();
 
                ArrayList attributes = new ArrayList();
                while (i.hasNext()) {
-                       AttributeImpl attr = (AttributeImpl) i.next();
-                       if ((!table.isGeneratedColumnProperty(attr.getName())) 
&& 
-                                       ((EObject)changedObject).eIsSet(attr)) {
+                       Property attr = (Property) i.next();
+                       if (!table.isGeneratedColumnProperty(attr.getName())) {
                                attributes.add(attr.getName());
                                
parameters.add(changedObject.getType().getProperty(
                                                attr.getName()));
@@ -76,7 +77,7 @@
                }
 
                statement.append(" values (");
-               for ( int idx=1; idx <= attributes.size(); idx++) {
+               for (int idx = 1; idx <= attributes.size(); idx++) {
                        statement.append('?');
                        if (idx < attributes.size())
                                statement.append(", ");
@@ -86,7 +87,7 @@
 
                InsertCommandImpl cmd = new 
InsertCommandImpl(statement.toString());
                Iterator params = parameters.iterator();
-               for (int idx=1; params.hasNext(); idx++ ) {
+               for (int idx = 1; params.hasNext(); idx++) {
                        Property property = (Property) params.next();
                        Parameter p = new ParameterImpl();
                        p.setName(property.getName());
@@ -94,13 +95,13 @@
                        p.setConverter(getConverter(table, property.getName()));
                        p.setIndex(idx);
                        cmd.addParameter(p);
-                       
+
                }
                DebugUtil.debugln(getClass(), debug, statement.toString());
                return cmd;
 
        }
-       
+
        private Converter getConverter(TableWrapper tw, String name) {
                String converter = tw.getConverter(name);
                if ( converter != null ) {
@@ -113,27 +114,45 @@
                return null;
        }
 
-       private List getAttributeProperties(DataObject obj) {
+       private List getAttributeProperties(DataObject obj, MappingWrapper 
config) {
                ArrayList fields = new ArrayList();
                Iterator i = obj.getType().getProperties().iterator();
-               while ( i.hasNext()) {
+               while (i.hasNext()) {
                        Property p = (Property) i.next();
-                       if ( p.getType().isDataType())
-                               fields.add(p);
+                       if (p.getType().isDataType()) {
+                               if (obj.isSet(p))
+                                       fields.add(p);
+                       } else {
+                               if (!p.isMany() && obj.isSet(p)) {
+                                       Relationship relationship = 
config.getRelationshipByName(p
+                                                       
.getOpposite().getName());
+
+                                       RelationshipWrapper r = new 
RelationshipWrapper(
+                                                       relationship);
+                                       Iterator keys = 
r.getForeignKeys().iterator();
+                                       while (keys.hasNext()) {
+                                               String key = (String) 
keys.next();
+                                               Property keyProp = 
obj.getType().getProperty(key);
+                                               fields.add(keyProp);
+                                       }
+
+                               }
+                       }
                }
-               
+
                return fields;
-       
+
        }
 
-       public Collection getInsertParameters(DataObject changedObject, Table 
table) {
+       public Collection getInsertParameters(MappingWrapper config,
+                       DataObject changedObject, Table table) {
                ArrayList parameters = new ArrayList();
                TableWrapper wrapper = new TableWrapper(table);
 
-               Iterator i = getAttributeProperties(changedObject).iterator();
+               Iterator i = getAttributeProperties(changedObject, 
config).iterator();
 
                while (i.hasNext()) {
-                       AttributeImpl attr = (AttributeImpl) i.next();
+                       Property attr = (Property) i.next();
                        if (!wrapper.isGeneratedColumnProperty(attr.getName()))
                                
parameters.add(changedObject.getType().getProperty(
                                                attr.getName()));
@@ -142,6 +161,4 @@
                return parameters;
        }
 
-
 }
-
Index: src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java        
(revision 379240)
+++ src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java        
(working copy)
@@ -27,9 +27,10 @@
 import org.apache.tuscany.das.rdb.graphbuilder.impl.TableRegistry;
 import org.apache.tuscany.sdo.impl.AttributeImpl;
 import org.apache.tuscany.sdo.impl.ChangeSummaryImpl;
+import org.apache.tuscany.sdo.impl.ReferenceImpl;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
 
+import commonj.sdo.ChangeSummary;
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
 
@@ -62,7 +63,7 @@
        public DataObject merge(DataObject primary, DataObject secondary) {
                addGraphToRegistry(primary);
 
-               ChangeSummaryImpl summary =  (ChangeSummaryImpl) primary
+               ChangeSummary summary =  primary
                                .getDataGraph().getChangeSummary();
                summary.endLogging();
                Iterator i = secondary.getType().getProperties().iterator();
@@ -76,7 +77,7 @@
                                createObjectWithSubtree(primary, p, object);
                        }
                }
-               summary.resumeLogging();
+               ((ChangeSummaryImpl)summary).resumeLogging();
                return primary;
        }
 
@@ -103,7 +104,7 @@
                        Iterator refs = 
eObjectToCopy.eClass().getEAllReferences()
                                        .iterator();
                        while (refs.hasNext()) {
-                               EReference ref = (EReference) refs.next();
+                               ReferenceImpl ref = (ReferenceImpl) refs.next();
                                List refObjects;
                                if (!ref.isMany()) {
                                        refObjects = 
Collections.singletonList(eObjectToCopy
Index: src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java    
(revision 379240)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java    
(working copy)
@@ -105,10 +105,10 @@
        
                        String createStatement = table.getCreate();
                        if ( createStatement == null ) {
-                               createCommand = 
getCudGenerator().getInsertCommand(changedObject, table);
+                               createCommand = 
getCudGenerator().getInsertCommand(mapping, changedObject, table);
                        } else {
                                createCommand = new 
InsertCommandImpl(createStatement);
-                               Iterator i = 
getCudGenerator().getCreateParameters(changedObject, table).iterator();
+                               Iterator i = 
getCudGenerator().getCreateParameters(mapping, changedObject, table).iterator();
                                while (i.hasNext()) {
                                        Property p = (Property)i.next();        
                        
                                        createCommand.addParameter(p.getName(), 
p.getType());
Index: src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java  
(revision 379240)
+++ src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java  
(working copy)
@@ -32,7 +32,6 @@
 import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
 import org.apache.tuscany.das.rdb.graphbuilder.impl.GraphBuilderMetadata;
 import org.apache.tuscany.das.rdb.graphbuilder.impl.ResultSetProcessor;
-import org.apache.tuscany.sdo.impl.ChangeSummaryImpl;
 import org.apache.tuscany.sdo.util.DataObjectUtil;
 import org.apache.tuscany.sdo.util.SDOUtil;
 import org.eclipse.emf.common.util.URI;
@@ -42,9 +41,11 @@
 import org.eclipse.emf.ecore.xmi.XMLResource;
 import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
 
+import commonj.sdo.ChangeSummary;
 import commonj.sdo.DataGraph;
 import commonj.sdo.DataObject;
 import commonj.sdo.Type;
+import commonj.sdo.helper.XMLHelper;
 
 public class ReadCommandImpl extends CommandImpl {
 
@@ -109,7 +110,7 @@
                                getSchema(), mappingModel.getConfig(), 
resultSetShape);
 
                DataGraph g = createEDataGraph(gbmd.getSchema());
-               ChangeSummaryImpl summary = (ChangeSummaryImpl) 
g.getChangeSummary();
+               ChangeSummary summary = g.getChangeSummary();
 
                ResultSetProcessor rsp = new 
ResultSetProcessor(g.getRootObject(), gbmd);
                rsp.processResults(getStartRow(), getEndRow());
@@ -173,13 +174,15 @@
                                ConfigPackageImpl.eNS_URI);
                map.put(XMLResource.OPTION_EXTENDED_META_DATA, metadata);
 
-               try {
-                       resource.load(stream, map);
+               try {                   
+                       Config config = (Config) 
XMLHelper.INSTANCE.load(stream, ConfigPackageImpl.eNS_URI,map).getRootObject();
+                       mappingModel = new MappingWrapper(config);
+               //      resource.load(stream, map);
                } catch (IOException e) {
                        throw new RuntimeException(e);
                }
-               mappingModel = new MappingWrapper((Config) 
resource.getContents().get(
-                               0));
+//             mappingModel = new MappingWrapper((Config) 
resource.getContents().get(
+//                             0));
                if (mappingModel.getConfig().getConnectionProperties() != null)
                        
setConnection(mappingModel.getConfig().getConnectionProperties());
 
Index: 
src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java 
(revision 379240)
+++ src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java 
(working copy)
@@ -375,7 +375,7 @@
                        if ( name.equals (r.getName())) 
                                return r;
                }
-               return null;
+               throw new RuntimeException("Could not find relationship " + 
name + " in the configuration");
        }
 
 }
Index: 
src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
===================================================================
--- 
src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java  
    (revision 379240)
+++ 
src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java  
    (working copy)
@@ -16,8 +16,6 @@
  */
 package org.apache.tuscany.das.rdb.graphbuilder.schema;
 
-import java.io.IOException;
-import java.io.OutputStream;
 import java.util.Iterator;
 
 import org.apache.tuscany.das.rdb.config.Relationship;
@@ -33,12 +31,10 @@
 import org.apache.tuscany.sdo.util.DataObjectUtil;
 import org.apache.tuscany.sdo.util.SDOUtil;
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.ENamedElement;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EcoreFactory;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
 
 import commonj.sdo.Type;
 import commonj.sdo.helper.TypeHelper;
@@ -228,36 +224,8 @@
                return EAttributeMaker.singleton();
        }
 
-       /**
-        * Internal method to save a schema to a file
-        * 
-        * @param eclass
-        *            The EClass to save (usually just the root EClass)
-        * @param name
-        *            The name of the file
-        * @throws IOException
-        */
-       private void save(ENamedElement eclass, OutputStream stream)
-                       throws IOException {
 
-               XMLResourceImpl resource = new XMLResourceImpl();
-               resource.getContents().add(eclass);
-               resource.save(stream, null);
-
-       }
-
        /**
-        * Used by Metadata.saveToEcore() to save the schema to a file
-        * 
-        * @param name
-        *            the file name
-        * @throws IOException
-        */
-       public void save(OutputStream stream) throws IOException {
-               save(getEPackage(), stream);
-       }
-
-       /**
         * @return the EPackage for this schema
         */
        public EPackage getEPackage() {
Index: src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java
===================================================================
--- src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java   
(revision 379240)
+++ src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java   
(working copy)
@@ -19,13 +19,11 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.emf.ecore.EFactory;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
 import commonj.sdo.ChangeSummary;
 import commonj.sdo.DataObject;
+import commonj.sdo.Property;
 import commonj.sdo.ChangeSummary.Setting;
+import commonj.sdo.helper.DataFactory;
 
 /**
  */
@@ -40,18 +38,15 @@
 
        public static DataObject getCopy(DataObject original) {
                
-               //Drop to "E" land and create a new instance
-               EObject eOriginal = (EObject) original;
-               EFactory factory = 
eOriginal.eClass().getEPackage().getEFactoryInstance();
-               EObject eCopy = factory.create(eOriginal.eClass());
+               DataObject copy = 
DataFactory.INSTANCE.create(original.getType());
                
                //Fill in values
-               Iterator i = 
eOriginal.eClass().getEAllStructuralFeatures().iterator();
+               Iterator i = original.getType().getProperties().iterator();
                while (i.hasNext()) {
-                       EStructuralFeature feature = (EStructuralFeature) 
i.next();
-                       eCopy.eSet(feature, eOriginal.eGet(feature));
+                       Property feature = (Property) i.next();
+                       copy.set(feature, original.get(feature));
                }
-               return (DataObject) eCopy;
+               return copy;
        }       
 
        /**

Reply via email to