This is an automated email from the ASF dual-hosted git repository. abulatski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push: new 4656d18 CAY-2611 Exclude system catalogs and schemas when run dbImport without config new 8dd42e2 Merge PR #402 4656d18 is described below commit 4656d18a109254d86081b8c509bba66ce5b8f7eb Author: Arseni Bulatski <ancars...@gmail.com> AuthorDate: Tue Aug 27 16:55:56 2019 +0300 CAY-2611 Exclude system catalogs and schemas when run dbImport without config --- RELEASE-NOTES.txt | 1 + .../org/apache/cayenne/tools/DbImporterTask.java | 32 +++++++-- .../reverse/dbimport/DefaultDbImportAction.java | 25 ++++++-- .../dbsync/reverse/dbload/EntityLoader.java | 4 +- .../reverse/filters/FiltersConfigBuilder.java | 75 +++++++++++++++++++++- .../dbsync/reverse/dbload/EntityLoaderIT.java | 33 ++++++---- .../org/apache/cayenne/tools/DbImportTask.java | 25 +++++++- .../cayenne/unit/SQLServerUnitDbAdapter.java | 5 ++ .../org/apache/cayenne/tools/DbImporterMojo.java | 23 ++++++- .../tools/DbImporterMojoConfigurationTest.java | 21 +++--- .../modeler/dialog/db/load/DbLoaderContext.java | 16 ++++- 11 files changed, 216 insertions(+), 44 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 1a2a9b9..b638050 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -43,6 +43,7 @@ CAY-2592 Modeler: make all datamaps selected in global cgen tab CAY-2593 Add tableTypes field to dbImport config in dataMap CAY-2602 Remove RTRIM of char columns in Sybase CAY-2610 Align methods in ObjectSelect and SQLSelect +CAY-2611 Exclude system catalogs and schemas when run dbImport without config Bug Fixes: diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/DbImporterTask.java b/cayenne-ant/src/main/java/org/apache/cayenne/tools/DbImporterTask.java index f2654ec..e331f23 100644 --- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/DbImporterTask.java +++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/DbImporterTask.java @@ -18,7 +18,14 @@ ****************************************************************/ package org.apache.cayenne.tools; +import javax.sql.DataSource; +import java.io.File; + +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.configuration.server.DataSourceFactory; +import org.apache.cayenne.configuration.server.DbAdapterFactory; import org.apache.cayenne.conn.DataSourceInfo; +import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.DbSyncModule; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule; @@ -42,10 +49,8 @@ import org.apache.cayenne.di.Injector; import org.apache.cayenne.util.Util; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; -import org.slf4j.Logger; import org.apache.tools.ant.Task; - -import java.io.File; +import org.slf4j.Logger; public class DbImporterTask extends Task { @@ -115,19 +120,34 @@ public class DbImporterTask extends Task { @Override public void execute() { + Logger logger = new AntLogger(this); + final Injector injector = DIBootstrap.createInjector(new DbSyncModule(), new ToolsModule(logger), new DbImportModule()); + if (reverseEngineering.getCatalogs().size() == 0 && reverseEngineering.isEmptyContainer()) { config.setUseDataMapReverseEngineering(true); } - config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering).build()); + + DataSourceFactory dataSourceFactory = injector.getInstance(DataSourceFactory.class); + DbAdapterFactory dbAdapterFactory = injector.getInstance(DbAdapterFactory.class); + DataNodeDescriptor dataNodeDescriptor = config.createDataNodeDescriptor(); + try { + DataSource dataSource = dataSourceFactory.getDataSource(dataNodeDescriptor); + DbAdapter dbAdapter = dbAdapterFactory.createAdapter(dataNodeDescriptor, dataSource); + config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering) + .dataSource(dataSource) + .dbAdapter(dbAdapter) + .build()); + } catch (Exception e) { + throw new BuildException("Error getting dataSource", e); + } + validateAttributes(); - Logger logger = new AntLogger(this); config.setLogger(logger); config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading()); config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading()); config.setTableTypes(reverseEngineering.getTableTypes()); - Injector injector = DIBootstrap.createInjector(new DbSyncModule(), new ToolsModule(logger), new DbImportModule()); DbImportConfigurationValidator validator = new DbImportConfigurationValidator(reverseEngineering, config, injector); try { validator.validate(); diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java index f20ae84..2192b54 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java @@ -24,6 +24,7 @@ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.sql.Connection; +import java.sql.SQLException; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -53,6 +54,7 @@ import org.apache.cayenne.dbsync.reverse.dbload.ModelMergeDelegate; import org.apache.cayenne.dbsync.reverse.dbload.ProxyModelMergeDelegate; import org.apache.cayenne.dbsync.reverse.filters.CatalogFilter; import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder; +import org.apache.cayenne.dbsync.reverse.filters.SchemaFilter; import org.apache.cayenne.di.Inject; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.DbEntity; @@ -183,7 +185,7 @@ public class DefaultDbImportAction implements DbImportAction { ReverseEngineering dataMapReverseEngineering = metaData.get(targetDataMap, ReverseEngineering.class); if ((config.isUseDataMapReverseEngineering()) && (dataMapReverseEngineering != null)) { - putReverseEngineeringToConfig(dataMapReverseEngineering, config); + putReverseEngineeringToConfig(dataMapReverseEngineering, config, dataSource, adapter); } if ((dataMapReverseEngineering != null) && (!config.isUseDataMapReverseEngineering())) { logger.warn("Found several dbimport configs. DataMap dbimport config was skipped. " + @@ -229,7 +231,10 @@ public class DefaultDbImportAction implements DbImportAction { return sourceDataMap; } - private void putReverseEngineeringToConfig(ReverseEngineering reverseEngineering, DbImportConfiguration config) { + private void putReverseEngineeringToConfig(ReverseEngineering reverseEngineering, + DbImportConfiguration config, + DataSource dataSource, + DbAdapter dbAdapter) throws SQLException { config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading()); config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading()); config.setStripFromTableNames(reverseEngineering.getStripFromTableNames()); @@ -237,7 +242,10 @@ public class DefaultDbImportAction implements DbImportAction { config.setMeaningfulPkTables(reverseEngineering.getMeaningfulPkTables()); config.setNamingStrategy(reverseEngineering.getNamingStrategy()); config.setFiltersConfig(new FiltersConfigBuilder( - new ReverseEngineering(reverseEngineering)).build()); + new ReverseEngineering(reverseEngineering)) + .dataSource(dataSource) + .dbAdapter(dbAdapter) + .build()); config.setForceDataMapCatalog(reverseEngineering.isForceDataMapCatalog()); config.setForceDataMapSchema(reverseEngineering.isForceDataMapSchema()); config.setDefaultPackage(reverseEngineering.getDefaultPackage()); @@ -352,7 +360,7 @@ public class DefaultDbImportAction implements DbImportAction { } CatalogFilter[] catalogs = config.getDbLoaderConfig().getFiltersConfig().getCatalogs(); - if (catalogs.length > 0) { + if (catalogs.length == 1) { // do not override default catalog of existing DataMap unless it is // explicitly requested by the plugin caller, and the provided catalog is // not a pattern @@ -364,9 +372,12 @@ public class DefaultDbImportAction implements DbImportAction { // do not override default schema of existing DataMap unless it is // explicitly requested by the plugin caller, and the provided schema is // not a pattern - String schema = catalogs[0].schemas[0].name; - if (schema != null && schema.length() > 0 && schema.indexOf('%') < 0) { - dataMap.setDefaultSchema(schema); + SchemaFilter[] schemas = catalogs[0].schemas; + if(schemas.length == 1) { + String schema = schemas[0].name; + if (schema != null && schema.length() > 0 && schema.indexOf('%') < 0) { + dataMap.setDefaultSchema(schema); + } } } diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java index f878358..a4e044d 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java @@ -65,7 +65,9 @@ class EntityLoader extends PerCatalogAndSchemaLoader { return; } - if (!(catalog.name == null || catalog.name.equals(catalogName)) + // check catalogName for null was added because postgres + // for some reasons returns null for table's catalog + if (!(catalog.name == null || catalogName == null || catalog.name.equals(catalogName)) || !(schema.name == null || schema.name.equals(schemaName))) { LOGGER.error(catalogName + "." + schema + "." + schemaName + " wrongly loaded for catalog/schema : " + catalog.name + "." + schema.name); diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java index cb56ce1..50930a0 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java @@ -18,12 +18,20 @@ */ package org.apache.cayenne.dbsync.reverse.filters; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.SortedSet; import java.util.TreeSet; import java.util.regex.Pattern; +import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.reverse.dbimport.Catalog; import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn; import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure; @@ -42,17 +50,82 @@ import org.apache.cayenne.dbsync.reverse.dbimport.Schema; public final class FiltersConfigBuilder { private final ReverseEngineering engineering; + private DataSource dataSource; + private DbAdapter dbAdapter; public FiltersConfigBuilder(ReverseEngineering engineering) { this.engineering = engineering; } - public FiltersConfig build() { + public FiltersConfigBuilder dataSource(DataSource dataSource) { + this.dataSource = dataSource; + return this; + } + + public FiltersConfigBuilder dbAdapter(DbAdapter dbAdapter) { + this.dbAdapter = dbAdapter; + return this; + } + + public FiltersConfig build() throws SQLException { + if(dataSource != null && dbAdapter != null && isEmptyConfig()) { + preBuildFilters(dataSource, dbAdapter); + } + compact(); return new FiltersConfig(transformCatalogs(engineering.getCatalogs())); } + private boolean isEmptyConfig() { + return engineering.getCatalogs().isEmpty() && engineering.getSchemas().isEmpty(); + } + + private void preBuildFilters(DataSource dataSource, DbAdapter dbAdapter) throws SQLException { + try (Connection connection = dataSource.getConnection()) { + DatabaseMetaData databaseMetaData = connection.getMetaData(); + processCatalogs(databaseMetaData, dbAdapter); + } + } + + private void processCatalogs(DatabaseMetaData databaseMetaData, DbAdapter dbAdapter) throws SQLException { + try (ResultSet catalogRs = databaseMetaData.getCatalogs()) { + List<String> systemCatalogs = dbAdapter.getSystemCatalogs(); + List<String> systemSchemas = dbAdapter.getSystemSchemas(); + boolean hasCatalogs = false; + while(catalogRs.next()) { + hasCatalogs = true; + String catalogName = catalogRs.getString("TABLE_CAT"); + if(!systemCatalogs.contains(catalogName)) { + Catalog catalog = new Catalog(catalogName); + List<Schema> schemas = processSchemas(databaseMetaData, catalogName, systemSchemas); + catalog.getSchemas().addAll(schemas); + engineering.addCatalog(catalog); + } + } + if(!hasCatalogs) { + List<Schema> schemas = processSchemas(databaseMetaData, null, systemSchemas); + engineering.getSchemas().addAll(schemas); + } + } + } + + private List<Schema> processSchemas(DatabaseMetaData databaseMetaData, + String catalogName, + List<String> systemSchemas) throws SQLException { + List<Schema> schemas = new ArrayList<>(); + try(ResultSet schemaRs = databaseMetaData.getSchemas(catalogName, null)) { + while(schemaRs.next()) { + String schemaName = schemaRs.getString("TABLE_SCHEM"); + if(!systemSchemas.contains(schemaName)) { + Schema schema = new Schema(schemaName); + schemas.add(schema); + } + } + } + return schemas; + } + private CatalogFilter[] transformCatalogs(Collection<Catalog> catalogs) { CatalogFilter[] catalogFilters = new CatalogFilter[catalogs.size()]; int i = 0; diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoaderIT.java index 762ec63..cd0a816 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoaderIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoaderIT.java @@ -24,8 +24,10 @@ import java.sql.SQLException; import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig; import org.apache.cayenne.dbsync.reverse.filters.PatternFilter; import org.apache.cayenne.dbsync.reverse.filters.TableFilter; +import org.apache.cayenne.di.Inject; import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.unit.UnitDbAdapter; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -36,22 +38,27 @@ import static org.junit.Assert.assertTrue; public class EntityLoaderIT extends BaseLoaderIT { + @Inject + private UnitDbAdapter unitDbAdapter; + @Test public void testGetTablesWithWrongCatalog() throws Exception { - DbLoaderConfiguration config = new DbLoaderConfiguration(); - config.setFiltersConfig( - FiltersConfig.create("WRONG", null, TableFilter.everything(), PatternFilter.INCLUDE_NOTHING) - ); - - EntityLoader loader = new EntityLoader(adapter, config, new DefaultDbLoaderDelegate()); - try { - loader.load(connection.getMetaData(), store); - } catch (SQLException ex) { - // SQL Server will throw exception here. - assertTrue(ex.getMessage().contains("WRONG")); // just check that message is about "WRONG" catalog + if(unitDbAdapter.supportsCatalogs()) { + DbLoaderConfiguration config = new DbLoaderConfiguration(); + config.setFiltersConfig( + FiltersConfig.create("WRONG", null, TableFilter.everything(), PatternFilter.INCLUDE_NOTHING) + ); + + EntityLoader loader = new EntityLoader(adapter, config, new DefaultDbLoaderDelegate()); + try { + loader.load(connection.getMetaData(), store); + } catch (SQLException ex) { + // SQL Server will throw exception here. + assertTrue(ex.getMessage().contains("WRONG")); // just check that message is about "WRONG" catalog + } + + assertTrue("Store is not empty", store.getDbEntities().isEmpty()); } - - assertTrue("Store is not empty", store.getDbEntities().isEmpty()); } @Test diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java index 1f43cfd..fbd9d52 100644 --- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java +++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java @@ -19,9 +19,14 @@ package org.apache.cayenne.tools; +import javax.sql.DataSource; import java.io.File; import groovy.lang.Closure; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.configuration.server.DataSourceFactory; +import org.apache.cayenne.configuration.server.DbAdapterFactory; +import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.DbSyncModule; import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule; import org.apache.cayenne.dbsync.reverse.dbimport.DbImportAction; @@ -29,6 +34,7 @@ import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfiguration; import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfigurationValidator; import org.apache.cayenne.dbsync.reverse.dbimport.DbImportModule; import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig; import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder; import org.apache.cayenne.di.ClassLoaderManager; import org.apache.cayenne.di.DIBootstrap; @@ -73,11 +79,25 @@ public class DbImportTask extends BaseCayenneTask { public void runImport() { dataSource.validate(); - final DbImportConfiguration config = createConfig(); - final Injector injector = DIBootstrap.createInjector(new DbSyncModule(), new ToolsModule(getLogger()), new DbImportModule(), binder -> binder.bind(ClassLoaderManager.class).toInstance(new GradlePluginClassLoaderManager(getProject()))); + final DbImportConfiguration config = createConfig(); + + DataSourceFactory dataSourceFactory = injector.getInstance(DataSourceFactory.class); + DbAdapterFactory dbAdapterFactory = injector.getInstance(DbAdapterFactory.class); + DataNodeDescriptor dataNodeDescriptor = config.createDataNodeDescriptor(); + try { + DataSource dataSource = dataSourceFactory.getDataSource(dataNodeDescriptor); + DbAdapter dbAdapter = dbAdapterFactory.createAdapter(dataNodeDescriptor, dataSource); + config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering) + .dataSource(dataSource) + .dbAdapter(dbAdapter) + .build()); + } catch (Exception e) { + throw new TaskExecutionException(this, e); + } + final DbImportConfigurationValidator validator = new DbImportConfigurationValidator(reverseEngineering, config, injector); try { validator.validate(); @@ -122,7 +142,6 @@ public class DbImportTask extends BaseCayenneTask { config.setTableTypes(reverseEngineering.getTableTypes()); config.setMeaningfulPkTables(reverseEngineering.getMeaningfulPkTables()); config.setNamingStrategy(reverseEngineering.getNamingStrategy()); - config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering).build()); config.setForceDataMapCatalog(reverseEngineering.isForceDataMapCatalog()); config.setForceDataMapSchema(reverseEngineering.isForceDataMapSchema()); config.setDefaultPackage(reverseEngineering.getDefaultPackage()); diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java index 99ba830..ba7ff83 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java @@ -91,4 +91,9 @@ public class SQLServerUnitDbAdapter extends SybaseUnitDbAdapter { public boolean supportsSelectBooleanExpression() { return false; } + + @Override + public boolean supportsCatalogs() { + return true; + } } diff --git a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java index c1c77b8..94a5c15 100644 --- a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java +++ b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java @@ -18,8 +18,13 @@ ****************************************************************/ package org.apache.cayenne.tools; +import javax.sql.DataSource; import java.io.File; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.configuration.server.DataSourceFactory; +import org.apache.cayenne.configuration.server.DbAdapterFactory; +import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.DbSyncModule; import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule; import org.apache.cayenne.dbsync.reverse.dbimport.DbImportAction; @@ -100,11 +105,26 @@ public class DbImporterMojo extends AbstractMojo { // check missing data source parameters dataSource.validate(); - final DbImportConfiguration config = createConfig(logger); final Injector injector = DIBootstrap.createInjector( new DbSyncModule(), new ToolsModule(logger), new DbImportModule(), binder -> binder.bind(ClassLoaderManager.class).toInstance(new MavenPluginClassLoaderManager(project))); + final DbImportConfiguration config = createConfig(logger); + + DataSourceFactory dataSourceFactory = injector.getInstance(DataSourceFactory.class); + DbAdapterFactory dbAdapterFactory = injector.getInstance(DbAdapterFactory.class); + DataNodeDescriptor dataNodeDescriptor = config.createDataNodeDescriptor(); + try { + DataSource dataSource = dataSourceFactory.getDataSource(dataNodeDescriptor); + DbAdapter dbAdapter = dbAdapterFactory.createAdapter(dataNodeDescriptor, dataSource); + config.setFiltersConfig(new FiltersConfigBuilder(dbImportConfig) + .dataSource(dataSource) + .dbAdapter(dbAdapter) + .build()); + } catch (Exception e) { + throw new MojoExecutionException("Error getting dataSource", e); + } + final DbImportConfigurationValidator validator = new DbImportConfigurationValidator( dbImportConfig, config, injector); @@ -142,7 +162,6 @@ public class DbImporterMojo extends AbstractMojo { config.setAdapter(adapter); config.setDefaultPackage(dbImportConfig.getDefaultPackage()); config.setDriver(dataSource.getDriver()); - config.setFiltersConfig(new FiltersConfigBuilder(dbImportConfig).build()); config.setForceDataMapCatalog(dbImportConfig.isForceDataMapCatalog()); config.setForceDataMapSchema(dbImportConfig.isForceDataMapSchema()); config.setLogger(logger); diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java index 002a97d..6ca8ef2 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java +++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java @@ -18,21 +18,22 @@ ****************************************************************/ package org.apache.cayenne.tools; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeSet; +import java.util.regex.Pattern; + import org.apache.cayenne.dbsync.reverse.dbimport.Catalog; import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfiguration; import org.apache.cayenne.dbsync.reverse.dbimport.Schema; import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig; +import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder; import org.apache.cayenne.dbsync.reverse.filters.IncludeTableFilter; import org.apache.cayenne.dbsync.reverse.filters.PatternFilter; import org.apache.cayenne.dbsync.reverse.filters.TableFilter; -import org.slf4j.Logger; import org.apache.maven.plugin.testing.AbstractMojoTestCase; import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; -import java.util.TreeSet; -import java.util.regex.Pattern; +import org.slf4j.Logger; import static org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineeringUtils.*; import static org.mockito.Mockito.mock; @@ -67,8 +68,12 @@ public class DbImporterMojoConfigurationTest extends AbstractMojoTestCase { @Test public void testLoadSchema2() throws Exception { - FiltersConfig filters = getCdbImport("pom-schema-2.xml").createConfig(mock(Logger.class)) - .getDbLoaderConfig().getFiltersConfig(); + DbImporterMojo dbImporterMojo = getCdbImport("pom-schema-2.xml"); + DbImportConfiguration dbImportConfiguration = dbImporterMojo.createConfig(mock(Logger.class)); + dbImportConfiguration.setFiltersConfig(new FiltersConfigBuilder( + dbImporterMojo.getReverseEngineering()).build()); + + FiltersConfig filters = dbImportConfiguration.getDbLoaderConfig().getFiltersConfig(); TreeSet<IncludeTableFilter> includes = new TreeSet<>(); includes.add(new IncludeTableFilter(null, new PatternFilter().exclude("^ETL_.*"))); diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java index 6a2febf..ba9a436 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java @@ -19,7 +19,8 @@ package org.apache.cayenne.modeler.dialog.db.load; -import javax.swing.*; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; import java.io.File; import java.sql.Connection; @@ -32,6 +33,7 @@ import org.apache.cayenne.dbsync.reverse.dbload.DbLoaderDelegate; import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.ClassLoadingService; import org.apache.cayenne.modeler.ProjectController; import org.apache.cayenne.modeler.editor.dbimport.DbImportView; import org.apache.cayenne.modeler.pref.DBConnectionInfo; @@ -152,13 +154,21 @@ public class DbLoaderContext { // Fill config from metadata reverseEngineering private void fillConfig(DbImportConfiguration config, DBConnectionInfo connectionInfo, ReverseEngineering reverseEngineering) { - FiltersConfigBuilder filtersConfigBuilder = new FiltersConfigBuilder(reverseEngineering); config.setAdapter(connectionInfo.getDbAdapter()); config.setUsername(connectionInfo.getUserName()); config.setPassword(connectionInfo.getPassword()); config.setDriver(connectionInfo.getJdbcDriver()); config.setUrl(connectionInfo.getUrl()); - config.getDbLoaderConfig().setFiltersConfig(filtersConfigBuilder.build()); + + try { + ClassLoadingService classLoadingService = Application.getInstance().getClassLoadingService(); + config.getDbLoaderConfig().setFiltersConfig(new FiltersConfigBuilder(reverseEngineering) + .dataSource(connectionInfo.makeDataSource(classLoadingService)) + .dbAdapter(connectionInfo.makeAdapter(classLoadingService)) + .build()); + } catch (Exception e) { + processException(e, "Fail while building configs."); + } config.setMeaningfulPkTables(reverseEngineering.getMeaningfulPkTables()); config.setNamingStrategy(reverseEngineering.getNamingStrategy()); config.setDefaultPackage(reverseEngineering.getDefaultPackage());