Author: aadamchik
Date: Tue Oct 10 11:00:47 2006
New Revision: 454855

URL: http://svn.apache.org/viewvc?view=rev&rev=454855
Log:
CAY-682 - cleaning insert pipeline from DataObject references

Modified:
    
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java
    
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java
    
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java

Modified: 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java?view=diff&rev=454855&r1=454854&r2=454855
==============================================================================
--- 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java
 (original)
+++ 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java
 Tue Oct 10 11:00:47 2006
@@ -543,16 +543,19 @@
      * 
      * @since 1.1
      */
-    public DataRow currentSnapshot(DataObject object) {
-        ObjEntity entity = getEntityResolver().lookupObjEntity(object);
-
+    public DataRow currentSnapshot(Persistent object) {
+      
         // for a HOLLOW object return snapshot from cache
         if (object.getPersistenceState() == PersistenceState.HOLLOW
                 && object.getObjectContext() != null) {
 
             return getObjectStore().getSnapshot(object.getObjectId());
         }
-
+        
+        // TODO: andrus, 10/10/2006 - use descriptor visitor instead of entity 
attribute iterator
+        
+        ObjEntity entity = getEntityResolver().lookupObjEntity(object);
+        ClassDescriptor descriptor = 
getEntityResolver().getClassDescriptor(entity.getName());
         DataRow snapshot = new DataRow(10);
 
         Iterator attributes = entity.getAttributeMap().entrySet().iterator();
@@ -562,8 +565,9 @@
             ObjAttribute objAttr = (ObjAttribute) entry.getValue();
 
             // processing compound attributes correctly
-            snapshot.put(objAttr.getDbAttributePath(), object
-                    .readPropertyDirectly(attrName));
+            snapshot.put(objAttr.getDbAttributePath(), descriptor
+                    .getProperty(attrName)
+                    .readPropertyDirectly(object));
         }
 
         Iterator relationships = 
entity.getRelationshipMap().entrySet().iterator();
@@ -576,7 +580,9 @@
                 continue;
             }
 
-            Object targetObject = object.readPropertyDirectly(rel.getName());
+            Object targetObject = descriptor
+                    .getProperty(rel.getName())
+                    .readPropertyDirectly(object);
             if (targetObject == null) {
                 continue;
             }

Modified: 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java?view=diff&rev=454855&r1=454854&r2=454855
==============================================================================
--- 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java
 (original)
+++ 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java
 Tue Oct 10 11:00:47 2006
@@ -26,8 +26,8 @@
 import java.util.Map;
 
 import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.DataObject;
 import org.apache.cayenne.ObjectId;
+import org.apache.cayenne.Persistent;
 import org.apache.cayenne.dba.PkGenerator;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -36,6 +36,7 @@
 import org.apache.cayenne.map.EntitySorter;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.property.ClassDescriptor;
 import org.apache.cayenne.query.InsertBatchQuery;
 
 /**
@@ -88,7 +89,7 @@
                 }
 
                 for (Iterator k = objects.iterator(); k.hasNext();) {
-                    DataObject o = (DataObject) k.next();
+                    Persistent o = (Persistent) k.next();
 
                     Map snapshot = diffBuilder.buildDBDiff(parent.objectDiff(o
                             .getObjectId()));
@@ -116,11 +117,12 @@
         }
 
         PkGenerator pkGenerator = node.getAdapter().getPkGenerator();
+        ClassDescriptor descriptor = null;
 
         Iterator i = dataObjects.iterator();
         while (i.hasNext()) {
 
-            DataObject object = (DataObject) i.next();
+            Persistent object = (Persistent) i.next();
             ObjectId id = object.getObjectId();
             if (id == null || !id.isTemporary()) {
                 continue;
@@ -142,7 +144,17 @@
                 // handle meaningful PK
                 ObjAttribute objAttr = 
objEntity.getAttributeForDbAttribute(dbAttr);
                 if (objAttr != null) {
-                    idMap.put(dbAttrName, 
object.readPropertyDirectly(objAttr.getName()));
+
+                    if (descriptor == null) {
+                        descriptor = parent
+                                .getDomain()
+                                .getEntityResolver()
+                                .getClassDescriptor(objEntity.getName());
+                    }
+
+                    idMap.put(dbAttrName, descriptor
+                            .getProperty(objAttr.getName())
+                            .readPropertyDirectly(object));
                     continue;
                 }
 

Modified: 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java?view=diff&rev=454855&r1=454854&r2=454855
==============================================================================
--- 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java
 (original)
+++ 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java
 Tue Oct 10 11:00:47 2006
@@ -31,6 +31,7 @@
 import org.apache.cayenne.DataObject;
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectId;
+import org.apache.cayenne.Persistent;
 import org.apache.cayenne.graph.CompoundDiff;
 import org.apache.cayenne.graph.NodeIdChangeOperation;
 import org.apache.cayenne.map.DbEntity;
@@ -160,12 +161,15 @@
 
                 Iterator objects = ((Collection) it.next()).iterator();
                 while (objects.hasNext()) {
-                    DataObject object = (DataObject) objects.next();
+                    Persistent object = (Persistent) objects.next();
                     ObjectId id = object.getObjectId();
-
                     DataRow dataRow = 
parent.getContext().currentSnapshot(object);
-                    dataRow.setReplacesVersion(object.getSnapshotVersion());
-                    object.setSnapshotVersion(dataRow.getVersion());
+
+                    if (object instanceof DataObject) {
+                        DataObject dataObject = (DataObject) object;
+                        
dataRow.setReplacesVersion(dataObject.getSnapshotVersion());
+                        dataObject.setSnapshotVersion(dataRow.getVersion());
+                    }
 
                     // record id change
                     if (id.isReplacementIdAttached()) {


Reply via email to