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/05/04 05:12:33 UTC

svn commit: r399524 - in /incubator/cayenne/jpa/trunk/cayenne-jpa/src: main/java/org/apache/cayenne/jpa/bridge/ main/java/org/apache/cayenne/jpa/conf/ main/java/org/apache/cayenne/jpa/map/ test/java/org/apache/cayenne/jpa/conf/ test/java/org/apache/cay...

Author: aadamchik
Date: Wed May  3 20:12:29 2006
New Revision: 399524

URL: http://svn.apache.org/viewcvs?rev=399524&view=rev
Log:
refactoring - injecting class and property descriptors into the mapping objects

Added:
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaClassDescriptor.java
      - copied, changed from r399506, incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedAttribute.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java
      - copied, changed from r399506, incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaPropertyDescriptor.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/map/JpaClassDescriptorTest.java
      - copied, changed from r399506, incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java
Removed:
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaPropertyDescriptor.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java
Modified:
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/AnnotationProcessorStack.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoaderContext.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapMergeProcessor.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/MemberAnnotationProcessorFactory.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java
    incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java Wed May  3 20:12:29 2006
@@ -23,7 +23,6 @@
 
 import org.apache.cayenne.jpa.JpaProviderException;
 import org.apache.cayenne.jpa.conf.EntityMapLoaderContext;
-import org.apache.cayenne.jpa.conf.JpaPropertyDescriptor;
 import org.apache.cayenne.jpa.map.AccessType;
 import org.apache.cayenne.jpa.map.JpaAttribute;
 import org.apache.cayenne.jpa.map.JpaBasic;
@@ -37,6 +36,7 @@
 import org.apache.cayenne.jpa.map.JpaNamedQuery;
 import org.apache.cayenne.jpa.map.JpaOneToMany;
 import org.apache.cayenne.jpa.map.JpaOneToOne;
+import org.apache.cayenne.jpa.map.JpaPropertyDescriptor;
 import org.apache.cayenne.jpa.map.JpaQueryHint;
 import org.apache.cayenne.jpa.map.JpaRelationship;
 import org.apache.cayenne.jpa.map.JpaTable;
@@ -240,7 +240,6 @@
 
             DbAttribute dbAttribute = new DbAttribute(jpaColumn.getName());
 
-            JpaEntity jpaEntity = (JpaEntity) path.firstInstanceOf(JpaEntity.class);
             JpaId jpaId = (JpaId) path.firstInstanceOf(JpaId.class);
 
             // per JPA spec only date types are mapped explicitly...
@@ -257,8 +256,7 @@
                 }
             }
             else {
-                JpaPropertyDescriptor property = context.getLoadedDescriptor(
-                        jpaEntity.getClassName()).getProperty(jpaId.getName());
+                JpaPropertyDescriptor property = jpaId.getPropertyDescriptor();
                 type = TypesMapping.getSqlTypeByJava(property.getType());
             }
             dbAttribute.setType(type);
@@ -326,9 +324,7 @@
                 }
             }
             else {
-                JpaPropertyDescriptor property = context.getLoadedDescriptor(
-                        jpaRelationship.getTargetEntityName()).getProperty(
-                        jpaTargetId.getName());
+                JpaPropertyDescriptor property = jpaTargetId.getPropertyDescriptor();
                 type = TypesMapping.getSqlTypeByJava(property.getType());
             }
 

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/AnnotationProcessorStack.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/AnnotationProcessorStack.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/AnnotationProcessorStack.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/AnnotationProcessorStack.java Wed May  3 20:12:29 2006
@@ -25,11 +25,6 @@
  */
 public interface AnnotationProcessorStack {
 
-    /**
-     * Returns parent context.
-     */
-    EntityMapLoaderContext getContext();
-
     void push(Object object);
 
     Object pop();
@@ -37,6 +32,6 @@
     Object peek();
 
     void recordConflict(AnnotatedElement element, Class annotatedType, String message);
-    
+
     int depth();
 }

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java Wed May  3 20:12:29 2006
@@ -24,6 +24,7 @@
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
 
 import javax.persistence.Embeddable;
