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/07/18 04:09:38 UTC

svn commit: r422941 - in /incubator/cayenne/main/trunk/cayenne/cayenne-java/src: cayenne/java/org/apache/cayenne/conf/ cayenne/java/org/apache/cayenne/map/ cayenne/java/org/apache/cayenne/project/ tests/java/org/apache/cayenne/project/ tests/resources/...

Author: aadamchik
Date: Mon Jul 17 19:09:38 2006
New Revision: 422941

URL: http://svn.apache.org/viewvc?rev=422941&view=rev
Log:
upgrade code... as dirty as it can get due to the project package limitations 

Modified:
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/conf/RuntimeLoadDelegate.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/map/MapLoader.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/project/ApplicationUpgradeHandler.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/project/ApplicationProjectUpgradeTst.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/resources/upgrade/1.2/cayenne.xml

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/conf/RuntimeLoadDelegate.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/conf/RuntimeLoadDelegate.java?rev=422941&r1=422940&r2=422941&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/conf/RuntimeLoadDelegate.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/conf/RuntimeLoadDelegate.java Mon Jul 17 19:09:38 2006
@@ -76,10 +76,16 @@
 /**
  * Implementation of ConfigLoaderDelegate that creates Cayenne access objects stack.
  * 
- * @author Andrei Adamchik
+ * @author Andrus Adamchik
  */
 public class RuntimeLoadDelegate implements ConfigLoaderDelegate {
 
+    // TODO: andrus, 7/17/2006 - these variables, and project upgrade logic should be
+    // refactored out of the MapLoader. In fact we should either modify raw XML during the
+    // upgrade, or implement some consistent upgrade API across variou loaders
+    final static String _1_2_PACKAGE_PREFIX = "org.objectstyle.cayenne.";
+    final static String _2_0_PACKAGE_PREFIX = "org.apache.cayenne.";
+    
     private static Logger logObj = Logger.getLogger(RuntimeLoadDelegate.class);
 
     protected Map domains = new HashMap();
@@ -288,11 +294,14 @@
         if (nodeName == null) {
             throw new ConfigurationException("Error: <node> without 'name'.");
         }
+        
+        factory = convertClassNameFromV1_2(factory);
+        adapter = convertClassNameFromV1_2(adapter);
 
         if (dataSource == null) {
             logObj.info("Warning: <node> '" + nodeName + "' has no 'datasource'.");
         }
-
+   
         if (factory == null) {
             if (config.getDataSourceFactory() != null) {
                 logObj.info("Warning: <node> '" + nodeName + "' without 'factory'.");
@@ -351,6 +360,22 @@
                     nodeName,
                     "can't load node, unknown domain: " + domainName);
         }
+    }
+    
+    /**
+     * @since 2.0
+     */
+    String convertClassNameFromV1_2(String name) {
+        if (name == null) {
+            return null;
+        }
+
+        // upgrade from v. <= 1.2
+        if (name.startsWith(_1_2_PACKAGE_PREFIX)) {
+            return _2_0_PACKAGE_PREFIX + name.substring(_1_2_PACKAGE_PREFIX.length());
+        }
+
+        return name;
     }
 
     /**

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/map/MapLoader.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/map/MapLoader.java?rev=422941&r1=422940&r2=422941&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/map/MapLoader.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/map/MapLoader.java Mon Jul 17 19:09:38 2006
@@ -82,6 +82,9 @@
  */
 public class MapLoader extends DefaultHandler {
 
+    // TODO: andrus, 7/17/2006 - these variables, and project upgrade logic should be
+    // refactored out of the MapLoader. In fact we should either modify raw XML during the
+    // upgrade, or implement some consistent upgrade API across variou loaders
     final static String _1_2_PACKAGE_PREFIX = "org.objectstyle.cayenne.";
     final static String _2_0_PACKAGE_PREFIX = "org.apache.cayenne.";
 

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/project/ApplicationUpgradeHandler.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/project/ApplicationUpgradeHandler.java?rev=422941&r1=422940&r2=422941&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/project/ApplicationUpgradeHandler.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/project/ApplicationUpgradeHandler.java Mon Jul 17 19:09:38 2006
@@ -112,6 +112,9 @@
 
     static class UpgradeHandler_2_0 extends UpgradeHandler_1_1 {
 
+        final static String _1_2_PACKAGE_PREFIX = "org.objectstyle.cayenne.";
+        final static String _2_0_PACKAGE_PREFIX = "org.apache.cayenne.";
+
         String supportedVersion() {
             return "2.0";
         }

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/project/ApplicationProjectUpgradeTst.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/project/ApplicationProjectUpgradeTst.java?rev=422941&r1=422940&r2=422941&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/project/ApplicationProjectUpgradeTst.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/project/ApplicationProjectUpgradeTst.java Mon Jul 17 19:09:38 2006
@@ -56,17 +56,80 @@
 package org.apache.cayenne.project;
 
 import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
 
+import javax.sql.DataSource;
+
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.conf.ConfigStatus;
+import org.apache.cayenne.conf.Configuration;
+import org.apache.cayenne.conf.DriverDataSourceFactory;
+import org.apache.cayenne.conf.RuntimeLoadDelegate;
+import org.apache.cayenne.conf.RuntimeSaveDelegate;
+import org.apache.cayenne.dba.mysql.MySQLAdapter;
 import org.apache.cayenne.unit.CayenneTestCase;
 import org.apache.cayenne.unit.CayenneTestResources;
+import org.apache.cayenne.util.Util;
 
 public class ApplicationProjectUpgradeTst extends CayenneTestCase {
 
-    public void testUpgrade1_2() throws Exception {
+    public void testUpgradeFrom1_2() throws Exception {
 
         // copy files first as upgrade is done in-place
+        File upgradeScratchDir = new File(getTestDir(), "upgrade/1.2");
+        upgradeScratchDir.mkdirs();
+
+        URL upgradeSrcUrl = CayenneTestResources.getResourceURL("upgrade/1.2");
+        File upgradeSrcDir = new File(new URI(upgradeSrcUrl.toExternalForm()));
+        File[] files = upgradeSrcDir.listFiles();
+        for (int i = 0; i < files.length; i++) {
+            Util.copy(files[i], new File(upgradeScratchDir, files[i].getName()));
+        }
+
+        File cayenneXml = new File(upgradeScratchDir, "cayenne.xml");
+        ApplicationProject p = new ApplicationProject(
+                cayenneXml,
+                buildProjectConfiguration(cayenneXml));
+
+        ApplicationUpgradeHandler handler = ApplicationUpgradeHandler.sharedHandler();
+        assertEquals(Project.UPGRADE_STATUS_OLD, handler.checkForUpgrades(p
+                .getConfiguration(), new ArrayList()));
+        handler.performUpgrade(p);
+
+        ApplicationProject p1 = new ApplicationProject(
+                cayenneXml,
+                buildProjectConfiguration(cayenneXml));
+        assertEquals(Project.UPGRADE_STATUS_CURRENT, handler.checkForUpgrades(p1
+                .getConfiguration(), new ArrayList()));
+
+        DataDomain dd = p1.getConfiguration().getDomain("default");
+        assertNotNull(dd);
+        DataNode dn = dd.getNode("defaultNode");
+        assertNotNull(dn);
+        assertNotNull(dn.getAdapter());
+        assertEquals(MySQLAdapter.class.getName(), dn.getAdapter().getClass().getName());
+        assertEquals(DriverDataSourceFactory.class.getName(), dn.getDataSourceFactory());
+    }
+
+    // coped from the Modeler ProjectAction.
+    protected Configuration buildProjectConfiguration(File projectFile) {
+        ProjectConfiguration config = new ProjectConfiguration(projectFile);
+        config.setLoaderDelegate(new RuntimeLoadDelegate(config, new ConfigStatus()) {
+
+            protected DataNode createDataNode(String nodeName) {
+                return new DataNode(nodeName) {
+
+                    public DataSource getDataSource() {
+                        return dataSource;
+                    }
+                };
+            }
 
-        File cayenne_xml = new File(getTestDir(), "upgrade/1.2/cayenne.xml");
-        CayenneTestResources.copyResourceToFile("upgrade/1.2/cayenne.xml", cayenne_xml);
+        });
+        config.setSaverDelegate(new RuntimeSaveDelegate(config));
+        return config;
     }
 }

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/resources/upgrade/1.2/cayenne.xml
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/resources/upgrade/1.2/cayenne.xml?rev=422941&r1=422940&r2=422941&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/resources/upgrade/1.2/cayenne.xml (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/resources/upgrade/1.2/cayenne.xml Mon Jul 17 19:09:38 2006
@@ -1,30 +1,30 @@
 <?xml version="1.0" encoding="utf-8"?>
 <domains project-version="1.1">
-<domain name="default">
-	<map name="generic" location="generic.map.xml"/>
-	<map name="locking" location="locking.map.xml"/>
-	<map name="map-db1" location="map-db1.map.xml"/>
-	<map name="map-db2" location="map-db2.map.xml"/>
-	<map name="multi-tier" location="multi-tier.map.xml"/>
-	<map name="one-way-map" location="one-way-map.map.xml"/>
-	<map name="people" location="people.map.xml"/>
-	<map name="relationships" location="relationships.map.xml"/>
-	<map name="testmap" location="testmap.map.xml"/>
+	<domain name="default">
+		<map name="generic" location="generic.map.xml" />
+		<map name="locking" location="locking.map.xml" />
+		<map name="map-db1" location="map-db1.map.xml" />
+		<map name="map-db2" location="map-db2.map.xml" />
+		<map name="multi-tier" location="multi-tier.map.xml" />
+		<map name="one-way-map" location="one-way-map.map.xml" />
+		<map name="people" location="people.map.xml" />
+		<map name="relationships" location="relationships.map.xml" />
+		<map name="testmap" location="testmap.map.xml" />
 
-	<node name="defaultNode"
-		 datasource="defaultNode.driver.xml"
-		 factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
-			<map-ref name="generic"/>
-			<map-ref name="one-way-map"/>
-			<map-ref name="map-db2"/>
-			<map-ref name="multi-tier"/>
-			<map-ref name="locking"/>
-			<map-ref name="map-db1"/>
-			<map-ref name="testmap"/>
-			<map-ref name="people"/>
-			<map-ref name="relationships"/>
-	 </node>
-</domain>
-<view name="dataview0" location="dataview0.view.xml"/>
-<view name="dataview1" location="dataview1.view.xml"/>
+		<node name="defaultNode" datasource="defaultNode.driver.xml"
+			adapter="org.objectstyle.cayenne.dba.mysql.MySQLAdapter"
+			factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
+			<map-ref name="generic" />
+			<map-ref name="one-way-map" />
+			<map-ref name="map-db2" />
+			<map-ref name="multi-tier" />
+			<map-ref name="locking" />
+			<map-ref name="map-db1" />
+			<map-ref name="testmap" />
+			<map-ref name="people" />
+			<map-ref name="relationships" />
+		</node>
+	</domain>
+	<view name="dataview0" location="dataview0.view.xml" />
+	<view name="dataview1" location="dataview1.view.xml" />
 </domains>