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/12/19 11:46:20 UTC

[04/10] cayenne git commit: CAY-2172 Split DB actions to different packages Clean up ReverseEngineeringAction Clean up DataSource select dialogs

CAY-2172
Split DB actions to different packages
Clean up ReverseEngineeringAction
Clean up DataSource select dialogs


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

Branch: refs/heads/master
Commit: 7da0e8975da0eb266962ade0162f245b5dbc4978
Parents: 43b3080
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Dec 13 18:15:02 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Dec 13 18:15:02 2016 +0300

----------------------------------------------------------------------
 .../cayenne/modeler/action/DBWizardAction.java  |  95 +----
 .../modeler/action/GenerateDBAction.java        |   8 +-
 .../cayenne/modeler/action/MigrateAction.java   |  42 +-
 .../action/ReverseEngineeringAction.java        | 123 ++++--
 .../modeler/dialog/db/ConnectionWizard.java     |  87 ----
 .../modeler/dialog/db/DBGeneratorOptions.java   | 345 ----------------
 .../dialog/db/DBGeneratorOptionsView.java       | 178 --------
 .../modeler/dialog/db/DataSourceController.java | 219 ----------
 .../modeler/dialog/db/DataSourceView.java       | 100 -----
 .../modeler/dialog/db/DataSourceWizard.java     |  80 ++--
 .../modeler/dialog/db/DbLoaderHelper.java       | 401 -------------------
 .../dialog/db/DbLoaderOptionsDialog.java        | 247 ------------
 .../dialog/db/DbMigrateOptionsDialog.java       | 175 --------
 .../modeler/dialog/db/MergerOptions.java        | 395 ------------------
 .../modeler/dialog/db/MergerOptionsView.java    | 134 -------
 .../db/MergerTokenSelectorController.java       | 239 -----------
 .../dialog/db/MergerTokenSelectorView.java      | 106 -----
 .../dialog/db/MergerTokenTableModel.java        | 128 ------
 .../dialog/db/ModelerDbImportAction.java        |  71 ----
 .../dialog/db/TableSelectorController.java      | 251 ------------
 .../modeler/dialog/db/TableSelectorView.java    |  94 -----
 .../dialog/db/gen/DBGeneratorOptions.java       | 332 +++++++++++++++
 .../dialog/db/gen/DBGeneratorOptionsView.java   | 178 ++++++++
 .../dialog/db/gen/TableSelectorController.java  | 251 ++++++++++++
 .../dialog/db/gen/TableSelectorView.java        |  94 +++++
 .../dialog/db/load/DbImportProjectSaver.java    |  74 ++++
 .../modeler/dialog/db/load/DbLoaderContext.java | 176 ++++++++
 .../dialog/db/load/DbLoaderOptionsDialog.java   | 247 ++++++++++++
 .../modeler/dialog/db/load/LoadDataMapTask.java |  94 +++++
 .../modeler/dialog/db/load/LoaderDelegate.java  |  71 ++++
 .../dialog/db/load/ModelerDbImportAction.java   |  53 +++
 .../dialog/db/load/ModelerSyncModule.java       |  44 ++
 .../dialog/db/merge/DbMigrateOptionsDialog.java | 176 ++++++++
 .../modeler/dialog/db/merge/MergerOptions.java  | 395 ++++++++++++++++++
 .../dialog/db/merge/MergerOptionsView.java      | 134 +++++++
 .../db/merge/MergerTokenSelectorController.java | 240 +++++++++++
 .../db/merge/MergerTokenSelectorView.java       | 106 +++++
 .../dialog/db/merge/MergerTokenTableModel.java  | 129 ++++++
 .../cayenne/modeler/util/DbAdapterInfo.java     |   2 +-
 39 files changed, 2936 insertions(+), 3378 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java
index 1d2b32f..a3e652a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java
@@ -19,16 +19,8 @@
 
 package org.apache.cayenne.modeler.action;
 
