You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by mg...@apache.org on 2009/10/09 20:38:52 UTC
svn commit: r823656 - in /cayenne/main/trunk/framework:
cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/
cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/
cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/ cayenn...
Author: mgentry
Date: Fri Oct 9 18:38:51 2009
New Revision: 823656
URL: http://svn.apache.org/viewvc?rev=823656&view=rev
Log:
Updates for CAY-1288 (adding deleteObjects() to ObjectContext).
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DeleteObjectTest.java
cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/test/java/org/apache/cayenne/jpa/MockObjectContext.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java?rev=823656&r1=823655&r2=823656&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java Fri Oct 9 18:38:51 2009
@@ -316,6 +316,18 @@
new ObjectContextDeleteAction(this).performDelete((Persistent) object);
}
+ public void deleteObjects(Collection<?> objects) throws DeleteDenyException {
+ if (objects.isEmpty())
+ return;
+
+ // Don't call deleteObject() directly since it would be less efficient.
+ ObjectContextDeleteAction ocda = new ObjectContextDeleteAction(this);
+
+ // Make a copy to iterate over to avoid ConcurrentModificationException.
+ for (Persistent object : (ArrayList<Persistent>) new ArrayList(objects))
+ ocda.performDelete(object);
+ }
+
/**
* Creates and registers a new Persistent object instance.
*/
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java?rev=823656&r1=823655&r2=823656&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java Fri Oct 9 18:38:51 2009
@@ -102,6 +102,12 @@
void deleteObject(Object object) throws DeleteDenyException;
/**
+ * Deletes a collection of objects by repeatedly calling deleteObject safely
+ * (avoiding a concurrent modification exception).
+ */
+ void deleteObjects(Collection<?> objects) throws DeleteDenyException;
+
+ /**
* A callback method that child Persistent objects are expected to call before
* accessing property values. This callback allows ObjectContext to "inflate"
* unresolved objects on demand and also resolve properties that rely on lazy
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java?rev=823656&r1=823655&r2=823656&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java Fri Oct 9 18:38:51 2009
@@ -94,6 +94,9 @@
public void deleteObject(Object object) {
}
+ public void deleteObjects(Collection<?> objects) {
+ }
+
public void registerNewObject(Object object) {
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DeleteObjectTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DeleteObjectTest.java?rev=823656&r1=823655&r2=823656&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DeleteObjectTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DeleteObjectTest.java Fri Oct 9 18:38:51 2009
@@ -59,7 +59,7 @@
assertNull(artist.getObjectContext());
}
- public void testDeleteObjects() throws Exception {
+ public void testDeleteObjects1() throws Exception {
createTestData("testDeleteObjects");
List artists = context.performQuery(new SelectQuery(Artist.class));
@@ -80,6 +80,27 @@
}
}
+ // Similar to testDeleteObjects2, but extract ObjectContext instead of DataContext.
+ public void testDeleteObjects2() throws Exception {
+ createTestData("testDeleteObjects");
+
+ List<Artist> artists = context.performQuery(new SelectQuery(Artist.class));
+ assertEquals(2, artists.size());
+
+ for (Artist object : artists)
+ assertEquals(PersistenceState.COMMITTED, object.getPersistenceState());
+
+ artists.get(0).getObjectContext().deleteObjects(artists);
+
+ for (Artist object : artists)
+ assertEquals(PersistenceState.DELETED, object.getPersistenceState());
+
+ artists.get(0).getObjectContext().commitChanges();
+
+ for (Artist object : artists)
+ assertEquals(PersistenceState.TRANSIENT, object.getPersistenceState());
+ }
+
public void testDeleteObjectsRelationshipCollection() throws Exception {
createTestData("testDeleteObjectsRelationshipCollection");
Modified: cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/test/java/org/apache/cayenne/jpa/MockObjectContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/test/java/org/apache/cayenne/jpa/MockObjectContext.java?rev=823656&r1=823655&r2=823656&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/test/java/org/apache/cayenne/jpa/MockObjectContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/test/java/org/apache/cayenne/jpa/MockObjectContext.java Fri Oct 9 18:38:51 2009
@@ -42,6 +42,9 @@
public void deleteObject(Object object) throws DeleteDenyException {
}
+ public void deleteObjects(Collection<?> objects) {
+ }
+
public Collection<?> deletedObjects() {
return null;
}