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;
- }
-}