@@ -42,7 +43,12 @@
 
 import org.apache.cayenne.jpa.JpaProviderException;
 import org.apache.cayenne.jpa.map.JpaAbstractEntity;
+import org.apache.cayenne.jpa.map.JpaClassDescriptor;
+import org.apache.cayenne.jpa.map.JpaManagedAttribute;
+import org.apache.cayenne.jpa.map.JpaManagedClass;
+import org.apache.cayenne.jpa.map.JpaPropertyDescriptor;
 import org.objectstyle.cayenne.util.Util;
+import org.objectstyle.cayenne.validation.SimpleValidationFailure;
 
 /**
  * {@link org.apache.cayenne.jpa.map.JpaEntityMap} loader that reads mapping information
@@ -119,7 +125,10 @@
         // per 'getAnnotations' docs, array is returned by copy, so we can modify it...
         Arrays.sort(classAnnotations, typeAnnotationsSorter);
 
-        AnnotationProcessorStack stack = context.createAnnotationProcessorContext();
+        JpaClassDescriptor descriptor = new JpaClassDescriptor(
+                context.getEntityMap(),
+                managedClass);
+        AnnotationContext stack = new AnnotationContext(descriptor);
         stack.push(context.getEntityMap());
 
         // === push class-level stuff
@@ -153,13 +162,14 @@
         // we still must determine the access type to apply default mappping rules. How?
         // (using FIELD access for now).
 
-        JpaClassDescriptor descriptor = this.context.getDescriptor(managedClass);
         for (JpaPropertyDescriptor property : descriptor.getFieldDescriptors()) {
-            applyMemberAnnotations(property.getMember(), stack);
+            stack.setPropertyDescriptor(property);
+            applyMemberAnnotations(property, stack);
         }
 
         for (JpaPropertyDescriptor property : descriptor.getPropertyDescriptors()) {
-            applyMemberAnnotations(property.getMember(), stack);
+            stack.setPropertyDescriptor(property);
+            applyMemberAnnotations(property, stack);
         }
 
         // === pop class-level stuff
@@ -173,9 +183,11 @@
     }
 
     protected void applyMemberAnnotations(
-            AnnotatedElement member,
+            JpaPropertyDescriptor property,
             AnnotationProcessorStack stack) {
 
+        AnnotatedElement member = property.getMember();
+
         Annotation[] annotations = member.getAnnotations();
         // per 'getAnnotations' docs, array is returned by copy, so we can modify it...
         Arrays.sort(annotations, memberAnnotationsSorter);
@@ -270,4 +282,63 @@
         }
     }
 
+    final class AnnotationContext implements AnnotationProcessorStack {
+
+        LinkedList stack = new LinkedList();
+        JpaClassDescriptor classDescriptor;
+        JpaPropertyDescriptor propertyDescriptor;
+
+        AnnotationContext(JpaClassDescriptor classDescriptor) {
+            this.classDescriptor = classDescriptor;
+        }
+
+        void setPropertyDescriptor(JpaPropertyDescriptor propertyDescriptor) {
+            this.propertyDescriptor = propertyDescriptor;
+        }
+
+        public int depth() {
+            return stack.size();
+        }
+
+        public Object peek() {
+            return stack.peek();
+        }
+
+        public Object pop() {
+            return stack.removeFirst();
+        }
+
+        public void push(Object object) {
+
+            // do descriptor injection...
+            if (object instanceof JpaManagedAttribute) {
+                JpaManagedAttribute attribute = (JpaManagedAttribute) object;
+                attribute.setName(propertyDescriptor.getName());
+                attribute.setPropertyDescriptor(propertyDescriptor);
+            }
+            else if (object instanceof JpaManagedClass) {
+                ((JpaManagedClass) object).setClassDescriptor(classDescriptor);
+            }
+
+            stack.addFirst(object);
+        }
+
+        public void recordConflict(
+                AnnotatedElement element,
+                Class annotatedType,
+                String message) {
+
+            StringBuilder buffer = new StringBuilder();
+            buffer.append("Problem processing annotation: ").append(
+                    annotatedType.getName());
+            buffer.append(", annotated element: ").append(element);
+
+            if (message != null) {
+                buffer.append(", details: ").append(message);
+            }
+
+            context
+                    .recordConflict(new SimpleValidationFailure(peek(), buffer.toString()));
+        }
+    }
 }

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java Wed May  3 20:12:29 2006
@@ -23,6 +23,7 @@
 import org.apache.cayenne.jpa.map.AccessType;
 import org.apache.cayenne.jpa.map.JpaAttribute;
 import org.apache.cayenne.jpa.map.JpaBasic;
+import org.apache.cayenne.jpa.map.JpaClassDescriptor;
 import org.apache.cayenne.jpa.map.JpaColumn;
 import org.apache.cayenne.jpa.map.JpaEntity;
 import org.apache.cayenne.jpa.map.JpaEntityMap;
@@ -33,6 +34,7 @@
 import org.apache.cayenne.jpa.map.JpaMappedSuperclass;
 import org.apache.cayenne.jpa.map.JpaOneToMany;
 import org.apache.cayenne.jpa.map.JpaOneToOne;
+import org.apache.cayenne.jpa.map.JpaPropertyDescriptor;
 import org.apache.cayenne.jpa.map.JpaRelationship;
 import org.apache.cayenne.jpa.map.JpaTable;
 import org.apache.cayenne.util.BaseTreeVisitor;
@@ -106,12 +108,7 @@
             }
 
             // * default persistent fields
-            JpaClassDescriptor descriptor = context.getLoadedDescriptor(entity
-                    .getClassName());
-
-            if (descriptor == null) {
-                return false;
-            }
+            JpaClassDescriptor descriptor = entity.getClassDescriptor();
 
             JpaEntityMap root = (JpaEntityMap) path.getRoot();
             if (root.getAccess() == AccessType.PROPERTY) {
@@ -187,8 +184,7 @@
 
             if (jpaBasic.getParent().getTemporal() == null) {
                 JpaEntity entity = (JpaEntity) path.firstInstanceOf(JpaEntity.class);
-                JpaClassDescriptor descriptor = context.getLoadedDescriptor(entity
-                        .getClassName());
+                JpaClassDescriptor descriptor = entity.getClassDescriptor();
                 JpaPropertyDescriptor property = descriptor.getProperty(jpaBasic
                         .getParent()
                         .getName());
@@ -370,8 +366,7 @@
 
                 String name = relationship.getParent().getName();
 
-                JpaClassDescriptor srcDescriptor = context.getLoadedDescriptor(entity
-                        .getClassName());
+                JpaClassDescriptor srcDescriptor = entity.getClassDescriptor();
                 JpaPropertyDescriptor property = srcDescriptor.getProperty(name);
 
                 Class targetEntityType = property.getTargetEntityType();

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java Wed May  3 20:12:29 2006
@@ -25,6 +25,7 @@
 import javax.persistence.spi.PersistenceUnitInfo;
 
 import org.apache.cayenne.jpa.JpaProviderException;
+import org.apache.cayenne.jpa.map.JpaClassDescriptor;
 import org.apache.cayenne.jpa.map.JpaEntityMap;
 
 /**

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoaderContext.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoaderContext.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoaderContext.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoaderContext.java Wed May  3 20:12:29 2006
@@ -15,16 +15,9 @@
  */
 package org.apache.cayenne.jpa.conf;
 
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Member;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
-
 import javax.persistence.spi.PersistenceUnitInfo;
 
 import org.apache.cayenne.jpa.map.JpaEntityMap;
