http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-skipRelationshipsLoading.xml
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-skipRelationshipsLoading.xml
 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-skipRelationshipsLoading.xml
new file mode 100644
index 0000000..9eac789
--- /dev/null
+++ 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-skipRelationshipsLoading.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+
+<reverseEngineering>
+    <skipRelationshipsLoading>true</skipRelationshipsLoading>
+</reverseEngineering>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-tableTypes.xml
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-tableTypes.xml
 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-tableTypes.xml
new file mode 100644
index 0000000..f9ea8ca
--- /dev/null
+++ 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering-tableTypes.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+
+<reverseEngineering>
+    <tableType>type1</tableType>
+
+    <tableType name="type2" />
+
+    <tableType>
+        <name>type3</name>
+    </tableType>
+</reverseEngineering>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
new file mode 100644
index 0000000..d653564
--- /dev/null
+++ 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<reverseEngineering>
+</reverseEngineering>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
index ebbb7e8..36fe7f1 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
@@ -26,6 +26,17 @@ 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.dbimport.AntNestedElement;
+import org.apache.cayenne.dbimport.Catalog;
+import org.apache.cayenne.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbimport.ExcludeTable;
+import org.apache.cayenne.dbimport.FiltersConfigBuilder;
+import org.apache.cayenne.dbimport.IncludeColumn;
+import org.apache.cayenne.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbimport.IncludeTable;
+import org.apache.cayenne.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbimport.Schema;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.map.naming.DefaultNameGenerator;
@@ -33,16 +44,6 @@ import org.apache.cayenne.tools.configuration.ToolsModule;
 import org.apache.cayenne.tools.dbimport.DbImportAction;
 import org.apache.cayenne.tools.dbimport.DbImportConfiguration;
 import org.apache.cayenne.tools.dbimport.DbImportModule;
-import org.apache.cayenne.tools.dbimport.config.AntNestedElement;
-import org.apache.cayenne.tools.dbimport.config.Catalog;
-import org.apache.cayenne.tools.dbimport.config.ExcludeColumn;
-import org.apache.cayenne.tools.dbimport.config.ExcludeProcedure;
-import org.apache.cayenne.tools.dbimport.config.FiltersConfigBuilder;
-import org.apache.cayenne.tools.dbimport.config.IncludeColumn;
-import org.apache.cayenne.tools.dbimport.config.IncludeProcedure;
-import org.apache.cayenne.tools.dbimport.config.IncludeTable;
-import org.apache.cayenne.tools.dbimport.config.ReverseEngineering;
-import org.apache.cayenne.tools.dbimport.config.Schema;
 import org.apache.cayenne.util.Util;
 import org.apache.commons.logging.Log;
 import org.apache.tools.ant.BuildException;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/ExcludeTable.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/ExcludeTable.java 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/ExcludeTable.java