-import java.util.Collection;
-
-import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory;
-import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.pref.DBConnectionInfo;
-import org.apache.cayenne.modeler.pref.DataNodeDefaults;
+import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
 import org.apache.cayenne.modeler.util.CayenneAction;
 
 /**
@@ -39,88 +31,13 @@ public abstract class DBWizardAction extends CayenneAction {
         super(name, application);
     }
 
-    // ==== Guessing user preferences... *****
-
-    protected DataNodeDescriptor getPreferredNode() {
-        ProjectController projectController = getProjectController();
-        DataNodeDescriptor node = projectController.getCurrentDataNode();
-
-        // try a node that belongs to the current DataMap ...
-        if (node == null) {
-            DataMap map = projectController.getCurrentDataMap();
-            if (map != null) {
-                Collection<DataNodeDescriptor> nodes = ((DataChannelDescriptor) projectController
-                        .getProject()
-                        .getRootNode()).getNodeDescriptors();
-                for (DataNodeDescriptor n : nodes) {
-                    if (n.getDataMapNames().contains(map.getName())) {
-                        node = n;
-                        break;
-                    }
-                }
-            }
-        }
-
-        return node;
-    }
-
-    protected String preferredDataSourceLabel(DBConnectionInfo nodeInfo) {
-        if (nodeInfo == null) {
-
-            // only driver nodes have meaningful connection info set
-            DataNodeDescriptor node = getPreferredNode();
-            return (node != null && XMLPoolingDataSourceFactory.class.getName().equals(
-                    node.getDataSourceFactoryType())) ? "DataNode Connection Info" : null;
-        }
-
-        return nodeInfo.getNodeName();
-    }
-
-    /**
-     * Determines the most reasonable default DataSource choice.
-     */
-    protected DBConnectionInfo preferredDataSource() {
-        DataNodeDescriptor node = getPreferredNode();
-
-        // no current node...
-        if (node == null) {
-            return null;
-        }
-
-        // if node has local DS set, use it
-        DataNodeDefaults nodeDefaults = (DataNodeDefaults) getApplication()
-                .getCayenneProjectPreferences()
-                .getProjectDetailObject(
-                        DataNodeDefaults.class,
-                        getProjectController().getPreferenceForDataDomain().node(
-                                "DataNode").node(node.getName()));
-
-        String key = (nodeDefaults != null) ? nodeDefaults.getLocalDataSource() : null;
-        if (key != null) {
-            DBConnectionInfo info = (DBConnectionInfo) getApplication()
-                    .getCayenneProjectPreferences()
-                    .getDetailObject(DBConnectionInfo.class)
-                    .getObject(key);
-
-            if (info != null) {
-                return info;
-            }
-        }
-
-        // extract data from the node
-        if (!XMLPoolingDataSourceFactory.class.getName().equals(
-                node.getDataSourceFactoryType())) {
+    protected DataSourceWizard dataSourceWizardDialog(String title) {
+        // connect
+        DataSourceWizard connectWizard = new DataSourceWizard(getProjectController(), title);
+        if (!connectWizard.startupAction()) {
             return null;
         }
 
-        // create transient object..
-        DBConnectionInfo nodeInfo = new DBConnectionInfo();
-
-        nodeInfo.copyFrom(node.getDataSourceDescriptor());
-
-        nodeInfo.setDbAdapter(node.getAdapterType());
-
-        return nodeInfo;
+        return connectWizard;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateDBAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateDBAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateDBAction.java
index 0173304..1cf6301 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateDBAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateDBAction.java
@@ -22,7 +22,7 @@ package org.apache.cayenne.modeler.action;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.dialog.db.DBGeneratorOptions;
+import org.apache.cayenne.modeler.dialog.db.gen.DBGeneratorOptions;
 import org.apache.cayenne.project.Project;
 
 import java.awt.event.ActionEvent;
@@ -48,13 +48,13 @@ public class GenerateDBAction extends DBWizardAction {
         DataMap dataMap = getProjectController().getCurrentDataMap();
 
         if (dataMap != null) {
-            dataMaps = new ArrayList<DataMap>();
+            dataMaps = new ArrayList<>();
             dataMaps.add(dataMap);
-            new DBGeneratorOptions(getProjectController(), "Generate DB Schema: Options", dataMaps).startupAction();
         } else {
             Project project = getProjectController().getProject();
             dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
-            new DBGeneratorOptions(getProjectController(), "Generate DB Schema: Options", dataMaps).startupAction();
         }
+        new DBGeneratorOptions(getProjectController(), "Generate DB Schema: Options", dataMaps)
+                .startupAction();
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
index 00e27bf..29cd6a7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
@@ -19,18 +19,16 @@
 
 package org.apache.cayenne.modeler.action;
 
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
 import org.apache.cayenne.dbsync.reverse.db.DbLoader;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.dialog.db.DataSourceController;
-import org.apache.cayenne.modeler.dialog.db.DbMigrateOptionsDialog;
-import org.apache.cayenne.modeler.dialog.db.MergerOptions;
-import org.apache.cayenne.modeler.pref.DBConnectionInfo;
+import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
+import org.apache.cayenne.modeler.dialog.db.merge.DbMigrateOptionsDialog;
+import org.apache.cayenne.modeler.dialog.db.merge.MergerOptions;
 
 import javax.sql.DataSource;
-import javax.swing.*;
+import javax.swing.JOptionPane;
 import java.awt.event.ActionEvent;
 import java.util.Collections;
 import java.util.List;
@@ -50,27 +48,16 @@ public class MigrateAction extends DBWizardAction {
 
     public void performAction(ActionEvent e) {
 
-        DBConnectionInfo nodeInfo = preferredDataSource();
-        String nodeKey = preferredDataSourceLabel(nodeInfo);
-
-        DataSourceController connectWizard = new DataSourceController(
-                getProjectController(),
-                "Migrate DB Schema: Connect to Database",
-                nodeKey,
-                nodeInfo);
-
-        if (!connectWizard.startupAction()) {
-            // canceled
+        DataSourceWizard connectWizard = dataSourceWizardDialog("Migrate DB Schema: Connect to Database");
+        if(connectWizard == null) {
             return;
         }
 
         DataMap map = getProjectController().getCurrentDataMap();
-        //migarte options
-
-        // sanity check
         if (map == null) {
             throw new IllegalStateException("No current DataMap selected.");
         }
+
         //showOptions dialog
         String selectedSchema = null;
         String selectedCatalog = null;
@@ -107,22 +94,17 @@ public class MigrateAction extends DBWizardAction {
     }
 
     @SuppressWarnings("unchecked")
-    private List<String> getCatalogs(DataSourceController connectWizard) throws Exception {
-        DbAdapter adapter = connectWizard.getConnectionInfo()
-                .makeAdapter(getApplication().getClassLoadingService());
-        if(!adapter.supportsCatalogsOnReverseEngineering()) {
+    private List<String> getCatalogs(DataSourceWizard connectWizard) throws Exception {
+        if(!connectWizard.getAdapter().supportsCatalogsOnReverseEngineering()) {
             return (List<String>)Collections.EMPTY_LIST;
         }
 
-        DataSource dataSource = connectWizard.getConnectionInfo()
-                .makeDataSource(getApplication().getClassLoadingService());
+        DataSource dataSource = connectWizard.getDataSource();
         return DbLoader.loadCatalogs(dataSource.getConnection());
     }
 
-    private List<String> getSchemas(DataSourceController connectWizard) throws Exception {
-        DataSource dataSource = connectWizard.getConnectionInfo()
-                .makeDataSource(getApplication().getClassLoadingService());
-
+    private List<String> getSchemas(DataSourceWizard connectWizard) throws Exception {
+        DataSource dataSource = connectWizard.getDataSource();
         return DbLoader.loadSchemas(dataSource.getConnection());
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/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 183b00b..8088639 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
@@ -19,22 +19,25 @@
 
 package org.apache.cayenne.modeler.action;
 
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.reverse.db.DbLoader;
 import org.apache.cayenne.modeler.Application;
-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.dialog.db.DataSourceWizard;
+import org.apache.cayenne.modeler.dialog.db.load.DbLoaderContext;
+import org.apache.cayenne.modeler.dialog.db.load.DbLoaderOptionsDialog;
+import org.apache.cayenne.modeler.dialog.db.load.LoadDataMapTask;
 
-import javax.swing.*;
 import java.awt.event.ActionEvent;
-import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.List;
+import javax.swing.SwingUtilities;
 
 /**
  * Action that imports database structure into a DataMap.
  */
 public class ReverseEngineeringAction extends DBWizardAction {
 
-    public ReverseEngineeringAction(Application application) {
+    ReverseEngineeringAction(Application application) {
         super(getActionName(), application);
     }
 
@@ -47,49 +50,89 @@ public class ReverseEngineeringAction extends DBWizardAction {
      */
     @Override
     public void performAction(ActionEvent event) {
-        // 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
+        final DbLoaderContext context = new DbLoaderContext();
+        final DataSourceWizard connectWizard = dataSourceWizardDialog("Reengineer DB Schema: Connect to Database");
+        if(connectWizard == null) {
             return;
         }
 
-        // TODO: doesn't look like we are closing this connection anywhere...
-        Connection connection = connectWizard.getConnection();
-        DbAdapter adapter = connectWizard.getAdapter();
-        DBConnectionInfo dataSourceInfo = connectWizard.getConnectionInfo();
+        context.setProjectController(getProjectController());
+        try {
+            context.setConnection(connectWizard.getDataSource().getConnection());
+        } catch (SQLException ex) {
+            return;
+        }
 
-        // from here pass control to DbLoaderHelper, running it from a thread separate
-        // from EventDispatch
+        final DbLoaderOptionsDialog loaderOptionsDialog = loaderOptionDialog(connectWizard, context);
+        if(!context.buildConfig(connectWizard, loaderOptionsDialog)) {
+            return;
+        }
 
-        final DbLoaderHelper helper = new DbLoaderHelper(
-                getProjectController(),
-                connection,
-                adapter,
-                dataSourceInfo);
-        Thread th = new Thread(new Runnable() {
+        runLoaderInThread(context, new Runnable() {
+            @Override
+            public void run() {
+                application.getUndoManager().discardAllEdits();
+                try {
+                    context.getConnection().close();
+                } catch (SQLException ignored) {
+                }
+            }
+        });
+    }
 
+    private void runLoaderInThread(final DbLoaderContext context,
+                                   final Runnable callback) {
+        Thread th = new Thread(new Runnable() {
             public void run() {
-                helper.execute();
+                LoadDataMapTask task = new LoadDataMapTask(Application.getFrame(), "Reengineering DB", context);
+                task.startAndWait();
+                SwingUtilities.invokeLater(callback);
+            }
+        });
+        th.start();
+    }
 
-                SwingUtilities.invokeLater(new Runnable() {
+    private DbLoaderOptionsDialog loaderOptionDialog(DataSourceWizard connectWizard, DbLoaderContext context) {
+        if(connectWizard == null) {
+            return null;
+        }
 
-                    public void run() {
-                        application.getUndoManager().discardAllEdits();
-                    }
-                });
+        List<String> catalogs = Collections.emptyList();
+        List<String> schemas = Collections.emptyList();
+        try {
+            schemas = DbLoader.loadSchemas(context.getConnection());
+            if (connectWizard.getAdapter().supportsCatalogsOnReverseEngineering()) {
+                catalogs = DbLoader.loadCatalogs(context.getConnection());
             }
-        });
+        } catch (SQLException ex) {
+            context.processWarn(ex, "Error Loading catalogs and schemas");
+        }
 
-        th.start();
+        if (context.isStopping()) {
+            return null;
+        }
+
+        // use this catalog as the default...
+        String currentCatalog = null;
+        String currentSchema = null;
+        try {
+            currentCatalog = context.getConnection().getCatalog();
+            currentSchema = context.getConnection().getSchema();
+        } catch (SQLException e) {
+            context.processWarn(e, "Error getting catalog or schema");
+        }
+
+        final DbLoaderOptionsDialog dialog = new DbLoaderOptionsDialog(
+                schemas, catalogs,
+                currentSchema, currentCatalog
+        );
+        dialog.setVisible(true);
+        dialog.dispose();
+
+        if (dialog.getChoice() == DbLoaderOptionsDialog.CANCEL) {
+            return null;
+        }
+
+        return dialog;
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/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
deleted file mode 100644
index 45a8bca..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ConnectionWizard.java
+++ /dev/null
@@ -1,87 +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.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;
-        }
-
-        onClose(false);
-    }
-
-    /**
-     * 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/7da0e897/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptions.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptions.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptions.java
deleted file mode 100644
index 1747c87..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptions.java
+++ /dev/null
@@ -1,345 +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.access.DbGenerator;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.log.NoopJdbcEventLogger;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.dialog.ValidationResultBrowser;
-import org.apache.cayenne.modeler.pref.DBConnectionInfo;
-import org.apache.cayenne.modeler.pref.DBGeneratorDefaults;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.modeler.util.DbAdapterInfo;
-import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.swing.ObjectBinding;
-import org.apache.cayenne.validation.ValidationResult;
-
-import javax.sql.DataSource;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.WindowConstants;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import java.awt.Component;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- */
-public class DBGeneratorOptions extends CayenneController {
-
-    protected DBGeneratorOptionsView view;
-    protected ObjectBinding[] optionBindings;
-    protected ObjectBinding sqlBinding;
-    protected ObjectBinding adapterBinding;
-
-    protected DBConnectionInfo connectionInfo;
-    protected Collection<DataMap> dataMaps;
-    protected DBGeneratorDefaults generatorDefaults;
-    protected Collection<DbGenerator> generators;
-    protected String textForSQL;
-
-    protected TableSelectorController tables;
-
-    public DBGeneratorOptions(ProjectController parent, String title, Collection<DataMap> dataMaps) {
-        super(parent);
-
-        this.dataMaps = dataMaps;
-        this.tables = new TableSelectorController(parent);
-        this.view = new DBGeneratorOptionsView(tables.getView());
-        this.connectionInfo = new DBConnectionInfo();
-        this.generatorDefaults = new DBGeneratorDefaults(parent
-                .getPreferenceForProject()
-                .node("DbGenerator"));
-
-        this.view.setTitle(title);
-        initController();
-        connectionInfo.setDbAdapter((String) view.getAdapters().getSelectedItem());
-
-        tables.updateTables(dataMaps);
-        prepareGenerator();
-        generatorDefaults.configureGenerator(generators);
-        createSQL();
-        refreshView();
-    }
-
-    public Component getView() {
-        return view;
-    }
-
-    public DBGeneratorDefaults getGeneratorDefaults() {
-        return generatorDefaults;
-    }
-
-    public String getTextForSQL() {
-        return textForSQL;
-    }
-
-    protected void initController() {
-
-        DefaultComboBoxModel adapterModel = new DefaultComboBoxModel(
-                DbAdapterInfo.getStandardAdapters());
-        view.getAdapters().setModel(adapterModel);
-        view.getAdapters().setSelectedIndex(0);
-
-        BindingBuilder builder = new BindingBuilder(
-                getApplication().getBindingFactory(),
-                this);
-
-        sqlBinding = builder.bindToTextArea(view.getSql(), "textForSQL");
-        adapterBinding = builder.bindToComboSelection(
-                view.getAdapters(),
-                "connectionInfo.dbAdapter",
-                "refreshSQLAction()",
-                "org.apache.cayenne.dba.JdbcAdapter");
-
-        optionBindings = new ObjectBinding[5];
-        optionBindings[0] = builder.bindToStateChangeAndAction(
-                view.getCreateFK(),
-                "generatorDefaults.createFK",
-                "refreshSQLAction()");
-        optionBindings[1] = builder.bindToStateChangeAndAction(
-                view.getCreatePK(),
-                "generatorDefaults.createPK",
-                "refreshSQLAction()");
-        optionBindings[2] = builder.bindToStateChangeAndAction(
-                view.getCreateTables(),
-                "generatorDefaults.createTables",
-                "refreshSQLAction()");
-        optionBindings[3] = builder.bindToStateChangeAndAction(
-                view.getDropPK(),
-                "generatorDefaults.dropPK",
-                "refreshSQLAction()");
-        optionBindings[4] = builder.bindToStateChangeAndAction(
-                view.getDropTables(),
-                "generatorDefaults.dropTables",
-                "refreshSQLAction()");
-
-        builder.bindToAction(view.getGenerateButton(), "generateSchemaAction()");
-        builder.bindToAction(view.getSaveSqlButton(), "storeSQLAction()");
-        builder.bindToAction(view.getCancelButton(), "closeAction()");
-
-        // refresh SQL if different tables were selected
-        view.getTabs().addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent e) {
-                if (view.getTabs().getSelectedIndex() == 0) {
-                    // this assumes that some tables where checked/unchecked... not very
-                    // efficient
-                    refreshGeneratorAction();
-                }
-            }
-        });
-    }
-
-    /**
-     * Creates new internal DbGenerator instance.
-     */
-    protected void prepareGenerator() {
-        try {
-            DbAdapter adapter = connectionInfo.makeAdapter(getApplication()
-                    .getClassLoadingService());
-            generators = new ArrayList<DbGenerator>();
-            for (DataMap dataMap : dataMaps) {
-                this.generators.add(new DbGenerator(
-                        adapter,
-                        dataMap,
-                        tables.getExcludedTables(),
-                        null,
-                        NoopJdbcEventLogger.getInstance()));
-            }
-        } catch (Exception ex) {
-            reportError("Error loading adapter", ex);
-        }
-    }
-
-    /**
-     * Returns SQL statements generated for selected schema generation options.
-     */
-    protected void createSQL() {
-        // convert them to string representation for display
-        StringBuffer buf = new StringBuffer();
-        for (DbGenerator generator : generators) {
-            Iterator<String> it = generator.configuredStatements().iterator();
-            String batchTerminator = generator.getAdapter().getBatchTerminator();
-
-            String lineEnd = (batchTerminator != null)
-                    ? "\n" + batchTerminator + "\n\n"
-                    : "\n\n";
-
-            while (it.hasNext()) {
-                buf.append(it.next()).append(lineEnd);
-            }
-        }
-
-        textForSQL = buf.toString();
-    }
-
-    protected void refreshView() {
-        getView().setEnabled(connectionInfo != null);
-
-        for (ObjectBinding optionBinding : optionBindings) {
-            optionBinding.updateView();
-        }
-
-        sqlBinding.updateView();
-    }
-
-    // ===============
-    // Actions
-    // ===============
-
-    /**
-     * Starts options dialog.
-     */
-    public void startupAction() {
-        view.pack();
-        view.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-        view.setModal(true);
-        makeCloseableOnEscape();
-        centerView();
-        view.setVisible(true);
-    }
-
-    public void refreshGeneratorAction() {
-        prepareGenerator();
-        refreshSQLAction();
-    }
-
-    /**
-     * Updates a text area showing generated SQL.
-     */
-    public void refreshSQLAction() {
-        // sync generator with defaults, make SQL, then sync the view...
-        adapterBinding.updateView();
-        connectionInfo.setDbAdapter((String) view.getAdapters().getSelectedItem());
-        prepareGenerator();
-        generatorDefaults.configureGenerator(generators);
-        createSQL();
-        sqlBinding.updateView();
-    }
-
-    /**
-     * Performs configured schema operations via DbGenerator.
-     */
-    public void generateSchemaAction() {
-
-        DataSourceController connectWizard = new DataSourceController(
-                this.getParent(),
-                "Generate DB Schema: Connect to Database",
-                null,
-                null);
-
-        if (!connectWizard.startupAction()) {
-            // canceled
-            return;
-        }
-
-        this.connectionInfo = connectWizard.getConnectionInfo();
-
-        refreshGeneratorAction();
-
-        Collection<ValidationResult> failures = new ArrayList<ValidationResult>();
-
-        // sanity check...
-        for (DbGenerator generator : generators) {
-            if (generator.isEmpty(true)) {
-                JOptionPane.showMessageDialog(getView(), "Nothing to generate.");
-                return;
-            }
-
-            try {
-
-                DataSource dataSource = connectionInfo.makeDataSource(getApplication()
-                        .getClassLoadingService());
-                generator.runGenerator(dataSource);
-                failures.add(generator.getFailures());
-            } catch (Throwable th) {
-                reportError("Schema Generation Error", th);
-            }
-        }
-
-        if (failures.size() == 0) {
-            JOptionPane.showMessageDialog(getView(), "Schema Generation Complete.");
-        } else {
-            new ValidationResultBrowser(this)
-                    .startupAction(
-                            "Schema Generation Complete",
-                            "Schema generation finished. The following problem(s) were ignored.",
-                            failures);
-        }
-    }
-
-    /**
-     * Allows user to save generated SQL in a file.
-     */
-    public void storeSQLAction() {
-        JFileChooser fc = new JFileChooser();
-        fc.setDialogType(JFileChooser.SAVE_DIALOG);
-        fc.setDialogTitle("Save SQL Script");
-
-        File projectDir = new File(getApplication()
-                .getProject()
-                .getConfigurationResource()
-                .getURL()
-                .getPath());
-
-        if (projectDir != null) {
-            fc.setCurrentDirectory(projectDir);
-        }
-
-        if (fc.showSaveDialog(getView()) == JFileChooser.APPROVE_OPTION) {
-            refreshGeneratorAction();
-
-            try {
-                File file = fc.getSelectedFile();
-                FileWriter fw = new FileWriter(file);
-                PrintWriter pw = new PrintWriter(fw);
-                pw.print(textForSQL);
-                pw.flush();
-                pw.close();
-            }
-            catch (IOException ex) {
-                reportError("Error Saving SQL", ex);
-            }
-        }
-    }
-
-    public void closeAction() {
-        view.dispose();
-    }
-
-    public DBConnectionInfo getConnectionInfo() {
-        return this.connectionInfo;
-    }
-
-    public void setConnectionInfo(DBConnectionInfo connectionInfo) {
-        this.connectionInfo = connectionInfo;
-        refreshView();
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptionsView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptionsView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptionsView.java
deleted file mode 100644
index 0c54f9e..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DBGeneratorOptionsView.java
+++ /dev/null
@@ -1,178 +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 java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.GridLayout;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-import javax.swing.JTextArea;
-import javax.swing.ScrollPaneConstants;
-import javax.swing.SwingConstants;
-
-import com.jgoodies.forms.builder.PanelBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Wizard for generating the database from the data map.
- */
-public class DBGeneratorOptionsView extends JDialog {
-
-    protected JTextArea sql;
-    protected JButton generateButton;
-    protected JButton cancelButton;
-    protected JButton saveSqlButton;
-    protected JCheckBox dropTables;
-    protected JCheckBox createTables;
-    protected JCheckBox createFK;
-    protected JCheckBox createPK;
-    protected JCheckBox dropPK;
-    protected Component tables;
-    protected JTabbedPane tabs;
-    protected JComboBox adapters;
-
-    public DBGeneratorOptionsView(Component tables) {
-        // create widgets
-        this.generateButton = new JButton("Generate");
-        this.cancelButton = new JButton("Close");
-        this.saveSqlButton = new JButton("Save SQL");
-        this.dropTables = new JCheckBox("Drop Tables");
-        this.createTables = new JCheckBox("Create Tables");
-        this.createFK = new JCheckBox("Create FK Support");
-        this.createPK = new JCheckBox("Create Primary Key Support");
-        this.dropPK = new JCheckBox("Drop Primary Key Support");
-        this.tables = tables;
-        this.tabs = new JTabbedPane(SwingConstants.TOP);
-        this.adapters = new JComboBox();
-        adapters.setEditable(true);
-        this.sql = new JTextArea();
-        sql.setEditable(false);
-        sql.setLineWrap(true);
-        sql.setWrapStyleWord(true);
-
-        // assemble...
-        JPanel optionsPane = new JPanel(new GridLayout(3, 2));
-        optionsPane.add(dropTables);
-        optionsPane.add(createTables);
-        optionsPane.add(new JLabel());
-        optionsPane.add(createFK);
-        optionsPane.add(dropPK);
-        optionsPane.add(createPK);
-
-        JPanel sqlTextPanel = new JPanel(new BorderLayout());
-        sqlTextPanel.add(new JScrollPane(
-                sql,
-                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
-                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
-        
-        JPanel adapterPanel = new JPanel(new BorderLayout());
-        adapterPanel.add(adapters);
-
-        CellConstraints cc = new CellConstraints();
-        PanelBuilder builder = new PanelBuilder(new FormLayout(
-                "fill:min(50dlu;pref):grow",
-                "p, 3dlu, p, 9dlu, p, 3dlu, p, 3dlu, p, 3dlu, fill:40dlu:grow"));
-        builder.setDefaultDialogBorder();
-        builder.addSeparator("Options", cc.xywh(1, 1, 1, 1));
-        builder.add(optionsPane, cc.xy(1, 3, "left,fill"));
-        builder.addSeparator("Adapter", cc.xywh(1, 5, 1, 1));
-        builder.add(adapterPanel, cc.xy(1, 7));
-        builder.addSeparator("Generated SQL", cc.xywh(1, 9, 1, 1));
-        builder.add(sqlTextPanel, cc.xy(1, 11));
-
-        tabs.addTab("SQL Options", builder.getPanel());
-        tabs.addTab("Tables", new JScrollPane(
-                tables,
-                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
-                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED));
-
-        // we need the right preferred size so that dialog "pack()" produces decent
-        // default size...
-        tabs.setPreferredSize(new Dimension(450, 500));
-
-        JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
-        buttons.add(saveSqlButton);
-        buttons.add(Box.createHorizontalStrut(20));
-        buttons.add(cancelButton);
-        buttons.add(generateButton);
-
-        Container contentPane = this.getContentPane();
-        contentPane.setLayout(new BorderLayout());
-        contentPane.add(tabs, BorderLayout.CENTER);
-        contentPane.add(buttons, BorderLayout.SOUTH);
-    }
-
-    public JButton getCancelButton() {
-        return cancelButton;
-    }
-
-    public JTabbedPane getTabs() {
-        return tabs;
-    }
-
-    public JCheckBox getCreateFK() {
-        return createFK;
-    }
-
-    public JCheckBox getCreatePK() {
-        return createPK;
-    }
-
-    public JCheckBox getCreateTables() {
-        return createTables;
-    }
-
-    public JCheckBox getDropPK() {
-        return dropPK;
-    }
-
-    public JCheckBox getDropTables() {
-        return dropTables;
-    }
-
-    public JButton getGenerateButton() {
-        return generateButton;
-    }
-
-    public JButton getSaveSqlButton() {
-        return saveSqlButton;
-    }
-
-    public JTextArea getSql() {
-        return sql;
-    }
-    
-    public JComboBox getAdapters() {
-        return adapters;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceController.java
deleted file mode 100644
index 2ba7819..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceController.java
+++ /dev/null
@@ -1,219 +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 java.awt.Component;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-
-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.DefaultComboBoxModel;
-import javax.swing.WindowConstants;
-
-public class DataSourceController extends CayenneController {
-
-    protected DataSourceView 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 DataSourceController(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 DataSourceView createView() {
-        return new DataSourceView(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();
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceView.java
deleted file mode 100644
index 3258a54..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DataSourceView.java
+++ /dev/null
@@ -1,100 +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 java.awt.BorderLayout;
-import java.awt.FlowLayout;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JPanel;
-
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.dialog.pref.DBConnectionInfoEditor;
-import org.apache.cayenne.modeler.util.CayenneController;
-
-import com.jgoodies.forms.builder.PanelBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- */
-public class DataSourceView extends JDialog {
-
-    protected JComboBox dataSources;
-    protected JButton configButton;
-    protected JButton okButton;
-    protected JButton cancelButton;
-    protected DBConnectionInfoEditor connectionInfo;
-
-    public DataSourceView(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;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/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
index 5fa3987..814f589 100644
--- 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
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.modeler.dialog.db;
 
+import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.modeler.ClassLoadingService;
 import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
 import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
@@ -29,6 +30,7 @@ import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.swing.ObjectBinding;
 
+import javax.sql.DataSource;
 import javax.swing.*;
 import java.awt.*;
 import java.sql.Connection;
@@ -44,32 +46,28 @@ import java.util.prefs.Preferences;
  */
 public class DataSourceWizard extends CayenneController {
 
-	protected DataSourceWizardView view;
-
-	protected DBConnectionInfo altDataSource;
-	protected String altDataSourceKey;
-	protected ObjectBinding dataSourceBinding;
-	protected Map<String, DBConnectionInfo> dataSources;
-
-	protected String dataSourceKey;
+	private DataSourceWizardView view;
+	private ObjectBinding dataSourceBinding;
+	private Map<String, DBConnectionInfo> dataSources;
+	private 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;
+	private DBConnectionInfo connectionInfo;
+
+	private boolean canceled;
 
-	protected boolean canceled;
+	private DataSourceModificationListener dataSourceListener;
 
-	protected DataSourceModificationListener dataSourceListener;
+	private DbAdapter adapter;
+	private DataSource dataSource;
 
-	public DataSourceWizard(CayenneController parent, String title, String altDataSourceKey,
-                            DBConnectionInfo altDataSource) {
+	public DataSourceWizard(CayenneController parent, String title) {
 		super(parent);
 
 		this.view = createView();
 		this.view.setTitle(title);
-		this.altDataSource = altDataSource;
-		this.altDataSourceKey = altDataSourceKey;
 		this.connectionInfo = new DBConnectionInfo();
 
 		initBindings();
@@ -79,7 +77,7 @@ public class DataSourceWizard extends CayenneController {
 	/**
 	 * Creates swing dialog for this wizard
 	 */
-	protected DataSourceWizardView createView() {
+	private DataSourceWizardView createView() {
 		return new DataSourceWizardView(this);
 	}
 
@@ -93,7 +91,7 @@ public class DataSourceWizard extends CayenneController {
 		builder.bindToAction(view.getConfigButton(), "dataSourceConfigAction()");
 	}
 
-	protected void initDataSourceListener() {
+	private void initDataSourceListener() {
 		dataSourceListener = new DataSourceModificationListener() {
 			@Override
 			public void callbackDataSourceRemoved(DataSourceModificationEvent e) {}
@@ -108,7 +106,7 @@ public class DataSourceWizard extends CayenneController {
 				.addDataSourceModificationListener(dataSourceListener);
 	}
 
-	protected void initFavouriteDataSource() {
+	private void initFavouriteDataSource() {
 		Preferences pref = getApplication().getPreferencesNode(GeneralPreferences.class, "");
 		String favouriteDataSource = pref.get(GeneralPreferences.FAVOURITE_DATA_SOURCE, null);
 		if(favouriteDataSource != null && dataSources.containsKey(favouriteDataSource)) {
@@ -117,7 +115,7 @@ public class DataSourceWizard extends CayenneController {
 		}
 	}
 
-	protected void removeDataSourceListener() {
+	private void removeDataSourceListener() {
 		getApplication().getFrameController().getProjectController()
 				.removeDataSourceModificationListener(dataSourceListener);
 	}
@@ -172,28 +170,17 @@ public class DataSourceWizard extends CayenneController {
 		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
+			this.adapter = info.makeAdapter(classLoader);
+			this.dataSource = info.makeDataSource(classLoader);
+			try (Connection connection = dataSource.getConnection()) {
+			} catch (SQLException ignore) {
 			}
 		} catch (Throwable th) {
 			reportError("Connection Error", th);
 			return;
 		}
-
 		onClose(false);
 	}
 
@@ -228,8 +215,9 @@ public class DataSourceWizard extends CayenneController {
 		return view;
 	}
 
-	protected void refreshDataSources() {
-		this.dataSources = getApplication().getCayenneProjectPreferences().getDetailObject(DBConnectionInfo.class)
+	@SuppressWarnings("unchecked")
+	private void refreshDataSources() {
+		this.dataSources = (Map<String, DBConnectionInfo>)getApplication().getCayenneProjectPreferences().getDetailObject(DBConnectionInfo.class)
 				.getChildrenPreferences();
 
 		// 1.2 migration fix - update data source adapter names
@@ -237,23 +225,16 @@ public class DataSourceWizard extends CayenneController {
 		for(DBConnectionInfo info : dataSources.values()) {
 			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);
-		}
-
 		String[] keys = dataSources.keySet().toArray(new String[0]);
 		Arrays.sort(keys);
 		view.getDataSources().setModel(new DefaultComboBoxModel<>(keys));
 
 		String key = null;
 		if (getDataSourceKey() == null || !dataSources.containsKey(getDataSourceKey())) {
-			if (altDataSourceKey != null) {
-				key = altDataSourceKey;
-			} else if (keys.length > 0) {
+			if (keys.length > 0) {
 				key = keys[0];
 			}
 		}
@@ -261,4 +242,15 @@ public class DataSourceWizard extends CayenneController {
 		setDataSourceKey(key != null ? key : getDataSourceKey());
 		dataSourceBinding.updateView();
 	}
+
+	public DataSource getDataSource() {
+		return dataSource;
+	}
+
+	/**
+	 * Returns configured DbAdapter.
+	 */
+	public DbAdapter getAdapter() {
+		return adapter;
+	}
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/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
deleted file mode 100644
index d314214..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ /dev/null
@@ -1,401 +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.CayenneRuntimeException;
-import org.apache.cayenne.configuration.ConfigurationNameMapper;
-import org.apache.cayenne.configuration.ConfigurationNode;
-import org.apache.cayenne.configuration.server.DataSourceFactory;
-import org.apache.cayenne.configuration.server.DbAdapterFactory;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dbimport.Catalog;
-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.dbsync.DbSyncModule;
-import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
-import org.apache.cayenne.dbsync.naming.NameBuilder;
-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;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
-import org.apache.cayenne.map.MapLoader;
-import org.apache.cayenne.map.event.EntityEvent;
-import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.dialog.DbImportProjectSaver;
-import org.apache.cayenne.modeler.pref.DBConnectionInfo;
-import org.apache.cayenne.modeler.util.LongRunningTask;
-import org.apache.cayenne.modeler.util.ProjectUtil;
-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;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.swing.*;
-import java.io.File;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Stateful helper class that encapsulates access to DbLoader.
- */
-public class DbLoaderHelper {
-
-    // TODO: this is a temp hack... need to delegate to DbAdapter, or
-    // configurable in preferences...
-    private static final Collection<String> EXCLUDED_TABLES = Arrays.asList("AUTO_PK_SUPPORT", "auto_pk_support");
-
-    private static Log LOGGER = LogFactory.getLog(DbLoaderHelper.class);
-
-    protected boolean stoppingReverseEngineering;
-    protected boolean existingMap;
-    protected ProjectController projectController;
-    protected Connection connection;
-    protected DataMap dataMap;
-    protected DbAdapter adapter;
-    protected DbImportConfiguration config;
-    protected String loadStatusNote;
-
-    public DbLoaderHelper(ProjectController projectController,
-                          Connection connection,
-                          DbAdapter adapter,
-                          DBConnectionInfo dbConnectionInfo) {
-
-        this.projectController = projectController;
-        this.adapter = adapter;
-
-        this.config = new DbImportConfiguration();
-        this.config.setAdapter(adapter.getClass().getName());
-        this.config.setUsername(dbConnectionInfo.getUserName());
-        this.config.setPassword(dbConnectionInfo.getPassword());
-        this.config.setDriver(dbConnectionInfo.getJdbcDriver());
-        this.config.setUrl(dbConnectionInfo.getUrl());
-
-        this.connection = connection;
-    }
-
-    public boolean isStoppingReverseEngineering() {
-        return stoppingReverseEngineering;
-    }
-
-    public void setStoppingReverseEngineering(boolean stopReverseEngineering) {
-        this.stoppingReverseEngineering = stopReverseEngineering;
-    }
-
-    public DataMap getDataMap() {
-        return dataMap;
-    }
-
-    /**
-     * Performs reverse engineering of the DB using internal DbLoader. This
-     * method should be invoked outside EventDispatchThread, or it will throw an
-     * exception.
-     */
-    public void execute() {
-        stoppingReverseEngineering = false;
-
-        // load catalogs...
-        List<String> catalogs = Collections.emptyList();
-        if (adapter.supportsCatalogsOnReverseEngineering()) {
-            catalogs = new LoadCatalogsTask(Application.getFrame(), "Loading Catalogs").startAndWait();
-        }
-
-        if (stoppingReverseEngineering) {
-            return;
-        }
-
-        // load schemas...
-        List<String> schemas = new LoadSchemasTask(Application.getFrame(), "Loading Schemas").startAndWait();
-
-        if (stoppingReverseEngineering) {
-            return;
-        }
-
-        // use this catalog as the default...
-        String currentCatalog = null;
-        try {
-            currentCatalog = connection.getCatalog();
-        } catch (SQLException e) {
-            LOGGER.warn("Error getting catalog.", e);
-        }
-
-        String currentSchema = null;
-        try {
-            // 'getSchema' is Java 1.7 API ... hope this works with all drivers...
-            currentSchema = connection.getSchema();
-        } catch (SQLException e) {
-            LOGGER.warn("Error getting schema.", e);
-        }
-
-        final DbLoaderOptionsDialog dialog = new DbLoaderOptionsDialog(
-                schemas,
-                catalogs,
-                currentSchema,
-                currentCatalog);
-
-        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 reverseEngineering = new ReverseEngineering();
-
-        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());
-
-        new LoadDataMapTask(Application.getFrame(), "Reengineering DB", reverseEngineering).startAndWait();
-    }
-
-    protected void processException(final Throwable th, final String message) {
-        LOGGER.info("Exception on reverse engineering", Util.unwindException(th));
-        SwingUtilities.invokeLater(new Runnable() {
-
-            public void run() {
-                JOptionPane.showMessageDialog(Application.getFrame(), th.getMessage(), message,
-                        JOptionPane.ERROR_MESSAGE);
-            }
-        });
-    }
-
-
-    private final class LoaderDelegate extends DefaultDbLoaderDelegate {
-
-        @Override
-        public void dbEntityAdded(DbEntity entity) {
-            checkCanceled();
-
-            loadStatusNote = "Importing table '" + entity.getName() + "'...";
-
-            // TODO: hack to prevent PK tables from being visible... this should
-            // really be delegated to DbAdapter to decide...
-            if (EXCLUDED_TABLES.contains(entity.getName()) && entity.getDataMap() != null) {
-                entity.getDataMap().removeDbEntity(entity.getName());
-            } else if (existingMap) {
-                projectController.fireDbEntityEvent(new EntityEvent(this, entity, MapEvent.ADD));
-            }
-        }
-
-        @Override
-        public void dbEntityRemoved(DbEntity entity) {
-            checkCanceled();
-
-            if (existingMap) {
-                projectController.fireDbEntityEvent(new EntityEvent(Application.getFrame(), entity, MapEvent.REMOVE));
-            }
-        }
-
-        @Override
-        public boolean dbRelationship(DbEntity entity) {
-            checkCanceled();
-
-            loadStatusNote = "Load relationships for '" + entity.getName() + "'...";
-
-            return true;
-        }
-
-        @Override
-        public boolean dbRelationshipLoaded(DbEntity entity, DbRelationship relationship) {
-            checkCanceled();
-
-            loadStatusNote = "Load relationship: '" + entity.getName() + "'; '" + relationship.getName() + "'...";
-
-            return true;
-        }
-
-        void checkCanceled() {
-            if (isStoppingReverseEngineering()) {
-                throw new CayenneRuntimeException("Reengineering was canceled.");
-            }
-        }
-    }
-
-    abstract class DbLoaderTask<T> extends LongRunningTask<T> {
-
-        public DbLoaderTask(JFrame frame, String title) {
-            super(frame, title);
-            setMinValue(0);
-            setMaxValue(10);
-        }
-
-        @Override
-        protected String getCurrentNote() {
-            return loadStatusNote;
-        }
-
-        @Override
-        protected int getCurrentValue() {
-            return getMinValue();
-        }
-
-        @Override
-        protected boolean isIndeterminate() {
-            return true;
-        }
-
-        @Override
-        public boolean isCanceled() {
-            return isStoppingReverseEngineering();
-        }
-
-        @Override
-        public void setCanceled(boolean b) {
-            if (b) {
-                loadStatusNote = "Canceling..";
-            }
-
-            setStoppingReverseEngineering(b);
-        }
-    }
-
-    final class LoadCatalogsTask extends DbLoaderTask<List<String>> {
-
-        public LoadCatalogsTask(JFrame frame, String title) {
-            super(frame, title);
-        }
-
-        @Override
-        protected void execute() {
-            loadStatusNote = "Loading available catalogs...";
-
-            try {
-                result = DbLoader.loadCatalogs(connection);
-            } catch (Throwable th) {
-                processException(th, "Error Loading Catalogs");
-            }
-        }
-    }
-
-    final class LoadSchemasTask extends DbLoaderTask<List<String>> {
-
-        public LoadSchemasTask(JFrame frame, String title) {
-            super(frame, title);
-        }
-
-        @Override
-        protected void execute() {
-            loadStatusNote = "Loading available schemas...";
-
-            try {
-                result = DbLoader.loadSchemas(connection);
-            } catch (Throwable th) {
-                processException(th, "Error Loading Schemas");
-            }
-        }
-    }
-
-    public final class LoadDataMapTask extends DbLoaderTask {
-
-        private ReverseEngineering reverseEngineering;
-
-        public LoadDataMapTask(JFrame frame, String title, ReverseEngineering reverseEngineering) {
-            super(frame, title);
-            this.reverseEngineering = reverseEngineering;
-        }
-
-        @Override
-        protected void execute() {
-
-            loadStatusNote = "Preparing...";
-
-            DbLoaderHelper.this.dataMap = projectController.getCurrentDataMap();
-            DbLoaderHelper.this.existingMap = dataMap != null;
-
-            if (!existingMap) {
-
-                ConfigurationNode root = projectController.getProject().getRootNode();
-
-                dataMap = new DataMap();
-                dataMap.setName(NameBuilder.builder(dataMap, root).name());
-            }
-
-            if (isCanceled()) {
-                return;
-            }
-
-            if (dataMap.getConfigurationSource() != null) {
-                config.setTargetDataMap(new File(dataMap.getConfigurationSource().getURL().getPath()));
-            }
-
-            FiltersConfigBuilder filtersConfigBuilder = new FiltersConfigBuilder(reverseEngineering);
-            config.getDbLoaderConfig().setFiltersConfig(filtersConfigBuilder.build());
-
-            DbImportAction importAction = createAction(dataMap);
-            try {
-                importAction.execute(config);
-            } catch (Exception e) {
-                processException(e, "Error importing database schema.");
-            }
-            ProjectUtil.cleanObjMappings(dataMap);
-        }
-
-        protected DbImportAction createAction(DataMap targetDataMap) {
-            Injector injector = DIBootstrap.createInjector(new DbSyncModule(),
-                    new ToolsModule(LOGGER),
-                    new DbImportModule());
-
-            return new ModelerDbImportAction(
-                    LOGGER,
-                    new DbImportProjectSaver(projectController, injector.getInstance(ConfigurationNameMapper.class)),
-                    injector.getInstance(DataSourceFactory.class),
-                    injector.getInstance(DbAdapterFactory.class),
-                    injector.getInstance(MapLoader.class),
-                    injector.getInstance(MergerTokenFactoryProvider.class),
-                    targetDataMap,
-                    createDbLoader(config));
-        }
-
-        protected DbLoader createDbLoader(DbImportConfiguration configuration) {
-            return new DbLoader(connection, adapter, new LoaderDelegate(), configuration.createNameGenerator());
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7da0e897/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
deleted file mode 100644
index 6911586..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderOptionsDialog.java
+++ /dev/null
@@ -1,247 +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 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 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 {
-
-    public static final String WILDCARD_PATTERN = ".*";
-
-    public static final int CANCEL = 0;
-    public static final int SELECT = 1;
-
-    protected JLabel catalogLabel;
-    protected JComboBox<String> catalogSelector;
-    protected JLabel schemaLabel;
-    protected JComboBox<String> schemaSelector;
-    protected JTextField tableNamePatternField;
-    protected JTextField meaningfulPk;
-    protected JTextField procNamePatternField;
-    protected JLabel procedureLabel;
-    protected JButton selectButton;
-    protected JButton cancelButton;
-
-
-    protected JComboBox<String> strategyCombo;
-    protected String strategy;
-    protected int choice;
-
-    /**
-     * Creates and initializes new ChooseSchemaDialog.
-     */
-    public DbLoaderOptionsDialog(Collection<String> schemas, Collection<String> catalogs, String currentSchema,
-                                 String dbCatalog) {
-        super(Application.getFrame(), "Reengineer DB Schema: Select Options");
-
-        init();
-        initController();
-        initFromModel(schemas, catalogs, currentSchema, 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();
-        tableNamePatternField.setToolTipText("<html>Regular expression to filter table names.<br>" +
-                "Default expression <b>.*</b> includes all tables.</html>");
-        procNamePatternField = new JTextField();
-        procNamePatternField.setToolTipText("<html>Regular expression to filter stored procedures names.<br>" +
-                "Default expression .* includes all stored procedures.</html>");
-        meaningfulPk = new JTextField();
-        meaningfulPk.setToolTipText("<html>Regular expression to filter tables with meaningful primary keys.<br>" +
-                "Multiple expressions divided by comma can be used.<br>" +
-                "Example: <b>^table1,^table2,^prefix.*</b></html>");
-        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("Tables with Meaningful PK Pattern:", 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 currentSchema,
-            String currentCatalog) {
-
-        this.choice = CANCEL;
-        this.tableNamePatternField.setText(WILDCARD_PATTERN);
-        this.procNamePatternField.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(new String[0])));
-
-            if (currentSchema != null) {
-                for (String schema : schemas) {
-                    if (currentSchema.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(new String[0])));
-
-            if (currentCatalog != null && !currentCatalog.isEmpty()) {
-                for (String catalog : catalogs) {
-                    if (currentCatalog.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;
-    }
-}