Author: aadamchik
Date: Sun Nov 11 13:21:40 2012
New Revision: 1407974

URL: http://svn.apache.org/viewvc?rev=1407974&view=rev
Log:
CAY-1769 cdbimport improvements: meaningfulPk flag must be turned into a pattern

fixing meaningful PK excludes

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=1407974&r1=1407973&r2=1407974&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 13:21:40 2012
@@ -155,15 +155,17 @@ public class DbImportAction {
 
         final NamePatternMatcher nameFilter = new NamePatternMatcher(logger, 
parameters.getIncludeTables(),
                 parameters.getExcludeTables());
+
+        String meangfulPkExclude = parameters.getMeaningfulPkTables() != null 
? null : "*";
         final NamePatternMatcher meaningfulPkFilter = new 
NamePatternMatcher(logger,
-                parameters.getMeaningfulPkTables(), null);
+                parameters.getMeaningfulPkTables(), meangfulPkExclude);
 
         DbLoader loader = new DbLoader(connection, adapter, loaderDelegate) {
             @Override
             public boolean includeTableName(String tableName) {
                 return nameFilter.isIncluded(tableName);
             }
-            
+
             @Override
             protected EntityMergeSupport createEntityMerger(DataMap map) {
                 return new EntityMergeSupport(map, namingStrategy, true) {
@@ -176,7 +178,6 @@ public class DbImportAction {
             }
         };
 
-
         // TODO: load via DI AdhocObjectFactory
         String namingStrategy = parameters.getNamingStrategy();
         if (namingStrategy != null) {

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=1407974&r1=1407973&r2=1407974&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 13:21:40 2012
@@ -22,9 +22,12 @@ import static org.mockito.Mockito.mock;
 
 import java.io.File;
 import java.io.PrintWriter;
+import java.lang.reflect.Field;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.sql.Connection;
+import java.sql.Types;
+import java.util.List;
 
 import junit.framework.TestCase;
 
@@ -34,7 +37,9 @@ 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.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.resource.URLResource;
 import org.apache.cayenne.tools.configuration.ToolsModule;
 import org.apache.cayenne.util.Util;
@@ -91,6 +96,93 @@ public class DbImportActionTest extends 
         assertTrue(loader2.includeTableName("cx"));
     }
 
+    public void testCreateLoader_MeaningfulPk_Default() throws Exception {
+        Log log = mock(Log.class);
+        Injector i = DIBootstrap.createInjector(new ToolsModule(log), new 
DbImportModule());
+
+        DbImportAction action = i.getInstance(DbImportAction.class);
+
+        DbImportParameters parameters = new DbImportParameters();
+        assertNull(parameters.getMeaningfulPkTables());
+
+        DbLoader loader1 = action.createLoader(parameters, 
mock(DbAdapter.class), mock(Connection.class),
+                mock(DbLoaderDelegate.class));
+
+        DataMap map = new DataMap();
+
+        DbEntity e1 = new DbEntity("e1");
+        DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1);
+        pk.setPrimaryKey(true);
+        e1.addAttribute(pk);
+        DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
+        e1.addAttribute(nonPk);
+
+        map.addDbEntity(e1);
+
+        // DbLoader is so ugly and hard to test..
+        Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
+        dbEntityList.setAccessible(true);
+        List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
+        entities.add(e1);
+
+        loader1.loadObjEntities(map);
+
+        ObjEntity oe1 = map.getObjEntity("E1");
+        assertEquals(1, oe1.getAttributes().size());
+        assertNotNull(oe1.getAttribute("nonPk"));
+    }
+
+    public void testCreateLoader_MeaningfulPk_Specified() throws Exception {
+        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.setMeaningfulPkTables("a*");
+
+        DbLoader loader1 = action.createLoader(parameters, 
mock(DbAdapter.class), mock(Connection.class),
+                mock(DbLoaderDelegate.class));
+
+        // DbLoader is so ugly and hard to test..
+        Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
+        dbEntityList.setAccessible(true);
+        List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
+
+        DataMap map = new DataMap();
+
+        DbEntity e1 = new DbEntity("e1");
+        DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1);
+        pk.setPrimaryKey(true);
+        e1.addAttribute(pk);
+        DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
+        e1.addAttribute(nonPk);
+
+        map.addDbEntity(e1);
+        entities.add(e1);
+        
+        DbEntity a1 = new DbEntity("a1");
+        DbAttribute apk = new DbAttribute("pk", Types.INTEGER, a1);
+        apk.setPrimaryKey(true);
+        a1.addAttribute(apk);
+        DbAttribute anonPk = new DbAttribute("nonPk", Types.INTEGER, a1);
+        a1.addAttribute(anonPk);
+
+        map.addDbEntity(a1);
+        entities.add(a1);
+
+        loader1.loadObjEntities(map);
+
+        ObjEntity oe1 = map.getObjEntity("E1");
+        assertEquals(1, oe1.getAttributes().size());
+        assertNotNull(oe1.getAttribute("nonPk"));
+        
+        ObjEntity oe2 = map.getObjEntity("A1");
+        assertEquals(2, oe2.getAttributes().size());
+        assertNotNull(oe2.getAttribute("nonPk"));
+        assertNotNull(oe2.getAttribute("pk"));
+    }
+
     public void testSaveLoaded() throws Exception {
         Log log = mock(Log.class);
         Injector i = DIBootstrap.createInjector(new ToolsModule(log), new 
DbImportModule());
@@ -146,12 +238,12 @@ public class DbImportActionTest extends 
 
         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());
 


Reply via email to