You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/10/20 14:49:37 UTC

[2/7] cayenne git commit: Revert to the old Reverse Engineering UI style

Revert to the old Reverse Engineering UI style


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/29671e75
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/29671e75
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/29671e75

Branch: refs/heads/master
Commit: 29671e75b38620811c2bfc6c0f2b0af01d4942dd
Parents: f7ad0cc
Author: ollybondareva <ol...@gmail.com>
Authored: Wed Oct 19 17:37:45 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Thu Oct 20 12:53:11 2016 +0300

----------------------------------------------------------------------
 .../dbsync/naming/DeduplicationVisitor.java     |  24 --
 .../dbsync/naming/DefaultBaseNameVisitor.java   |   6 -
 .../dbsync/naming/NormalizationVisitor.java     |   6 -
 .../cayenne/project/ConfigurationSaver.java     |   9 -
 .../project/ConfigurationSourceGetter.java      |   5 -
 .../project/ConfigurationSourceSetter.java      |   7 -
 .../DefaultConfigurationNodeParentGetter.java   |  12 -
 .../cayenne/project/SaveableNodesGetter.java    |   9 -
 .../validation/DefaultProjectValidator.java     |   8 -
 .../validation/ReverseEngineeringValidator.java |  42 ---
 .../project/ReverseEngineeringSaverTest.java    |  62 ----
 .../BaseConfigurationNodeVisitor.java           |   5 -
 .../configuration/ConfigurationNodeVisitor.java |   3 -
 .../DefaultConfigurationNameMapper.java         |  18 --
 .../XMLDataChannelDescriptorLoader.java         |  18 --
 .../cayenne/dbimport/ReverseEngineering.java    |  21 +-
 .../java/org/apache/cayenne/map/DataMap.java    |  15 -
 .../java/org/apache/cayenne/map/MapLoader.java  |  22 --
 .../org/apache/cayenne/schema/8/modelMap.xsd    |   7 -
 .../apache/cayenne/tools/DbImporterTask.java    | 111 ++------
 .../modeler/ProjectFileChangeTracker.java       |   6 -
 .../cayenne/modeler/action/RemoveAction.java    |   4 -
 .../action/ReverseEngineeringAction.java        |  66 ++++-
 .../modeler/dialog/db/ConnectionWizard.java     |  89 ++++++
 .../modeler/dialog/db/DataMapViewModel.java     |  46 ---
 .../modeler/dialog/db/DataSourceWizard.java     | 222 +++++++++++++++
 .../modeler/dialog/db/DataSourceWizardView.java |  94 +++++++
 .../modeler/dialog/db/DbLoaderHelper.java       |  50 +++-
 .../dialog/db/DbLoaderOptionsDialog.java        | 253 +++++++++++++++++
 .../modeler/dialog/db/ModelerDbLoader.java      | 258 -----------------
 .../dialog/db/ReverseEngineeringController.java | 243 ----------------
 .../dialog/db/ReverseEngineeringScrollPane.java |  34 ---
 .../dialog/db/ReverseEngineeringView.java       | 281 -------------------
 .../modeler/dialog/db/model/DbCatalog.java      |  30 --
 .../modeler/dialog/db/model/DbColumn.java       |  34 ---
 .../modeler/dialog/db/model/DbElement.java      |  62 ----
 .../modeler/dialog/db/model/DbEntity.java       |  37 ---
 .../modeler/dialog/db/model/DbModel.java        |  29 --
 .../modeler/dialog/db/model/DbProcedure.java    |  33 ---
 .../modeler/dialog/db/model/DbSchema.java       |  29 --
 .../dialog/pref/FilteredTreeCellRenderer.java   |  85 ------
 .../cayenne/modeler/dialog/pref/TreeEditor.java | 101 -------
 .../cayenne/modeler/dialog/pref/TreeView.java   |  56 ----
 .../modeler/dialog/pref/XMLFileEditor.java      |  82 ------
 .../cayenne/modeler/dialog/pref/XMLView.java    |  72 -----
 .../modeler/editor/DataMapTabbedView.java       |  21 +-
 .../cayenne/modeler/util/CellRenderers.java     |  13 -
 .../apache/cayenne/tools/DbImporterMojo.java    |  95 +------
 .../cayenne/tools/DbImporterMojoTest.java       |   1 -
 49 files changed, 775 insertions(+), 2061 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DeduplicationVisitor.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DeduplicationVisitor.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DeduplicationVisitor.java
index 09d2d97..cd42d32 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DeduplicationVisitor.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DeduplicationVisitor.java
@@ -22,7 +22,6 @@ import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -206,29 +205,6 @@ class DeduplicationVisitor implements ConfigurationNodeVisitor<String> {
         });
     }
 
