Author: aadamchik
Date: Sat Oct 14 14:41:29 2006
New Revision: 464035
URL: http://svn.apache.org/viewvc?view=rev&rev=464035
Log:
CAY-682: Generic Cayenne POJO enhancer
(adding fault invalidation capabilities to the property descriptors)
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoSingleObjectArcProperty.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EntityDescriptor.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ArcProperty.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ListProperty.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/PersistentObjectProperty.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ValueHolderProperty.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=464035&r1=464034&r2=464035
==============================================================================
---
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:41:29 2006
@@ -816,7 +816,7 @@
continue;
}
- // for now "break" all "independent" object relationships...
+ // for now break all "independent" object relationships...
// in the future we may want to be more precise and go after
modified
// relationships only, or even process updated lists without
invalidating...
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoSingleObjectArcProperty.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoSingleObjectArcProperty.java?view=diff&rev=464035&r1=464034&r2=464035
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoSingleObjectArcProperty.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoSingleObjectArcProperty.java
Sat Oct 14 14:41:29 2006
@@ -28,23 +28,23 @@
/**
* A property descriptor for the to-one relationship property of an enhanced
pojo. Assumes
- * a class in question has a field called "$cay_fault_propertyName" that
stores a boolean
- * flag indicating whether the property in question is not yet resolved.
+ * a class in question has a field called "$cay_faultResolved_propertyName"
that stores a
+ * boolean flag indicating whether the property in question is not yet
resolved.
*
* @since 3.0
* @author Andrus Adamchik
*/
class EnhancedPojoSingleObjectArcProperty extends
AbstractSingleObjectArcProperty {
- public static final String FAULT_FIELD_PREFIX = "$cay_fault_";
+ public static final String FAULT_FIELD_PREFIX = "$cay_faultResolved_";
- protected PropertyAccessor faultFlagAccessor;
+ protected PropertyAccessor faultResolvedFlagAccessor;
public EnhancedPojoSingleObjectArcProperty(ClassDescriptor owner,
ClassDescriptor targetDescriptor, PropertyAccessor accessor,
String reverseName) {
super(owner, targetDescriptor, accessor, reverseName);
- this.faultFlagAccessor = makeFaultFlagAccessor();
+ this.faultResolvedFlagAccessor = makeFaultFlagAccessor();
}
PropertyAccessor makeFaultFlagAccessor() {
@@ -55,7 +55,15 @@
}
public boolean isFault(Object source) {
- return ((Boolean)
faultFlagAccessor.readPropertyDirectly(source)).booleanValue();
+ return !((Boolean)
faultResolvedFlagAccessor.readPropertyDirectly(source))
+ .booleanValue();
+ }
+
+ public void invalidate(Object object) {
+ faultResolvedFlagAccessor.writePropertyDirectly(
+ object,
+ Boolean.TRUE,
+ Boolean.FALSE);
}
protected void resolveFault(Object object) {
@@ -64,7 +72,10 @@
(Persistent) object,
getName());
writePropertyDirectly(object, null, target);
- faultFlagAccessor.writePropertyDirectly(object, Boolean.TRUE,
Boolean.FALSE);
+ faultResolvedFlagAccessor.writePropertyDirectly(
+ object,
+ Boolean.FALSE,
+ Boolean.TRUE);
}
}
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EntityDescriptor.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EntityDescriptor.java?view=diff&rev=464035&r1=464034&r2=464035
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EntityDescriptor.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EntityDescriptor.java
Sat Oct 14 14:41:29 2006
@@ -204,6 +204,9 @@
public boolean isFault(Object target) {
return false;
}
+
+ public void invalidate(Object object) {
+ }
};
}
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ArcProperty.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ArcProperty.java?view=diff&rev=464035&r1=464034&r2=464035
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ArcProperty.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ArcProperty.java
Sat Oct 14 14:41:29 2006
@@ -57,4 +57,11 @@
* @param source an object that is a source object of the relationship.
*/
boolean isFault(Object source);
+
+ /**
+ * Turns a property of an object into a fault.
+ *
+ * @since 3.0
+ */
+ void invalidate(Object object);
}
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ListProperty.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ListProperty.java?view=diff&rev=464035&r1=464034&r2=464035
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ListProperty.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ListProperty.java
Sat Oct 14 14:41:29 2006
@@ -59,4 +59,8 @@
|| target instanceof Fault
|| ((ValueHolder) target).isFault();
}
+
+ public void invalidate(Object object) {
+ writePropertyDirectly(object, null, Fault.getToManyFault());
+ }
}
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/PersistentObjectProperty.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/PersistentObjectProperty.java?view=diff&rev=464035&r1=464034&r2=464035
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/PersistentObjectProperty.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/PersistentObjectProperty.java
Sat Oct 14 14:41:29 2006
@@ -40,6 +40,14 @@
Object target = accessor.readPropertyDirectly(object);
return target instanceof Fault;
}
+
+ public void invalidate(Object object) {
+ Object target = accessor.readPropertyDirectly(object);
+
+ if(!(target instanceof Fault)) {
+ accessor.writePropertyDirectly(object, target,
Fault.getToOneFault());
+ }
+ }
public Object readProperty(Object object) throws PropertyAccessException {
Object value = super.readProperty(object);
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ValueHolderProperty.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ValueHolderProperty.java?view=diff&rev=464035&r1=464034&r2=464035
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ValueHolderProperty.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ValueHolderProperty.java
Sat Oct 14 14:41:29 2006
@@ -46,6 +46,13 @@
return holder == null || holder.isFault();
}
+ public void invalidate(Object object) {
+ ValueHolder holder = (ValueHolder)
accessor.readPropertyDirectly(object);
+ if (holder != null && !holder.isFault()) {
+ holder.invalidate();
+ }
+ }
+
public Object readPropertyDirectly(Object object) throws
PropertyAccessException {
ValueHolder holder = (ValueHolder)
accessor.readPropertyDirectly(object);