You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/08/27 14:55:08 UTC
[cayenne] branch STABLE-4.1 updated: CAY-2611 Exclude system
catalogs and schemas when run dbImport without config
This is an automated email from the ASF dual-hosted git repository.
abulatski pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/STABLE-4.1 by this push:
new 852cf28 CAY-2611 Exclude system catalogs and schemas when run dbImport without config
852cf28 is described below
commit 852cf283e44d794351737b64116a0f300dbfd081
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Tue Aug 27 16:55:56 2019 +0300
CAY-2611 Exclude system catalogs and schemas when run dbImport without config
(cherry picked from commit 4656d18a109254d86081b8c509bba66ce5b8f7eb)
---
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 6fa824c..d0a8e56 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -15,6 +15,7 @@ Date:
Changes/New Features:
CAY-2592 Modeler: make all datamaps selected in global cgen tab
CAY-2593 Add tableTypes field to dbImport config in dataMap
+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 a241e8c..eda28d4 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 c5bb4af..8349944 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;
@@ -55,6 +56,7 @@ import org.apache.cayenne.dbsync.reverse.filters.CatalogFilter;
import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
+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;
@@ -188,7 +190,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. " +
@@ -236,7 +238,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());
@@ -244,7 +249,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());
@@ -377,7 +385,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
@@ -389,9 +397,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 2addeda..0859e9c 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 7513e99..bca209a 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 0ff5d8b..2cf035f 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 7a29cf9..b4c4fa7 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 d25c97b..a66c261 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 b98f4b7..c375436 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 6bae7e0..6251d7b 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 618b665..e038483 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());