You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/10/15 01:55:12 UTC

svn commit: r464069 - in /incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src: main/java/org/apache/cayenne/map/ main/java/org/apache/cayenne/property/ test/java/org/apache/cayenne/access/

Author: aadamchik
Date: Sat Oct 14 16:55:11 2006
New Revision: 464069

URL: http://svn.apache.org/viewvc?view=rev&rev=464069
Log:
CAY-682: Generic Cayenne POJO enhancer
(fixing invalidation logic for collection properties)

Added:
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoCollectionProperty.java
Modified:
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoDescriptor.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/property/ListProperty.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ToManyListProperty.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTst.java

Added: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoCollectionProperty.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoCollectionProperty.java?view=auto&rev=464069
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoCollectionProperty.java (added)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoCollectionProperty.java Sat Oct 14 16:55:11 2006
@@ -0,0 +1,46 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.map;
+
+import org.apache.cayenne.property.ClassDescriptor;
+import org.apache.cayenne.property.ListProperty;
+import org.apache.cayenne.property.PropertyAccessor;
+
+/**
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+class EnhancedPojoCollectionProperty extends ListProperty {
+
+    private PropertyAccessor faultResolvedFlagAccessor;
+
+    public EnhancedPojoCollectionProperty(ClassDescriptor owner,
+            ClassDescriptor targetDescriptor, PropertyAccessor accessor,
+            String reverseName, PropertyAccessor faultResolvedFlagAccessor) {
+        super(owner, targetDescriptor, accessor, reverseName);
+        this.faultResolvedFlagAccessor = faultResolvedFlagAccessor;
+    }
+
+    public void invalidate(Object object) {
+        faultResolvedFlagAccessor.writePropertyDirectly(
+                object,
+                Boolean.TRUE,
+                Boolean.FALSE);
+    }
+}

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoDescriptor.java?view=diff&rev=464069&r1=464068&r2=464069
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoDescriptor.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/map/EnhancedPojoDescriptor.java Sat Oct 14 16:55:11 2006
@@ -23,7 +23,7 @@
 import java.util.Map;
 
 import org.apache.cayenne.property.ClassDescriptor;
-import org.apache.cayenne.property.ListProperty;
+import org.apache.cayenne.property.FieldAccessor;
 import org.apache.cayenne.property.Property;
 import org.apache.cayenne.property.PropertyAccessor;
 
@@ -35,6 +35,8 @@
  */
 class EnhancedPojoDescriptor extends EntityDescriptor {
 
+    static final String FAULT_FIELD_PREFIX = "$cay_faultResolved_";
+
     EnhancedPojoDescriptor(ObjEntity entity, ClassDescriptor superclassDescriptor) {
         super(entity, superclassDescriptor);
     }
@@ -50,13 +52,21 @@
                     .getTargetEntityName());
             String reverseName = relationship.getReverseRelationshipName();
 
+            PropertyAccessor faultFlagAccessor = makeFaultFlagAccessor(relationship
+                    .getName());
+
             Property property;
             if (relationship.isToMany()) {
                 // TODO: andrus, 10/13/2006 - unfinished...
                 PropertyAccessor accessor = makeAccessor(
                         relationship.getName(),
                         List.class);
-                property = new ListProperty(this, targetDescriptor, accessor, reverseName);
+                property = new EnhancedPojoCollectionProperty(
+                        this,
+                        targetDescriptor,
+                        accessor,
+                        reverseName,
+                        faultFlagAccessor);
             }
             else {
                 PropertyAccessor accessor = makeAccessor(
@@ -66,10 +76,18 @@
                         this,
                         targetDescriptor,
                         accessor,
-                        reverseName);
+                        reverseName,
+                        faultFlagAccessor);
             }
 
             allDescriptors.put(relationship.getName(), property);
         }
+    }
+
+    PropertyAccessor makeFaultFlagAccessor(String propertyName) {
+        return new FieldAccessor(
+                getObjectClass(),
+                FAULT_FIELD_PREFIX + propertyName,
+                Boolean.TYPE);
     }
 }

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=464069&r1=464068&r2=464069
==============================================================================
--- 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 16:55:11 2006
@@ -22,7 +22,6 @@
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.property.AbstractSingleObjectArcProperty;
 import org.apache.cayenne.property.ClassDescriptor;
-import org.apache.cayenne.property.FieldAccessor;
 import org.apache.cayenne.property.PropertyAccessException;
 import org.apache.cayenne.property.PropertyAccessor;
 
@@ -36,22 +35,13 @@
  */
 class EnhancedPojoSingleObjectArcProperty extends AbstractSingleObjectArcProperty {
 
-    public static final String FAULT_FIELD_PREFIX = "$cay_faultResolved_";
-
     protected PropertyAccessor faultResolvedFlagAccessor;
 
-    public EnhancedPojoSingleObjectArcProperty(ClassDescriptor owner,
+    EnhancedPojoSingleObjectArcProperty(ClassDescriptor owner,
             ClassDescriptor targetDescriptor, PropertyAccessor accessor,
-            String reverseName) {
+            String reverseName, PropertyAccessor faultResolvedFlagAccessor) {
         super(owner, targetDescriptor, accessor, reverseName);
-        this.faultResolvedFlagAccessor = makeFaultFlagAccessor();
-    }
-
-    PropertyAccessor makeFaultFlagAccessor() {
-        return new FieldAccessor(
-                owner.getObjectClass(),
-                FAULT_FIELD_PREFIX + getName(),
-                Boolean.TYPE);
+        this.faultResolvedFlagAccessor = faultResolvedFlagAccessor;
     }
 
     public boolean isFault(Object source) {

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=464069&r1=464068&r2=464069
==============================================================================
--- 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 16:55:11 2006
@@ -61,6 +61,9 @@
     }
 
     public void invalidate(Object object) {
-        writePropertyDirectly(object, null, Fault.getToManyFault());
+        ValueHolder list = (ValueHolder) readPropertyDirectly(object);
+        if(list != null) {
+            list.invalidate();
+        }
     }
 }

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ToManyListProperty.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ToManyListProperty.java?view=diff&rev=464069&r1=464068&r2=464069
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ToManyListProperty.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/property/ToManyListProperty.java Sat Oct 14 16:55:11 2006
@@ -51,4 +51,8 @@
                 (Persistent) object,
                 getName());
     }
+    
+    public void invalidate(Object object) {
+        writePropertyDirectly(object, null, Fault.getToManyFault());
+    }
 }

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTst.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTst.java?view=diff&rev=464069&r1=464068&r2=464069
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTst.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTst.java Sat Oct 14 16:55:11 2006
@@ -79,7 +79,8 @@
         Gallery g2 = (Gallery) galleries.get(0);
 
         // this relationship wasn't explicitly prefetched....
-        assertTrue(g2.readPropertyDirectly("exhibitArray") instanceof Fault);
+        Object list = g2.readPropertyDirectly("exhibitArray");
+        assertTrue(list instanceof Fault);
 
         // however the target objects must be resolved
         ArtistExhibit ae1 = (ArtistExhibit) context.getGraphManager().getNode(oid1);