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 2012/11/11 10:13:26 UTC

svn commit: r1407929 - in /cayenne/main/trunk/framework/cayenne-tools/src: main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java

Author: aadamchik
Date: Sun Nov 11 09:13:25 2012
New Revision: 1407929

URL: http://svn.apache.org/viewvc?rev=1407929&view=rev
Log:
CAY-1758 cdbimport improvements

fixing NPE on save of the existing datamap

Modified:
    cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
    cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java

Modified: cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java?rev=1407929&r1=1407928&r2=1407929&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java Sun Nov 11 09:13:25 2012
@@ -201,15 +201,13 @@ public class DbImportAction {
                 dataMap.clearResultSets();
             }
         } else {
-
-            // the name and URL are important for the save to work
             String dataMapName = name.substring(0, name.length() - DATA_MAP_LOCATION_SUFFIX.length());
-            URL dataMapUrl = dataMapFile.toURI().toURL();
-
             dataMap = new DataMap(dataMapName);
-            dataMap.setConfigurationSource(new URLResource(dataMapUrl));
         }
 
+        URL dataMapUrl = dataMapFile.toURI().toURL();
+        dataMap.setConfigurationSource(new URLResource(dataMapUrl));
+
         // update map defaults
 
         // do not override default package of existing DataMap unless it is

Modified: cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java?rev=1407929&r1=1407928&r2=1407929&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java Sun Nov 11 09:13:25 2012
@@ -21,6 +21,8 @@ package org.apache.cayenne.tools.dbimpor
 import static org.mockito.Mockito.mock;
 
 import java.io.File;
+import java.io.PrintWriter;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.sql.Connection;
 
@@ -32,9 +34,11 @@ import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.resource.URLResource;
 import org.apache.cayenne.tools.configuration.ToolsModule;
 import org.apache.cayenne.util.Util;
+import org.apache.cayenne.util.XMLEncoder;
 import org.apache.commons.logging.Log;
 
 public class DbImportActionTest extends TestCase {
@@ -113,16 +117,13 @@ public class DbImportActionTest extends 
         assertTrue("Has no project version saved", contents.contains("project-version=\""));
     }
 
-    public void testCreateDataMap() throws Exception {
+    public void testCreateDataMap_New() throws Exception {
         Log log = mock(Log.class);
         Injector i = DIBootstrap.createInjector(new ToolsModule(log), new DbImportModule());
 
         DbImportAction action = i.getInstance(DbImportAction.class);
 
-        String packagePath = getClass().getPackage().getName().replace('.', '/');
-        URL packageUrl = getClass().getClassLoader().getResource(packagePath);
-        assertNotNull(packageUrl);
-        URL outUrl = new URL(packageUrl, "dbimport/testCreateDataMap1.map.xml");
+        URL outUrl = dataMapUrl("testCreateDataMap1.map.xml");
 
         File out = new File(outUrl.toURI());
         out.delete();
@@ -134,4 +135,39 @@ public class DbImportActionTest extends 
         assertEquals("testCreateDataMap1", dataMap.getName());
         assertEquals(outUrl, dataMap.getConfigurationSource().getURL());
     }
+
+    public void testCreateDataMap_Existing() throws Exception {
+
+        URL outUrl = dataMapUrl("testCreateDataMap2.map.xml");
+
+        File out = new File(outUrl.toURI());
+        out.delete();
+        assertFalse(out.isFile());
+
+        DataMap tempMap = new DataMap();
+        tempMap.addDbEntity(new DbEntity("X"));
+        
+        PrintWriter writer = new PrintWriter(out);
+        tempMap.encodeAsXML(new XMLEncoder(writer));
+        writer.close();
+        assertTrue(out.isFile());
+        
+        Log log = mock(Log.class);
+        Injector i = DIBootstrap.createInjector(new ToolsModule(log), new DbImportModule());
+
+        DbImportAction action = i.getInstance(DbImportAction.class);
+
+        DbImportParameters parameters = new DbImportParameters();
+        parameters.setDataMapFile(out);
+        DataMap dataMap = action.createDataMap(parameters);
+        assertEquals("testCreateDataMap2", dataMap.getName());
+        assertEquals(outUrl, dataMap.getConfigurationSource().getURL());
+    }
+
+    private URL dataMapUrl(String name) throws MalformedURLException {
+        String packagePath = getClass().getPackage().getName().replace('.', '/');
+        URL packageUrl = getClass().getClassLoader().getResource(packagePath);
+        assertNotNull(packageUrl);
+        return new URL(packageUrl, "dbimport/" + name);
+    }
 }