Return-Path: X-Original-To: apmail-cayenne-commits-archive@www.apache.org Delivered-To: apmail-cayenne-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2E2D811752 for ; Sat, 5 Apr 2014 13:27:21 +0000 (UTC) Received: (qmail 4692 invoked by uid 500); 5 Apr 2014 13:27:20 -0000 Delivered-To: apmail-cayenne-commits-archive@cayenne.apache.org Received: (qmail 4359 invoked by uid 500); 5 Apr 2014 13:27:17 -0000 Mailing-List: contact commits-help@cayenne.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cayenne.apache.org Delivered-To: mailing list commits@cayenne.apache.org Received: (qmail 4341 invoked by uid 99); 5 Apr 2014 13:27:16 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 05 Apr 2014 13:27:16 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 05 Apr 2014 13:27:14 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 6E7EE23889F7; Sat, 5 Apr 2014 13:26:52 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Sat, 05 Apr 2014 13:26:52 -0000 To: commits@cayenne.apache.org From: aadamchik@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140405132652.6E7EE23889F7@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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( descriptor)); - - EntityResolver entityResolver = new EntityResolver( - ((DataChannelDescriptor) project.getRootNode()).getDataMaps()); - - Iterator 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 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(); }