Author: aadamchik
Date: Wed Aug  8 07:30:15 2007
New Revision: 563899

URL: http://svn.apache.org/viewvc?view=rev&rev=563899
Log:
CAY-843 Remove arbitrary reverse relationship mapping limitations 
(integration tests)

Added:
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java
    
cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml
    
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/
    
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java
Modified:
    cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable1;
+
+public class DefaultsTable1 extends _DefaultsTable1 {
+
+}
+
+
+

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable2;
+
+public class DefaultsTable2 extends _DefaultsTable2 {
+
+}
+
+
+

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable3;
+
+public class DefaultsTable3 extends _DefaultsTable3 {
+
+}
+
+
+

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable4;
+
+public class DefaultsTable4 extends _DefaultsTable4 {
+
+}
+
+
+

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,22 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+/** Class _DefaultsTable1 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable1 extends org.apache.cayenne.CayenneDataObject {
+
+    public static final String NAME_PROPERTY = "name";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+    
+    
+}

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,23 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+/** Class _DefaultsTable2 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable2 extends org.apache.cayenne.CayenneDataObject {
+
+    public static final String TO_TABLE1_PROPERTY = "toTable1";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void 
setToTable1(org.apache.cayenne.itest.cpa.defaults.DefaultsTable1 toTable1) {
+        setToOneTarget("toTable1", toTable1, true);
+    }
+
+    public org.apache.cayenne.itest.cpa.defaults.DefaultsTable1 getToTable1() {
+        return 
(org.apache.cayenne.itest.cpa.defaults.DefaultsTable1)readProperty("toTable1");
+    } 
+    
+    
+}

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,36 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+import java.util.List;
+
+/** Class _DefaultsTable3 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable3 extends org.apache.cayenne.CayenneDataObject {
+
+    public static final String NAME_PROPERTY = "name";
+    public static final String DEFAULT_TABLE4S_PROPERTY = "defaultTable4s";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+    
+    
+    public void 
addToDefaultTable4s(org.apache.cayenne.itest.cpa.defaults.DefaultsTable4 obj) {
+        addToManyTarget("defaultTable4s", obj, true);
+    }
+    public void 
removeFromDefaultTable4s(org.apache.cayenne.itest.cpa.defaults.DefaultsTable4 
obj) {
+        removeToManyTarget("defaultTable4s", obj, true);
+    }
+    public List getDefaultTable4s() {
+        return (List)readProperty("defaultTable4s");
+    }
+    
+    
+}

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,13 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+/** Class _DefaultsTable4 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable4 extends org.apache.cayenne.CayenneDataObject {
+
+
+    public static final String ID_PK_COLUMN = "id";
+
+}

Modified: cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml?view=diff&rev=563899&r1=563898&r2=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml 
(original)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml Wed 
Aug  8 07:30:15 2007
@@ -2,10 +2,12 @@
 <domains project-version="2.0">
 <domain name="cayenne-api-domain">
        <map name="cayenne-api-map" location="cayenne-api-map.map.xml"/>
+       <map name="defaults-mapping-map" 
location="defaults-mapping-map.map.xml"/>
 
        <node name="cayenne-api-node"
                 datasource="cayenne-api-node.driver.xml"
                 factory="org.apache.cayenne.conf.DriverDataSourceFactory">
+                       <map-ref name="defaults-mapping-map"/>
                        <map-ref name="cayenne-api-map"/>
         </node>
 </domain>

Added: 
cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map project-version="2.0">
+       <property name="defaultPackage" 
value="org.apache.cayenne.itest.cpa.defaults"/>
+       <db-entity name="defaults_table1">
+               <db-attribute name="id" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+               <db-attribute name="name" type="VARCHAR" length="100"/>
+       </db-entity>
+       <db-entity name="defaults_table2">
+               <db-attribute name="defaults_table1_id" type="INTEGER"/>
+               <db-attribute name="id" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+       </db-entity>
+       <db-entity name="defaults_table3">
+               <db-attribute name="id" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+               <db-attribute name="name" type="VARCHAR" length="100"/>
+       </db-entity>
+       <db-entity name="defaults_table4">
+               <db-attribute name="defaults_table3_id" type="INTEGER"/>
+               <db-attribute name="id" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+       </db-entity>
+       <obj-entity name="DefaultsTable1" 
className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable1" 
dbEntityName="defaults_table1">
+               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="name"/>
+       </obj-entity>
+       <obj-entity name="DefaultsTable2" 
className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable2" 
dbEntityName="defaults_table2">
+       </obj-entity>
+       <obj-entity name="DefaultsTable3" 
className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable3" 
dbEntityName="defaults_table3">
+               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="name"/>
+       </obj-entity>
+       <obj-entity name="DefaultsTable4" 
className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable4" 
dbEntityName="defaults_table4">
+       </obj-entity>
+       <db-relationship name="to_table1" source="defaults_table2" 
target="defaults_table1" toMany="false">
+               <db-attribute-pair source="defaults_table1_id" target="id"/>
+       </db-relationship>
+       <db-relationship name="defaultTable4s" source="defaults_table3" 
target="defaults_table4" toMany="true">
+               <db-attribute-pair source="id" target="defaults_table3_id"/>
+       </db-relationship>
+       <obj-relationship name="toTable1" source="DefaultsTable2" 
target="DefaultsTable1" db-relationship-path="to_table1"/>
+       <obj-relationship name="defaultTable4s" source="DefaultsTable3" 
target="DefaultsTable4" db-relationship-path="defaultTable4s"/>
+</data-map>

Added: 
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java?view=auto&rev=563899
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java
 (added)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java
 Wed Aug  8 07:30:15 2007
@@ -0,0 +1,85 @@
+package org.apache.cayenne.itest.cpa.conf;
+
+import org.apache.cayenne.DataObjectUtils;
+import org.apache.cayenne.itest.cpa.CPAContextCase;
+import org.apache.cayenne.itest.cpa.defaults.DefaultsTable2;
+import org.apache.cayenne.itest.cpa.defaults.DefaultsTable3;
+import org.apache.cayenne.itest.cpa.defaults.DefaultsTable4;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.query.RefreshQuery;
+
+public class RuntimeLoaderDelegateDefaultsLoadingTest extends CPAContextCase {
+
+       public void testLoadedReverseDb() {
+
+               DbEntity table1 = context.getEntityResolver().getDbEntity(
+                               "defaults_table1");
+               DbEntity table2 = context.getEntityResolver().getDbEntity(
+                               "defaults_table2");
+               assertNotNull(table1.getAnyRelationship(table2));
+               assertTrue(table1.getAnyRelationship(table2).isRuntime());
+               assertFalse(table2.getAnyRelationship(table1).isRuntime());
+       }
+
+       public void testLoadedReverseObj() {
+
+               ObjEntity class1 = context.getEntityResolver().getObjEntity(
+                               "DefaultsTable1");
+               ObjEntity class2 = context.getEntityResolver().getObjEntity(
+                               "DefaultsTable2");
+               assertNotNull(class1.getAnyRelationship(class2));
+               assertTrue(class1.getAnyRelationship(class2).isRuntime());
+               assertFalse(class2.getAnyRelationship(class1).isRuntime());
+       }
+
+       public void testResolveRelationship() throws Exception {
+               getDbHelper().deleteAll("defaults_table2");
+               getDbHelper().deleteAll("defaults_table1");
+               getDbHelper().insert("defaults_table1", new String[] { "id", 
"name" },
+                               new Object[] { 1, "X" });
+               getDbHelper().insert("defaults_table2",
+                               new String[] { "id", "defaults_table1_id" },
+                               new Object[] { 1, 1 });
+
+               DefaultsTable2 o = (DefaultsTable2) DataObjectUtils.objectForPK(
+                               context, DefaultsTable2.class, 1);
+               assertNotNull(o.getToTable1());
+               assertEquals("X", o.getToTable1().getName());
+       }
+
+       public void testUpdateImplicitToMany() throws Exception {
+               getDbHelper().deleteAll("defaults_table4");
+               getDbHelper().deleteAll("defaults_table3");
+               getDbHelper().insert("defaults_table3", new String[] { "id", 
"name" },
+                               new Object[] { 1, "X" });
+               getDbHelper().insert("defaults_table3", new String[] { "id", 
"name" },
+                               new Object[] { 2, "Y" });
+               getDbHelper().insert("defaults_table4",
+                               new String[] { "id", "defaults_table3_id" },
+                               new Object[] { 1, 1 });
+
+               DefaultsTable4 o = (DefaultsTable4) DataObjectUtils.objectForPK(
+                               context, DefaultsTable4.class, 1);
+               DefaultsTable3 o1 = (DefaultsTable3) 
DataObjectUtils.objectForPK(
+                               context, DefaultsTable3.class, 1);
+               DefaultsTable3 o2 = (DefaultsTable3) 
DataObjectUtils.objectForPK(
+                               context, DefaultsTable3.class, 2);
+
+               assertEquals(1, o1.getDefaultTable4s().size());
+               assertEquals(0, o2.getDefaultTable4s().size());
+
+               o2.addToDefaultTable4s(o);
+
+               assertEquals(1, o2.getDefaultTable4s().size());
+               context.commitChanges();
+               assertEquals(1, o2.getDefaultTable4s().size());
+
+               context.performQuery(new RefreshQuery());
+
+               // note that the old to-many is only refreshed after 
invalidation with
+               // RefreshQuery... should this be treated as a bug?
+               assertEquals(0, o1.getDefaultTable4s().size());
+               assertEquals(1, o2.getDefaultTable4s().size());
+       }
+}


Reply via email to