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/10/08 04:20:40 UTC
svn commit: r454066 -
/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/AshwoodEntitySorter.java
Author: aadamchik
Date: Sat Oct 7 19:20:40 2006
New Revision: 454066
URL: http://svn.apache.org/viewvc?view=rev&rev=454066
Log:
CAY-680 - switching to ObjectContext
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/AshwoodEntitySorter.java
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/AshwoodEntitySorter.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/AshwoodEntitySorter.java?view=diff&rev=454066&r1=454065&r2=454066
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/AshwoodEntitySorter.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/AshwoodEntitySorter.java Sat Oct 7 19:20:40 2006
@@ -29,11 +29,13 @@
import java.util.Map;
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.DataObject;
+import org.apache.cayenne.DataObjectUtils;
import org.apache.cayenne.DataRow;
+import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.ObjectId;
-import org.apache.cayenne.PersistenceState;
-import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.Persistent;
+import org.apache.cayenne.property.ClassDescriptor;
+import org.apache.cayenne.query.ObjectIdQuery;
import org.apache.commons.collections.comparators.ReverseComparator;
import org.objectstyle.ashwood.dbutil.DbUtils;
import org.objectstyle.ashwood.dbutil.ForeignKey;
@@ -161,6 +163,15 @@
}
int size = objects.size();
+ if (size == 0) {
+ return;
+ }
+
+ EntityResolver resolver = ((Persistent) objects.get(0))
+ .getObjectContext()
+ .getEntityResolver();
+ ClassDescriptor descriptor = resolver.getClassDescriptor(objEntity.getName());
+
List reflexiveRels = (List) reflexiveDbEntities.get(dbEntity);
String[] reflexiveRelNames = new String[reflexiveRels.size()];
for (int i = 0; i < reflexiveRelNames.length; i++) {
@@ -175,7 +186,7 @@
Digraph objectDependencyGraph = new MapDigraph(MapDigraph.HASHMAP_FACTORY);
Object[] masters = new Object[reflexiveRelNames.length];
for (int i = 0; i < size; i++) {
- DataObject current = (DataObject) objects.get(i);
+ Persistent current = (Persistent) objects.get(i);
objectDependencyGraph.addVertex(current);
int actualMasterCount = 0;
for (int k = 0; k < reflexiveRelNames.length; k++) {
@@ -185,8 +196,8 @@
continue;
}
- masters[k] = (reflexiveRelName != null) ? current
- .readProperty(reflexiveRelName) : null;
+ masters[k] = (reflexiveRelName != null) ? descriptor.getProperty(
+ reflexiveRelName).readProperty(current) : null;
if (masters[k] == null) {
masters[k] = findReflexiveMaster(current, (ObjRelationship) objEntity
@@ -207,7 +218,7 @@
continue;
}
- DataObject masterCandidate = (DataObject) objects.get(j);
+ Object masterCandidate = objects.get(j);
for (int k = 0; k < masters.length; k++) {
if (masterCandidate.equals(masters[k])) {
objectDependencyGraph.putArc(
@@ -224,7 +235,7 @@
objectDependencyGraph);
while (sorter.hasNext()) {
- DataObject o = (DataObject) sorter.next();
+ Object o = sorter.next();
if (o == null)
throw new CayenneRuntimeException("Sorting objects for "
+ objEntity.getClassName()
@@ -283,27 +294,23 @@
}
}
- protected DataObject findReflexiveMaster(
- DataObject object,
+ protected Object findReflexiveMaster(
+ Persistent object,
ObjRelationship toOneRel,
String targetEntityName) {
DbRelationship finalRel = (DbRelationship) toOneRel.getDbRelationships().get(0);
- DataRow snapshot = null;
- DataContext context = object.getDataContext();
+ ObjectContext context = object.getObjectContext();
- // IMPORTANT: don't try to get snapshots for new objects, this will result in
- // exception
- if (object.getPersistenceState() != PersistenceState.NEW) {
- snapshot = context.getObjectStore().getSnapshot(object.getObjectId());
- }
-
- if (snapshot == null) {
- snapshot = context.currentSnapshot(object);
- }
+ // find snapshot
+ ObjectIdQuery query = new ObjectIdQuery(
+ object.getObjectId(),
+ true,
+ ObjectIdQuery.CACHE);
+ DataRow snapshot = (DataRow) DataObjectUtils.objectForQuery(context, query);
ObjectId id = snapshot.createTargetObjectId(targetEntityName, finalRel);
- return (id != null) ? (DataObject) context.localObject(id, null) : null;
+ return (id != null) ? context.localObject(id, null) : null;
}
protected Comparator getDbEntityComparator(boolean dependantFirst) {