Author: aadamchik
Date: Sat Oct 14 14:47:02 2006
New Revision: 464037
URL: http://svn.apache.org/viewvc?view=rev&rev=464037
Log:
CAY-682: Generic Cayenne POJO enhancer
(removing direct Fault API access from ObjectStore)
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java?view=diff&rev=464037&r1=464036&r2=464037
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java
Sat Oct 14 14:47:02 2006
@@ -30,7 +30,6 @@
import org.apache.cayenne.DataObject;
import org.apache.cayenne.DataRow;
-import org.apache.cayenne.Fault;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.ObjectId;
import org.apache.cayenne.PersistenceState;
@@ -47,9 +46,12 @@
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.property.ClassDescriptor;
+import org.apache.cayenne.property.CollectionProperty;
+import org.apache.cayenne.property.Property;
+import org.apache.cayenne.property.PropertyVisitor;
+import org.apache.cayenne.property.SingleObjectArcProperty;
import org.apache.cayenne.query.ObjectIdQuery;
import org.apache.cayenne.query.PrefetchTreeNode;
import org.apache.cayenne.query.QueryMetadata;
@@ -805,11 +807,11 @@
void processIndirectlyModifiedIDs(Collection indirectlyModifiedIDs) {
Iterator indirectlyModifiedIt = indirectlyModifiedIDs.iterator();
while (indirectlyModifiedIt.hasNext()) {
- Object oid = indirectlyModifiedIt.next();
+ ObjectId oid = (ObjectId) indirectlyModifiedIt.next();
// access object map directly - the method should be called in a
synchronized
// context...
- DataObject object = (DataObject) objectMap.get(oid);
+ final DataObject object = (DataObject) objectMap.get(oid);
if (object == null
|| object.getPersistenceState() !=
PersistenceState.COMMITTED) {
@@ -823,19 +825,30 @@
DataContextDelegate delegate = context.nonNullDelegate();
if (delegate.shouldMergeChanges(object, null)) {
- ObjEntity entity =
context.getEntityResolver().lookupObjEntity(object);
- Iterator relationshipIterator =
entity.getRelationships().iterator();
- while (relationshipIterator.hasNext()) {
- ObjRelationship relationship = (ObjRelationship)
relationshipIterator
- .next();
-
- if (relationship.isSourceIndependentFromTargetChange()) {
- Object fault = relationship.isToMany()
- ? Fault.getToManyFault()
- : Fault.getToOneFault();
- object.writePropertyDirectly(relationship.getName(),
fault);
+
+ ClassDescriptor descriptor = context
+ .getEntityResolver()
+ .getClassDescriptor(oid.getEntityName());
+ descriptor.visitProperties(new PropertyVisitor() {
+
+ public boolean visitCollectionArc(CollectionProperty
property) {
+ property.invalidate(object);
+ return true;
}
- }
+
+ public boolean
visitSingleObjectArc(SingleObjectArcProperty property) {
+ if (property
+ .getRelationship()
+ .isSourceIndependentFromTargetChange()) {
+ property.invalidate(object);
+ }
+ return true;
+ }
+
+ public boolean visitProperty(Property property) {
+ return true;
+ }
+ });
delegate.finishedProcessDelete(object);
}
@@ -1110,7 +1123,7 @@
public ObjEntity getObjEntity() {
return null;
}
-
+
public ClassDescriptor getClassDescriptor() {
return null;
}