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 2014/04/05 15:26:52 UTC

svn commit: r1585092 - in /cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade: BaseUpgradeHandler.java v6/UpgradeHandler_V6.java v7/UpgradeHandler_V7.java

Author: aadamchik
Date: Sat Apr  5 13:26:51 2014
New Revision: 1585092

URL: http://svn.apache.org/r1585092
Log:
CAY-1924 Upgrade of a project to v7 with cross-map inheritance loses super entity

Modified:
    cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/BaseUpgradeHandler.java
    cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v6/UpgradeHandler_V6.java
    cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v7/UpgradeHandler_V7.java

Modified: cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/BaseUpgradeHandler.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/BaseUpgradeHandler.java?rev=1585092&r1=1585091&r2=1585092&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/BaseUpgradeHandler.java (original)
+++ cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/BaseUpgradeHandler.java Sat Apr  5 13:26:51 2014
@@ -23,6 +23,9 @@ import java.io.InputStream;
 import java.net.URL;
 
 import org.apache.cayenne.ConfigurationException;
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.resource.Resource;
 import org.apache.cayenne.util.Util;
 import org.xml.sax.Attributes;
@@ -53,6 +56,19 @@ public abstract class BaseUpgradeHandler
 
         this.projectSource = projectSource;
     }
+    
+    /**
+     * Creates a single common EntityResolver for all project DataMaps, setting
+     * it as a namespace for all of them. This is needed for resolving cross-map
+     * relationships.
+     */
+    protected void attachToNamespace(DataChannelDescriptor channelDescriptor) {
+        EntityResolver entityResolver = new EntityResolver(channelDescriptor.getDataMaps());
+
+        for (DataMap map : entityResolver.getDataMaps()) {
+            map.setNamespace(entityResolver);
+        }
+    }
 
     public Resource getProjectSource() {
         return projectSource;

Modified: cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v6/UpgradeHandler_V6.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v6/UpgradeHandler_V6.java?rev=1585092&r1=1585091&r2=1585092&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v6/UpgradeHandler_V6.java (original)
+++ cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v6/UpgradeHandler_V6.java Sat Apr  5 13:26:51 2014
@@ -21,7 +21,6 @@ package org.apache.cayenne.project.upgra
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.cayenne.ConfigurationException;
@@ -29,8 +28,6 @@ import org.apache.cayenne.configuration.
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.project.Project;
 import org.apache.cayenne.project.ProjectSaver;
 import org.apache.cayenne.project.upgrade.BaseUpgradeHandler;
@@ -119,15 +116,8 @@ class UpgradeHandler_V6 extends BaseUpgr
         for (DataChannelDescriptor descriptor : domains) {
             Project project = new Project(new ConfigurationTree<DataChannelDescriptor>(
                     descriptor));
-
-            EntityResolver entityResolver = new EntityResolver(
-                    ((DataChannelDescriptor) project.getRootNode()).getDataMaps());
-
-            Iterator<DataMap> it = entityResolver.getDataMaps().iterator();
-            while (it.hasNext()) {
-                DataMap map = it.next();
-                map.setNamespace(entityResolver);
-            }
+            
+            attachToNamespace((DataChannelDescriptor) project.getRootNode());
 
             // side effect of that is deletion of the common "cayenne.xml"
             projectSaver.save(project);

Modified: cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v7/UpgradeHandler_V7.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v7/UpgradeHandler_V7.java?rev=1585092&r1=1585091&r2=1585092&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v7/UpgradeHandler_V7.java (original)
+++ cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v7/UpgradeHandler_V7.java Sat Apr  5 13:26:51 2014
@@ -56,11 +56,16 @@ class UpgradeHandler_V7 extends BaseUpgr
             UpgradeHandler handlerV6 = upgraderV6.getUpgradeHandler(projectSource);
             projectSource = handlerV6.performUpgrade();
         }
+        
         XMLDataChannelDescriptorLoader loader = new XMLDataChannelDescriptorLoader();
         injector.injectMembers(loader);
         ConfigurationTree<DataChannelDescriptor> tree = loader.load(projectSource);
         Project project = new Project(tree);
-        // because listeners are no longer loaded they are not saved in upgraded project
+        
+        attachToNamespace((DataChannelDescriptor) project.getRootNode());
+        
+        // load and safe cycle removes objects no longer supported, specifically listeners.
+        
         projectSaver.save(project); 
         return project.getConfigurationResource();
     }