You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/08/26 09:08:58 UTC
[cayenne] branch master updated: CAY-2608 CayenneModeler: NPE when
reverse engineering with an auto-adapter DataSource
This is an automated email from the ASF dual-hosted git repository.
abulatski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new efc3834 CAY-2608 CayenneModeler: NPE when reverse engineering with an auto-adapter DataSource
efc3834 is described below
commit efc3834458874e42f60dd347c797f21200ccdd1e
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Mon Aug 26 11:56:23 2019 +0300
CAY-2608 CayenneModeler: NPE when reverse engineering with an auto-adapter DataSource
---
RELEASE-NOTES.txt | 1 +
.../java/org/apache/cayenne/dba/AutoAdapter.java | 5 +--
.../modeler/action/GetDbConnectionAction.java | 12 +++---
.../cayenne/modeler/action/LoadDbSchemaAction.java | 22 ++++++++---
.../modeler/action/ReverseEngineeringAction.java | 46 ++++++++++++++--------
.../modeler/dialog/db/DataSourceWizard.java | 24 +++++------
6 files changed, 68 insertions(+), 42 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 5b4c2e6..f806fc9 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -79,6 +79,7 @@ CAY-2600 Modeler DbImport: Can't retrieve schema for databases with no catalog s
CAY-2601 Modeler DbImport: result dialog issues
CAY-2603 NPE reloading project in the model
CAY-2605 Modeler: Unable to save - java.nio.file.InvalidPathException
+CAY-2608 CayenneModeler: NPE when reverse engineering with an auto-adapter DataSource
----------------------------------
Release: 4.1.B1
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
index 7595eed..7c856f0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
@@ -22,7 +22,6 @@ package org.apache.cayenne.dba;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.function.Function;
@@ -256,11 +255,11 @@ public class AutoAdapter implements DbAdapter {
@Override
public List<String> getSystemCatalogs() {
- return Collections.emptyList();
+ return getAdapter().getSystemCatalogs();
}
@Override
public List<String> getSystemSchemas() {
- return Collections.emptyList();
+ return getAdapter().getSystemSchemas();
}
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java
index 9112cb0..2e83a27 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java
@@ -19,19 +19,19 @@
package org.apache.cayenne.modeler.action;
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
import org.apache.cayenne.modeler.dialog.db.DbActionOptionsDialog;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-
import static org.apache.cayenne.modeler.pref.DBConnectionInfo.DB_ADAPTER_PROPERTY;
+import static org.apache.cayenne.modeler.pref.DBConnectionInfo.JDBC_DRIVER_PROPERTY;
+import static org.apache.cayenne.modeler.pref.DBConnectionInfo.PASSWORD_PROPERTY;
import static org.apache.cayenne.modeler.pref.DBConnectionInfo.URL_PROPERTY;
import static org.apache.cayenne.modeler.pref.DBConnectionInfo.USER_NAME_PROPERTY;
-import static org.apache.cayenne.modeler.pref.DBConnectionInfo.PASSWORD_PROPERTY;
-import static org.apache.cayenne.modeler.pref.DBConnectionInfo.JDBC_DRIVER_PROPERTY;
/**
* @since 4.1
@@ -69,6 +69,8 @@ public class GetDbConnectionAction extends DBWizardAction<DbActionOptionsDialog>
if (connectWizard.getConnectionInfo().getDbAdapter() != null) {
dataMapDefaults.getCurrentPreference().put(DB_ADAPTER_PROPERTY, connectWizard.getConnectionInfo().getDbAdapter());
+ } else {
+ dataMapDefaults.getCurrentPreference().remove(DB_ADAPTER_PROPERTY);
}
dataMapDefaults.getCurrentPreference().put(URL_PROPERTY, connectWizard.getConnectionInfo().getUrl());
dataMapDefaults.getCurrentPreference().put(USER_NAME_PROPERTY, connectWizard.getConnectionInfo().getUserName());
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
index 911b6d5..df85e6a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.modeler.action;
import javax.swing.JOptionPane;
import javax.swing.tree.TreePath;
import java.awt.event.ActionEvent;
+import java.util.prefs.Preferences;
import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
import org.apache.cayenne.modeler.Application;
@@ -73,7 +74,7 @@ public class LoadDbSchemaAction extends CayenneAction {
draggableTreePanel.getMoveInvertButton().setEnabled(false);
try {
DBConnectionInfo connectionInfo;
- if (!datamapPreferencesExist()) {
+ if (datamapPrefNotExist()) {
final DataSourceWizard connectWizard = new DataSourceWizard(getProjectController(), "Load Db Schema");
if (!connectWizard.startupAction()) {
return;
@@ -118,10 +119,14 @@ public class LoadDbSchemaAction extends CayenneAction {
thread.start();
}
- private boolean datamapPreferencesExist() {
- DataMapDefaults dataMapDefaults = getProjectController().
- getDataMapPreferences(getProjectController().getCurrentDataMap());
- return dataMapDefaults.getCurrentPreference().get(DB_ADAPTER_PROPERTY, null) != null;
+ private boolean datamapPrefNotExist() {
+ Preferences dataMapPreference = getProjectController().
+ getDataMapPreferences(getProjectController().getCurrentDataMap())
+ .getCurrentPreference();
+ return dataMapPreference == null || dataMapPreference.get(URL_PROPERTY, null) == null ||
+ dataMapPreference.get(USER_NAME_PROPERTY, null) == null ||
+ dataMapPreference.get(PASSWORD_PROPERTY, null) == null ||
+ dataMapPreference.get(JDBC_DRIVER_PROPERTY, null) == null;
}
private DBConnectionInfo getConnectionInfoFromPreferences() {
@@ -139,7 +144,12 @@ public class LoadDbSchemaAction extends CayenneAction {
private void saveConnectionInfo(DataSourceWizard connectWizard) {
DataMapDefaults dataMapDefaults = getProjectController().
getDataMapPreferences(getProjectController().getCurrentDataMap());
- dataMapDefaults.getCurrentPreference().put(DB_ADAPTER_PROPERTY, connectWizard.getConnectionInfo().getDbAdapter());
+ String dbAdapter = connectWizard.getConnectionInfo().getDbAdapter();
+ if(dbAdapter != null) {
+ dataMapDefaults.getCurrentPreference().put(DB_ADAPTER_PROPERTY, connectWizard.getConnectionInfo().getDbAdapter());
+ } else {
+ dataMapDefaults.getCurrentPreference().remove(DB_ADAPTER_PROPERTY);
+ }
dataMapDefaults.getCurrentPreference().put(URL_PROPERTY, connectWizard.getConnectionInfo().getUrl());
dataMapDefaults.getCurrentPreference().put(USER_NAME_PROPERTY, connectWizard.getConnectionInfo().getUserName());
dataMapDefaults.getCurrentPreference().put(PASSWORD_PROPERTY, connectWizard.getConnectionInfo().getPassword());
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 9d9d562..bf3f316 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,6 +19,16 @@
package org.apache.cayenne.modeler.action;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import java.awt.event.ActionEvent;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.prefs.Preferences;
+
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
@@ -32,16 +42,11 @@ import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
import org.apache.cayenne.modeler.pref.DBConnectionInfo;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-import java.awt.event.ActionEvent;
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static org.apache.cayenne.modeler.pref.DBConnectionInfo.*;
+import static org.apache.cayenne.modeler.pref.DBConnectionInfo.DB_ADAPTER_PROPERTY;
+import static org.apache.cayenne.modeler.pref.DBConnectionInfo.JDBC_DRIVER_PROPERTY;
+import static org.apache.cayenne.modeler.pref.DBConnectionInfo.PASSWORD_PROPERTY;
+import static org.apache.cayenne.modeler.pref.DBConnectionInfo.URL_PROPERTY;
+import static org.apache.cayenne.modeler.pref.DBConnectionInfo.USER_NAME_PROPERTY;
/**
* Action that imports database structure into a DataMap.
@@ -82,7 +87,7 @@ public class ReverseEngineeringAction extends DBWizardAction<DbActionOptionsDial
private void startImport(){
final DbLoaderContext context = new DbLoaderContext(application.getMetaData());
DBConnectionInfo connectionInfo;
- if (!datamapPreferencesExist()) {
+ if (datamapPrefNotExist()) {
final DataSourceWizard connectWizard = dataSourceWizardDialog(DIALOG_TITLE);
if (connectWizard == null) {
return;
@@ -157,17 +162,26 @@ public class ReverseEngineeringAction extends DBWizardAction<DbActionOptionsDial
private void saveConnectionInfo(DataSourceWizard connectWizard) {
DataMapDefaults dataMapDefaults = getProjectController().
getDataMapPreferences(getProjectController().getCurrentDataMap());
- dataMapDefaults.getCurrentPreference().put(DB_ADAPTER_PROPERTY, connectWizard.getConnectionInfo().getDbAdapter());
+ String dbAdapter = connectWizard.getConnectionInfo().getDbAdapter();
+ if(dbAdapter != null) {
+ dataMapDefaults.getCurrentPreference().put(DB_ADAPTER_PROPERTY, dbAdapter);
+ } else {
+ dataMapDefaults.getCurrentPreference().remove(DB_ADAPTER_PROPERTY);
+ }
dataMapDefaults.getCurrentPreference().put(URL_PROPERTY, connectWizard.getConnectionInfo().getUrl());
dataMapDefaults.getCurrentPreference().put(USER_NAME_PROPERTY, connectWizard.getConnectionInfo().getUserName());
dataMapDefaults.getCurrentPreference().put(PASSWORD_PROPERTY, connectWizard.getConnectionInfo().getPassword());
dataMapDefaults.getCurrentPreference().put(JDBC_DRIVER_PROPERTY, connectWizard.getConnectionInfo().getJdbcDriver());
}
- private boolean datamapPreferencesExist() {
- DataMapDefaults dataMapDefaults = getProjectController().
- getDataMapPreferences(getProjectController().getCurrentDataMap());
- return dataMapDefaults.getCurrentPreference().get(DB_ADAPTER_PROPERTY, null) != null;
+ private boolean datamapPrefNotExist() {
+ Preferences dataMapPreference = getProjectController().
+ getDataMapPreferences(getProjectController().getCurrentDataMap())
+ .getCurrentPreference();
+ return dataMapPreference == null || dataMapPreference.get(URL_PROPERTY, null) == null ||
+ dataMapPreference.get(USER_NAME_PROPERTY, null) == null ||
+ dataMapPreference.get(PASSWORD_PROPERTY, null) == null ||
+ dataMapPreference.get(JDBC_DRIVER_PROPERTY, null) == null;
}
private void runLoaderInThread(final DbLoaderContext context, final Runnable callback) {
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 d357b95..4070b5a 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,17 @@
package org.apache.cayenne.modeler.dialog.db;
+import javax.sql.DataSource;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JOptionPane;
+import javax.swing.WindowConstants;
+import java.awt.Component;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.prefs.Preferences;
+
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.modeler.ClassLoadingService;
import org.apache.cayenne.modeler.ProjectController;
@@ -33,17 +44,6 @@ 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.DefaultComboBoxModel;
-import javax.swing.JOptionPane;
-import javax.swing.WindowConstants;
-import java.awt.Component;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.prefs.Preferences;
-
import static org.apache.cayenne.modeler.pref.DBConnectionInfo.DB_ADAPTER_PROPERTY;
import static org.apache.cayenne.modeler.pref.DBConnectionInfo.JDBC_DRIVER_PROPERTY;
import static org.apache.cayenne.modeler.pref.DBConnectionInfo.PASSWORD_PROPERTY;
@@ -53,7 +53,7 @@ import static org.apache.cayenne.modeler.pref.DBConnectionInfo.USER_NAME_PROPERT
/**
* A subclass of ConnectionWizard that tests configured DataSource, but does not
* keep an open connection.
- *
+ *
*/
public class DataSourceWizard extends CayenneController {