You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/11/26 05:53:57 UTC

svn commit: r479274 - in /incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access: ObjectResolver.java ObjectTreeResolver.java PrefetchProcessorJointNode.java PrefetchProcessorNode.java

Author: aadamchik
Date: Sat Nov 25 20:53:57 2006
New Revision: 479274

URL: http://svn.apache.org/viewvc?view=rev&rev=479274
Log:
CAY-686: Weed out DataObject references from the access stack classes, replacing them with Persistent and ClassDescriptor
(removing DataObject references from the prefetch classes)

Modified:
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectResolver.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectResolver.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectResolver.java?view=diff&rev=479274&r1=479273&r2=479274
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectResolver.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectResolver.java Sat Nov 25 20:53:57 2006
@@ -141,8 +141,15 @@
             return new ArrayList(1);
         }
 
-        ObjEntity sourceObjEntity = (ObjEntity) node.getIncoming().getSourceEntity();
-        String relatedIdPrefix = node.getIncoming().getReverseDbRelationshipPath() + ".";
+        ObjEntity sourceObjEntity = (ObjEntity) node
+                .getIncoming()
+                .getRelationship()
+                .getSourceEntity();
+        String relatedIdPrefix = node
+                .getIncoming()
+                .getRelationship()
+                .getReverseDbRelationshipPath()
+                + ".";
 
         List results = new ArrayList(rows.size());
         Iterator it = rows.iterator();
