You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ad...@apache.org on 2007/10/08 08:52:16 UTC

svn commit: r582728 - in /incubator/tuscany/java/das/rdb/src: main/java/org/apache/tuscany/das/rdb/ main/java/org/apache/tuscany/das/rdb/config/wrapper/ main/java/org/apache/tuscany/das/rdb/impl/ main/java/org/apache/tuscany/das/rdb/merge/impl/ test/ja...

Author: adrianocrestani
Date: Sun Oct  7 23:52:15 2007
New Revision: 582728

URL: http://svn.apache.org/viewvc?rev=582728&view=rev
Log:
applying patch from JIRA-1827

Modified:
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
    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/impl/Changes.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
    incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.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/ConfigHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java Sun Oct  7 23:52:15 2007
@@ -82,6 +82,15 @@
     }
 
     /**
+     * Add PK information, with different TypeName
+     * @param columnName
+     * @param typeName
+     */
+    public void addPrimaryKey(String columnName, String propertyName) {
+        configWrapper.addPrimaryKey(columnName, propertyName);
+    }
+    
+    /**
      * Add relationship information
      * @param parentName
      * @param childName

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java?rev=582728&r1=582727&r2=582728&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 Sun Oct  7 23:52:15 2007
@@ -310,6 +310,10 @@
         addPrimaryKey(Collections.singletonList(columnName));
     }
 
+    public void addPrimaryKey(String columnName, String propertyName) {
+        addPrimaryKey(Collections.singletonList(columnName), propertyName);
+    }
+    
     public void addPrimaryKey(List columnNames) {
 
         Iterator i = columnNames.iterator();
@@ -325,6 +329,22 @@
         }
     }
 
+    public void addPrimaryKey(List columnNames, String propertyName) {
+
+        Iterator i = columnNames.iterator();
+        while (i.hasNext()) {
+            String columnName = (String) i.next();
+
+            QualifiedColumn pkColumn = null;
+           	pkColumn = new QualifiedColumn(columnName, this.config.isDatabaseSchemaNameSupported());
+            //Table t = findOrCreateTable(pkColumn.getTableName());
+            Table t = findOrCreateTable(pkColumn);
+            Column c = findOrCreateColumn(t, pkColumn.getColumnName());
+            c.setPrimaryKey(true);
+            c.setPropertyName(propertyName);
+        }
+    }
+    
     public String getTableTypeName(String tableName) {
         Table t = getTable(tableName);
         if (t == null) {

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java Sun Oct  7 23:52:15 2007
@@ -21,6 +21,9 @@
 import java.util.Iterator;
 import java.util.List;
 
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.XMLHelper;
+
 /**
  * Manages a set of graph-change operations. This simple implementaiton can be 
  * replaced with a version that provides R/I sorting
@@ -51,19 +54,19 @@
      */
     public void execute() {
 
-        Iterator i = inserts.getSortedList().iterator();
+        Iterator i = deletes.getSortedList().iterator();
         while (i.hasNext()) {
             ChangeOperation c = (ChangeOperation) i.next();
             c.execute();
         }
 
-        i = updates.getSortedList().iterator();
+        i = inserts.getSortedList().iterator();
         while (i.hasNext()) {
             ChangeOperation c = (ChangeOperation) i.next();
             c.execute();
         }
 
-        i = deletes.getSortedList().iterator();
+        i = updates.getSortedList().iterator();
         while (i.hasNext()) {
             ChangeOperation c = (ChangeOperation) i.next();
             c.execute();

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java?rev=582728&r1=582727&r2=582728&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 Sun Oct  7 23:52:15 2007
@@ -26,6 +26,8 @@
 import org.apache.log4j.Logger;
 
 import org.apache.tuscany.das.rdb.config.Config;
+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.QualifiedColumn;
 import org.apache.tuscany.das.rdb.graphbuilder.impl.MultiTableRegistry;
 import org.apache.tuscany.das.rdb.graphbuilder.impl.TableRegistry;
@@ -60,6 +62,13 @@
         this.config = cfg;
     }
     
+    public DataObject emptyGraph() {
+    	if(this.config != null)
+    		return emptyGraph(this.config);
+    	else
+    		return null;
+    }
+    
     // TODO Replace EMF reference with SDOUtil function when available
     // (Tuscany-583)
     public DataObject emptyGraph(Config config) {
@@ -191,7 +200,7 @@
             Property p = (Property) i.next();
             Iterator objects = graph1.getList(p).iterator();
             while (objects.hasNext()) {
-                DataObject object = (DataObject) objects.next();
+                DataObject object = (DataObject) objects.next();                
                 Object pk = object.get(getPrimaryKeyName(object));
                 if (logger.isDebugEnabled()) {
                 	logger.debug("Adding object with pk " + pk + " to registry");
@@ -211,6 +220,7 @@
     }
 
     //JIRA-952
+    //if the table and column have SDO type name and property name use it else use database table and column name
     public void addPrimaryKey(String key) {
     	QualifiedColumn column = null;
     	if(this.config != null && this.config.isDatabaseSchemaNameSupported()){
@@ -220,9 +230,31 @@
     		column = new QualifiedColumn(key);
     	}
         
-    	if (logger.isDebugEnabled()) {
-    		logger.debug("Adding " + column.getTableName() + " " + column.getColumnName() + " to keys");	
+    	String tableName = column.getTableName();
+    	String columnName = column.getColumnName();
+    	String schemaName = column.getSchemaName();
+    	String qualifiedTableName = null;
+    	
+    	if(this.config != null && this.config.isDatabaseSchemaNameSupported()) {
+    		qualifiedTableName = schemaName+"."+tableName; 
+    	} else {
+    		qualifiedTableName = tableName;
     	}
-        keys.put(column.getTableName(), column.getColumnName());
+    	MappingWrapper configWrapper = new MappingWrapper(this.config);
+    	
+    	String typeName = configWrapper.getTableTypeName(qualifiedTableName);
+    	String propertyName = configWrapper.getColumnPropertyName(qualifiedTableName, columnName);
+    	
+    	if(typeName != null && propertyName != null) {
+    		if (logger.isDebugEnabled()) {
+        		logger.debug("Adding " + typeName + " " + propertyName + " to keys");	
+        	}
+            keys.put(typeName, propertyName);
+    	} else {
+        	if (logger.isDebugEnabled()) {
+        		logger.debug("Adding " + column.getTableName() + " " + column.getColumnName() + " to keys");	
+        	}
+            keys.put(column.getTableName(), column.getColumnName());    		
+    	}    	
     }
 }

Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java Sun Oct  7 23:52:15 2007
@@ -188,4 +188,40 @@
         assertEquals(1, mergedGraph.getList("CUSTOMER").size());
     }
 
+    /**
+     * Mix dynamic DO from query result with static DO from customer.xsd. As long as the type and 
+     * property names are matching for both, merge can happen - fixing bug 1827- pk hashmap was not
+     * considering type and property names before.
+     * @throws Exception
+     */
+    public void testMergeUpdateSingleTable() throws Exception {
+    	//existing records
+        DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfigProps.xml"), getConnection());
+    	DataObject root = das.getCommand("all customers").executeQuery();
+    	DataObject firstCustomer = root.getDataObject("Customer[ID=1]");
+    	
+    	if(firstCustomer != null)
+    		firstCustomer.delete();//DAS will not automatic createOrReplace , so do delete here and later doing a create
+    	
+    	//create new customer using static SDO - say a service is doing it
+    	String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd";
+        HelperContext context = HelperProvider.getDefaultContext();
+        CustomerFactory.INSTANCE.register(context);
+        ConfigHelper helper = new ConfigHelper();
+        helper.setDataObjectModel(typeUri);
+        helper.addTable("CUSTOMER", "Customer");
+        helper.addPrimaryKey("CUSTOMER.ID", "ID");
+
+        GraphMerger gm = new GraphMerger(helper.getConfig());
+        DataObject graph = gm.emptyGraph();
+        Customer c = (Customer) graph.createDataObject("Customer");
+        c.setID(1);
+        c.setLastName("WilliamsNew");
+        c.setAddress("400 Fourth Street");
+        
+        gm.addPrimaryKey("CUSTOMER.ID");
+        
+        DataObject root1 = gm.merge(root, ((DataObject)c).getRootObject());       
+        das.applyChanges(root1);
+    }    
 }

Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java?rev=582728&r1=582727&r2=582728&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 Sun Oct  7 23:52:15 2007
@@ -88,14 +88,22 @@
         String stateName = firstState.getString("NAME");
 
         List cityNames = new ArrayList();
+        DataObject[] citiesToDelete = new DataObject[firstState.getList("cities").size()];
         Iterator i = firstState.getList("cities").iterator();
+        int ii=0;
+        //if we perform delete() in while, the 2nd city of the state is not deleted.
         while (i.hasNext()) {
             DataObject firstCity = (DataObject) i.next();
             cityNames.add(firstCity.getString("NAME"));
-            firstCity.delete();
+            citiesToDelete[ii] = firstCity;
+            ii++;
         }
+        
+        for(int j=0; j<citiesToDelete.length; j++) {
+        	citiesToDelete[j].delete();
+        }
+        
         firstState.delete();
-
         das.applyChanges(root);
 
         root = select.executeQuery();



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org