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 2007/12/17 00:25:07 UTC

svn commit: r604738 - in /cayenne/main/trunk: framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/ framework/cayenne-jdk1.5-unpublished/src/main/j...

Author: aadamchik
Date: Sun Dec 16 15:25:01 2007
New Revision: 604738

URL: http://svn.apache.org/viewvc?rev=604738&view=rev
Log:
CAY-734 Link JPA Embeddable and Embedded annotations with Cayenne runtime
(basically working)

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java
    cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
    cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml
    cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java Sun Dec 16 15:25:01 2007
@@ -40,7 +40,7 @@
 
     @Override
     public void visitEnd() {
-        helper.createProperty(Persistent.class, "owner");
-        helper.createProperty(String.class, "embeddedProperty");
+        helper.createField(Persistent.class, "owner");
+        helper.createField(String.class, "embeddedProperty");
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java Sun Dec 16 15:25:01 2007
@@ -34,7 +34,8 @@
     protected Accessor ownerAccessor;
     protected Accessor embeddedPropertyAccessor;
 
-    public FieldEmbeddableDescriptor(Embeddable embeddable) {
+    public FieldEmbeddableDescriptor(Embeddable embeddable, String ownerProperty,
+            String embeddedPropertyProperty) {
         this.embeddable = embeddable;
         try {
             this.embeddableClass = Class.forName(embeddable.getClassName(), true, Thread
@@ -45,10 +46,13 @@
             throw new PropertyException("Class not found", e);
         }
 
-        this.ownerAccessor = new FieldAccessor(embeddableClass, "owner", Persistent.class);
+        this.ownerAccessor = new FieldAccessor(
+                embeddableClass,
+                ownerProperty,
+                Persistent.class);
         this.embeddedPropertyAccessor = new FieldAccessor(
                 embeddableClass,
-                "embeddedProperty",
+                embeddedPropertyProperty,
                 String.class);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java Sun Dec 16 15:25:01 2007
@@ -159,10 +159,7 @@
                 embeddableName,
                 attribute.getJavaClass());
 
-        // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every property of
-        // embeddable; look up reusable descriptor instead.
-        EmbeddableDescriptor embeddableDescriptor = new FieldEmbeddableDescriptor(
-                embeddedAttribute.getEmbeddable());
+        EmbeddableDescriptor embeddableDescriptor = createEmbeddableDescriptor(embeddedAttribute);
 
         Accessor accessor = new EmbeddedFieldAccessor(
                 embeddableDescriptor,
@@ -243,5 +240,15 @@
             String propertyName,
             Class<?> propertyType) {
         return new FieldAccessor(embeddableClass, propertyName, propertyType);
+    }
+
+    protected EmbeddableDescriptor createEmbeddableDescriptor(
+            EmbeddedAttribute embeddedAttribute) {
+        // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every property of
+        // embeddable; look up reusable descriptor instead.
+        return new FieldEmbeddableDescriptor(
+                embeddedAttribute.getEmbeddable(),
+                "owner",
+                "embeddedProperty");
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java Sun Dec 16 15:25:01 2007
@@ -23,13 +23,17 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.cayenne.enhancer.EnhancementHelper;
+import org.apache.cayenne.map.EmbeddedAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.reflect.Accessor;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.ClassDescriptorFactory;
 import org.apache.cayenne.reflect.ClassDescriptorMap;
+import org.apache.cayenne.reflect.EmbeddableDescriptor;
 import org.apache.cayenne.reflect.FaultFactory;
+import org.apache.cayenne.reflect.FieldEmbeddableDescriptor;
 import org.apache.cayenne.reflect.PersistentDescriptor;
 import org.apache.cayenne.reflect.PersistentDescriptorFactory;
 import org.apache.cayenne.reflect.Property;
@@ -45,11 +49,13 @@
     static final String PERSISTENCE_STATE_FIELD = "$cay_persistenceState";
 
     protected FaultFactory faultFactory;
+    protected EnhancementHelper fieldNameMapper;
 
     public EnhancedPojoDescriptorFactory(ClassDescriptorMap descriptorMap,
             FaultFactory faultFactory) {
         super(descriptorMap);
         this.faultFactory = faultFactory;
+        this.fieldNameMapper = new EnhancementHelper(null);
     }
 
     protected ClassDescriptor getDescriptor(ObjEntity entity, Class<?> entityClass) {
@@ -154,5 +160,18 @@
                 accessor,
                 reverseName,
                 faultFactory.getToOneFault()));
+    }
+
+    @Override
+    protected EmbeddableDescriptor createEmbeddableDescriptor(
+            EmbeddedAttribute embeddedAttribute) {
+        
+        // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every property of
+        // embeddable; look up reusable descriptor instead.
+
+        return new FieldEmbeddableDescriptor(
+                embeddedAttribute.getEmbeddable(),
+                fieldNameMapper.getPropertyField("owner"),
+                fieldNameMapper.getPropertyField("embeddedProperty"));
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java Sun Dec 16 15:25:01 2007
@@ -23,6 +23,7 @@
 import java.lang.reflect.Field;
 import java.util.Iterator;
 
+import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.jpa.JpaProviderException;
 import org.apache.cayenne.jpa.conf.EntityMapLoaderContext;
 import org.apache.cayenne.jpa.map.AccessType;
@@ -250,7 +251,7 @@
         Object createObject(ProjectPath path) {
             JpaEmbedded jpaEmbedded = (JpaEmbedded) path.getObject();
 
-            ObjEntity parentCayenneEntity = (ObjEntity) targetPath.getObject();
+            ObjEntity entity = (ObjEntity) targetPath.getObject();
 
             EmbeddedAttribute embedded = new EmbeddedAttribute(jpaEmbedded.getName());
             embedded.setType(jpaEmbedded.getPropertyDescriptor().getType().getName());
@@ -260,7 +261,14 @@
                         .getColumn()
                         .getName());
             }
-            parentCayenneEntity.addAttribute(embedded);
+            entity.addAttribute(embedded);
+
+            DbEntity dbEntity = entity.getDbEntity();
+            for (ObjAttribute attribute : embedded.getAttributes()) {
+                DbAttribute dbAttribute = new DbAttribute(attribute.getDbAttributeName());
+                dbAttribute.setType(TypesMapping.getSqlTypeByJava(attribute.getType()));
+                dbEntity.addAttribute(dbAttribute);
+            }
 
             return embedded;
         }
@@ -393,7 +401,7 @@
         public boolean onStartNode(ProjectPath path) {
             JpaColumn jpaColumn = (JpaColumn) path.getObject();
 
-            // skip embeddable columns
+            // skip embeddable columns - they are mapped per entity
             if (path.firstInstanceOf(JpaEmbeddable.class) != null) {
                 return false;
             }

Modified: cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml (original)
+++ cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml Sun Dec 16 15:25:01 2007
@@ -44,5 +44,6 @@
 		<class>org.apache.cayenne.jpa.itest.ch2.entity.BidiOneToOneOwned</class>
 		<class>org.apache.cayenne.jpa.itest.ch2.entity.BidiOneToManyOwner</class>
 		<class>org.apache.cayenne.jpa.itest.ch2.entity.BidiOneToManyOwned</class>
+		<class>org.apache.cayenne.jpa.itest.ch2.entity.Embeddable1</class>
 	</persistence-unit>
 </persistence>

Modified: cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java (original)
+++ cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java Sun Dec 16 15:25:01 2007
@@ -35,6 +35,6 @@
         getEntityManager().persist(o1);
         getEntityManager().getTransaction().commit();
 
-        // assertEquals("p1", getDbHelper().getObject("EmbeddedEntity", "property1"));
+        assertEquals("p1", getDbHelper().getObject("EmbeddedEntity", "property1"));
     }
 }