You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/11/05 10:33:47 UTC
[1/2] cayenne git commit: refactoring ModelerDbImportAction
Repository: cayenne
Updated Branches:
refs/heads/master c95cbc7e0 -> 72dc1a3b4
refactoring ModelerDbImportAction
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/5461647f
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/5461647f
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/5461647f
Branch: refs/heads/master
Commit: 5461647f180e54f9c0482eb4d1393d55cfe10f1f
Parents: c95cbc7
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Sat Nov 5 12:46:11 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Sat Nov 5 13:18:47 2016 +0300
----------------------------------------------------------------------
.../action/ReverseEngineeringAction.java | 14 +-
.../modeler/dialog/DbImportProjectSaver.java | 72 +++++++++
.../modeler/dialog/db/DbLoaderHelper.java | 154 ++++++++++---------
.../dialog/db/DbLoaderOptionsDialog.java | 30 ++--
.../dialog/db/ModelerDbImportAction.java | 92 +++--------
.../cayenne/modeler/util/LongRunningTask.java | 30 ++--
6 files changed, 206 insertions(+), 186 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5461647f/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 b1b0eef..183b00b 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,20 +19,11 @@
package org.apache.cayenne.modeler.action;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.configuration.event.DataMapEvent;
import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbsync.naming.NameBuilder;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.event.MapEvent;
import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.CayenneModelerController;
-import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.dialog.db.ConnectionWizard;
import org.apache.cayenne.modeler.dialog.db.DbLoaderHelper;
import org.apache.cayenne.modeler.pref.DBConnectionInfo;
-import org.apache.cayenne.modeler.util.CayenneAction;
import javax.swing.*;
import java.awt.event.ActionEvent;
@@ -72,20 +63,19 @@ public class ReverseEngineeringAction extends DBWizardAction {
return;
}
+ // TODO: doesn't look like we are closing this connection anywhere...
Connection connection = connectWizard.getConnection();
DbAdapter adapter = connectWizard.getAdapter();
DBConnectionInfo dataSourceInfo = connectWizard.getConnectionInfo();
// from here pass control to DbLoaderHelper, running it from a thread separate
// from EventDispatch
- ReverseEngineering reverseEngineering = new ReverseEngineering();
final DbLoaderHelper helper = new DbLoaderHelper(
getProjectController(),
connection,
adapter,
- dataSourceInfo,
- reverseEngineering);
+ dataSourceInfo);
Thread th = new Thread(new Runnable() {
public void run() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5461647f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbImportProjectSaver.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbImportProjectSaver.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbImportProjectSaver.java
new file mode 100644
index 0000000..76a4141
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbImportProjectSaver.java
@@ -0,0 +1,72 @@
+/*
+ * 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;
+
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.configuration.event.DataMapEvent;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.event.MapEvent;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.project.Project;
+import org.apache.cayenne.project.ProjectSaver;
+import org.apache.cayenne.resource.Resource;
+
+public class DbImportProjectSaver implements ProjectSaver {
+
+ private ProjectController projectController;
+
+ public DbImportProjectSaver(ProjectController projectController) {
+ this.projectController = projectController;
+ }
+
+ @Override
+ public String getSupportedVersion() {
+ // not important in the context of non-saving saver
+ return "-1";
+ }
+
+ @Override
+ public void save(Project project) {
+
+ DataMap dataMap = (DataMap) project.getRootNode();
+
+ if (projectController.getCurrentDataMap() != null) {
+
+ projectController.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.REMOVE));
+ projectController.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.ADD));
+ } else {
+
+ DataChannelDescriptor currentDomain = (DataChannelDescriptor) projectController.getProject().getRootNode();
+ Resource baseResource = currentDomain.getConfigurationSource();
+
+ // a new DataMap, so need to set configuration source for it
+ if (baseResource != null) {
+ Resource dataMapResource = baseResource.getRelativeResource(dataMap.getName());
+ dataMap.setConfigurationSource(dataMapResource);
+ }
+ projectController.addDataMap(Application.getFrame(), dataMap);
+ }
+ }
+
+ @Override
+ public void saveAs(Project project, Resource baseDirectory) {
+ save(project);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5461647f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
index 787f232..3ef1275 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
@@ -21,6 +21,8 @@ package org.apache.cayenne.modeler.dialog.db;
import org.apache.cayenne.CayenneRuntimeException;
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;
@@ -28,6 +30,7 @@ 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;
@@ -37,10 +40,12 @@ 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.tools.configuration.ToolsModule;
@@ -57,6 +62,7 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
/**
@@ -72,30 +78,20 @@ public class DbLoaderHelper {
protected boolean stoppingReverseEngineering;
protected boolean existingMap;
-
- protected ProjectController mediator;
- protected String dbCatalog;
- protected DbLoader loader;
+ protected ProjectController projectController;
+ protected Connection connection;
protected DataMap dataMap;
- protected List<String> schemas;
- protected List<String> catalogs;
protected DbAdapter adapter;
protected DbImportConfiguration config;
- protected ReverseEngineering reverseEngineering;
protected String loadStatusNote;
- protected String dbUserName;
- public DbLoaderHelper(ProjectController mediator, Connection connection, DbAdapter adapter,
- DBConnectionInfo dbConnectionInfo, ReverseEngineering reverseEngineering) {
- this.mediator = mediator;
- this.dbUserName = dbConnectionInfo.getUserName();
- try {
- this.dbCatalog = connection.getCatalog();
- } catch (SQLException e) {
- LOGGER.warn("Error getting catalog.", e);
- }
+ public DbLoaderHelper(ProjectController projectController,
+ Connection connection,
+ DbAdapter adapter,
+ DBConnectionInfo dbConnectionInfo) {
+
+ this.projectController = projectController;
this.adapter = adapter;
- this.reverseEngineering = reverseEngineering;
this.config = new DbImportConfiguration();
this.config.setAdapter(adapter.getClass().getName());
@@ -103,16 +99,8 @@ public class DbLoaderHelper {
this.config.setPassword(dbConnectionInfo.getPassword());
this.config.setDriver(dbConnectionInfo.getJdbcDriver());
this.config.setUrl(dbConnectionInfo.getUrl());
- try {
- this.dbCatalog = connection.getCatalog();
- } catch (SQLException e) {
- LOGGER.warn("Error getting catalog.", e);
- }
- try {
- this.loader = config.createLoader(adapter, connection, new LoaderDelegate());
- } catch (Throwable th) {
- processException(th, "Error creating DbLoader.");
- }
+
+ this.connection = connection;
}
public boolean isStoppingReverseEngineering() {
@@ -136,9 +124,9 @@ public class DbLoaderHelper {
stoppingReverseEngineering = false;
// load catalogs...
+ List<String> catalogs = Collections.emptyList();
if (adapter.supportsCatalogsOnReverseEngineering()) {
- LongRunningTask loadCatalogsTask = new LoadCatalogsTask(Application.getFrame(), "Loading Catalogs");
- loadCatalogsTask.startAndWait();
+ catalogs = new LoadCatalogsTask(Application.getFrame(), "Loading Catalogs").startAndWait();
}
if (stoppingReverseEngineering) {
@@ -146,18 +134,36 @@ public class DbLoaderHelper {
}
// load schemas...
- LongRunningTask loadSchemasTask = new LoadSchemasTask(Application.getFrame(), "Loading Schemas");
- loadSchemasTask.startAndWait();
+ List<String> schemas = new LoadSchemasTask(Application.getFrame(), "Loading Schemas").startAndWait();
if (stoppingReverseEngineering) {
return;
}
- final DbLoaderOptionsDialog dialog = new DbLoaderOptionsDialog(schemas, catalogs, dbUserName, dbCatalog);
+ // 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
+ // since we are not inside EventDispatcher Thread, must run it via SwingUtilities
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
@@ -174,6 +180,8 @@ public class DbLoaderHelper {
return;
}
+ ReverseEngineering reverseEngineering = new ReverseEngineering();
+
reverseEngineering.addCatalog(new Catalog(dialog.getSelectedCatalog()));
reverseEngineering.addSchema(new Schema(dialog.getSelectedSchema()));
reverseEngineering.addIncludeTable(new IncludeTable(dialog.getTableNamePattern()));
@@ -182,8 +190,9 @@ public class DbLoaderHelper {
config.setMeaningfulPkTables(dialog.getMeaningfulPk());
config.setNamingStrategy(dialog.getNamingStrategy());
- LongRunningTask loadDataMapTask = new LoadDataMapTask(Application.getFrame(), "Reengineering DB");
- loadDataMapTask.startAndWait();
+ // TODO: change DbLoader naming strategy here... or better start with a fresh DbLoader over the same connection
+
+ new LoadDataMapTask(Application.getFrame(), "Reengineering DB", reverseEngineering).startAndWait();
}
protected void processException(final Throwable th, final String message) {
@@ -197,12 +206,8 @@ public class DbLoaderHelper {
});
}
- protected ProjectController getMediator() {
- return mediator;
- }
-
- protected DbLoader getLoader() {
- return loader;
+ protected DbLoader createDbLoader(DbImportConfiguration configuration) {
+ return new DbLoader(connection, adapter, new LoaderDelegate(), configuration.createNameGenerator());
}
private final class LoaderDelegate extends DefaultDbLoaderDelegate {
@@ -214,12 +219,11 @@ public class DbLoaderHelper {
loadStatusNote = "Importing table '" + entity.getName() + "'...";
// TODO: hack to prevent PK tables from being visible... this should
- // really be
- // delegated to DbAdapter to decide...
+ // really be delegated to DbAdapter to decide...
if (EXCLUDED_TABLES.contains(entity.getName()) && entity.getDataMap() != null) {
entity.getDataMap().removeDbEntity(entity.getName());
} else if (existingMap) {
- mediator.fireDbEntityEvent(new EntityEvent(this, entity, MapEvent.ADD));
+ projectController.fireDbEntityEvent(new EntityEvent(this, entity, MapEvent.ADD));
}
}
@@ -228,7 +232,7 @@ public class DbLoaderHelper {
checkCanceled();
if (existingMap) {
- mediator.fireDbEntityEvent(new EntityEvent(Application.getFrame(), entity, MapEvent.REMOVE));
+ projectController.fireDbEntityEvent(new EntityEvent(Application.getFrame(), entity, MapEvent.REMOVE));
}
}
@@ -257,7 +261,7 @@ public class DbLoaderHelper {
}
}
- abstract class DbLoaderTask extends LongRunningTask {
+ abstract class DbLoaderTask<T> extends LongRunningTask<T> {
public DbLoaderTask(JFrame frame, String title) {
super(frame, title);
@@ -295,47 +299,49 @@ public class DbLoaderHelper {
}
}
- final class LoadSchemasTask extends DbLoaderTask {
+ final class LoadCatalogsTask extends DbLoaderTask<List<String>> {
- public LoadSchemasTask(JFrame frame, String title) {
+ public LoadCatalogsTask(JFrame frame, String title) {
super(frame, title);
}
@Override
protected void execute() {
- loadStatusNote = "Loading available schemas...";
+ loadStatusNote = "Loading available catalogs...";
try {
- schemas = loader.loadSchemas();
+ result = createDbLoader(config).loadCatalogs();
} catch (Throwable th) {
- processException(th, "Error Loading Schemas");
+ processException(th, "Error Loading Catalogs");
}
}
}
- final class LoadCatalogsTask extends DbLoaderTask {
+ final class LoadSchemasTask extends DbLoaderTask<List<String>> {
- public LoadCatalogsTask(JFrame frame, String title) {
+ public LoadSchemasTask(JFrame frame, String title) {
super(frame, title);
}
@Override
protected void execute() {
- loadStatusNote = "Loading available catalogs...";
+ loadStatusNote = "Loading available schemas...";
try {
- catalogs = loader.loadCatalogs();
+ result = createDbLoader(config).loadSchemas();
} catch (Throwable th) {
- processException(th, "Error Loading Catalogs");
+ processException(th, "Error Loading Schemas");
}
}
}
public final class LoadDataMapTask extends DbLoaderTask {
- private DbImportAction importAction;
- public LoadDataMapTask(JFrame frame, String title) {
+ private ReverseEngineering reverseEngineering;
+
+ public LoadDataMapTask(JFrame frame, String title, ReverseEngineering reverseEngineering) {
super(frame, title);
+ this.reverseEngineering = reverseEngineering;
}
@Override
@@ -343,12 +349,12 @@ public class DbLoaderHelper {
loadStatusNote = "Preparing...";
- DbLoaderHelper.this.dataMap = mediator.getCurrentDataMap();
+ DbLoaderHelper.this.dataMap = projectController.getCurrentDataMap();
DbLoaderHelper.this.existingMap = dataMap != null;
if (!existingMap) {
- ConfigurationNode root = mediator.getProject().getRootNode();
+ ConfigurationNode root = projectController.getProject().getRootNode();
dataMap = new DataMap();
dataMap.setName(NameBuilder.builder(dataMap, root).name());
@@ -365,19 +371,29 @@ public class DbLoaderHelper {
FiltersConfigBuilder filtersConfigBuilder = new FiltersConfigBuilder(reverseEngineering);
config.getDbLoaderConfig().setFiltersConfig(filtersConfigBuilder.build());
-
- ModelerDbImportAction importAction = new ModelerDbImportAction(LOGGER, DbLoaderHelper.this);
-
- // TODO: we can keep all these things in the Modeler Injector instead of creating a new one?
- // we already have DbSyncModule in there
- Injector injector = DIBootstrap.createInjector(new DbSyncModule(), new ToolsModule(LOGGER), new DbImportModule());
- injector.injectMembers(importAction);
+ DbImportAction importAction = createAction(dataMap);
try {
importAction.execute(config);
} catch (Exception e) {
processException(e, "Error importing database schema.");
}
}
+
+ 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(DataSourceFactory.class),
+ injector.getInstance(DbAdapterFactory.class),
+ injector.getInstance(MapLoader.class),
+ injector.getInstance(MergerTokenFactoryProvider.class),
+ targetDataMap,
+ createDbLoader(config));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5461647f/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
index 3dbb59a..fa5c68f 100644
--- 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
@@ -24,8 +24,6 @@ import com.jgoodies.forms.layout.FormLayout;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.util.CayenneDialog;
import org.apache.cayenne.modeler.util.NameGeneratorPreferences;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import javax.swing.*;
import java.awt.*;
@@ -39,7 +37,7 @@ import java.util.Vector;
*/
public class DbLoaderOptionsDialog extends CayenneDialog {
- private static final Log logObj = LogFactory.getLog(DbLoaderOptionsDialog.class);
+ public static final String WILDCARD_PATTERN = ".*";
public static final int CANCEL = 0;
public static final int SELECT = 1;
@@ -55,28 +53,21 @@ public class DbLoaderOptionsDialog extends CayenneDialog {
protected JButton selectButton;
protected JButton cancelButton;
- public static final String WILDCARD_PATTERN = ".*";
-
- /**
- * Combobox for naming strategy
- */
protected JComboBox strategyCombo;
-//
protected String strategy;
-
protected int choice;
/**
* Creates and initializes new ChooseSchemaDialog.
*/
- public DbLoaderOptionsDialog(Collection<String> schemas, Collection<String> catalogs, String dbUserName,
+ 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, dbUserName, dbCatalog);
+ initFromModel(schemas, catalogs, currentSchema, dbCatalog);
pack();
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
@@ -128,7 +119,6 @@ public class DbLoaderOptionsDialog extends CayenneDialog {
processSelect();
}
});
-
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@@ -140,8 +130,8 @@ public class DbLoaderOptionsDialog extends CayenneDialog {
protected void initFromModel(
Collection<String> schemas,
Collection<String> catalogs,
- String dbUserName,
- String dbCatalog) {
+ String currentSchema,
+ String currentCatalog) {
this.choice = CANCEL;
this.tableNamePatternField.setText(WILDCARD_PATTERN);
@@ -160,10 +150,9 @@ public class DbLoaderOptionsDialog extends CayenneDialog {
schemaSelector.setModel(new DefaultComboBoxModel(schemas.toArray()));
- // select schema belonging to the user
- if (dbUserName != null) {
+ if (currentSchema != null) {
for (String schema : schemas) {
- if (dbUserName.equalsIgnoreCase(schema)) {
+ if (currentSchema.equalsIgnoreCase(schema)) {
schemaSelector.setSelectedItem(schema);
break;
}
@@ -178,16 +167,15 @@ public class DbLoaderOptionsDialog extends CayenneDialog {
if (showCatalogSelector) {
catalogSelector.setModel(new DefaultComboBoxModel(catalogs.toArray()));
- if (dbCatalog != null && !dbCatalog.isEmpty()) {
+ if (currentCatalog != null && !currentCatalog.isEmpty()) {
for (String catalog : catalogs) {
- if (dbCatalog.equalsIgnoreCase(catalog)) {
+ if (currentCatalog.equalsIgnoreCase(catalog)) {
catalogSelector.setSelectedItem(catalog);
break;
}
}
}
}
-
}
public int getChoice() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5461647f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
index 19d9b03..24cc4b2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
@@ -18,21 +18,14 @@
*/
package org.apache.cayenne.modeler.dialog.db;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.configuration.event.DataMapEvent;
import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
-import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.MapLoader;
-import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.project.ProjectSaver;
-import org.apache.cayenne.resource.Resource;
-import org.apache.cayenne.tools.dbimport.DbImportAction;
import org.apache.cayenne.tools.dbimport.DbImportConfiguration;
import org.apache.cayenne.tools.dbimport.DefaultDbImportAction;
import org.apache.commons.logging.Log;
@@ -40,73 +33,36 @@ import org.apache.commons.logging.Log;
import java.io.IOException;
import java.sql.Connection;
-public class ModelerDbImportAction implements DbImportAction {
+public class ModelerDbImportAction extends DefaultDbImportAction {
- private final Log logger;
+ private DataMap targetMap;
+ private DbLoader dbLoader;
- private final DbLoaderHelper dbLoaderHelper;
+ public ModelerDbImportAction(Log logger,
+ ProjectSaver projectSaver,
+ DataSourceFactory dataSourceFactory,
+ DbAdapterFactory adapterFactory,
+ MapLoader mapLoader,
+ MergerTokenFactoryProvider mergerTokenFactoryProvider,
+ DataMap targetMap,
+ DbLoader dbLoader
+ ) {
- @Inject
- private ProjectSaver projectSaver;
+ super(logger, projectSaver, dataSourceFactory, adapterFactory, mapLoader, mergerTokenFactoryProvider);
- @Inject
- private DataSourceFactory dataSourceFactory;
-
- @Inject
- private DbAdapterFactory adapterFactory;
-
- @Inject
- private MapLoader mapLoader;
-
- @Inject
- private MergerTokenFactoryProvider mergerTokenFactoryProvider;
-
- public ModelerDbImportAction(Log logger, DbLoaderHelper dbLoaderHelper) {
- this.logger = logger;
- this.dbLoaderHelper = dbLoaderHelper;
+ this.targetMap = targetMap;
+ this.dbLoader = dbLoader;
}
@Override
- public void execute(DbImportConfiguration config) throws Exception {
- if (dbLoaderHelper == null) {
- throw new IllegalStateException("Before using execute method you must set dbLoaderHelper");
- }
-
- new DefaultDbImportAction(logger, projectSaver, dataSourceFactory, adapterFactory, mapLoader, mergerTokenFactoryProvider) {
-
- @Override
- protected DataMap existingTargetMap(DbImportConfiguration configuration) throws IOException {
- return dbLoaderHelper.getDataMap();
- }
-
- @Override
- protected void saveLoaded(DataMap dataMap) {
-
- ProjectController mediator = dbLoaderHelper.getMediator();
-
- if (mediator.getCurrentDataMap() != null) {
- mediator.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.REMOVE));
- mediator.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.ADD));
- } else {
- DataChannelDescriptor currentDomain = (DataChannelDescriptor) mediator.getProject().getRootNode();
- Resource baseResource = currentDomain.getConfigurationSource();
-
- // this will be new data map so need to set configuration source
- // for it
- if (baseResource != null) {
- Resource dataMapResource = baseResource.getRelativeResource(dataMap.getName());
- dataMap.setConfigurationSource(dataMapResource);
- }
- mediator.addDataMap(Application.getFrame(), dataMap);
- }
- }
+ protected DataMap load(DbImportConfiguration config, DbAdapter adapter, Connection connection) throws Exception {
+ DataMap dataMap = new DataMap();
+ dbLoader.load(dataMap, config.getDbLoaderConfig());
+ return dataMap;
+ }
- @Override
- protected DataMap load(DbImportConfiguration config, DbAdapter adapter, Connection connection) throws Exception {
- DataMap dataMap = new DataMap();
- dbLoaderHelper.getLoader().load(dataMap, config.getDbLoaderConfig());
- return dataMap;
- }
- }.execute(config);
+ @Override
+ protected DataMap existingTargetMap(DbImportConfiguration configuration) throws IOException {
+ return targetMap;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5461647f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/LongRunningTask.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/LongRunningTask.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/LongRunningTask.java
index ebd4d69..55ef5b6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/LongRunningTask.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/LongRunningTask.java
@@ -19,18 +19,14 @@
package org.apache.cayenne.modeler.util;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JFrame;
-import javax.swing.JProgressBar;
-import javax.swing.SwingUtilities;
-import javax.swing.Timer;
-
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
/**
* A base class for monitoring progress of long running tasks. It can runshowing the exact
* percentage of the task progress or in "indeterminate" mode.
@@ -42,9 +38,9 @@ import org.apache.commons.logging.LogFactory;
* </p>
*
*/
-public abstract class LongRunningTask {
+public abstract class LongRunningTask<T> {
- private static Log logObj = LogFactory.getLog(LongRunningTask.class);
+ private static final Log LOGGER = LogFactory.getLog(LongRunningTask.class);
protected static final int DEFAULT_MS_TO_DECIDE_TO_POPUP = 500;
@@ -56,6 +52,7 @@ public abstract class LongRunningTask {
protected int minValue;
protected int maxValue;
protected boolean finished;
+ protected T result;
public LongRunningTask(JFrame frame, String title) {
this.frame = frame;
@@ -65,7 +62,7 @@ public abstract class LongRunningTask {
/**
* Starts current task, and blocks current thread until the task is done.
*/
- public synchronized void startAndWait() {
+ public synchronized T startAndWait() {
// running from Event Dispatch Thread is bad, as this will block the timers...
if (SwingUtilities.isEventDispatchThread()) {
throw new CayenneRuntimeException(
@@ -75,7 +72,7 @@ public abstract class LongRunningTask {
start();
if (finished) {
- return;
+ return result;
}
try {
@@ -86,6 +83,7 @@ public abstract class LongRunningTask {
}
notifyAll();
+ return result;
}
/**
@@ -124,7 +122,7 @@ public abstract class LongRunningTask {
* Starts progress dialog if the task is not finished yet.
*/
protected synchronized void showProgress() {
- logObj.debug("will show progress...");
+ LOGGER.debug("will show progress...");
if (finished) {
return;
@@ -134,7 +132,7 @@ public abstract class LongRunningTask {
if (!isCanceled() && currentValue < getMaxValue()) {
- logObj.debug("task still in progress, will show progress dialog...");
+ LOGGER.debug("task still in progress, will show progress dialog...");
this.dialog = new ProgressDialog(frame, "Progress...", title);
this.dialog.getCancelButton().addActionListener(new ActionListener() {
@@ -204,7 +202,7 @@ public abstract class LongRunningTask {
public void setCanceled(boolean b) {
if (b) {
- logObj.debug("task canceled");
+ LOGGER.debug("task canceled");
}
this.canceled = b;
@@ -216,7 +214,7 @@ public abstract class LongRunningTask {
}
catch (Throwable th) {
setCanceled(true);
- logObj.warn("task error", th);
+ LOGGER.warn("task error", th);
}
finally {
stop();
[2/2] cayenne git commit: refactoring ModelerDbImportAction
Posted by aa...@apache.org.
refactoring ModelerDbImportAction
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/72dc1a3b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/72dc1a3b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/72dc1a3b
Branch: refs/heads/master
Commit: 72dc1a3b419540bf424f5b4d6ea8707dc2a919d5
Parents: 5461647
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Sat Nov 5 12:46:11 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Sat Nov 5 13:32:07 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/reverse/db/DbLoader.java | 59 +++++++-------------
.../cayenne/modeler/action/MigrateAction.java | 3 +-
.../modeler/dialog/db/DbLoaderHelper.java | 11 ++--
3 files changed, 27 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/72dc1a3b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
index 65dd871..b171b5f 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
@@ -63,7 +63,7 @@ public class DbLoader {
private final Connection connection;
private final DbAdapter adapter;
private final DbLoaderDelegate delegate;
- private ObjectNameGenerator nameGenerator;
+ private final ObjectNameGenerator nameGenerator;
private DatabaseMetaData metaData;
public DbLoader(Connection connection, DbAdapter adapter, DbLoaderDelegate delegate, ObjectNameGenerator nameGenerator) {
@@ -97,56 +97,38 @@ public class DbLoader {
}
/**
- * Returns DatabaseMetaData object associated with this DbLoader.
- */
- private DatabaseMetaData getMetaData() throws SQLException {
- if (metaData == null) {
- metaData = connection.getMetaData();
- }
- return metaData;
- }
-
- /**
- * Check if database support schemas.
- */
- protected boolean supportSchemas() throws SQLException {
- if (metaData == null) {
- metaData = connection.getMetaData();
- }
- return metaData.supportsSchemasInTableDefinitions();
- }
-
- /**
- * Check if database support catalogs.
+ * Retrieves catalogs for a given connection.
+ *
+ * @return List with the catalog names; empty list if none found.
*/
- protected boolean supportCatalogs() throws SQLException {
- if (metaData == null) {
- metaData = connection.getMetaData();
+ // using a static method for catalog loading as we don't need a full DbLoader for this operation
+ public static List<String> loadCatalogs(Connection connection) throws SQLException {
+ try (ResultSet rs = connection.getMetaData().getCatalogs()) {
+ return getStrings(rs);
}
- return metaData.supportsCatalogsInTableDefinitions();
}
/**
- * Retrieves catalogs for the database associated with this DbLoader.
+ * Retrieves the schemas for the given connection.
*
- * @return List with the catalog names, empty Array if none found.
+ * @return List with the schema names; empty list if none found.
*/
- public List<String> loadCatalogs() throws SQLException {
- try (ResultSet rs = getMetaData().getCatalogs()) {
+ // using a static method for catalog loading as we don't need a full DbLoader for this operation
+ public static List<String> loadSchemas(Connection connection) throws SQLException {
+
+ try (ResultSet rs = connection.getMetaData().getSchemas()) {
return getStrings(rs);
}
}
/**
- * Retrieves the schemas for the database.
- *
- * @return List with the schema names, empty Array if none found.
+ * Returns DatabaseMetaData object associated with this DbLoader.
*/
- public List<String> loadSchemas() throws SQLException {
-
- try (ResultSet rs = getMetaData().getSchemas()) {
- return getStrings(rs);
+ private DatabaseMetaData getMetaData() throws SQLException {
+ if (metaData == null) {
+ metaData = connection.getMetaData();
}
+ return metaData;
}
protected void loadDbRelationships(DbLoaderConfiguration config, String catalog, String schema,
@@ -297,7 +279,7 @@ public class DbLoader {
} catch (SQLException cay182Ex) {
// Sybase-specific - the line above blows on VIEWS, see CAY-182.
LOGGER.info("Error getting relationships for '" + catalog + "." + schema + "', ignoring. "
- + cay182Ex.getMessage(), cay182Ex);
+ + cay182Ex.getMessage(), cay182Ex);
return new HashMap<>();
}
@@ -336,7 +318,6 @@ public class DbLoader {
LOGGER.info("Skip relation: '" + key + "' because table '" + tableName + "' not found");
}
-
protected String[] getTableTypes(DbLoaderConfiguration config) {
String[] configTypes = config.getTableTypes();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/72dc1a3b/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 9c5436a..f565cda 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
@@ -21,7 +21,6 @@ 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.naming.DefaultObjectNameGenerator;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.Application;
@@ -107,6 +106,6 @@ public class MigrateAction extends DBWizardAction {
DataSource dataSource = connectWizard.getConnectionInfo()
.makeDataSource(getApplication().getClassLoadingService());
- return new DbLoader(dataSource.getConnection(), dbAdapter, null, new DefaultObjectNameGenerator()).loadSchemas();
+ return DbLoader.loadSchemas(dataSource.getConnection());
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/72dc1a3b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
index 3ef1275..3d2f317 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
@@ -206,9 +206,6 @@ public class DbLoaderHelper {
});
}
- protected DbLoader createDbLoader(DbImportConfiguration configuration) {
- return new DbLoader(connection, adapter, new LoaderDelegate(), configuration.createNameGenerator());
- }
private final class LoaderDelegate extends DefaultDbLoaderDelegate {
@@ -310,7 +307,7 @@ public class DbLoaderHelper {
loadStatusNote = "Loading available catalogs...";
try {
- result = createDbLoader(config).loadCatalogs();
+ result = DbLoader.loadCatalogs(connection);
} catch (Throwable th) {
processException(th, "Error Loading Catalogs");
}
@@ -328,7 +325,7 @@ public class DbLoaderHelper {
loadStatusNote = "Loading available schemas...";
try {
- result = createDbLoader(config).loadSchemas();
+ result = DbLoader.loadSchemas(connection);
} catch (Throwable th) {
processException(th, "Error Loading Schemas");
}
@@ -394,6 +391,10 @@ public class DbLoaderHelper {
targetDataMap,
createDbLoader(config));
}
+
+ protected DbLoader createDbLoader(DbImportConfiguration configuration) {
+ return new DbLoader(connection, adapter, new LoaderDelegate(), configuration.createNameGenerator());
+ }
}
}