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>