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


Reply via email to