Author: aadamchik
Date: Wed Oct 11 18:17:34 2006
New Revision: 463095
URL: http://svn.apache.org/viewvc?view=rev&rev=463095
Log:
CAY-686 Weed out DataObject references from the access stack classes,
replacing them with Persistent and ClassDescriptor
* added getEntity method to ClassDescriptor to avoid double lookup when both
descriptor and entity are needed
* cleaned up DataContextDeleteAction DataObject references (except for some
delete rules)
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/DataContextDeleteAction.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ClassDescriptor.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/map/EntityDescriptorTst.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/BaseClassDescriptorTst.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockBaseClassDescriptor.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockClassDescriptor.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=463095&r1=463094&r2=463095
==============================================================================
---
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
Wed Oct 11 18:17:34 2006
@@ -612,7 +612,7 @@
// target is resolved and we have an FK->PK to it,
// so extract it from target...
- DataObject target = (DataObject) targetObject;
+ Persistent target = (Persistent) targetObject;
Map idParts = target.getObjectId().getIdSnapshot();
// this may happen in uncommitted objects - see the warning in the
JavaDoc of
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java?view=diff&rev=463095&r1=463094&r2=463095
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java
Wed Oct 11 18:17:34 2006
@@ -30,8 +30,8 @@
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
import org.apache.cayenne.map.DeleteRule;
-import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.property.ClassDescriptor;
/**
* Helper class that implements DataObject deletion strategy.
@@ -62,23 +62,12 @@
return false;
}
- // TODO: Andrus, 1/14/2006 - temp hack
- if (!(object instanceof DataObject)) {
- throw new IllegalArgumentException(
- this
- + ": this implementation of ObjectContext only
supports full DataObjects. Object "
- + object
- + " is not supported.");
- }
-
- DataObject dataObject = (DataObject) object;
-
- if (dataObject.getObjectContext() == null) {
+ if (object.getObjectContext() == null) {
throw new CayenneRuntimeException(
"Attempt to delete unregistered non-TRANSIENT object: " +
object);
}
- if (dataObject.getObjectContext() != dataContext) {
+ if (object.getObjectContext() != dataContext) {
throw new CayenneRuntimeException(
"Attempt to delete object regsitered in a different
DataContext. Object: "
+ object
@@ -89,19 +78,19 @@
// must resolve HOLLOW objects before delete... needed
// to process relationships and optimistic locking...
- dataContext.prepareForAccess(dataObject, null);
+ dataContext.prepareForAccess(object, null);
if (oldState == PersistenceState.NEW) {
- deleteNew(dataObject, oldState);
+ deleteNew(object, oldState);
}
else {
- deletePersistent(dataObject, oldState);
+ deletePersistent(object, oldState);
}
return true;
}
- private void deletePersistent(DataObject object, int oldState)
+ private void deletePersistent(Persistent object, int oldState)
throws DeleteDenyException {
object.setPersistenceState(PersistenceState.DELETED);
@@ -109,7 +98,7 @@
processDeleteRules(object, oldState);
}
- private void deleteNew(DataObject object, int oldState) throws
DeleteDenyException {
+ private void deleteNew(Persistent object, int oldState) throws
DeleteDenyException {
object.setPersistenceState(PersistenceState.TRANSIENT);
processDeleteRules(object, oldState);
@@ -120,10 +109,13 @@
object.setObjectContext(null);
}
- private void processDeleteRules(DataObject object, int oldState)
+ private void processDeleteRules(Persistent object, int oldState)
throws DeleteDenyException {
- ObjEntity entity =
dataContext.getEntityResolver().lookupObjEntity(object);
- Iterator it = entity.getRelationships().iterator();
+
+ ClassDescriptor descriptor =
dataContext.getEntityResolver().getClassDescriptor(
+ object.getObjectId().getEntityName());
+
+ Iterator it = descriptor.getEntity().getRelationships().iterator();
while (it.hasNext()) {
ObjRelationship relationship = (ObjRelationship) it.next();
@@ -136,10 +128,13 @@
}
List relatedObjects = Collections.EMPTY_LIST;
- if (relationship.isToMany()) {
- List toMany = (List)
object.readNestedProperty(relationship.getName());
+ Object related =
descriptor.getProperty(relationship.getName()).readProperty(
+ object);
+ if (relationship.isToMany()) {
+
+ List toMany = (List) related;
if (toMany.size() > 0) {
// Get a copy of the list so that deleting objects doesn't
// result in concurrent modification exceptions
@@ -147,10 +142,8 @@
}
}
else {
- Object relatedObject =
object.readNestedProperty(relationship.getName());
-
- if (relatedObject != null) {
- relatedObjects = Collections.singletonList(relatedObject);
+ if (related != null) {
+ relatedObjects = Collections.singletonList(related);
}
}
@@ -176,11 +169,9 @@
ObjectStore objectStore = dataContext.getObjectStore();
Iterator iterator = relatedObjects.iterator();
while (iterator.hasNext()) {
- DataObject relatedObject = (DataObject) iterator.next();
- objectStore.arcDeleted(
- object.getObjectId(),
- relatedObject.getObjectId(),
- relationship.getName());
+ Persistent relatedObject = (Persistent) iterator.next();
+ objectStore.arcDeleted(object.getObjectId(), relatedObject
+ .getObjectId(), relationship.getName());
}
}
@@ -202,7 +193,7 @@
while (iterator.hasNext()) {
DataObject relatedObject = (DataObject)
iterator.next();
relatedObject.removeToManyTarget(inverseRelationship
- .getName(), object, true);
+ .getName(), (DataObject) object, true);
}
}
else {
@@ -223,7 +214,7 @@
// Delete all related objects
Iterator iterator = relatedObjects.iterator();
while (iterator.hasNext()) {
- DataObject relatedObject = (DataObject)
iterator.next();
+ Persistent relatedObject = (Persistent)
iterator.next();
new DataContextDeleteAction(this.dataContext)
.performDelete(relatedObject);
}
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ClassDescriptor.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ClassDescriptor.java?view=diff&rev=463095&r1=463094&r2=463095
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ClassDescriptor.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ClassDescriptor.java
Wed Oct 11 18:17:34 2006
@@ -21,6 +21,8 @@
import java.util.Iterator;
+import org.apache.cayenne.map.ObjEntity;
+
/**
* A runtime descriptor of an persistent class.
*
@@ -28,6 +30,13 @@
* @author Andrus Adamchik
*/
public interface ClassDescriptor {
+
+ /**
+ * Returns an ObjEntity associated with this descriptor.
+ *
+ * @since 3.0
+ */
+ ObjEntity getEntity();
/**
* Returns a class mapped by this descriptor.
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/map/EntityDescriptorTst.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/map/EntityDescriptorTst.java?view=diff&rev=463095&r1=463094&r2=463095
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/map/EntityDescriptorTst.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/map/EntityDescriptorTst.java
Wed Oct 11 18:17:34 2006
@@ -36,6 +36,9 @@
assertNull(d1.getSuperclassDescriptor());
BaseClassDescriptor mockSuper = new BaseClassDescriptor(null) {
+ public ObjEntity getEntity() {
+ return null;
+ }
};
EntityDescriptor d2 = new EntityDescriptor(e1, mockSuper);
assertSame(mockSuper, d2.getSuperclassDescriptor());
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/BaseClassDescriptorTst.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/BaseClassDescriptorTst.java?view=diff&rev=463095&r1=463094&r2=463095
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/BaseClassDescriptorTst.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/BaseClassDescriptorTst.java
Wed Oct 11 18:17:34 2006
@@ -21,16 +21,23 @@
import junit.framework.TestCase;
+import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.unit.util.TestBean;
public class BaseClassDescriptorTst extends TestCase {
public void testConstructor() {
BaseClassDescriptor d1 = new BaseClassDescriptor(null) {
+ public ObjEntity getEntity() {
+ return null;
+ }
};
assertNull(d1.getSuperclassDescriptor());
BaseClassDescriptor d2 = new BaseClassDescriptor(d1) {
+ public ObjEntity getEntity() {
+ return null;
+ }
};
assertNull(d1.getSuperclassDescriptor());
assertSame(d1, d2.getSuperclassDescriptor());
@@ -38,6 +45,9 @@
public void testValid() { // by default BaseClassDescriptor is not
compiled...
BaseClassDescriptor d1 = new BaseClassDescriptor(null) {
+ public ObjEntity getEntity() {
+ return null;
+ }
};
// by default BaseClassDescriptor is not compiled...
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockBaseClassDescriptor.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockBaseClassDescriptor.java?view=diff&rev=463095&r1=463094&r2=463095
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockBaseClassDescriptor.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockBaseClassDescriptor.java
Wed Oct 11 18:17:34 2006
@@ -21,6 +21,8 @@
import java.util.HashMap;
+import org.apache.cayenne.map.ObjEntity;
+
public class MockBaseClassDescriptor extends BaseClassDescriptor {
public MockBaseClassDescriptor() {
@@ -33,4 +35,7 @@
this.declaredProperties = new HashMap();
}
+ public ObjEntity getEntity() {
+ return null;
+ }
}
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockClassDescriptor.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockClassDescriptor.java?view=diff&rev=463095&r1=463094&r2=463095
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockClassDescriptor.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/property/MockClassDescriptor.java
Wed Oct 11 18:17:34 2006
@@ -21,9 +21,15 @@
import java.util.Iterator;
+import org.apache.cayenne.map.ObjEntity;
+
public class MockClassDescriptor implements ClassDescriptor {
public Object createObject() {
+ return null;
+ }
+
+ public ObjEntity getEntity() {
return null;
}