-    @Override
-    public String visitReverseEngineering(ReverseEngineering reverseEngineering) {
-        return resolve(new Predicate() {
-            @Override
-            public boolean isNameInUse(String name) {
-
-                if (parent == null) {
-                    return false;
-                }
-
-                DataChannelDescriptor dataChannelDescriptor = (DataChannelDescriptor) parent;
-                for (DataMap dataMap : dataChannelDescriptor.getDataMaps()) {
-                    if (dataMap != null && dataMap.getReverseEngineering() != null &&
-                            dataMap.getReverseEngineering().getName() != null
-                            && dataMap.getReverseEngineering().getName().equals(name)) {
-                        return true;
-                    }
-                }
-                return false;
-            }
-        });
-    }
-
     String resolve(Predicate nameChecker) {
         int c = 1;
         String name = baseName;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultBaseNameVisitor.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultBaseNameVisitor.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultBaseNameVisitor.java
index ecc17f0..f08e04e 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultBaseNameVisitor.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultBaseNameVisitor.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.dbsync.naming;
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -114,9 +113,4 @@ class DefaultBaseNameVisitor implements ConfigurationNodeVisitor<String> {
     public String visitQuery(QueryDescriptor query) {
         return "query";
     }
-
-    @Override
-    public String visitReverseEngineering(ReverseEngineering reverseEngineering) {
-        return "reverseEngineering";
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NormalizationVisitor.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NormalizationVisitor.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NormalizationVisitor.java
index 75d941d..ba8cf9d 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NormalizationVisitor.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NormalizationVisitor.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.dbsync.naming;
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -115,9 +114,4 @@ class NormalizationVisitor implements ConfigurationNodeVisitor<String> {
     public String visitQuery(QueryDescriptor query) {
         return baseName;
     }
-
-    @Override
-    public String visitReverseEngineering(ReverseEngineering reverseEngineering) {
-        return baseName;
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSaver.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSaver.java b/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSaver.java
index 01d3989..9ed8a88 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSaver.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSaver.java
@@ -22,7 +22,6 @@ import java.io.PrintWriter;
 
 import org.apache.cayenne.configuration.BaseConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.util.XMLEncoder;
 
@@ -55,14 +54,6 @@ class ConfigurationSaver extends BaseConfigurationNodeVisitor<Void> {
         return null;
     }
 
-    @Override
-    public Void visitReverseEngineering(ReverseEngineering node) {
-        XMLEncoder encoder = new XMLEncoder(printWriter, "\t", version);
-        printXMLHeader(encoder);
-        node.encodeAsXML(encoder);
-        return null;
-    }
-
     private void printXMLHeader(XMLEncoder encoder) {
         encoder.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceGetter.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceGetter.java b/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceGetter.java
index be68dad..61cafe6 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceGetter.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceGetter.java
@@ -20,7 +20,6 @@ package org.apache.cayenne.project;
 
 import org.apache.cayenne.configuration.BaseConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.resource.Resource;
 
@@ -41,8 +40,4 @@ class ConfigurationSourceGetter extends BaseConfigurationNodeVisitor<Resource> {
         return dataMap.getConfigurationSource();
     }
 
-    @Override
-    public Resource visitReverseEngineering(ReverseEngineering reverseEngineering) {
-        return reverseEngineering.getConfigurationSource();
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceSetter.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceSetter.java b/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceSetter.java
index 7a3f5d3..2854df1 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceSetter.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/ConfigurationSourceSetter.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.project;
 import org.apache.cayenne.configuration.BaseConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.resource.Resource;
 
@@ -55,10 +54,4 @@ class ConfigurationSourceSetter extends BaseConfigurationNodeVisitor<Void> {
         node.setConfigurationSource(configurationSource);
         return null;
     }
-
-    @Override
-    public Void visitReverseEngineering(ReverseEngineering node) {
-        node.setConfigurationSource(configurationSource);
-        return null;
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/main/java/org/apache/cayenne/project/DefaultConfigurationNodeParentGetter.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/DefaultConfigurationNodeParentGetter.java b/cayenne-project/src/main/java/org/apache/cayenne/project/DefaultConfigurationNodeParentGetter.java
index dc3c839..669d80b 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/DefaultConfigurationNodeParentGetter.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/DefaultConfigurationNodeParentGetter.java
@@ -22,7 +22,6 @@ import org.apache.cayenne.configuration.BaseConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -34,7 +33,6 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.ProcedureParameter;
-import org.apache.cayenne.map.QueryDescriptor;
 
 public class DefaultConfigurationNodeParentGetter implements ConfigurationNodeParentGetter {
 
@@ -109,15 +107,5 @@ public class DefaultConfigurationNodeParentGetter implements ConfigurationNodePa
         public ConfigurationNode visitProcedureParameter(ProcedureParameter parameter) {
             return (ConfigurationNode) parameter.getParent();
         }
-
-        @Override
-        public ConfigurationNode visitQuery(QueryDescriptor query) {
-            return query.getDataMap();
-        }
-
-        @Override
-        public ConfigurationNode visitReverseEngineering(ReverseEngineering reverseEngineering) {
-            return reverseEngineering;
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/main/java/org/apache/cayenne/project/SaveableNodesGetter.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/SaveableNodesGetter.java b/cayenne-project/src/main/java/org/apache/cayenne/project/SaveableNodesGetter.java
index 61c9468..ee20da3 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/SaveableNodesGetter.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/SaveableNodesGetter.java
@@ -25,7 +25,6 @@ import java.util.Collections;
 import org.apache.cayenne.configuration.BaseConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 
 /**
@@ -43,9 +42,6 @@ class SaveableNodesGetter extends
 
         for (DataMap map : descriptor.getDataMaps()) {
             nodes.add(map);
-            if (map.getReverseEngineering() != null) {
-                nodes.add(map.getReverseEngineering());
-            }
         }
 
         return nodes;
@@ -55,9 +51,4 @@ class SaveableNodesGetter extends
     public Collection<ConfigurationNode> visitDataMap(DataMap dataMap) {
         return Collections.<ConfigurationNode> singletonList(dataMap);
     }
-
-    @Override
-    public Collection<ConfigurationNode> visitReverseEngineering(ReverseEngineering reverseEngineering) {
-        return null;
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/main/java/org/apache/cayenne/project/validation/DefaultProjectValidator.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/DefaultProjectValidator.java b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/DefaultProjectValidator.java
index f240fc8..c25fefe 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/DefaultProjectValidator.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/DefaultProjectValidator.java
@@ -24,7 +24,6 @@ import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -65,7 +64,6 @@ public class DefaultProjectValidator implements ProjectValidator {
     private ProcedureQueryValidator procedureQueryValidator;
     private EJBQLQueryValidator ejbqlQueryValidator;
     private SQLTemplateValidator sqlTemplateValidator;
-    private ReverseEngineeringValidator reverseEngineeringValidator;
 
     DefaultProjectValidator() {
         dataChannelValidator = new DataChannelValidator();
@@ -85,7 +83,6 @@ public class DefaultProjectValidator implements ProjectValidator {
         procedureQueryValidator = new ProcedureQueryValidator();
         ejbqlQueryValidator = new EJBQLQueryValidator();
         sqlTemplateValidator = new SQLTemplateValidator();
-        reverseEngineeringValidator = new ReverseEngineeringValidator();
     }
 
     public ValidationResult validate(ConfigurationNode node) {
@@ -273,10 +270,5 @@ public class DefaultProjectValidator implements ProjectValidator {
 
             return validationResult;
         }
-
-        public ValidationResult visitReverseEngineering(ReverseEngineering reverseEngineering) {
-            reverseEngineeringValidator.validate(reverseEngineering, validationResult);
-            return validationResult;
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ReverseEngineeringValidator.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ReverseEngineeringValidator.java b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ReverseEngineeringValidator.java
deleted file mode 100644
index 99b92ba..0000000
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ReverseEngineeringValidator.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.project.validation;
-
-import org.apache.cayenne.dbimport.ReverseEngineering;
-import org.apache.cayenne.util.Util;
-import org.apache.cayenne.validation.ValidationResult;
-
-/**
- * @since 4.0
- */
-public class ReverseEngineeringValidator extends ConfigurationNodeValidator{
-    void validate(ReverseEngineering reverseEngineering, ValidationResult validationResult) {
-        validateName(reverseEngineering, validationResult);
-    }
-
-    void validateName(ReverseEngineering reverseEngineering, ValidationResult validationResult) {
-        String name = reverseEngineering.getName();
-
-        // Must have name
-        if (Util.isEmptyString(name)) {
-            addFailure(validationResult, reverseEngineering, "Unnamed ReverseEngineering");
-            return;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-project/src/test/java/org/apache/cayenne/project/ReverseEngineeringSaverTest.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/java/org/apache/cayenne/project/ReverseEngineeringSaverTest.java b/cayenne-project/src/test/java/org/apache/cayenne/project/ReverseEngineeringSaverTest.java
deleted file mode 100644
index 1176f19..0000000
--- a/cayenne-project/src/test/java/org/apache/cayenne/project/ReverseEngineeringSaverTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.cayenne.project;
-
-import org.apache.cayenne.configuration.*;
-import org.apache.cayenne.dbimport.ReverseEngineering;
-import org.apache.cayenne.di.*;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.project.unit.Project2Case;
-import org.apache.cayenne.resource.URLResource;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-import static org.junit.Assert.assertTrue;
-
-/**
- * @since 4.0
- */
-public class ReverseEngineeringSaverTest extends Project2Case {
-    private FileProjectSaver saver;
-
-    @Before
-    public void setUp() throws Exception {
-        Module testModule = new Module() {
-
-            public void configure(Binder binder) {
-                binder.bind(ConfigurationNameMapper.class).to(
-                        DefaultConfigurationNameMapper.class);
-            }
-        };
-
-        saver = new FileProjectSaver();
-        Injector injector = DIBootstrap.createInjector(testModule);
-        injector.injectMembers(saver);
-    }
-
-    @Test
-    public void testSaveReversEngineering() throws MalformedURLException {
-        File testFolder = setupTestDirectory("testSaverRE");
-
-        DataChannelDescriptor rootNode = new DataChannelDescriptor();
-        rootNode.setName("test");
-
-        DataMap dataMap = new DataMap("datamap1");
-        dataMap.setReverseEngineering(new ReverseEngineering("reverseEngineering1"));
-        rootNode.getDataMaps().add(dataMap);
-
-        Project project = new Project(new ConfigurationTree<>(rootNode));
-        saver.saveAs(project, new URLResource(testFolder.toURL()));
-
-        DataMapLoader dataMapLoader = new XMLDataMapLoader();
-        DataMap dataMap1 = dataMapLoader.load(dataMap.getConfigurationSource());
-        String reverseEngineeringName = dataMap1.getReverseEngineering().getName();
-
-        File reFile = new File(testFolder, reverseEngineeringName + ".xml");
-        assertTrue(reFile.exists());
-        assertTrue(reFile.length() > 0);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/java/org/apache/cayenne/configuration/BaseConfigurationNodeVisitor.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/BaseConfigurationNodeVisitor.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/BaseConfigurationNodeVisitor.java
index f34c813..70e07c7 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/BaseConfigurationNodeVisitor.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/BaseConfigurationNodeVisitor.java
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.configuration;
 
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -98,8 +97,4 @@ public abstract class BaseConfigurationNodeVisitor<T> implements
     public T visitQuery(QueryDescriptor query) {
         throw new UnsupportedOperationException("Not implemented for Query");
     }
-
-    public T visitReverseEngineering(ReverseEngineering reverseEngineering) {
-        throw new UnsupportedOperationException("Not implemented for ReverseEngineering");
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/java/org/apache/cayenne/configuration/ConfigurationNodeVisitor.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/ConfigurationNodeVisitor.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/ConfigurationNodeVisitor.java
index 508a5f8..60d2900 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/ConfigurationNodeVisitor.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/ConfigurationNodeVisitor.java
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.configuration;
 
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -67,6 +66,4 @@ public interface ConfigurationNodeVisitor<T> {
     T visitProcedureParameter(ProcedureParameter parameter);
 
     T visitQuery(QueryDescriptor query);
-
-    T visitReverseEngineering(ReverseEngineering reverseEngineering);
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/java/org/apache/cayenne/configuration/DefaultConfigurationNameMapper.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/DefaultConfigurationNameMapper.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/DefaultConfigurationNameMapper.java
index 16b782a..ffe2868 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/DefaultConfigurationNameMapper.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/DefaultConfigurationNameMapper.java
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.configuration;
 
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.resource.Resource;
 
@@ -32,8 +31,6 @@ public class DefaultConfigurationNameMapper implements ConfigurationNameMapper {
 
 	private static final String DATA_MAP_SUFFIX = ".map.xml";
 
-	private static final String REVERSE_ENGINEERING_SUFFIX = ".xml";
-
 	protected ConfigurationNodeVisitor<String> nameMapper;
 
 	public DefaultConfigurationNameMapper() {
@@ -51,8 +48,6 @@ public class DefaultConfigurationNameMapper implements ConfigurationNameMapper {
 			return getDataChannelName(name);
 		} else if (DataMap.class.isAssignableFrom(type)) {
 			return getDataMapName(name);
-		} else if (ReverseEngineering.class.isAssignableFrom(type)) {
-			return getReverseEngineeringName(name);
 		}
 
 		throw new IllegalArgumentException("Unrecognized configuration type: " + type.getName());
@@ -109,14 +104,6 @@ public class DefaultConfigurationNameMapper implements ConfigurationNameMapper {
 		return name + DATA_MAP_SUFFIX;
 	}
 
-	private String getReverseEngineeringName(String name) {
-		if (name == null) {
-			throw new NullPointerException("Null Reverse Engineering name");
-		}
-
-		return name + REVERSE_ENGINEERING_SUFFIX;
-	}
-
 	final class NameMapper extends BaseConfigurationNodeVisitor<String> {
 
 		@Override
@@ -128,10 +115,5 @@ public class DefaultConfigurationNameMapper implements ConfigurationNameMapper {
 		public String visitDataMap(DataMap dataMap) {
 			return getDataMapName(dataMap.getName());
 		}
-
-		@Override
-		public String visitReverseEngineering(ReverseEngineering reverseEngineering) {
-			return getReverseEngineeringName(reverseEngineering.getName());
-		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java
index 4539f16..34775ef 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java
@@ -18,11 +18,8 @@
  ****************************************************************/
 package org.apache.cayenne.configuration;
 
-import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ConfigurationException;
 import org.apache.cayenne.conn.DataSourceInfo;
-import org.apache.cayenne.dbimport.DefaultReverseEngineeringLoader;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.di.AdhocObjectFactory;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.DataMap;
@@ -214,21 +211,6 @@ public class XMLDataChannelDescriptorLoader implements DataChannelDescriptorLoad
 				dataMap.setConfigurationSource(dataMapResource);
 				dataMap.setDataChannelDescriptor(descriptor);
 
-                try {
-                    if (dataMap.getReverseEngineering() != null) {
-                        String reverseEngineeringName = dataMap.getReverseEngineering().getName();
-                        String reverseEngineeringLocation = nameMapper.configurationLocation(ReverseEngineering.class, reverseEngineeringName);
-                        Resource reverseEngineeringResource = baseResource.getRelativeResource(reverseEngineeringLocation);
-                        DefaultReverseEngineeringLoader reverseEngineeringLoader = new DefaultReverseEngineeringLoader();
-                        ReverseEngineering reverseEngineering = reverseEngineeringLoader.load(reverseEngineeringResource.getURL().openStream());
-                        reverseEngineering.setName(reverseEngineeringName);
-                        reverseEngineering.setConfigurationSource(reverseEngineeringResource);
-                        dataMap.setReverseEngineering(reverseEngineering);
-                    }
-                } catch (IOException e) {
-                    throw new CayenneRuntimeException("Error loading reverse engineering model", e);
-                }
-
                 descriptor.getDataMaps().add(dataMap);
             } else if (localName.equals(NODE_TAG)) {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/java/org/apache/cayenne/dbimport/ReverseEngineering.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dbimport/ReverseEngineering.java b/cayenne-server/src/main/java/org/apache/cayenne/dbimport/ReverseEngineering.java
index 2d74d85..5781561 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dbimport/ReverseEngineering.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dbimport/ReverseEngineering.java
@@ -19,16 +19,9 @@
 package org.apache.cayenne.dbimport;
 
 
-import org.apache.cayenne.configuration.ConfigurationNode;
-import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.resource.Resource;
-import org.apache.cayenne.util.XMLEncoder;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.*;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.LinkedList;
@@ -38,7 +31,7 @@ import java.util.LinkedList;
  */
 @XmlRootElement(name = "reverseEngineering")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class ReverseEngineering extends FilterContainer implements ConfigurationNode, Serializable {
+public class ReverseEngineering extends FilterContainer implements Serializable {
 
     @XmlTransient
     protected Resource configurationSource;
@@ -166,16 +159,6 @@ public class ReverseEngineering extends FilterContainer implements Configuration
         return super.toString(res, "  ").toString();
     }
 
-    @Override
-    public <T> T acceptVisitor(ConfigurationNodeVisitor<T> visitor) {
-        return visitor.visitReverseEngineering(this);
-    }
-
-    public void encodeAsXML(XMLEncoder encoder) {
-        DefaultReverseEngineeringWriter defaultReverseEngineeringWriter = new DefaultReverseEngineeringWriter();
-        defaultReverseEngineeringWriter.write(this, encoder.getPrintWriter());
-    }
-
     /**
      * @since 4.0
      */

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java b/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
index 500ee03..5f7d9ab 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
@@ -25,7 +25,6 @@ import org.apache.cayenne.Persistent;
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.map.event.DbEntityListener;
 import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.ObjEntityListener;
@@ -146,7 +145,6 @@ public class DataMap implements Serializable, ConfigurationNode, XMLSerializable
 	private SortedMap<String, Procedure> procedureMap;
 	private SortedMap<String, QueryDescriptor> queryDescriptorMap;
 	private SortedMap<String, SQLResult> results;
-    private ReverseEngineering reverseEngineering;
 
 	/**
 	 * @deprecated since 4.0 unused as listeners are no longer tied to a
@@ -322,12 +320,6 @@ public class DataMap implements Serializable, ConfigurationNode, XMLSerializable
 		encoder.printProjectVersion();
 		encoder.println(">");
 
-        if (reverseEngineering != null) {
-			encoder.print("<reverse-engineering-config");
-            encoder.printAttribute("name", reverseEngineering.getName().trim());
-            encoder.println("/>");
-        }
-
 		// properties
 		if (defaultLockType == ObjEntity.LOCK_TYPE_OPTIMISTIC) {
 			encoder.printProperty(DEFAULT_LOCK_TYPE_PROPERTY, "optimistic");
@@ -1411,11 +1403,4 @@ public class DataMap implements Serializable, ConfigurationNode, XMLSerializable
         return subObjectEntities;
     }
 
-    public ReverseEngineering getReverseEngineering() {
-        return reverseEngineering;
-    }
-
-    public void setReverseEngineering(ReverseEngineering reverseEngineering) {
-        this.reverseEngineering = reverseEngineering;
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
index 213e38e..f3164ab 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
@@ -46,11 +46,6 @@ public class MapLoader extends DefaultHandler {
 
 	public static final String DATA_MAP_TAG = "data-map";
 
-	/**
-	 * @since 4.0
-	 */
-	public static final String REVERSE_ENGINEERING = "reverse-engineering-config";
-
 	public static final String PROPERTY_TAG = "property";
 
 	/**
@@ -152,7 +147,6 @@ public class MapLoader extends DefaultHandler {
 	private Procedure procedure;
 	private QueryDescriptorLoader queryBuilder;
 	private String sqlKey;
-	private ReverseEngineering reverseEngineering;
 
 	private String descending;
 	private String ignoreCase;
@@ -176,15 +170,6 @@ public class MapLoader extends DefaultHandler {
 				processStartDataMap(attributes);
 			}
 		});
-
-		startTagOpMap.put(REVERSE_ENGINEERING, new StartClosure() {
-
-			@Override
-			void execute(Attributes attributes) throws SAXException {
-				processStartReverseEngineering(attributes);
-			}
-		});
-
 		
 		startTagOpMap.put(DB_ENTITY_TAG, new StartClosure() {
 
@@ -577,13 +562,6 @@ public class MapLoader extends DefaultHandler {
 			}
 		});
 	}
-
-	private void processStartReverseEngineering(Attributes attributes) {
-		reverseEngineering = new ReverseEngineering();
-		reverseEngineering.setName(attributes.getValue("", "name"));
-
-		dataMap.setReverseEngineering(reverseEngineering);
-	}
 	
 	private void processStartDataMap(Attributes attributes) {
 		this.mapVersion = attributes.getValue("", "project-version");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd b/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd
index 3d77151..45c0792 100644
--- a/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd
+++ b/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd
@@ -31,7 +31,6 @@
 	<xs:element name="data-map">
 		<xs:complexType>
 			<xs:sequence>
-				<xs:element minOccurs="0" maxOccurs="1" ref="cay:reverse-engineering-config"/>
 				<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:property"/>
 				<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:embeddable"/>
 				<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:procedure"/>
@@ -207,12 +206,6 @@
 
 	<xs:element name="ejbql" type="xs:string"/>
 
-	<xs:element name="reverse-engineering-config">
-		<xs:complexType>
-			<xs:attribute name="name" use="required" type="xs:string"/>
-		</xs:complexType>
-	</xs:element>
-
 	<xs:element name="property">
 		<xs:annotation>
 			<xs:documentation>A generic property used by other elements.</xs:documentation>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/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 10c3d13..87fc179 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
@@ -18,31 +18,17 @@
  ****************************************************************/
 package org.apache.cayenne.tools;
 
-import org.apache.cayenne.configuration.ConfigurationNameMapper;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.configuration.XMLDataMapLoader;
 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.Catalog;
-import org.apache.cayenne.dbimport.DefaultReverseEngineeringLoader;
-import org.apache.cayenne.dbimport.ExcludeColumn;
-import org.apache.cayenne.dbimport.ExcludeProcedure;
-import org.apache.cayenne.dbimport.ExcludeTable;
-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.dbimport.*;
 import org.apache.cayenne.dbsync.CayenneDbSyncModule;
+import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
 import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
-import org.apache.cayenne.resource.Resource;
-import org.apache.cayenne.resource.URLResource;
 import org.apache.cayenne.tools.configuration.ToolsModule;
 import org.apache.cayenne.tools.dbimport.DbImportAction;
 import org.apache.cayenne.tools.dbimport.DbImportConfiguration;
@@ -55,14 +41,11 @@ import org.apache.tools.ant.Task;
 
 import javax.sql.DataSource;
 import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
 
 public class DbImporterTask extends Task {
 
     private final DbImportConfiguration config;
     private ReverseEngineering reverseEngineering;
-    private boolean isReverseEngineeringDefined;
 
     public DbImporterTask() {
         this.config = new DbImportConfiguration();
@@ -74,66 +57,52 @@ public class DbImporterTask extends Task {
     }
 
     public void addIncludeColumn(IncludeColumn includeColumn) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addIncludeColumn(includeColumn);
     }
 
     public void addExcludeColumn(ExcludeColumn excludeColumn) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addExcludeColumn(excludeColumn);
     }
 
     public void addIncludeTable(IncludeTable includeTable) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addIncludeTable(includeTable);
     }
 
     public void addExcludeTable(ExcludeTable excludeTable) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addExcludeTable(excludeTable);
     }
 
     public void addIncludeProcedure(IncludeProcedure includeProcedure) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addIncludeProcedure(includeProcedure);
     }
 
     public void addExcludeProcedure(ExcludeProcedure excludeProcedure) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addExcludeProcedure(excludeProcedure);
     }
 
     public void setSkipRelationshipsLoading(boolean skipRelationshipsLoading) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.setSkipRelationshipsLoading(skipRelationshipsLoading);
     }
 
     public void setSkipPrimaryKeyLoading(boolean skipPrimaryKeyLoading) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.setSkipPrimaryKeyLoading(skipPrimaryKeyLoading);
     }
 
     public void addConfiguredTableType(AntTableType type) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addTableType(type.getName());
     }
 
     public void addConfiguredSchema(Schema schema) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addSchema(schema);
     }
 
     public void addCatalog(Catalog catalog) {
-        isReverseEngineeringDefined = true;
         reverseEngineering.addCatalog(catalog);
     }
 
     @Override
     public void execute() {
-
-        File dataMapFile = config.getDataMapFile();
         config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering).build());
-
         validateAttributes();
 
         Log logger = new AntLogger(this);
@@ -142,73 +111,25 @@ public class DbImporterTask extends Task {
         config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading());
         config.setTableTypes(reverseEngineering.getTableTypes());
 
-        // TODO: get rid of this fork...
-        if (isReverseEngineeringDefined) {
-            Injector injector = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(logger), new DbImportModule());
+        Injector injector = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(logger), new DbImportModule());
 
-            validateDbImportConfiguration(config, injector);
+        validateDbImportConfiguration(config, injector);
 
-            try {
-                injector.getInstance(DbImportAction.class).execute(config);
-            } catch (Exception ex) {
-                Throwable th = Util.unwindException(ex);
-
-                String message = "Error importing database schema";
+        try {
+            injector.getInstance(DbImportAction.class).execute(config);
+        } catch (Exception ex) {
+            Throwable th = Util.unwindException(ex);
 
-                if (th.getLocalizedMessage() != null) {
-                    message += ": " + th.getLocalizedMessage();
-                }
+            String message = "Error importing database schema";
 
-                log(message, Project.MSG_ERR);
-                throw new BuildException(message, th);
-            } finally {
-                injector.shutdown();
-            }
-        } else {
-            if (dataMapFile.exists()) {
-                try {
-                    URL url = dataMapFile.toURI().toURL();
-                    URLResource resource = new URLResource(url);
-
-                    XMLDataMapLoader xmlDataMapLoader = new XMLDataMapLoader();
-                    DataMap dataMap = xmlDataMapLoader.load(resource);
-                    if (dataMap.getReverseEngineering() != null) {
-                        Injector injector = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(logger), new DbImportModule());
-                        try {
-                            ConfigurationNameMapper nameMapper = injector.getInstance(ConfigurationNameMapper.class);
-                            String reverseEngineeringLocation = nameMapper.configurationLocation(ReverseEngineering.class, dataMap.getReverseEngineering().getName());
-                            Resource reverseEngineeringResource = new URLResource(dataMapFile.toURI().toURL()).getRelativeResource(reverseEngineeringLocation);
-
-                            DefaultReverseEngineeringLoader reverseEngineeringLoader = new DefaultReverseEngineeringLoader();
-                            ReverseEngineering reverseEngineering = reverseEngineeringLoader.load(reverseEngineeringResource.getURL().openStream());
-                            reverseEngineering.setName(dataMap.getReverseEngineering().getName());
-                            reverseEngineering.setConfigurationSource(reverseEngineeringResource);
-                            dataMap.setReverseEngineering(reverseEngineering);
-
-                            FiltersConfigBuilder filtersConfigBuilder = new FiltersConfigBuilder(dataMap.getReverseEngineering());
-                            config.getDbLoaderConfig().setFiltersConfig(filtersConfigBuilder.build());
-                            validateDbImportConfiguration(config, injector);
-                            injector.getInstance(DbImportAction.class).execute(config);
-                        } catch (Exception ex) {
-                            Throwable th = Util.unwindException(ex);
-
-                            String message = "Error importing database schema";
-
-                            if (th.getLocalizedMessage() != null) {
-                                message += ": " + th.getLocalizedMessage();
-                            }
-
-                            log(message, Project.MSG_ERR);
-                            throw new BuildException(message, th);
-                        } finally {
-                            injector.shutdown();
-                        }
-                    }
-                } catch (MalformedURLException e) {
-                    log(e.getMessage(), Project.MSG_ERR);
-                    throw new BuildException(e.getMessage(), e);
-                }
+            if (th.getLocalizedMessage() != null) {
+                message += ": " + th.getLocalizedMessage();
             }
+
+            log(message, Project.MSG_ERR);
+            throw new BuildException(message, th);
+        } finally {
+            injector.shutdown();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectFileChangeTracker.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectFileChangeTracker.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectFileChangeTracker.java
index 20bb12b..bbb8e74 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectFileChangeTracker.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectFileChangeTracker.java
@@ -84,12 +84,6 @@ public class ProjectFileChangeTracker extends Thread {
             while (it.hasNext()) {
                 DataMap dm = it.next();
                 addFile(dm.getConfigurationSource().getURL().getPath());
-
-                if (dm.getReverseEngineering() != null) {
-                    if (dm.getReverseEngineering().getConfigurationSource() != null) {
-                        addFile(dm.getReverseEngineering().getConfigurationSource().getURL().getPath());
-                    }
-                }
             }
 
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java
index 3e3f13d..8dcf52f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java
@@ -451,10 +451,6 @@ public class RemoveAction extends CayenneAction {
             URL mapURL = map.getConfigurationSource().getURL();
             Collection<URL> unusedResources = getCurrentProject().getUnusedResources();
             unusedResources.add(mapURL);
-            if (map.getReverseEngineering() != null && map.getReverseEngineering().getConfigurationSource() != null) {
-                URL reverseEngineeringURL = map.getReverseEngineering().getConfigurationSource().getURL();
-                unusedResources.add(reverseEngineeringURL);
-            }
         }
         
         Iterator<DataNodeDescriptor> iterator = domain.getNodeDescriptors().iterator();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
index b531171..b1b0eef 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
@@ -21,20 +21,27 @@ package org.apache.cayenne.modeler.action;
 
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.event.DataMapEvent;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbimport.ReverseEngineering;
 import org.apache.cayenne.dbsync.naming.NameBuilder;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.CayenneModelerController;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.db.ConnectionWizard;
+import org.apache.cayenne.modeler.dialog.db.DbLoaderHelper;
+import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 import org.apache.cayenne.modeler.util.CayenneAction;
 
+import javax.swing.*;
 import java.awt.event.ActionEvent;
+import java.sql.Connection;
 
 /**
  * Action that imports database structure into a DataMap.
  */
-public class ReverseEngineeringAction extends CayenneAction {
+public class ReverseEngineeringAction extends DBWizardAction {
 
     public ReverseEngineeringAction(Application application) {
         super(getActionName(), application);
@@ -49,21 +56,50 @@ public class ReverseEngineeringAction extends CayenneAction {
      */
     @Override
     public void performAction(ActionEvent event) {
-        ProjectController projectController = getProjectController();
-        DataMap dataMap = projectController.getCurrentDataMap();
-        DataChannelDescriptor dataChannelDescriptor = projectController.getCurrentDataChanel();
-        if (dataMap == null) {
-            dataMap = new DataMap();
-            dataMap.setName(NameBuilder
-                    .builder(dataMap, dataChannelDescriptor)
-                    .name());
-            dataChannelDescriptor.getDataMaps().add(dataMap);
-            getProjectController().fireDataMapEvent(new DataMapEvent(this, dataMap, MapEvent.ADD));
+        // guess node connection
+        DBConnectionInfo nodeInfo = preferredDataSource();
+        String nodeKey = preferredDataSourceLabel(nodeInfo);
+
+        // connect
+        ConnectionWizard connectWizard = new ConnectionWizard(
+                getProjectController(),
+                "Reengineer DB Schema: Connect to Database",
+                nodeKey,
+                nodeInfo);
+
+        if (!connectWizard.startupAction()) {
+            // canceled
+            return;
         }
 
-        ((CayenneModelerController) projectController.getParent())
-                .getEditorView()
-                .getDataMapView()
-                .setSelectedIndex(1);
+        Connection connection = connectWizard.getConnection();
+        DbAdapter adapter = connectWizard.getAdapter();
+        DBConnectionInfo dataSourceInfo = connectWizard.getConnectionInfo();
+
+        // from here pass control to DbLoaderHelper, running it from a thread separate
+        // from EventDispatch
+        ReverseEngineering reverseEngineering = new ReverseEngineering();
+
+        final DbLoaderHelper helper = new DbLoaderHelper(
+                getProjectController(),
+                connection,
+                adapter,
+                dataSourceInfo,
+                reverseEngineering);
+        Thread th = new Thread(new Runnable() {
+
+            public void run() {
+                helper.execute();
+
+                SwingUtilities.invokeLater(new Runnable() {
+
+                    public void run() {
+                        application.getUndoManager().discardAllEdits();
+                    }
+                });
+            }
+        });
+
+        th.start();
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ConnectionWizard.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ConnectionWizard.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ConnectionWizard.java
new file mode 100644
index 0000000..7af622b
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ConnectionWizard.java
@@ -0,0 +1,89 @@
+/*****************************************************************
+ *   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.modeler.dialog.db;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.modeler.ClassLoadingService;
+import org.apache.cayenne.modeler.pref.DBConnectionInfo;
+import org.apache.cayenne.modeler.util.CayenneController;
+
+import java.sql.Connection;
+
+/**
+ * A component for choosing a DataSource. Users can choose from the DataSources configured
+ * in preferences, and one extra set of connection settings. This object will create and
+ * keep open a JDBC connection. It is caller responsibility to dispose of it properly.
+ * 
+ */
+// TODO: after refactoring DbLoader to accept a DataSource instead of connection this
+// dialog should be merged with superclass - DataSourceWizard.
+public class ConnectionWizard extends DataSourceWizard {
+    protected Connection connection;
+    protected DbAdapter adapter;
+    
+    public ConnectionWizard(CayenneController parent, String title,
+                            String altDataSourceKey, DBConnectionInfo altDataSource) {
+        super(parent, title, altDataSourceKey, altDataSource);
+    }
+
+    /**
+     * Overrides superclass to keep an open connection around for the caller's use.
+     */
+    public void okAction() {
+        // build connection and adapter...
+
+        DBConnectionInfo info = getConnectionInfo();
+        ClassLoadingService classLoader = getApplication().getClassLoadingService();
+
+        try {
+            this.adapter = info.makeAdapter(classLoader);
+        }
+        catch (Throwable th) {
+            reportError("DbAdapter Error", th);
+            return;
+        }
+
+        try {
+            this.connection = info.makeDataSource(classLoader).getConnection();
+        }
+        catch (Throwable th) {
+            reportError("Connection Error", th);
+            return;
+        }
+        
+        // set success flag, and unblock the caller...
+        canceled = false;
+        view.dispose();
+    }
+
+    /**
+     * Returns configured DB connection.
+     */
+    public Connection getConnection() {
+        return connection;
+    }
+
+    /**
+     * Returns configured DbAdapter.
+     */
+    public DbAdapter getAdapter() {
+        return adapter;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataMapViewModel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataMapViewModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataMapViewModel.java
deleted file mode 100644
index 6b53409..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataMapViewModel.java
+++ /dev/null
@@ -1,46 +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.modeler.dialog.db;
-
-import org.apache.cayenne.modeler.dialog.db.model.DbModel;
-
-/**
- * @since 4.0
- */
-public class DataMapViewModel {
-
-    private String reverseEngineeringText;
-    private DbModel reverseEngineeringTree;
-
-    public String getReverseEngineeringText() {
-        return reverseEngineeringText;
-    }
-
-    public void setReverseEngineeringText(String reverseEngineeringText) {
-        this.reverseEngineeringText = reverseEngineeringText;
-    }
-
-    public DbModel getReverseEngineeringTree() {
-        return reverseEngineeringTree;
-    }
-
-    public void setReverseEngineeringTree(DbModel reverseEngineeringTree) {
-        this.reverseEngineeringTree = reverseEngineeringTree;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizard.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizard.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizard.java
new file mode 100644
index 0000000..33d595b
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizard.java
@@ -0,0 +1,222 @@
+/*****************************************************************
+ *   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.modeler.dialog.db;
+
+import org.apache.cayenne.modeler.ClassLoadingService;
+import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
+import org.apache.cayenne.modeler.pref.DBConnectionInfo;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.swing.BindingBuilder;
+import org.apache.cayenne.swing.ObjectBinding;
+
+import javax.swing.*;
+import java.awt.*;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * A subclass of ConnectionWizard that tests configured DataSource, but does not
+ * keep an open connection.
+ * 
+ */
+public class DataSourceWizard extends CayenneController {
+
+	protected DataSourceWizardView view;
+
+	protected DBConnectionInfo altDataSource;
+	protected String altDataSourceKey;
+	protected ObjectBinding dataSourceBinding;
+	protected Map dataSources;
+
+	protected String dataSourceKey;
+
+	// this object is a clone of an object selected from the dropdown, as we
+	// need to allow
+	// local temporary modifications
+	protected DBConnectionInfo connectionInfo;
+
+	protected boolean canceled;
+
+	public DataSourceWizard(CayenneController parent, String title, String altDataSourceKey,
+                            DBConnectionInfo altDataSource) {
+		super(parent);
+
+		this.view = createView();
+		this.view.setTitle(title);
+		this.altDataSource = altDataSource;
+		this.altDataSourceKey = altDataSourceKey;
+		this.connectionInfo = new DBConnectionInfo();
+
+		initBindings();
+	}
+
+	/**
+	 * Creates swing dialog for this wizard
+	 */
+	protected DataSourceWizardView createView() {
+		return new DataSourceWizardView(this);
+	}
+
+	protected void initBindings() {
+		BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
+
+		dataSourceBinding = builder.bindToComboSelection(view.getDataSources(), "dataSourceKey");
+
+		builder.bindToAction(view.getCancelButton(), "cancelAction()");
+		builder.bindToAction(view.getOkButton(), "okAction()");
+		builder.bindToAction(view.getConfigButton(), "dataSourceConfigAction()");
+	}
+
+	public String getDataSourceKey() {
+		return dataSourceKey;
+	}
+
+	public void setDataSourceKey(String dataSourceKey) {
+		this.dataSourceKey = dataSourceKey;
+
+		// update a clone object that will be used to obtain connection...
+		DBConnectionInfo currentInfo = (DBConnectionInfo) dataSources.get(dataSourceKey);
+		if (currentInfo != null) {
+			currentInfo.copyTo(connectionInfo);
+		} else {
+			connectionInfo = new DBConnectionInfo();
+		}
+
+		view.getConnectionInfo().setConnectionInfo(connectionInfo);
+	}
+
+	/**
+	 * Main action method that pops up a dialog asking for user selection.
+	 * Returns true if the selection was confirmed, false - if canceled.
+	 */
+	public boolean startupAction() {
+		this.canceled = true;
+
+		refreshDataSources();
+
+		view.pack();
+		view.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+		view.setModal(true);
+		makeCloseableOnEscape();
+		centerView();
+		view.setVisible(true);
+
+		return !canceled;
+	}
+
+	public DBConnectionInfo getConnectionInfo() {
+		return connectionInfo;
+	}
+
+	/**
+	 * Tests that the entered information is valid and can be used to open a
+	 * conneciton. Does not store the open connection.
+	 */
+	public void okAction() {
+		DBConnectionInfo info = getConnectionInfo();
+		ClassLoadingService classLoader = getApplication().getClassLoadingService();
+
+		// try making an adapter...
+		try {
+			info.makeAdapter(classLoader);
+		} catch (Throwable th) {
+			reportError("DbAdapter Error", th);
+			return;
+		}
+
+		// doing connection testing...
+		// attempt opening the connection, and close it right away
+		try {
+
+			try (Connection connection = info.makeDataSource(classLoader).getConnection();) {
+				//
+			} catch (SQLException ex) {
+				// ignore close error
+			}
+		} catch (Throwable th) {
+			reportError("Connection Error", th);
+			return;
+		}
+
+		// set success flag, and unblock the caller...
+		canceled = false;
+		view.dispose();
+	}
+
+	public void cancelAction() {
+		canceled = true;
+		view.dispose();
+	}
+
+	/**
+	 * Opens preferences panel to allow configuration of DataSource presets.
+	 */
+	public void dataSourceConfigAction() {
+		PreferenceDialog prefs = new PreferenceDialog(this);
+		prefs.showDataSourceEditorAction(dataSourceKey);
+		refreshDataSources();
+	}
+
+	public Component getView() {
+		return view;
+	}
+
+	protected void refreshDataSources() {
+		this.dataSources = getApplication().getCayenneProjectPreferences().getDetailObject(DBConnectionInfo.class)
+				.getChildrenPreferences();
+
+		// 1.2 migration fix - update data source adapter names
+		Iterator it = dataSources.values().iterator();
+
+		final String _12package = "org.objectstyle.cayenne.";
+		while (it.hasNext()) {
+			DBConnectionInfo info = (DBConnectionInfo) it.next();
+			if (info.getDbAdapter() != null && info.getDbAdapter().startsWith(_12package)) {
+				info.setDbAdapter("org.apache.cayenne." + info.getDbAdapter().substring(_12package.length()));
+
+				// info.getObjectContext().commitChanges();
+			}
+		}
+
+		if (altDataSourceKey != null && !dataSources.containsKey(altDataSourceKey) && altDataSource != null) {
+			dataSources.put(altDataSourceKey, altDataSource);
+		}
+
+		Object[] keys = dataSources.keySet().toArray();
+		Arrays.sort(keys);
+		view.getDataSources().setModel(new DefaultComboBoxModel(keys));
+
+		if (getDataSourceKey() == null) {
+			String key = null;
+
+			if (altDataSourceKey != null) {
+				key = altDataSourceKey;
+			} else if (keys.length > 0) {
+				key = keys[0].toString();
+			}
+
+			setDataSourceKey(key);
+			dataSourceBinding.updateView();
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizardView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizardView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizardView.java
new file mode 100644
index 0000000..d40c8d9
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceWizardView.java
@@ -0,0 +1,94 @@
+/*****************************************************************
+ *   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.modeler.dialog.db;
+
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.pref.DBConnectionInfoEditor;
+import org.apache.cayenne.modeler.util.CayenneController;
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+ */
+public class DataSourceWizardView extends JDialog {
+
+    protected JComboBox dataSources;
+    protected JButton configButton;
+    protected JButton okButton;
+    protected JButton cancelButton;
+    protected DBConnectionInfoEditor connectionInfo;
+
+    public DataSourceWizardView(CayenneController controller) {
+        super(Application.getFrame());
+        
+        this.dataSources = new JComboBox();
+
+        this.configButton = new JButton("...");
+        this.configButton.setToolTipText("configure local DataSource");
+        this.okButton = new JButton("Continue");
+        this.cancelButton = new JButton("Cancel");
+        this.connectionInfo = new DBConnectionInfoEditor(controller);
+
+        CellConstraints cc = new CellConstraints();
+        PanelBuilder builder = new PanelBuilder(new FormLayout(
+                "20dlu:grow, pref, 3dlu, fill:max(150dlu;pref), 3dlu, fill:20dlu",
+                "p"));
+        builder.setDefaultDialogBorder();
+
+        builder.addLabel("Saved DataSources:", cc.xy(2, 1));
+        builder.add(dataSources, cc.xy(4, 1));
+        builder.add(configButton, cc.xy(6, 1));
+
+        JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+        buttons.add(cancelButton);
+        buttons.add(okButton);
+
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(builder.getPanel(), BorderLayout.NORTH);
+        getContentPane().add(connectionInfo.getView(), BorderLayout.CENTER);
+        getContentPane().add(buttons, BorderLayout.SOUTH);
+
+        setTitle("DB Connection Info");
+    }
+
+    public JComboBox getDataSources() {
+        return dataSources;
+    }
+
+    public JButton getCancelButton() {
+        return cancelButton;
+    }
+
+    public JButton getConfigButton() {
+        return configButton;
+    }
+
+    public JButton getOkButton() {
+        return okButton;
+    }
+
+    public DBConnectionInfoEditor getConnectionInfo() {
+        return connectionInfo;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
index 58ef41b..7dede61 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
@@ -21,14 +21,13 @@ package org.apache.cayenne.modeler.dialog.db;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.configuration.ConfigurationNode;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbimport.*;
 import org.apache.cayenne.dbsync.CayenneDbSyncModule;
 import org.apache.cayenne.dbsync.naming.NameBuilder;
-import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
 import org.apache.cayenne.dbsync.reverse.db.DbLoader;
 import org.apache.cayenne.dbsync.reverse.db.DefaultDbLoaderDelegate;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.map.DataMap;
@@ -42,6 +41,7 @@ import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 import org.apache.cayenne.modeler.util.LongRunningTask;
 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.util.Util;
@@ -80,6 +80,7 @@ public class DbLoaderHelper {
     protected DbImportConfiguration config;
     protected ReverseEngineering reverseEngineering;
     protected String loadStatusNote;
+    protected String dbUserName;
 
     /**
      * ObjEntities which were added to project during reverse engineering
@@ -89,6 +90,7 @@ public class DbLoaderHelper {
     public DbLoaderHelper(ProjectController mediator, Connection connection, DbAdapter adapter,
                           DBConnectionInfo dbConnectionInfo, ReverseEngineering reverseEngineering) {
         this.mediator = mediator;
+        this.dbUserName = dbConnectionInfo.getUserName();
         try {
             this.dbCatalog = connection.getCatalog();
         } catch (SQLException e) {
@@ -153,6 +155,35 @@ public class DbLoaderHelper {
             return;
         }
 
+        final DbLoaderOptionsDialog dialog = new DbLoaderOptionsDialog(schemas, catalogs, dbUserName, dbCatalog);
+
+        try {
+            // since we are not inside EventDispatcher Thread, must run it via
+            // SwingUtilities
+            SwingUtilities.invokeAndWait(new Runnable() {
+
+                public void run() {
+                    dialog.setVisible(true);
+                    dialog.dispose();
+                }
+            });
+        } catch (Throwable th) {
+            processException(th, "Error Reengineering Database");
+            return;
+        }
+
+        if (dialog.getChoice() == DbLoaderOptionsDialog.CANCEL) {
+            return;
+        }
+
+        reverseEngineering.addCatalog(new Catalog(dialog.getSelectedCatalog()));
+        reverseEngineering.addSchema(new Schema(dialog.getSelectedSchema()));
+        reverseEngineering.addIncludeTable(new IncludeTable(dialog.getTableNamePattern()));
+        reverseEngineering.addIncludeProcedure(new IncludeProcedure(dialog.getProcedureNamePattern()));
+
+        config.setMeaningfulPkTables(dialog.getMeaningfulPk());
+        config.setNamingStrategy(dialog.getNamingStrategy());
+
         LongRunningTask loadDataMapTask = new LoadDataMapTask(Application.getFrame(), "Reengineering DB");
         loadDataMapTask.startAndWait();
     }
@@ -323,6 +354,7 @@ public class DbLoaderHelper {
     }
 
     public final class LoadDataMapTask extends DbLoaderTask {
+        private DbImportAction importAction;
 
         public LoadDataMapTask(JFrame frame, String title) {
             super(frame, title);
@@ -348,17 +380,6 @@ public class DbLoaderHelper {
                 return;
             }
 
-            DataMap dataMap = mediator.getCurrentDataMap();
-            DataChannelDescriptor dataChannelDescriptor = mediator.getCurrentDataChanel();
-            if (dataMap.getReverseEngineering() != null) {
-                if (dataMap.getReverseEngineering().getName() != null) {
-                    reverseEngineering.setName(dataMap.getReverseEngineering().getName());
-                    reverseEngineering.setConfigurationSource(dataMap.getReverseEngineering().getConfigurationSource());
-                }
-            } else {
-                reverseEngineering.setName(NameBuilder.builder(reverseEngineering, dataChannelDescriptor).name());
-            }
-
             if (dataMap.getConfigurationSource() != null) {
                 config.setDataMapFile(new File(dataMap.getConfigurationSource().getURL().getPath()));
             }
@@ -375,7 +396,6 @@ public class DbLoaderHelper {
             injector.injectMembers(importAction);
             try {
                 importAction.execute(config);
-                dataMap.setReverseEngineering(reverseEngineering);
             } catch (Exception e) {
                 processException(e, "Error importing database schema.");
             }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29671e75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderOptionsDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderOptionsDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderOptionsDialog.java
new file mode 100644
index 0000000..4d9dee4
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderOptionsDialog.java
@@ -0,0 +1,253 @@
+/*****************************************************************
+ *   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.modeler.dialog.db;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.util.CayenneDialog;
+import org.apache.cayenne.modeler.util.NameGeneratorPreferences;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collection;
+import java.util.Vector;
+
+/**
+ * Dialog for selecting database reverse-engineering parameters.
+ */
+public class DbLoaderOptionsDialog extends CayenneDialog {
+
+    private static final Log logObj = LogFactory.getLog(DbLoaderOptionsDialog.class);
+
+    public static final int CANCEL = 0;
+    public static final int SELECT = 1;
+
+    protected JLabel catalogLabel;
+    protected JComboBox catalogSelector;
+    protected JLabel schemaLabel;
+    protected JComboBox schemaSelector;
+    protected JTextField tableNamePatternField;
+    protected JTextField meaningfulPk;
+    protected JTextField procNamePatternField;
+    protected JLabel procedureLabel;
+    protected JButton selectButton;
+    protected JButton cancelButton;
+
+    public static final String WILDCARD_PATTERN = ".*";
+
+
+    /**
+     * Combobox for naming strategy
+     */
+    protected JComboBox strategyCombo;
+//
+    protected String strategy;
+
+    protected int choice;
+
+    /**
+     * Creates and initializes new ChooseSchemaDialog.
+     */
+    public DbLoaderOptionsDialog(Collection<String> schemas, Collection<String> catalogs, String dbUserName,
+                                 String dbCatalog) {
+        super(Application.getFrame(), "Reengineer DB Schema: Select Options");
+
+        init();
+        initController();
+        initFromModel(schemas, catalogs, dbUserName, dbCatalog);
+
+        pack();
+        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+        setModal(true);
+        centerWindow();
+    }
+
+    /** Sets up the graphical components. */
+    protected void init() {
+
+        // create widgets...
+        selectButton = new JButton("Continue");
+        cancelButton = new JButton("Cancel");
+        catalogSelector = new JComboBox();
+        schemaSelector = new JComboBox();
+        tableNamePatternField = new JTextField();
+        procNamePatternField = new JTextField();
+        meaningfulPk = new JTextField();
+        strategyCombo = new JComboBox();
+        strategyCombo.setEditable(true);
+
+        // assemble
+        FormLayout layout = new FormLayout(
+                "right:pref, 3dlu, fill:max(170dlu;pref):grow",
+                "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        builder.setDefaultDialogBorder();
+
+        catalogLabel = builder.append("Select Catalog:", catalogSelector);
+        schemaLabel = builder.append("Select Schema:", schemaSelector);
+        builder.append("Table Name Pattern:", tableNamePatternField);
+        procedureLabel = builder.append("Procedure Name Pattern:", procNamePatternField);
+        builder.append("Naming Strategy:", strategyCombo);
+        builder.append("Meaningful PK", meaningfulPk);
+
+        JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+        buttons.add(cancelButton);
+        buttons.add(selectButton);
+
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        getContentPane().add(buttons, BorderLayout.SOUTH);
+    }
+
+    protected void initController() {
+        selectButton.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                processSelect();
+            }
+        });
+
+        cancelButton.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                processCancel();
+            }
+        });
+    }
+
+    protected void initFromModel(
+            Collection<String> schemas,
+            Collection<String> catalogs,
+            String dbUserName,
+            String dbCatalog) {
+
+        this.choice = CANCEL;
+        this.tableNamePatternField.setText(WILDCARD_PATTERN);
+        this.procNamePatternField.setText(WILDCARD_PATTERN);
+        this.meaningfulPk.setText(WILDCARD_PATTERN);
+
+        Vector<String> arr = NameGeneratorPreferences
+                .getInstance()
+                .getLastUsedStrategies();
+        strategyCombo.setModel(new DefaultComboBoxModel(arr));
+
+        boolean showSchemaSelector = schemas != null && !schemas.isEmpty();
+        schemaSelector.setVisible(showSchemaSelector);
+        schemaLabel.setVisible(showSchemaSelector);
+
+        if (showSchemaSelector) {
+
+            schemaSelector.setModel(new DefaultComboBoxModel(schemas.toArray()));
+
+            // select schema belonging to the user
+            if (dbUserName != null) {
+                for (String schema : schemas) {
+                    if (dbUserName.equalsIgnoreCase(schema)) {
+                        schemaSelector.setSelectedItem(schema);
+                        break;
+                    }
+                }
+            }
+        }
+
+        boolean showCatalogSelector = catalogs != null && !catalogs.isEmpty();
+        catalogSelector.setVisible(showCatalogSelector);
+        catalogLabel.setVisible(showCatalogSelector);
+
+        if (showCatalogSelector) {
+            catalogSelector.setModel(new DefaultComboBoxModel(catalogs.toArray()));
+
+            if (dbCatalog != null && !dbCatalog.isEmpty()) {
+                for (String catalog : catalogs) {
+                    if (dbCatalog.equalsIgnoreCase(catalog)) {
+                        catalogSelector.setSelectedItem(catalog);
+                        break;
+                    }
+                }
+            }
+        }
+
+    }
+
+    public int getChoice() {
+        return choice;
+    }
+
+    private void processSelect() {
+        strategy = (String) strategyCombo.getSelectedItem();
+
+        choice = SELECT;
+        setVisible(false);
+    }
+
+    private void processCancel() {
+        choice = CANCEL;
+        setVisible(false);
+    }
+
+    /**
+     * Returns selected catalog.
+     */
+    public String getSelectedCatalog() {
+        String catalog = (String) catalogSelector.getSelectedItem();
+        return "".equals(catalog) ? null : catalog;
+    }
+
+    /**
+     * Returns selected schema.
+     */
+    public String getSelectedSchema() {
+        String schema = (String) schemaSelector.getSelectedItem();
+        return "".equals(schema) ? null : schema;
+    }
+
+    /**
+     * Returns the tableNamePattern.
+     */
+    public String getTableNamePattern() {
+        return "".equals(tableNamePatternField.getText()) ? null : tableNamePatternField
+                .getText();
+    }
+
+    public String getMeaningfulPk() {
+        return "".equals(meaningfulPk.getText()) ? null : meaningfulPk
+                .getText();
+    }
+
+    /**
+     * Returns the procedure name pattern.
+     */
+    public String getProcedureNamePattern() {
+        return "".equals(procNamePatternField.getText()) ? null : procNamePatternField
+                .getText();
+    }
+
+    /**
+     * Returns configured naming strategy
+     */
+    public String getNamingStrategy() {
+        return strategy;
+    }
+}