You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by kw...@apache.org on 2006/02/21 04:43:46 UTC

svn commit: r379321 - in /incubator/tuscany/java/das/rdb/src: main/java/org/apache/tuscany/das/rdb/config/wrapper/ main/java/org/apache/tuscany/das/rdb/generator/impl/ main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ main/java/org/apache/tusca...

Author: kwilliams
Date: Mon Feb 20 19:43:44 2006
New Revision: 379321

URL: http://svn.apache.org/viewcvs?rev=379321&view=rev
Log:
Application of Brent's patch for TUSCANY-28
	"DAS fails to recognize addition of new child to parent DataObject"

Modified:
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java
    incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java Mon Feb 20 19:43:44 2006
@@ -375,7 +375,7 @@
 			if ( name.equals (r.getName())) 
 				return r;
 		}
-		return null;
+		throw new RuntimeException("Could not find relationship " + name + " in the configuration");
 	}
 
 }

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java Mon Feb 20 19:43:44 2006
@@ -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,

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java Mon Feb 20 19:43:44 2006
@@ -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;
 	}
 
-
 }
-

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java Mon Feb 20 19:43:44 2006
@@ -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));

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java Mon Feb 20 19:43:44 2006
@@ -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,34 +224,6 @@
 		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

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java Mon Feb 20 19:43:44 2006
@@ -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());

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java Mon Feb 20 19:43:44 2006
@@ -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());
 

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java Mon Feb 20 19:43:44 2006
@@ -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

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java Mon Feb 20 19:43:44 2006
@@ -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;
 	}	
 
 	/**

Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java?rev=379321&r1=379320&r2=379321&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java Mon Feb 20 19:43:44 2006
@@ -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());
 	}
 
 }