deleted file mode 100644
index 779a9fa..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/ExcludeTable.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools;
-
-import org.apache.cayenne.tools.dbimport.config.PatternParam;
-
-/**
- * @since 4.0.
- */
-public class ExcludeTable extends PatternParam {
-    public ExcludeTable() {
-    }
-
-    public ExcludeTable(String pattern) {
-        super(pattern);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
index 2683d97..f70e83c 100644
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
+++ 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
@@ -18,257 +18,11 @@
  */
 package org.apache.cayenne.tools.dbimport;
 
-import static org.apache.commons.lang.StringUtils.isBlank;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.sql.Connection;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.sql.DataSource;
-
-import org.apache.cayenne.access.DbLoader;
-import org.apache.cayenne.configuration.ConfigurationTree;
-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.di.Inject;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.map.MapLoader;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.merge.AbstractToModelToken;
-import org.apache.cayenne.merge.AddRelationshipToDb;
-import org.apache.cayenne.merge.DbMerger;
-import org.apache.cayenne.merge.ExecutingMergerContext;
-import org.apache.cayenne.merge.MergerContext;
-import org.apache.cayenne.merge.MergerFactory;
-import org.apache.cayenne.merge.MergerToken;
-import org.apache.cayenne.merge.ModelMergeDelegate;
-import org.apache.cayenne.merge.ProxyModelMergeDelegate;
-import org.apache.cayenne.project.Project;
-import org.apache.cayenne.project.ProjectSaver;
-import org.apache.cayenne.resource.URLResource;
-import org.apache.cayenne.validation.SimpleValidationFailure;
-import org.apache.cayenne.validation.ValidationFailure;
-import org.apache.cayenne.validation.ValidationResult;
-import org.apache.commons.logging.Log;
-import org.xml.sax.InputSource;
-
 /**
- * A thin wrapper around {@link DbLoader} that encapsulates DB import logic for
- * the benefit of Ant and Maven db importers.
- * 
  * @since 4.0
  */
-public class DbImportAction {
-
-       private final ProjectSaver projectSaver;
-       private final Log logger;
-       private final DataSourceFactory dataSourceFactory;
-       private final DbAdapterFactory adapterFactory;
-       private final MapLoader mapLoader;
-
-       public DbImportAction(@Inject Log logger, @Inject ProjectSaver 
projectSaver,
-                       @Inject DataSourceFactory dataSourceFactory, @Inject 
DbAdapterFactory adapterFactory,
-                       @Inject MapLoader mapLoader) {
-               this.logger = logger;
-               this.projectSaver = projectSaver;
-               this.dataSourceFactory = dataSourceFactory;
-               this.adapterFactory = adapterFactory;
-               this.mapLoader = mapLoader;
-       }
-
-       public void execute(DbImportConfiguration config) throws Exception {
-
-               if (logger.isDebugEnabled()) {
-                       logger.debug("DB connection: " + 
config.getDataSourceInfo());
-               }
-
-               if (logger.isDebugEnabled()) {
-                       logger.debug(config);
-               }
-
-               DataNodeDescriptor dataNodeDescriptor = 
config.createDataNodeDescriptor();
-               DataSource dataSource = 
dataSourceFactory.getDataSource(dataNodeDescriptor);
-               DbAdapter adapter = 
adapterFactory.createAdapter(dataNodeDescriptor, dataSource);
-
-               DataMap loadedFomDb;
-               try (Connection c = dataSource.getConnection()) {
-                       loadedFomDb = load(config, adapter, c);
-               }
-
-               if (loadedFomDb == null) {
-                       logger.info("Nothing was loaded from db.");
-                       return;
-               }
-
-               DataMap existing = loadExistingDataMap(config.getDataMapFile());
-               if (existing == null) {
-                       logger.info("");
-                       File file = config.getDataMapFile();
-                       logger.info("Map file does not exist. Loaded db model 
will be saved into '"
-                                       + (file == null ? "null" : 
file.getAbsolutePath() + "'"));
-
-                       saveLoaded(config.initializeDataMap(loadedFomDb));
-               } else {
-                       MergerFactory mergerFactory = adapter.mergerFactory();
-
-                       List<MergerToken> mergeTokens = new 
DbMerger(mergerFactory).createMergeTokens(existing, loadedFomDb,
-                                       config.getDbLoaderConfig());
-                       if (mergeTokens.isEmpty()) {
-                               logger.info("");
-                               logger.info("Detected changes: No changes to 
import.");
-                               return;
-                       }
-
-                       if (!isBlank(config.getDefaultPackage())) {
-                               
existing.setDefaultPackage(config.getDefaultPackage());
-                       }
-
-                       final Collection<ObjEntity> loadedObjEntities = new 
LinkedList<ObjEntity>();
-                       DataMap executed = execute(new 
ProxyModelMergeDelegate(config.createMergeDelegate()) {
-                               @Override
-                               public void objEntityAdded(ObjEntity ent) {
-                                       loadedObjEntities.add(ent);
-
-                                       super.objEntityAdded(ent);
-                               }
-
-                       }, existing, log(sort(reverse(mergerFactory, 
mergeTokens))));
-
-                       DbLoader.flattenManyToManyRelationships(executed, 
loadedObjEntities, config.getNameGenerator());
-
-                       relationshipsSanity(executed);
-
-                       saveLoaded(executed);
-               }
-       }
-
-       private void relationshipsSanity(DataMap executed) {
-               for (ObjEntity objEntity : executed.getObjEntities()) {
-
-                       List<ObjRelationship> rels = new 
LinkedList<ObjRelationship>(objEntity.getRelationships());
-                       for (ObjRelationship rel : rels) {
-                               if (rel.getSourceEntity() == null || 
rel.getTargetEntity() == null) {
-                                       logger.error("Incorrect obj 
relationship source or target entity is null: " + rel);
-
-                                       
objEntity.removeRelationship(rel.getName());
-                               }
-                       }
-               }
-       }
-
-       protected static List<MergerToken> sort(List<MergerToken> reverse) {
-               Collections.sort(reverse, new Comparator<MergerToken>() {
-                       @Override
-                       public int compare(MergerToken o1, MergerToken o2) {
-                               if (o1 instanceof AddRelationshipToDb && o2 
instanceof AddRelationshipToDb) {
-                                       return 0;
-                               }
-
-                               if (!(o1 instanceof AddRelationshipToDb || o2 
instanceof AddRelationshipToDb)) {
-                                       return 
o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName());
-                               }
-
-                               return o1 instanceof AddRelationshipToDb ? 1 : 
-1;
-                       }
-               });
-
-               return reverse;
-       }
-
-       private Collection<MergerToken> log(List<MergerToken> tokens) {
-               logger.info("");
-               if (tokens.isEmpty()) {
-                       logger.info("Detected changes: No changes to import.");
-                       return tokens;
-               }
-
-               logger.info("Detected changes: ");
-               for (MergerToken token : tokens) {
-                       logger.info(String.format("    %-20s %s", 
token.getTokenName(), token.getTokenValue()));
-               }
-               logger.info("");
-
-               return tokens;
-       }
-
-       private DataMap loadExistingDataMap(File dataMapFile) throws 
IOException {
-               if (dataMapFile != null && dataMapFile.exists() && 
dataMapFile.canRead()) {
-                       DataMap dataMap = mapLoader.loadDataMap(new 
InputSource(dataMapFile.getCanonicalPath()));
-                       dataMap.setNamespace(new 
EntityResolver(Collections.singleton(dataMap)));
-                       dataMap.setConfigurationSource(new 
URLResource(dataMapFile.toURI().toURL()));
-
-                       return dataMap;
-               }
-
-               return null;
-       }
-
-       private List<MergerToken> reverse(MergerFactory mergerFactory, 
Iterable<MergerToken> mergeTokens)
-                       throws IOException {
-               List<MergerToken> tokens = new LinkedList<MergerToken>();
-               for (MergerToken token : mergeTokens) {
-                       if (token instanceof AbstractToModelToken) {
-                               continue;
-                       }
-                       tokens.add(token.createReverse(mergerFactory));
-               }
-               return tokens;
-       }
-
-       /**
-        * Performs configured schema operations via DbGenerator.
-        */
-       private DataMap execute(ModelMergeDelegate mergeDelegate, DataMap 
dataMap, Collection<MergerToken> tokens) {
-               MergerContext mergerContext = new 
ExecutingMergerContext(dataMap, null, null, mergeDelegate);
-
-               for (MergerToken tok : tokens) {
-                       try {
-                               tok.execute(mergerContext);
-                       } catch (Throwable th) {
-                               String message = "Migration Error. Can't apply 
changes from token: " + tok.getTokenName() + " ("
-                                               + tok.getTokenValue() + ")";
-
-                               logger.error(message, th);
-                               
mergerContext.getValidationResult().addFailure(new SimpleValidationFailure(th, 
message));
-                       }
-               }
-
-               ValidationResult failures = mergerContext.getValidationResult();
-               if (failures == null || !failures.hasFailures()) {
-                       logger.info("Migration Complete Successfully.");
-               } else {
-                       logger.info("Migration Complete.");
-                       logger.warn("Migration finished. The following 
problem(s) were ignored.");
-                       for (ValidationFailure failure : 
failures.getFailures()) {
-                               logger.warn(failure.toString());
-                       }
-               }
-
-               return dataMap;
-       }
-
-       void saveLoaded(DataMap dataMap) throws FileNotFoundException {
-               ConfigurationTree<DataMap> projectRoot = new 
ConfigurationTree<DataMap>(dataMap);
-               Project project = new Project(projectRoot);
-               projectSaver.save(project);
-       }
-
-       private DataMap load(DbImportConfiguration config, DbAdapter adapter, 
Connection connection) throws Exception {
-               DataMap dataMap = config.createDataMap();
-
-               DbLoader loader = config.createLoader(adapter, connection, 
config.createLoaderDelegate());
-               loader.load(dataMap, config.getDbLoaderConfig());
-
-               return dataMap;
-       }
+public interface DbImportAction {
+       
+    void execute(DbImportConfiguration config) throws Exception;
+       
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportActionDefault.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportActionDefault.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportActionDefault.java
new file mode 100644
index 0000000..aa58e56
--- /dev/null
+++ 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportActionDefault.java
@@ -0,0 +1,281 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
+ */
+package org.apache.cayenne.tools.dbimport;
+
+import org.apache.cayenne.access.DbLoader;
+import org.apache.cayenne.configuration.ConfigurationTree;
+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.di.Inject;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.map.MapLoader;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.merge.AbstractToModelToken;
+import org.apache.cayenne.merge.AddRelationshipToDb;
+import org.apache.cayenne.merge.DbMerger;
+import org.apache.cayenne.merge.ExecutingMergerContext;
+import org.apache.cayenne.merge.MergerContext;
+import org.apache.cayenne.merge.MergerFactory;
+import org.apache.cayenne.merge.MergerToken;
+import org.apache.cayenne.merge.ModelMergeDelegate;
+import org.apache.cayenne.merge.ProxyModelMergeDelegate;
+import org.apache.cayenne.project.Project;
+import org.apache.cayenne.project.ProjectSaver;
+import org.apache.cayenne.resource.URLResource;
+import org.apache.cayenne.validation.SimpleValidationFailure;
+import org.apache.cayenne.validation.ValidationFailure;
+import org.apache.cayenne.validation.ValidationResult;
+import org.apache.commons.logging.Log;
+import org.xml.sax.InputSource;
+
+import javax.sql.DataSource;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.sql.Connection;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.apache.commons.lang.StringUtils.isBlank;
+
+/**
+ * A thin wrapper around {@link DbLoader} that encapsulates DB import logic for
+ * the benefit of Ant and Maven db importers.
+ *
+ * @since 4.0
+ */
+public class DbImportActionDefault implements DbImportAction {
+
+    private final ProjectSaver projectSaver;
+    private final Log logger;
+    private final DataSourceFactory dataSourceFactory;
+    private final DbAdapterFactory adapterFactory;
+    private final MapLoader mapLoader;
+
+    public DbImportActionDefault(@Inject Log logger,
+                                 @Inject ProjectSaver projectSaver,
+                                 @Inject DataSourceFactory dataSourceFactory,
+                                 @Inject DbAdapterFactory adapterFactory,
+                                 @Inject MapLoader mapLoader) {
+        this.logger = logger;
+        this.projectSaver = projectSaver;
+        this.dataSourceFactory = dataSourceFactory;
+        this.adapterFactory = adapterFactory;
+        this.mapLoader = mapLoader;
+    }
+
+    public void execute(DbImportConfiguration config) throws Exception {
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("DB connection: " + config.getDataSourceInfo());
+        }
+
+        if (logger.isDebugEnabled()) {
+            logger.debug(config);
+        }
+
+        DataNodeDescriptor dataNodeDescriptor = 
config.createDataNodeDescriptor();
+        DataSource dataSource = 
dataSourceFactory.getDataSource(dataNodeDescriptor);
+        DbAdapter adapter = adapterFactory.createAdapter(dataNodeDescriptor, 
dataSource);
+
+        DataMap loadedFomDb = load(config, adapter, 
dataSource.getConnection());
+        if (loadedFomDb == null) {
+            logger.info("Nothing was loaded from db.");
+            return;
+        }
+
+        DataMap existing = loadExistingDataMap(config.getDataMapFile());
+        if (existing == null) {
+            logger.info("");
+            File file = config.getDataMapFile();
+            logger.info("Map file does not exist. Loaded db model will be 
saved into '"
+                    + (file == null ? "null" : file.getAbsolutePath() + "'"));
+
+            saveLoaded(config.initializeDataMap(loadedFomDb));
+        } else {
+            MergerFactory mergerFactory = adapter.mergerFactory();
+
+            List<MergerToken> mergeTokens = new DbMerger(mergerFactory)
+                    .createMergeTokens(existing, loadedFomDb, 
config.getDbLoaderConfig());
+            if (mergeTokens.isEmpty()) {
+                logger.info("");
+                logger.info("Detected changes: No changes to import.");
+                return;
+            }
+
+            if (!isBlank(config.getDefaultPackage())) {
+                existing.setDefaultPackage(config.getDefaultPackage());
+            }
+
+            final Collection<ObjEntity> loadedObjEntities = new LinkedList<>();
+            DataMap executed = execute(new 
ProxyModelMergeDelegate(config.createMergeDelegate()) {
+                @Override
+                public void objEntityAdded(ObjEntity ent) {
+                    loadedObjEntities.add(ent);
+
+                    super.objEntityAdded(ent);
+                }
+
+            }, existing, log(sort(reverse(mergerFactory, mergeTokens))));
+
+            DbLoader.flattenManyToManyRelationships(executed, 
loadedObjEntities, config.getNameGenerator());
+
+            relationshipsSanity(executed);
+
+
+            saveLoaded(executed);
+        }
+    }
+
+    private void relationshipsSanity(DataMap executed) {
+        for (ObjEntity objEntity : executed.getObjEntities()) {
+            List<ObjRelationship> rels = new 
LinkedList<>(objEntity.getRelationships());
+            for (ObjRelationship rel : rels) {
+                if (rel.getSourceEntity() == null || rel.getTargetEntity() == 
null) {
+                    logger.error("Incorrect obj relationship source or target 
entity is null: " + rel);
+
+                    objEntity.removeRelationship(rel.getName());
+                }
+            }
+        }
+    }
+
+    protected static List<MergerToken> sort(List<MergerToken> reverse) {
+        Collections.sort(reverse, new Comparator<MergerToken>() {
+            @Override
+            public int compare(MergerToken o1, MergerToken o2) {
+                if (o1 instanceof AddRelationshipToDb && o2 instanceof 
AddRelationshipToDb) {
+                    return 0;
+                }
+
+                if (!(o1 instanceof AddRelationshipToDb || o2 instanceof 
AddRelationshipToDb)) {
+                    return 
o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName());
+                }
+
+                return o1 instanceof AddRelationshipToDb ? 1 : -1;
+            }
+        });
+
+        return reverse;
+    }
+
+    private Collection<MergerToken> log(List<MergerToken> tokens) {
+        logger.info("");
+        if (tokens.isEmpty()) {
+            logger.info("Detected changes: No changes to import.");
+            return tokens;
+        }
+
+        logger.info("Detected changes: ");
+        for (MergerToken token : tokens) {
+            logger.info(String.format("    %-20s %s", token.getTokenName(), 
token.getTokenValue()));
+        }
+        logger.info("");
+
+        return tokens;
+    }
+
+    protected DataMap loadExistingDataMap(File dataMapFile) throws IOException 
{
+        if (dataMapFile != null && dataMapFile.exists() && 
dataMapFile.canRead()) {
+            DataMap dataMap = mapLoader.loadDataMap(new 
InputSource(dataMapFile.getCanonicalPath()));
+            dataMap.setNamespace(new 
EntityResolver(Collections.singleton(dataMap)));
+            dataMap.setConfigurationSource(new 
URLResource(dataMapFile.toURI().toURL()));
+
+            return dataMap;
+        }
+
+        return null;
+    }
+
+    private List<MergerToken> reverse(MergerFactory mergerFactory, 
Iterable<MergerToken> mergeTokens) throws IOException {
+        List<MergerToken> tokens = new LinkedList<>();
+        for (MergerToken token : mergeTokens) {
+            if (token instanceof AbstractToModelToken) {
+                continue;
+            }
+            tokens.add(token.createReverse(mergerFactory));
+        }
+        return tokens;
+    }
+
+    /**
+     * Performs configured schema operations via DbGenerator.
+     */
+    private DataMap execute(ModelMergeDelegate mergeDelegate, DataMap dataMap, 
Collection<MergerToken> tokens) {
+        MergerContext mergerContext = new ExecutingMergerContext(
+                dataMap, null, null, mergeDelegate);
+
+        for (MergerToken tok : tokens) {
+            try {
+                tok.execute(mergerContext);
+            } catch (Throwable th) {
+                String message = "Migration Error. Can't apply changes from 
token: " + tok.getTokenName()
+                        + " (" + tok.getTokenValue() + ")";
+
+                logger.error(message, th);
+                mergerContext.getValidationResult().addFailure(new 
SimpleValidationFailure(th, message));
+            }
+        }
+
+        ValidationResult failures = mergerContext.getValidationResult();
+        if (failures == null || !failures.hasFailures()) {
+            logger.info("Migration Complete Successfully.");
+        } else {
+            logger.info("Migration Complete.");
+            logger.warn("Migration finished. The following problem(s) were 
ignored.");
+            for (ValidationFailure failure : failures.getFailures()) {
+                logger.warn(failure.toString());
+            }
+        }
+
+        return dataMap;
+    }
+
+    private DbLoader getLoader(DbImportConfiguration config, DbAdapter 
adapter, Connection connection) throws InstantiationException, 
IllegalAccessException, ClassNotFoundException {
+        return config.createLoader(adapter, connection, 
config.createLoaderDelegate());
+    }
+
+    protected void saveLoaded(DataMap dataMap) throws FileNotFoundException {
+        ConfigurationTree<DataMap> projectRoot = new 
ConfigurationTree<>(dataMap);
+        Project project = new Project(projectRoot);
+        projectSaver.save(project);
+    }
+
+    protected DataMap load(DbImportConfiguration config, DbAdapter adapter, 
Connection connection) throws Exception {
+        DataMap dataMap = config.createDataMap();
+
+        try {
+            DbLoader loader = config.createLoader(adapter, connection, 
config.createLoaderDelegate());
+            loader.load(dataMap, config.getDbLoaderConfig());
+        } finally {
+            if (connection != null) {
+                connection.close();
+            }
+        }
+
+        return dataMap;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
index f99a1b2..1b4505a 100644
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
+++ 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
@@ -19,9 +19,7 @@
 package org.apache.cayenne.tools.dbimport;
 
 import org.apache.cayenne.configuration.ConfigurationNameMapper;
-import org.apache.cayenne.configuration.DataMapLoader;
 import org.apache.cayenne.configuration.DefaultConfigurationNameMapper;
-import org.apache.cayenne.configuration.XMLDataMapLoader;
 import org.apache.cayenne.di.Binder;
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.map.MapLoader;
@@ -38,7 +36,7 @@ import org.apache.cayenne.tools.configuration.ToolsModule;
 public class DbImportModule implements Module {
 
     public void configure(Binder binder) {
-        binder.bind(DbImportAction.class).to(DbImportAction.class);
+        binder.bind(DbImportAction.class).to(DbImportActionDefault.class);
         binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
         
binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
         binder.bind(MapLoader.class).to(MapLoader.class);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/AntNestedElement.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/AntNestedElement.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/AntNestedElement.java
deleted file mode 100644
index c8a801b..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/AntNestedElement.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-/**
- * Additional class to handle <name> element under <catalog> and <schema>
- *      required for ant configuration
- *
- * @since 4.0.
- */
-public class AntNestedElement {
-
-    private String name;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void addText(String str) {
-        name = str;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Catalog.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Catalog.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Catalog.java
deleted file mode 100644
index 904d41b..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Catalog.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * @since 4.0.
- */
-public class Catalog extends FilterContainer {
-
-    private String name;
-
-    private Collection<Schema> schemas = new LinkedList<Schema>();
-
-    public Catalog() {
-    }
-
-    public Catalog(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Collection<Schema> getSchemas() {
-        return schemas;
-    }
-
-    public void setSchemas(Collection<Schema> schemas) {
-        this.schemas = schemas;
-    }
-
-    public void addSchema(Schema schema) {
-        this.schemas.add(schema);
-    }
-
-    public void set(String name) {
-        setName(name);
-    }
-
-    public void addConfiguredName(AntNestedElement name) {
-        setName(name.getName());
-    }
-
-    public void addText(String name) {
-        if (name.trim().isEmpty()) {
-            return;
-        }
-
-        setName(name);
-    }
-
-    public Catalog schema(Schema name) {
-        addSchema(name);
-        return this;
-    }
-
-    @Override
-    public boolean isEmptyContainer() {
-        if (!super.isEmptyContainer()) {
-            return false;
-        }
-
-        if (schemas.isEmpty()) {
-            return true;
-        }
-
-        for (Schema schema : schemas) {
-            if (!schema.isEmptyContainer()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public StringBuilder toString(StringBuilder res, String prefix) {
-        res.append(prefix).append("Catalog: ").append(name).append("\n");
-
-        if (!isBlank(schemas)) {
-            for (Schema schema : schemas) {
-                schema.toString(res, prefix + "  ");
-            }
-        }
-
-        return super.toString(res, prefix + "  ");
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
deleted file mode 100644
index 807b7ff..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.cayenne.tools.ExcludeTable;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Element;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.resource.Resource;
-import org.xml.sax.SAXException;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * @since 4.0.
- */
-public class DefaultReverseEngineeringLoader implements 
ReverseEngineeringLoader {
-
-    private static final Log LOG = 
LogFactory.getLog(ReverseEngineeringLoader.class);
-
-    @Override
-    public ReverseEngineering load(Resource configurationResource) throws 
CayenneRuntimeException {
-        DocumentBuilderFactory dbFactory = 
DocumentBuilderFactory.newInstance();
-
-        try {
-            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
-            Document doc = 
dBuilder.parse(configurationResource.getURL().openStream());
-
-            ReverseEngineering engineering = new ReverseEngineering();
-
-            Element root = doc.getDocumentElement();
-            engineering.setSkipRelationshipsLoading(loadBoolean(root, 
"skipRelationshipsLoading"));
-            engineering.setSkipPrimaryKeyLoading(loadBoolean(root, 
"skipPrimaryKeyLoading"));
-            engineering.setTableTypes(loadTableTypes(root));
-
-            engineering.setCatalogs(loadCatalogs(root));
-            engineering.setSchemas(loadSchemas(root));
-            engineering.setIncludeTables(loadIncludeTables(root));
-            engineering.setExcludeTables(loadExcludeTables(root));
-            engineering.setIncludeColumns(loadIncludeColumns(root));
-            engineering.setExcludeColumns(loadExcludeColumns(root));
-            engineering.setIncludeProcedures(loadIncludeProcedures(root));
-            engineering.setExcludeProcedures(loadExcludeProcedures(root));
-
-            return engineering;
-        } catch (ParserConfigurationException e) {
-            LOG.info(e.getMessage(), e);
-        } catch (SAXException e) {
-            LOG.info(e.getMessage(), e);
-        } catch (IOException e) {
-            LOG.info(e.getMessage(), e);
-        }
-
-
-        return null;
-    }
-
-    private Boolean loadBoolean(Element root, String name) {
-        return Boolean.valueOf(loadByName(root, name));
-    }
-
-    private Collection<ExcludeProcedure> loadExcludeProcedures(Node parent) {
-        return loadPatternParams(ExcludeProcedure.class, 
getElementsByTagName(parent, "excludeProcedure"));
-    }
-
-    private Collection<IncludeProcedure> loadIncludeProcedures(Node parent) {
-        return loadPatternParams(IncludeProcedure.class, 
getElementsByTagName(parent, "includeProcedure"));
-    }
-
-    private Collection<ExcludeColumn> loadExcludeColumns(Node parent) {
-        return loadPatternParams(ExcludeColumn.class, 
getElementsByTagName(parent, "excludeColumn"));
-    }
-
-    private Collection<IncludeColumn> loadIncludeColumns(Node parent) {
-        return loadPatternParams(IncludeColumn.class, 
getElementsByTagName(parent, "includeColumn"));
-    }
-
-    private Collection<ExcludeTable> loadExcludeTables(Node parent) {
-        return loadPatternParams(ExcludeTable.class, 
getElementsByTagName(parent, "excludeTable"));
-    }
-
-    private Collection<IncludeTable> loadIncludeTables(Node parent) {
-        List<Node> includeTables = getElementsByTagName(parent, 
"includeTable");
-        Collection<IncludeTable> res = new LinkedList<IncludeTable>();
-        for (Node node : includeTables) {
-            IncludeTable includeTable = new IncludeTable();
-
-            includeTable.setPattern(loadPattern(node));
-            includeTable.setIncludeColumns(loadIncludeColumns(node));
-            includeTable.setExcludeColumns(loadExcludeColumns(node));
-            res.add(includeTable);
-        }
-        return res;
-    }
-
-    private Collection<Schema> loadSchemas(Node parent) {
-        List<Node> schemas = getElementsByTagName(parent, "schema");
-        Collection<Schema> res = new LinkedList<Schema>();
-        for (Node schemaNode : schemas) {
-            Schema schema = new Schema();
-
-            schema.setName(loadName(schemaNode));
-            schema.setIncludeTables(loadIncludeTables(schemaNode));
-            schema.setExcludeTables(loadExcludeTables(schemaNode));
-            schema.setIncludeColumns(loadIncludeColumns(schemaNode));
-            schema.setExcludeColumns(loadExcludeColumns(schemaNode));
-            schema.setIncludeProcedures(loadIncludeProcedures(schemaNode));
-            schema.setExcludeProcedures(loadExcludeProcedures(schemaNode));
-            res.add(schema);
-        }
-
-        return res;
-    }
-
-    private Collection<Catalog> loadCatalogs(Node parent) {
-        List<Node> catalogs = getElementsByTagName(parent, "catalog");
-        Collection<Catalog> res = new LinkedList<Catalog>();
-        for (Node catalogNode : catalogs) {
-            Catalog catalog = new Catalog();
-
-            catalog.setName(loadName(catalogNode));
-            catalog.setSchemas(loadSchemas(catalogNode));
-            catalog.setIncludeTables(loadIncludeTables(catalogNode));
-            catalog.setExcludeTables(loadExcludeTables(catalogNode));
-            catalog.setIncludeColumns(loadIncludeColumns(catalogNode));
-            catalog.setExcludeColumns(loadExcludeColumns(catalogNode));
-            catalog.setIncludeProcedures(loadIncludeProcedures(catalogNode));
-            catalog.setExcludeProcedures(loadExcludeProcedures(catalogNode));
-
-            res.add(catalog);
-        }
-
-        return res;
-    }
-
-    private Collection<String> loadTableTypes(Node parent) {
-        List<Node> types = getElementsByTagName(parent, "tableType");
-        Collection<String> res = new LinkedList<String>();
-        for (Node typeNode : types) {
-            res.add(loadName(typeNode));
-        }
-
-        return res;
-    }
-
-    private String loadName(Node catalogNode) {
-        return loadByName(catalogNode, "name");
-    }
-
-    private String loadPattern(Node catalogNode) {
-        return loadByName(catalogNode, "pattern");
-    }
-
-    private String loadByName(Node node, String attrName) {
-        Node name = node.getAttributes().getNamedItem(attrName);
-        if (name != null) {
-            return name.getTextContent();
-        }
-
-        String content = node.getTextContent().trim();
-        if (!content.isEmpty()) {
-            return content;
-        }
-
-        List<Node> names = getElementsByTagName(node, attrName);
-        if (names.isEmpty()) {
-            return null;
-        }
-
-        return names.get(0).getTextContent();
-    }
-
-    private <T extends PatternParam> Collection<T> loadPatternParams(Class<T> 
clazz, List<Node> nodes) {
-        Collection<T> res = new LinkedList<T>();
-        for (Node node : nodes) {
-            try {
-                T obj = clazz.newInstance();
-                obj.setPattern(loadPattern(node));
-
-                res.add(obj);
-            } catch (InstantiationException e) {
-                LOG.info(e.getMessage(), e);
-            } catch (IllegalAccessException e) {
-                LOG.info(e.getMessage(), e);
-            }
-        }
-        return res;
-    }
-
-    private List<Node> getElementsByTagName(Node catalogNode, String name) {
-        List<Node> nodes = new LinkedList<Node>();
-        NodeList childNodes = catalogNode.getChildNodes();
-        for (int i = 0; i < childNodes.getLength(); i++) {
-            Node item = childNodes.item(i);
-            if (name.equals(item.getNodeName())) {
-                nodes.add(item);
-            }
-        }
-
-        return nodes;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeColumn.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeColumn.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeColumn.java
deleted file mode 100644
index 94ed854..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeColumn.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-/**
- * @since 4.0.
- */
-public class ExcludeColumn extends PatternParam {
-    public ExcludeColumn() {
-    }
-
-    public ExcludeColumn(String pattern) {
-        super(pattern);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeProcedure.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeProcedure.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeProcedure.java
deleted file mode 100644
index f0b060e..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ExcludeProcedure.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-/**
- * @since 4.0.
- */
-public class ExcludeProcedure extends PatternParam {
-    public ExcludeProcedure() {
-    }
-
-    public ExcludeProcedure(String pattern) {
-        super(pattern);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FilterContainer.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FilterContainer.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FilterContainer.java
deleted file mode 100644
index 57da6ab..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FilterContainer.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-import org.apache.cayenne.tools.ExcludeTable;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * @since 4.0.
- */
-public abstract class FilterContainer {
-
-    private Collection<IncludeTable> includeTables = new 
LinkedList<IncludeTable>();
-    private Collection<ExcludeTable> excludeTables = new 
LinkedList<ExcludeTable>();
-    private Collection<IncludeColumn> includeColumns = new 
LinkedList<IncludeColumn>();
-    private Collection<ExcludeColumn> excludeColumns = new 
LinkedList<ExcludeColumn>();
-    private Collection<IncludeProcedure> includeProcedures = new 
LinkedList<IncludeProcedure>();
-    private Collection<ExcludeProcedure> excludeProcedures = new 
LinkedList<ExcludeProcedure>();
-
-    public Collection<IncludeTable> getIncludeTables() {
-        return includeTables;
-    }
-
-    public void setIncludeTables(Collection<IncludeTable> includeTables) {
-        this.includeTables = includeTables;
-    }
-
-    public Collection<ExcludeTable> getExcludeTables() {
-        return excludeTables;
-    }
-
-    public void setExcludeTables(Collection<ExcludeTable> excludeTables) {
-        this.excludeTables = excludeTables;
-    }
-
-    public Collection<IncludeColumn> getIncludeColumns() {
-        return includeColumns;
-    }
-
-    public void setIncludeColumns(Collection<IncludeColumn> includeColumns) {
-        this.includeColumns = includeColumns;
-    }
-
-    public Collection<ExcludeColumn> getExcludeColumns() {
-        return excludeColumns;
-    }
-
-    public void setExcludeColumns(Collection<ExcludeColumn> excludeColumns) {
-        this.excludeColumns = excludeColumns;
-    }
-
-    public Collection<IncludeProcedure> getIncludeProcedures() {
-        return includeProcedures;
-    }
-
-    public void setIncludeProcedures(Collection<IncludeProcedure> 
includeProcedures) {
-        this.includeProcedures = includeProcedures;
-    }
-
-    public Collection<ExcludeProcedure> getExcludeProcedures() {
-        return excludeProcedures;
-    }
-
-    public void setExcludeProcedures(Collection<ExcludeProcedure> 
excludeProcedures) {
-        this.excludeProcedures = excludeProcedures;
-    }
-
-
-    public void addIncludeColumn(IncludeColumn includeColumn) {
-        this.includeColumns.add(includeColumn);
-    }
-
-    public void addExcludeColumn(ExcludeColumn excludeColumn) {
-        this.excludeColumns.add(excludeColumn);
-    }
-
-    public void addIncludeTable(IncludeTable includeTable) {
-        this.includeTables.add(includeTable);
-    }
-
-    public void addExcludeTable(ExcludeTable excludeTable) {
-        this.excludeTables.add(excludeTable);
-    }
-
-    public void addIncludeProcedure(IncludeProcedure includeProcedure) {
-        this.includeProcedures.add(includeProcedure);
-    }
-
-    public void addExcludeProcedure(ExcludeProcedure excludeProcedure) {
-        this.excludeProcedures.add(excludeProcedure);
-    }
-
-    public boolean isEmptyContainer() {
-        return includeColumns.isEmpty()    && excludeColumns.isEmpty()
-            && includeTables.isEmpty()     && excludeTables.isEmpty()
-            && includeProcedures.isEmpty() && excludeProcedures.isEmpty();
-    }
-
-    public static boolean isBlank(Collection<?> collection) {
-        return collection == null || collection.isEmpty();
-    }
-
-    @Override
-    public String toString() {
-        return toString(new StringBuilder(), "").toString();
-    }
-
-    public StringBuilder toString(StringBuilder res, String prefix) {
-        appendCollection(res, prefix, includeTables);
-        appendCollection(res, prefix, excludeTables);
-        appendCollection(res, prefix, includeColumns);
-        appendCollection(res, prefix, excludeColumns);
-        appendCollection(res, prefix, includeProcedures);
-        appendCollection(res, prefix, excludeProcedures);
-
-        return res;
-    }
-
-    protected void appendCollection(StringBuilder res, String prefix, 
Collection<? extends PatternParam> collection) {
-        if (!isBlank(collection)) {
-            for (PatternParam item : collection) {
-                item.toString(res, prefix);
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
deleted file mode 100644
index b26c9e6..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-import org.apache.cayenne.access.loader.filters.OldFilterConfigBridge;
-import org.apache.cayenne.access.loader.filters.CatalogFilter;
-import org.apache.cayenne.access.loader.filters.IncludeTableFilter;
-import org.apache.cayenne.access.loader.filters.SchemaFilter;
-import org.apache.cayenne.access.loader.filters.TableFilter;
-import org.apache.cayenne.access.loader.filters.FiltersConfig;
-import org.apache.cayenne.access.loader.filters.PatternFilter;
-import org.apache.cayenne.tools.ExcludeTable;
-
-import java.util.Collection;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-import static org.apache.commons.lang.StringUtils.isBlank;
-
-/**
-* @since 4.0.
-*/
-public final class FiltersConfigBuilder {
-
-    private final ReverseEngineering engineering;
-
-    public FiltersConfigBuilder(ReverseEngineering engineering) {
-        this.engineering = engineering;
-    }
-
-    public FiltersConfig filtersConfig() {
-        compact();
-
-        return new FiltersConfig(transformCatalogs(engineering.getCatalogs()));
-    }
-
-    private CatalogFilter[] transformCatalogs(Collection<Catalog> catalogs) {
-        CatalogFilter[] catalogFilters = new CatalogFilter[catalogs.size()];
-        int i = 0;
-        for (Catalog catalog : catalogs) {
-            catalogFilters[i] = new CatalogFilter(catalog.getName(), 
transformSchemas(catalog.getSchemas()));
-            i++;
-        }
-        
-        return catalogFilters;
-    }
-
-    private SchemaFilter[] transformSchemas(Collection<Schema> schemas) {
-        SchemaFilter[] schemaFilters = new SchemaFilter[schemas.size()];
-        int i = 0;
-        for (Schema schema : schemas) {
-            schemaFilters[i] = new SchemaFilter(schema.getName(),
-                    new 
TableFilter(transformIncludeTable(schema.getIncludeTables()),
-                                    
transformExcludeTable(schema.getExcludeTables())),
-                    transform(schema.getIncludeProcedures(), 
schema.getExcludeProcedures()));
-            i++;
-        }
-
-        return schemaFilters;
-    }
-
-    private SortedSet<Pattern> transformExcludeTable(Collection<ExcludeTable> 
excludeTables) {
-        SortedSet<Pattern> res = new 
TreeSet<Pattern>(PatternFilter.PATTERN_COMPARATOR);
-        for (ExcludeTable exclude : excludeTables) {
-            res.add(PatternFilter.pattern(exclude.getPattern()));
-        }
-        return res;
-    }
-
-    private SortedSet<IncludeTableFilter> 
transformIncludeTable(Collection<IncludeTable> includeTables) {
-        SortedSet<IncludeTableFilter> includeTableFilters = new 
TreeSet<IncludeTableFilter>();
-        for (IncludeTable includeTable : includeTables) {
-            includeTableFilters.add(new 
IncludeTableFilter(includeTable.getPattern(),
-                    transform(includeTable.getIncludeColumns(), 
includeTable.getExcludeColumns())));
-        }
-
-        return includeTableFilters;
-    }
-
-    private PatternFilter transform(Collection<? extends PatternParam> include,
-                                    Collection<? extends PatternParam> 
exclude) {
-        PatternFilter filter = new PatternFilter();
-
-        for (PatternParam patternParam : include) {
-            filter.include(patternParam.getPattern());
-        }
-
-        for (PatternParam patternParam : exclude) {
-            filter.exclude(patternParam.getPattern());
-        }
-
-        return filter;
-
-    }
-
-    /**
-     * Goal of this method transform ReverseEngineering config into more 
regular form
-     * From
-     *      ReverseEngineering
-     *          Catalog
-     *              Schema
-     *                  IncludeTable
-     *                      IncludeColumn
-     *                      ExcludeColumn
-     *                  ExcludeTable
-     *                  IncludeProcedures
-     *                  ExcludeProcedures
-     *                  IncludeColumn
-     *                  ExcludeColumn
-     *              IncludeTable
-     *                  IncludeColumn
-     *                  ExcludeColumn
-     *              ExcludeTable
-     *              IncludeProcedures
-     *              ExcludeProcedures
-     *              IncludeColumn
-     *              ExcludeColumn
-     *          Schema
-     *              IncludeTable
-     *                  IncludeColumn
-     *                  ExcludeColumn
-     *              ExcludeTable
-     *              IncludeProcedures
-     *              ExcludeProcedures
-     *              IncludeColumn
-     *              ExcludeColumn
-     *          IncludeTable
-     *              IncludeColumn
-     *              ExcludeColumn
-     *          ExcludeTable
-     *          IncludeProcedures
-     *          ExcludeProcedures
-     *          IncludeColumn
-     *          ExcludeColumn
-     *
-     * Into
-     *      ReverseEngineering
-     *          Catalog
-     *              Schema
-     *                  IncludeTable
-     *                      IncludeColumn
-     *                      ExcludeColumn
-     *                  ExcludeTable
-     *                  IncludeProcedures
-     *                  ExcludeProcedures
-     *
-     *
-     * */
-    public void compact() {
-        addEmptyElements();
-
-        compactColumnFilters();
-        compactTableFilter();
-        compactProcedureFilter();
-        compactSchemas();
-    }
-
-    private void compactSchemas() {
-        for (Catalog catalog : engineering.getCatalogs()) {
-            catalog.getSchemas().addAll(engineering.getSchemas());
-        }
-        engineering.setSchemas(null);
-    }
-
-    private void compactProcedureFilter() {
-        Collection<IncludeProcedure> engIncludeProcedures = 
engineering.getIncludeProcedures();
-        Collection<ExcludeProcedure> engExcludeProcedures = 
engineering.getExcludeProcedures();
-
-        engineering.setIncludeProcedures(null);
-        engineering.setExcludeProcedures(null);
-
-        for (Catalog catalog : engineering.getCatalogs()) {
-            Collection<IncludeProcedure> catalogIncludeProcedures = 
catalog.getIncludeProcedures();
-            Collection<ExcludeProcedure> catalogExcludeProcedures = 
catalog.getExcludeProcedures();
-
-            catalog.setIncludeProcedures(null);
-            catalog.setExcludeProcedures(null);
-
-            for (Schema schema : catalog.getSchemas()) {
-                schema.getIncludeProcedures().addAll(engIncludeProcedures);
-                schema.getIncludeProcedures().addAll(catalogIncludeProcedures);
-
-                schema.getExcludeProcedures().addAll(engExcludeProcedures);
-                schema.getExcludeProcedures().addAll(catalogExcludeProcedures);
-            }
-        }
-
-        for (Schema schema : engineering.getSchemas()) {
-            schema.getIncludeProcedures().addAll(engIncludeProcedures);
-            schema.getExcludeProcedures().addAll(engExcludeProcedures);
-        }
-    }
-
-    private void compactTableFilter() {
-        Collection<IncludeTable> engIncludeTables = 
engineering.getIncludeTables();
-        Collection<ExcludeTable> engExcludeTables = 
engineering.getExcludeTables();
-
-        engineering.setIncludeTables(null);
-        engineering.setExcludeTables(null);
-
-        for (Catalog catalog : engineering.getCatalogs()) {
-            Collection<IncludeTable> catalogIncludeTables = 
catalog.getIncludeTables();
-            Collection<ExcludeTable> catalogExcludeTables = 
catalog.getExcludeTables();
-
-            catalog.setIncludeTables(null);
-            catalog.setExcludeTables(null);
-
-            for (Schema schema : catalog.getSchemas()) {
-                schema.getIncludeTables().addAll(engIncludeTables);
-                schema.getIncludeTables().addAll(catalogIncludeTables);
-                
-                schema.getExcludeTables().addAll(engExcludeTables);
-                schema.getExcludeTables().addAll(catalogExcludeTables);
-            }
-        }
-
-        for (Schema schema : engineering.getSchemas()) {
-            schema.getIncludeTables().addAll(engIncludeTables);
-            schema.getExcludeTables().addAll(engExcludeTables);
-        }
-    }
-
-    private void compactColumnFilters() {
-        Collection<IncludeColumn> engIncludeColumns = 
engineering.getIncludeColumns();
-        Collection<ExcludeColumn> engExcludeColumns = 
engineering.getExcludeColumns();
-
-        engineering.setIncludeColumns(null);
-        engineering.setExcludeColumns(null);
-
-        for (Catalog catalog : engineering.getCatalogs()) {
-            Collection<IncludeColumn> catalogIncludeColumns = 
catalog.getIncludeColumns();
-            Collection<ExcludeColumn> catalogExcludeColumns = 
catalog.getExcludeColumns();
-
-            catalog.setIncludeColumns(null);
-            catalog.setExcludeColumns(null);
-
-            for (Schema schema : catalog.getSchemas()) {
-                Collection<IncludeColumn> schemaIncludeColumns = 
schema.getIncludeColumns();
-                Collection<ExcludeColumn> schemaExcludeColumns = 
schema.getExcludeColumns();
-
-                schema.setIncludeColumns(null);
-                schema.setExcludeColumns(null);
-
-                for (IncludeTable includeTable : schema.getIncludeTables()) {
-                    includeTable.getIncludeColumns().addAll(engIncludeColumns);
-                    
includeTable.getIncludeColumns().addAll(catalogIncludeColumns);
-                    
includeTable.getIncludeColumns().addAll(schemaIncludeColumns);
-
-                    includeTable.getExcludeColumns().addAll(engExcludeColumns);
-                    
includeTable.getExcludeColumns().addAll(catalogExcludeColumns);
-                    
includeTable.getExcludeColumns().addAll(schemaExcludeColumns);
-                }
-            }
-
-            for (IncludeTable includeTable : catalog.getIncludeTables()) {
-                includeTable.getIncludeColumns().addAll(engIncludeColumns);
-                includeTable.getIncludeColumns().addAll(catalogIncludeColumns);
-
-                includeTable.getExcludeColumns().addAll(engExcludeColumns);
-                includeTable.getExcludeColumns().addAll(catalogExcludeColumns);
-            }
-        }
-
-        for (Schema schema : engineering.getSchemas()) {
-            Collection<IncludeColumn> schemaIncludeColumns = 
schema.getIncludeColumns();
-            Collection<ExcludeColumn> schemaExcludeColumns = 
schema.getExcludeColumns();
-
-            schema.setIncludeColumns(null);
-            schema.setExcludeColumns(null);
-
-            for (IncludeTable includeTable : schema.getIncludeTables()) {
-                includeTable.getIncludeColumns().addAll(engIncludeColumns);
-                includeTable.getIncludeColumns().addAll(schemaIncludeColumns);
-
-                includeTable.getExcludeColumns().addAll(engExcludeColumns);
-                includeTable.getExcludeColumns().addAll(schemaExcludeColumns);
-            }
-        }
-
-        for (IncludeTable includeTable : engineering.getIncludeTables()) {
-            includeTable.getIncludeColumns().addAll(engIncludeColumns);
-            includeTable.getExcludeColumns().addAll(engExcludeColumns);
-        }
-    }
-
-    private void addEmptyElements() {
-        if (engineering.getCatalogs().isEmpty()) {
-            engineering.addCatalog(new Catalog());
-        }
-
-        for (Catalog catalog : engineering.getCatalogs()) {
-            if (catalog.getSchemas().isEmpty()
-                    && engineering.getSchemas().isEmpty()) {
-                catalog.addSchema(new Schema());
-            }
-
-            for (Schema schema : catalog.getSchemas()) {
-                if (schema.getIncludeTables().isEmpty()
-                        && catalog.getIncludeTables().isEmpty()
-                        && engineering.getIncludeTables().isEmpty()) {
-
-                    schema.addIncludeTable(new IncludeTable());
-                }
-            }
-        }
-
-        for (Schema schema : engineering.getSchemas()) {
-            if (schema.getIncludeTables().isEmpty()
-                    && engineering.getIncludeTables().isEmpty()) {
-
-                schema.addIncludeTable(new IncludeTable());
-            }
-        }
-    }
-
-    public FiltersConfigBuilder add(OldFilterConfigBridge build) {
-        if (!isBlank(build.catalog())) {
-            engineering.addCatalog(new Catalog(build.catalog()));
-        }
-
-        if (!isBlank(build.schema())) {
-            engineering.addSchema(new Schema(build.schema()));
-        }
-
-        if (!isBlank(build.getIncludeTableFilters())) {
-            engineering.addIncludeTable(new 
IncludeTable(build.getIncludeTableFilters()));
-        }
-        if (!isBlank(build.getExcludeTableFilters())) {
-            engineering.addExcludeTable(new 
ExcludeTable(build.getExcludeTableFilters()));
-        }
-        
-        if (!isBlank(build.getIncludeColumnFilters())) {
-            engineering.addIncludeColumn(new 
IncludeColumn(build.getIncludeColumnFilters()));
-        }
-        if (!isBlank(build.getExcludeColumnFilters())) {
-            engineering.addExcludeColumn(new 
ExcludeColumn(build.getExcludeColumnFilters()));
-        }
-
-        if (build.isLoadProcedures()) {
-            if (!isBlank(build.getIncludeProceduresFilters())) {
-                engineering.addIncludeProcedure(new 
IncludeProcedure(build.getIncludeProceduresFilters()));
-            }
-            if (!isBlank(build.getExcludeProceduresFilters())) {
-                engineering.addExcludeProcedure(new 
ExcludeProcedure(build.getExcludeProceduresFilters()));
-            }
-        }
-
-        return this;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java
deleted file mode 100644
index ba4362b..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-/**
- * @since 4.0.
- */
-public class IncludeColumn extends PatternParam {
-    public IncludeColumn() {
-    }
-
-    public IncludeColumn(String pattern) {
-        super(pattern);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java
deleted file mode 100644
index 404e4f2..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-/**
- * @since 4.0.
- */
-public class IncludeProcedure extends PatternParam {
-    public IncludeProcedure() {
-    }
-
-    public IncludeProcedure(String pattern) {
-        super(pattern);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java
deleted file mode 100644
index 8d0d1ab..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-import static org.apache.commons.lang.StringUtils.isBlank;
-import static org.apache.commons.lang.StringUtils.join;
-
-/**
- * @since 4.0.
- */
-public class IncludeTable extends PatternParam {
-
-    private Collection<IncludeColumn> includeColumns = new 
LinkedList<IncludeColumn>();
-    private Collection<ExcludeColumn> excludeColumns = new 
LinkedList<ExcludeColumn>();
-
-    public IncludeTable() {
-    }
-
-    public IncludeTable(String pattern) {
-        super(pattern);
-    }
-
-    public Collection<IncludeColumn> getIncludeColumns() {
-        return includeColumns;
-    }
-
-    public void setIncludeColumns(Collection<IncludeColumn> includeColumns) {
-        this.includeColumns = includeColumns;
-    }
-
-    public Collection<ExcludeColumn> getExcludeColumns() {
-        return excludeColumns;
-    }
-
-    public void setExcludeColumns(Collection<ExcludeColumn> excludeColumns) {
-        this.excludeColumns = excludeColumns;
-    }
-
-    public void addIncludeColumn(IncludeColumn includeColumn) {
-        this.includeColumns.add(includeColumn);
-    }
-
-    public void addExcludeColumn(ExcludeColumn excludeColumn) {
-        this.excludeColumns.add(excludeColumn);
-    }
-
-    @Override
-    public StringBuilder toString(StringBuilder res, String s) {
-        super.toString(res, s);
-
-        String prefix = s + "  ";
-        if (includeColumns != null && !includeColumns.isEmpty()) {
-            for (IncludeColumn includeColumn : includeColumns) {
-                includeColumn.toString(res, prefix);
-            }
-        }
-
-        if (excludeColumns != null && !excludeColumns.isEmpty()) {
-            for (ExcludeColumn excludeColumn : excludeColumns) {
-                excludeColumn.toString(res, prefix);
-            }
-        }
-
-        return res;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java
deleted file mode 100644
index 53b26cc..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-/**
- * @since 4.0.
- */
-public class PatternParam {
-
-    private String pattern;
-
-    public PatternParam() {
-    }
-
-    public PatternParam(String pattern) {
-        this.pattern = pattern;
-    }
-
-    public String getPattern() {
-        return pattern;
-    }
-
-    public void setPattern(String pattern) {
-        this.pattern = pattern;
-    }
-
-    /**
-     * used my maven
-     *
-     * @param pattern
-     */
-    public void set(String pattern) {
-        setPattern(pattern);
-    }
-
-
-    /**
-     * used my ant
-     *
-     * @param pattern
-     */
-    public void addText(String pattern) {
-        if (pattern.trim().isEmpty()) {
-            return;
-        }
-
-        setPattern(pattern);
-    }
-
-    public void addConfiguredPattern(AntNestedElement pattern) {
-        set(pattern.getName());
-    }
-
-    @Override
-    public String toString() {
-        return toString(new StringBuilder(), "").toString();
-    }
-
-    public StringBuilder toString(StringBuilder res, String s) {
-        res.append(s).append(getClass().getSimpleName()).append(": 
").append(pattern).append("\n");
-        return res;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
deleted file mode 100644
index 07f1795..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * @since 4.0.
- */
-public class ReverseEngineering extends FilterContainer {
-
-    private Boolean skipRelationshipsLoading;
-
-    private Boolean skipPrimaryKeyLoading;
-
-    /*
-     * Typical types are "TABLE",
-     * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
-     * "LOCAL TEMPORARY", "ALIAS", "SYNONYM"., etc.
-     */
-    private Collection<String> tableTypes = new LinkedList<String>();
-
-    private Collection<Catalog> catalogs = new LinkedList<Catalog>();
-    private Collection<Schema> schemas = new LinkedList<Schema>();
-
-    public ReverseEngineering() {
-    }
-
-    public Boolean getSkipRelationshipsLoading() {
-        return skipRelationshipsLoading;
-    }
-
-    public void setSkipRelationshipsLoading(Boolean skipRelationshipsLoading) {
-        this.skipRelationshipsLoading = skipRelationshipsLoading;
-    }
-
-    public Boolean getSkipPrimaryKeyLoading() {
-        return skipPrimaryKeyLoading;
-    }
-
-    public void setSkipPrimaryKeyLoading(Boolean skipPrimaryKeyLoading) {
-        this.skipPrimaryKeyLoading = skipPrimaryKeyLoading;
-    }
-
-    public Collection<Catalog> getCatalogs() {
-        return catalogs;
-    }
-
-    public void setCatalogs(Collection<Catalog> catalogs) {
-        this.catalogs = catalogs;
-    }
-
-    public Collection<Schema> getSchemas() {
-        return schemas;
-    }
-
-    public void setSchemas(Collection<Schema> schemas) {
-        this.schemas = schemas;
-    }
-
-    public String[] getTableTypes() {
-        return tableTypes.toArray(new String[tableTypes.size()]);
-    }
-
-    /*
-     * Typical types are "TABLE",
-     * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
-     * "LOCAL TEMPORARY", "ALIAS", "SYNONYM"., etc.
-     */
-    public void setTableTypes(Collection<String> tableTypes) {
-        this.tableTypes = tableTypes;
-    }
-
-    /*
-     * Typical types are "TABLE",
-     * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
-     * "LOCAL TEMPORARY", "ALIAS", "SYNONYM"., etc.
-     */
-    public void addTableType(String type) {
-        this.tableTypes.add(type);
-    }
-
-    public void addSchema(Schema schema) {
-        this.schemas.add(schema);
-    }
-
-    public void addCatalog(Catalog catalog) {
-        this.catalogs.add(catalog);
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder res = new StringBuilder();
-        res.append("ReverseEngineering: ").append("\n");
-
-        if (!isBlank(catalogs)) {
-            for (Catalog catalog : catalogs) {
-                catalog.toString(res, "  ");
-            }
-        }
-
-        if (!isBlank(schemas)) {
-            for (Schema schema : schemas) {
-                schema.toString(res, "  ");
-            }
-        }
-
-        if (skipRelationshipsLoading != null && skipRelationshipsLoading) {
-            res.append("\n").append("        Skip Relationships Loading");
-        }
-        if (skipPrimaryKeyLoading != null && skipPrimaryKeyLoading) {
-            res.append("\n").append("        Skip PrimaryKey Loading");
-        }
-
-        return super.toString(res, "  ").toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java
deleted file mode 100644
index 241b3d2..0000000
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.tools.dbimport.config;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.resource.Resource;
-
-/**
- * @since 4.0.
- */
-public interface ReverseEngineeringLoader {
-
-    ReverseEngineering load(Resource configurationResource) throws 
CayenneRuntimeException;
-
-}

Reply via email to