-import org.objectstyle.cayenne.validation.SimpleValidationFailure;
 import org.objectstyle.cayenne.validation.ValidationFailure;
 import org.objectstyle.cayenne.validation.ValidationResult;
 
@@ -35,7 +28,6 @@
  */
 public class EntityMapLoaderContext {
 
-    protected Map<String, JpaClassDescriptor> descriptors;
     protected ValidationResult conflicts;
     protected JpaEntityMap entityMap;
     protected PersistenceUnitInfo unit;
@@ -54,54 +46,6 @@
         return entityMap;
     }
 
-    public AnnotationProcessorStack createAnnotationProcessorContext() {
-        return new AnnotationContext();
-    }
-
-    /**
-     * Returns a previously laoded descriptor matching class name or null if no such
-     * descriptor was loaded.
-     */
-    public JpaClassDescriptor getLoadedDescriptor(String managedClassName) {
-        return (descriptors != null) ? descriptors.get(managedClassName) : null;
-    }
-
-    /**
-     * Returns a descriptor for a given class member.
-     */
-    public JpaPropertyDescriptor getPropertyDescriptor(AnnotatedElement element) {
-
-        if (element instanceof Member) {
-            Member member = (Member) element;
-            return getDescriptor(member.getDeclaringClass()).getPropertyForMember(member);
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns a class descriptor for a given managed class, compiling it on the fly if
-     * needed.
-     */
-    public JpaClassDescriptor getDescriptor(Class managedClass) {
-        JpaClassDescriptor descriptor = null;
-        String name = managedClass.getName();
-
-        if (descriptors == null) {
-            descriptors = new HashMap<String, JpaClassDescriptor>();
-        }
-        else {
-            descriptor = descriptors.get(name);
-        }
-
-        if (descriptor == null) {
-            descriptor = new JpaClassDescriptor(entityMap, managedClass);
-            descriptors.put(name, descriptor);
-        }
-
-        return descriptor;
-    }
-
     public void recordConflict(ValidationFailure conflict) {
         conflicts.addFailure(conflict);
     }
@@ -109,49 +53,4 @@
     public ValidationResult getConflicts() {
         return conflicts;
     }
-
-    final class AnnotationContext implements AnnotationProcessorStack {
-
-        LinkedList stack = new LinkedList();
-
-        public EntityMapLoaderContext getContext() {
-            return EntityMapLoaderContext.this;
-        }
-
-        public int depth() {
-            return stack.size();
-        }
-
-        public Object peek() {
-            return stack.peek();
-        }
-
-        public Object pop() {
-            return stack.removeFirst();
-        }
-
-        public void push(Object object) {
-            stack.addFirst(object);
-        }
-
-        public void recordConflict(
-                AnnotatedElement element,
-                Class annotatedType,
-                String message) {
-
-            StringBuilder buffer = new StringBuilder();
-            buffer.append("Problem processing annotation: ").append(
-                    annotatedType.getName());
-            buffer.append(", annotated element: ").append(element);
-
-            if (message != null) {
-                buffer.append(", details: ").append(message);
-            }
-
-            EntityMapLoaderContext.this.recordConflict(new SimpleValidationFailure(
-                    peek(),
-                    buffer.toString()));
-        }
-    }
-
 }

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapMergeProcessor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapMergeProcessor.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapMergeProcessor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapMergeProcessor.java Wed May  3 20:12:29 2006
@@ -31,10 +31,7 @@
     }
 
     public void mergeOverride(JpaEntityMap map) {
-
-    }
-
-    public void mergeNoOverride(JpaEntityMap map) {
-
+        // TODO: andrus, 5/3/2006 - implement merging.. May also combine with class
+        // descriptor injection...
     }
 }

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/MemberAnnotationProcessorFactory.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/MemberAnnotationProcessorFactory.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/MemberAnnotationProcessorFactory.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/MemberAnnotationProcessorFactory.java Wed May  3 20:12:29 2006
@@ -86,7 +86,6 @@
                 AnnotationProcessorStack context) {
 
             JpaEmbeddedId id = new JpaEmbeddedId();
-            id.setName(context.getContext().getPropertyDescriptor(element).getName());
 
             Object parent = context.peek();
             if (parent instanceof JpaAbstractEntity) {
@@ -115,7 +114,6 @@
                 AnnotationProcessorStack context) {
 
             JpaId id = new JpaId();
-            id.setName(context.getContext().getPropertyDescriptor(element).getName());
 
             Object parent = context.peek();
             if (parent instanceof JpaAbstractEntity) {
@@ -159,7 +157,6 @@
 
                 // attribute implied...
                 JpaAttribute attribute = new JpaAttribute();
-                attribute.setName(context.getContext().getPropertyDescriptor(element).getName());
                 entity.getAttributes().add(attribute);
                 context.push(attribute);
 
@@ -173,7 +170,6 @@
 
                 // embeddable attribute implied...
                 JpaEmbeddableAttribute attribute = new JpaEmbeddableAttribute();
-                attribute.setName(context.getContext().getPropertyDescriptor(element).getName());
                 embeddable.getEmbeddableAttributes().add(attribute);
                 context.push(attribute);
 

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java Wed May  3 20:12:29 2006
@@ -20,10 +20,7 @@
 
 import org.apache.cayenne.util.TreeNodeChild;
 
-public abstract class JpaAbstractEntity {
-
-    protected String className;
-    protected AccessType access;
+public abstract class JpaAbstractEntity extends JpaManagedClass {
 
     protected String idClassName;
     protected boolean excludeDefaultListeners;
@@ -191,19 +188,4 @@
         return attributes;
     }
 
-    public AccessType getAccess() {
-        return access;
-    }
-
-    public void setAccess(AccessType access) {
-        this.access = access;
-    }
-
-    public String getClassName() {
-        return className;
-    }
-
-    public void setClassName(String className) {
-        this.className = className;
-    }
 }

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java Wed May  3 20:12:29 2006
@@ -28,13 +28,12 @@
  * 
  * @author Andrus Adamchik
  */
-public class JpaAttribute {
+public class JpaAttribute extends JpaManagedAttribute {
 
     public static enum BasicSemantics {
         VERSION, EMBEDDED, TRANSIENT
     }
 
-    protected String name;
     protected Collection<JpaAttributeOverride> attributeOverrides;
 
     // basic attribute properties
@@ -66,14 +65,6 @@
                 || oneToMany != null
                 || oneToOne != null
                 || manyToMany != null;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
     }
 
     /**

Copied: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaClassDescriptor.java (from r399506, incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java)
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaClassDescriptor.java?p2=incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaClassDescriptor.java&p1=incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java&r1=399506&r2=399524&rev=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaClassDescriptor.java Wed May  3 20:12:29 2006
@@ -13,7 +13,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.cayenne.jpa.conf;
+package org.apache.cayenne.jpa.map;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Member;
@@ -26,8 +26,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.cayenne.jpa.map.AccessType;
-import org.apache.cayenne.jpa.map.JpaEntityMap;
 
 /**
  * Provides the JPA information about a class, such potential persistence fields, etc.

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java Wed May  3 20:12:29 2006
@@ -26,34 +26,16 @@
  * 
  * @author Andrus Adamchik
  */
-public class JpaEmbeddable {
+public class JpaEmbeddable extends JpaManagedClass {
 
-    protected String className;
-    protected AccessType access;
     protected Collection<JpaEmbeddableAttribute> embeddableAttributes;
 
-    public AccessType getAccess() {
-        return access;
-    }
-
-    public void setAccess(AccessType access) {
-        this.access = access;
-    }
-
-    @TreeNodeChild(type=JpaEmbeddableAttribute.class)
+    @TreeNodeChild(type = JpaEmbeddableAttribute.class)
     public Collection<JpaEmbeddableAttribute> getEmbeddableAttributes() {
         if (embeddableAttributes == null) {
             embeddableAttributes = new ArrayList(5);
         }
 
         return embeddableAttributes;
-    }
-
-    public String getClassName() {
-        return className;
-    }
-
-    public void setClassName(String className) {
-        this.className = className;
     }
 }

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java Wed May  3 20:12:29 2006
@@ -25,23 +25,13 @@
  * 
  * @author Andrus Adamchik
  */
-public class JpaEmbeddableAttribute {
-
-    protected String name;
+public class JpaEmbeddableAttribute extends JpaManagedAttribute {
 
     protected boolean lob;
     protected JpaBasic basic;
     protected TemporalType temporal;
     protected JpaColumn column;
     protected EnumType enumerated;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
 
     @TreeNodeChild
     public JpaBasic getBasic() {

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java Wed May  3 20:12:29 2006
@@ -20,20 +20,11 @@
 
 import org.apache.cayenne.util.TreeNodeChild;
 
-public class JpaEmbeddedId {
+public class JpaEmbeddedId extends JpaManagedAttribute {
 
-    protected String name;
     protected Collection<JpaAttributeOverride> attributeOverrides;
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @TreeNodeChild(type=JpaAttributeOverride.class)
+    @TreeNodeChild(type = JpaAttributeOverride.class)
     public Collection<JpaAttributeOverride> getAttributeOverrides() {
         if (attributeOverrides == null) {
             attributeOverrides = new ArrayList<JpaAttributeOverride>();

Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java?rev=399524&r1=399523&r2=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java Wed May  3 20:12:29 2006
@@ -19,9 +19,8 @@
 
 import org.apache.cayenne.util.TreeNodeChild;
 
-public class JpaId {
+public class JpaId extends JpaManagedAttribute {
 
-    protected String name;
     protected JpaColumn column;
     protected JpaGeneratedValue generatedValue;
     protected TemporalType temporal;
@@ -42,14 +41,6 @@
 
     public void setGeneratedValue(JpaGeneratedValue generatedValue) {
         this.generatedValue = generatedValue;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
     }
 
     public TemporalType getTemporal() {

Added: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedAttribute.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedAttribute.java?rev=399524&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedAttribute.java (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedAttribute.java Wed May  3 20:12:29 2006
@@ -0,0 +1,39 @@
+/*
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.jpa.map;
+
+
+public abstract class JpaManagedAttribute {
+
+    protected JpaPropertyDescriptor propertyDescriptor;
+    protected String name;
+
+    public JpaPropertyDescriptor getPropertyDescriptor() {
+        return propertyDescriptor;
+    }
+
+    public void setPropertyDescriptor(JpaPropertyDescriptor propertyDescriptor) {
+        this.propertyDescriptor = propertyDescriptor;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

Added: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java?rev=399524&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java Wed May  3 20:12:29 2006
@@ -0,0 +1,49 @@
+/*
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.jpa.map;
+
+
+public abstract class JpaManagedClass {
+
+    protected JpaClassDescriptor classDescriptor;
+
+    protected String className;
+    protected AccessType access;
+
+    public JpaClassDescriptor getClassDescriptor() {
+        return classDescriptor;
+    }
+
+    public void setClassDescriptor(JpaClassDescriptor classDescriptor) {
+        this.classDescriptor = classDescriptor;
+    }
+
+    public AccessType getAccess() {
+        return access;
+    }
+
+    public void setAccess(AccessType access) {
+        this.access = access;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+}

Copied: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java (from r399506, incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaPropertyDescriptor.java)
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java?p2=incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java&p1=incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaPropertyDescriptor.java&r1=399506&r2=399524&rev=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaPropertyDescriptor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java Wed May  3 20:12:29 2006
@@ -13,7 +13,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.cayenne.jpa.conf;
+package org.apache.cayenne.jpa.map;
 
 import java.io.Serializable;
 import java.lang.reflect.AnnotatedElement;

Copied: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/map/JpaClassDescriptorTest.java (from r399506, incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java)
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/map/JpaClassDescriptorTest.java?p2=incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/map/JpaClassDescriptorTest.java&p1=incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java&r1=399506&r2=399524&rev=399524&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/map/JpaClassDescriptorTest.java Wed May  3 20:12:29 2006
@@ -13,11 +13,13 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.cayenne.jpa.conf;
+package org.apache.cayenne.jpa.map;
 
 import java.util.regex.Matcher;
 
+import org.apache.cayenne.jpa.conf.MockPropertyRegressionBean;
 import org.apache.cayenne.jpa.map.AccessType;
+import org.apache.cayenne.jpa.map.JpaClassDescriptor;
 import org.apache.cayenne.jpa.map.JpaEntityMap;
 
 import junit.framework.TestCase;