@@ -150,7 +157,7 @@
         while (it.hasNext()) {
 
             DataRow row = (DataRow) it.next();
-            DataObject object = (DataObject) objectFromDataRow(row);
+            Persistent object = objectFromDataRow(row);
             results.add(object);
 
             // link with parent
@@ -158,7 +165,7 @@
             // The algorithm below of building an ID doesn't take inheritance into
             // account, so there maybe a miss...
             ObjectId id = createObjectId(row, sourceObjEntity, relatedIdPrefix);
-            DataObject parentObject = (DataObject) context.getObjectStore().getNode(id);
+            Persistent parentObject = (Persistent) context.getObjectStore().getNode(id);
 
             // don't attach to hollow objects
             if (parentObject != null

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java?view=diff&rev=479274&r1=479273&r2=479274
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java Sat Nov 25 20:53:57 2006
@@ -26,12 +26,11 @@
 import java.util.Map;
 
 import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.DataObject;
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.PersistenceState;
+import org.apache.cayenne.Persistent;
 import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.query.PrefetchProcessor;
 import org.apache.cayenne.query.PrefetchTreeNode;
 import org.apache.cayenne.query.QueryMetadata;
@@ -221,7 +220,7 @@
             node.setDataRows(rows);
             node.setResolver(new ObjectResolver(context, descriptor, queryMetadata
                     .isRefreshingObjects(), queryMetadata.isResolvingInherited()));
-            node.setIncoming(arc != null ? arc.getRelationship() : null);
+            node.setIncoming(arc);
 
             if (currentNode != null) {
                 currentNode.addChild(node);
@@ -283,7 +282,7 @@
             }
             // disjoint prefetch on flattened relationships still requires manual matching
             else if (processorNode.getIncoming() != null
-                    && processorNode.getIncoming().isFlattened()) {
+                    && processorNode.getIncoming().getRelationship().isFlattened()) {
 
                 objects = processorNode.getResolver().relatedObjectsFromDataRows(
                         processorNode.getDataRows(),
@@ -305,36 +304,38 @@
             // create temporary relationship mapping if needed..; flattened relationships
             // are matched with parents during resolving phase, so skip them here.
             if (processorNode.isPartitionedByParent()
-                    && !processorNode.getIncoming().isFlattened()) {
+                    && !processorNode.getIncoming().getRelationship().isFlattened()) {
 
                 ObjEntity sourceObjEntity = null;
                 String relatedIdPrefix = null;
 
                 // determine resolution strategy
-                ObjRelationship reverseRelationship = processorNode
+                ArcProperty reverseArc = processorNode
                         .getIncoming()
-                        .getReverseRelationship();
+                        .getComplimentaryReverseArc();
 
                 // if null, prepare for manual matching
-                if (reverseRelationship == null) {
+                if (reverseArc == null) {
                     relatedIdPrefix = processorNode
                             .getIncoming()
+                            .getRelationship()
                             .getReverseDbRelationshipPath()
                             + ".";
 
                     sourceObjEntity = (ObjEntity) processorNode
                             .getIncoming()
+                            .getRelationship()
                             .getSourceEntity();
                 }
 
                 Iterator it = objects.iterator();
                 while (it.hasNext()) {
-                    DataObject destinationObject = (DataObject) it.next();
-                    DataObject sourceObject = null;
+                    Persistent destinationObject = (Persistent) it.next();
+                    Persistent sourceObject = null;
 
-                    if (reverseRelationship != null) {
-                        sourceObject = (DataObject) destinationObject
-                                .readProperty(reverseRelationship.getName());
+                    if (reverseArc != null) {
+                        sourceObject = (Persistent) reverseArc
+                                .readProperty(destinationObject);
                     }
                     else {
                         ObjectStore objectStore = context.getObjectStore();
@@ -350,7 +351,7 @@
                                 sourceObjEntity,
                                 relatedIdPrefix);
 
-                        sourceObject = (DataObject) objectStore.getNode(id);
+                        sourceObject = (Persistent) objectStore.getNode(id);
                     }
 
                     // don't attach to hollow objects
@@ -406,7 +407,7 @@
         public boolean startJointPrefetch(PrefetchTreeNode node) {
             PrefetchProcessorJointNode processorNode = (PrefetchProcessorJointNode) node;
 
-            DataObject object = null;
+            Persistent object = null;
 
             // find existing object, if found skip further processing
             Map id = processorNode.idFromFlatRow(currentFlatRow);
@@ -415,7 +416,7 @@
             if (object == null) {
 
                 DataRow row = processorNode.rowFromFlatRow(currentFlatRow);
-                object = (DataObject) processorNode.getResolver().objectFromDataRow(row);
+                object = processorNode.getResolver().objectFromDataRow(row);
 
                 processorNode.putResolved(id, object);
                 processorNode.addObject(object, row);

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java?view=diff&rev=479274&r1=479273&r2=479274
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java Sat Nov 25 20:53:57 2006
@@ -28,7 +28,6 @@
 import java.util.TreeMap;
 
 import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.DataObject;
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.access.jdbc.ColumnDescriptor;
@@ -77,7 +76,7 @@
         buildRowMapping();
         buildPKIndex();
     }
-    
+
     List getResolvedRows() {
         return resolvedRows;
     }
@@ -109,15 +108,15 @@
      * Looks up a previously resolved object using an ObjectId map as a key. Returns null
      * if no matching object exists.
      */
-    DataObject getResolved(Map id) {
-        return (DataObject) resolved.get(id);
+    Persistent getResolved(Map id) {
+        return (Persistent) resolved.get(id);
     }
 
     /**
      * Registers an object in a map of resolved objects, connects this object to parent if
      * parent exists.
      */
-    void putResolved(Map id, DataObject object) {
+    void putResolved(Map id, Persistent object) {
         resolved.put(id, object);
     }
 
@@ -171,9 +170,12 @@
         if (getParent() != null
                 && !getParent().isPhantom()
                 && getIncoming() != null
-                && !getIncoming().isFlattened()) {
+                && !getIncoming().getRelationship().isFlattened()) {
 
-            DbRelationship r = (DbRelationship) getIncoming().getDbRelationships().get(0);
+            DbRelationship r = (DbRelationship) getIncoming()
+                    .getRelationship()
+                    .getDbRelationships()
+                    .get(0);
             Iterator it = r.getJoins().iterator();
             while (it.hasNext()) {
                 DbJoin join = (DbJoin) it.next();

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java?view=diff&rev=479274&r1=479273&r2=479274
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java Sat Nov 25 20:53:57 2006
@@ -26,11 +26,12 @@
 import java.util.Map;
 
 import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.DataObject;
 import org.apache.cayenne.Fault;
+import org.apache.cayenne.Persistent;
 import org.apache.cayenne.ValueHolder;
-import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.query.PrefetchTreeNode;
+import org.apache.cayenne.reflect.ArcProperty;
+import org.apache.cayenne.reflect.ToOneProperty;
 
 /**
  * A specialized PrefetchTreeNode used for disjoint prefetch resolving.
@@ -48,14 +49,14 @@
     List dataRows;
     List objects;
 
-    ObjRelationship incoming;
+    ArcProperty incoming;
     ObjectResolver resolver;
 
     Map partitionByParent;
     boolean jointChildren;
     boolean partitionedByParent;
 
-    DataObject lastResolved;
+    Persistent lastResolved;
 
     PrefetchProcessorNode(PrefetchTreeNode parent, String segmentPath) {
         super(parent, segmentPath);
@@ -69,7 +70,7 @@
 
         partitionedByParent = !phantom
                 && incoming != null
-                && incoming.isSourceIndependentFromTargetChange();
+                && incoming.getRelationship().isSourceIndependentFromTargetChange();
 
         if (partitionedByParent) {
             partitionByParent = new HashMap();
@@ -81,13 +82,13 @@
      * relationship is set using the information created here, by calling
      * 'connectToParents'.
      */
-    void linkToParent(DataObject object, DataObject parent) {
+    void linkToParent(Persistent object, Persistent parent) {
         if (parent != null) {
 
             // if a relationship is to-one (i.e. flattened to-one), can connect right
             // away....
-            if (!incoming.isToMany()) {
-                parent.writeProperty(getName(), object);
+            if (incoming instanceof ToOneProperty) {
+                incoming.writeProperty(parent, null, object);
             }
             else {
 
@@ -122,7 +123,7 @@
             PrefetchProcessorNode parent = (PrefetchProcessorNode) getParent();
             boolean parentObjectsExist = parent.getObjects() != null
                     && parent.getObjects().size() > 0;
-            if (incoming.isToMany()) {
+            if (incoming.getRelationship().isToMany()) {
                 if (parentObjectsExist) {
                     connectToNodeParents(parent.getObjects());
                 }
@@ -143,9 +144,9 @@
     private final void clearNullRelationships(List parentObjects) {
         Iterator it = parentObjects.iterator();
         while (it.hasNext()) {
-            DataObject object = (DataObject) it.next();
-            if (object.readPropertyDirectly(name) instanceof Fault) {
-                object.writeProperty(name, null);
+            Object object = it.next();
+            if (incoming.readPropertyDirectly(object) instanceof Fault) {
+                incoming.writeProperty(object, null, null);
             }
         }
     }
@@ -154,7 +155,7 @@
 
         Iterator it = parentObjects.iterator();
         while (it.hasNext()) {
-            DataObject object = (DataObject) it.next();
+            Persistent object = (Persistent) it.next();
             List related = (List) partitionByParent.get(object);
             connect(object, related);
         }
@@ -165,15 +166,15 @@
         while (it.hasNext()) {
             Map.Entry entry = (Map.Entry) it.next();
 
-            DataObject object = (DataObject) entry.getKey();
+            Persistent object = (Persistent) entry.getKey();
             List related = (List) entry.getValue();
             connect(object, related);
         }
     }
 
-    private final void connect(DataObject object, List related) {
-        if (incoming.isToMany()) {
-            ValueHolder toManyList = (ValueHolder) object.readProperty(getName());
+    private final void connect(Persistent object, List related) {
+        if (incoming.getRelationship().isToMany()) {
+            ValueHolder toManyList = (ValueHolder) incoming.readProperty(object);
 
             // TODO, Andrus 11/15/2005 - if list is modified, shouldn't we attempt to
             // merge the changes instead of overwriting?
@@ -202,11 +203,11 @@
         return resolver;
     }
 
-    ObjRelationship getIncoming() {
+    ArcProperty getIncoming() {
         return incoming;
     }
 
-    void setIncoming(ObjRelationship incoming) {
+    void setIncoming(ArcProperty incoming) {
         this.incoming = incoming;
     }
 
@@ -230,11 +231,11 @@
         return partitionedByParent;
     }
 
-    DataObject getLastResolved() {
+    Persistent getLastResolved() {
         return lastResolved;
     }
 
-    void setLastResolved(DataObject lastResolved) {
+    void setLastResolved(Persistent lastResolved) {
         this.lastResolved = lastResolved;
     }
 }