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;
}
}