Repository: cayenne Updated Branches: refs/heads/master 125a9a813 -> 5f510107b
CAY-2422 Added message popup window with possibility to setup driver on Driver not found exception. Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/a316ff45 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/a316ff45 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/a316ff45 Branch: refs/heads/master Commit: a316ff4553e4a7f4d78161d3eaf4ce6c0de4c800 Parents: 67aad8a Author: kkomyak <const1...@gmail.com> Authored: Wed Apr 4 12:06:12 2018 +0300 Committer: kkomyak <const1...@gmail.com> Committed: Mon Apr 9 09:51:24 2018 +0300 ---------------------------------------------------------------------- .../modeler/dialog/db/DataSourceWizard.java | 71 ++++++++++++++------ .../modeler/dialog/pref/PreferenceDialog.java | 38 ++++++----- 2 files changed, 72 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/a316ff45/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 0ecb849..0b1ccf7 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 @@ -35,6 +35,7 @@ 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; @@ -74,7 +75,7 @@ public class DataSourceWizard extends CayenneController { private DbAdapter adapter; private DataSource dataSource; - public DataSourceWizard(CayenneController parent, String title) { + public DataSourceWizard(final CayenneController parent, final String title) { super(parent); this.view = createView(title); @@ -85,7 +86,7 @@ public class DataSourceWizard extends CayenneController { initDataSourceListener(); } - private String[] getLabelsForDialog(String viewTitle) { + private String[] getLabelsForDialog(final String viewTitle) { switch (viewTitle) { case GetDbConnectionAction.DIALOG_TITLE: { return new String[]{"Save", "Cancel"}; @@ -98,13 +99,13 @@ public class DataSourceWizard extends CayenneController { /** * Creates swing dialog for this wizard */ - private DataSourceWizardView createView(String viewTitle) { - String[] labels = getLabelsForDialog(viewTitle); + private DataSourceWizardView createView(final String viewTitle) { + final String[] labels = getLabelsForDialog(viewTitle); return new DataSourceWizardView(this, labels); } protected void initBindings() { - BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this); + final BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this); dataSourceBinding = builder.bindToComboSelection(view.getDataSources(), "dataSourceKey"); @@ -129,9 +130,9 @@ public class DataSourceWizard extends CayenneController { } private void initFavouriteDataSource() { - Preferences pref = getApplication().getPreferencesNode(GeneralPreferences.class, ""); - String favouriteDataSource = pref.get(GeneralPreferences.FAVOURITE_DATA_SOURCE, null); - if(favouriteDataSource != null && dataSources.containsKey(favouriteDataSource)) { + final Preferences pref = getApplication().getPreferencesNode(GeneralPreferences.class, ""); + final String favouriteDataSource = pref.get(GeneralPreferences.FAVOURITE_DATA_SOURCE, null); + if (favouriteDataSource != null && dataSources.containsKey(favouriteDataSource)) { setDataSourceKey(favouriteDataSource); dataSourceBinding.updateView(); } @@ -143,8 +144,8 @@ public class DataSourceWizard extends CayenneController { } private DBConnectionInfo getConnectionInfoFromPreferences() { - DBConnectionInfo connectionInfo = new DBConnectionInfo(); - DataMapDefaults dataMapDefaults = projectController. + final DBConnectionInfo connectionInfo = new DBConnectionInfo(); + final DataMapDefaults dataMapDefaults = projectController. getDataMapPreferences(projectController.getCurrentDataMap()); connectionInfo.setDbAdapter(dataMapDefaults.getCurrentPreference().get(DB_ADAPTER_PROPERTY, null)); connectionInfo.setUrl(dataMapDefaults.getCurrentPreference().get(URL_PROPERTY, null)); @@ -158,11 +159,11 @@ public class DataSourceWizard extends CayenneController { return dataSourceKey; } - public void setDataSourceKey(String dataSourceKey) { + public void setDataSourceKey(final String dataSourceKey) { this.dataSourceKey = dataSourceKey; // update a clone object that will be used to obtain connection... - DBConnectionInfo currentInfo = dataSources.get(dataSourceKey); + final DBConnectionInfo currentInfo = dataSources.get(dataSourceKey); if (currentInfo != null) { currentInfo.copyTo(connectionInfo); } else { @@ -180,7 +181,7 @@ public class DataSourceWizard extends CayenneController { refreshDataSources(); initFavouriteDataSource(); - DataMapDefaults dataMapDefaults = projectController. + final DataMapDefaults dataMapDefaults = projectController. getDataMapPreferences(projectController.getCurrentDataMap()); if (dataMapDefaults.getCurrentPreference().get(DB_ADAPTER_PROPERTY, null) != null) { getConnectionInfoFromPreferences().copyTo(connectionInfo); @@ -205,13 +206,19 @@ public class DataSourceWizard extends CayenneController { * conneciton. Does not store the open connection. */ public void okAction() { - DBConnectionInfo info = getConnectionInfo(); - ClassLoadingService classLoader = getApplication().getClassLoadingService(); + final DBConnectionInfo info = getConnectionInfo(); + final ClassLoadingService classLoader = getApplication().getClassLoadingService(); // doing connection testing... try { - this.adapter = info.makeAdapter(classLoader); - this.dataSource = info.makeDataSource(classLoader); + try { + this.adapter = info.makeAdapter(classLoader); + this.dataSource = info.makeDataSource(classLoader); + } catch (SQLException ignore) { + showNoConnectorDialog("Driver is not configured!", "You didn't attach the proper driver."); + return; + } + try (Connection connection = dataSource.getConnection()) { } catch (SQLException ignore) { } @@ -229,7 +236,7 @@ public class DataSourceWizard extends CayenneController { /** * On close handler. Introduced to remove data source listener. */ - protected void onClose(boolean canceled) { + protected void onClose(final boolean canceled) { // set success flag, and unblock the caller... this.canceled = canceled; view.dispose(); @@ -244,18 +251,27 @@ public class DataSourceWizard extends CayenneController { * Opens preferences panel to allow configuration of DataSource presets. */ public void dataSourceConfigAction() { - PreferenceDialog prefs = new PreferenceDialog(this); + final PreferenceDialog prefs = new PreferenceDialog(this); prefs.showDataSourceEditorAction(dataSourceKey); refreshDataSources(); } + /** + * Opens preferences panel to allow configuration of classpath. + */ + public void classPathConfigAction() { + final PreferenceDialog prefs = new PreferenceDialog(this); + prefs.showClassPathEditorAction(); + refreshDataSources(); + } + public Component getView() { return view; } @SuppressWarnings("unchecked") private void refreshDataSources() { - this.dataSources = (Map<String, DBConnectionInfo>)getApplication().getCayenneProjectPreferences().getDetailObject(DBConnectionInfo.class) + this.dataSources = (Map<String, DBConnectionInfo>) getApplication().getCayenneProjectPreferences().getDetailObject(DBConnectionInfo.class) .getChildrenPreferences(); // 1.2 migration fix - update data source adapter names @@ -266,7 +282,7 @@ public class DataSourceWizard extends CayenneController { } } - String[] keys = dataSources.keySet().toArray(new String[0]); + final String[] keys = dataSources.keySet().toArray(new String[0]); Arrays.sort(keys); view.getDataSources().setModel(new DefaultComboBoxModel<>(keys)); @@ -281,6 +297,17 @@ public class DataSourceWizard extends CayenneController { dataSourceBinding.updateView(); } + protected void showNoConnectorDialog(final String title, final String message) { + + final String [] options = {"Setup driver", "OK"}; + + final int selection = JOptionPane.showOptionDialog(getView(), message, title, JOptionPane.ERROR_MESSAGE, + JOptionPane.ERROR_MESSAGE, null, options, options[1]); + if (selection == 0) { + classPathConfigAction(); + } + } + public DataSource getDataSource() { return dataSource; } @@ -292,7 +319,7 @@ public class DataSourceWizard extends CayenneController { return adapter; } - public void setProjectController(ProjectController projectController) { + public void setProjectController(final ProjectController projectController) { this.projectController = projectController; } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/a316ff45/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java index 6ade6f9..2e2ab38 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java @@ -23,16 +23,12 @@ import java.awt.Component; import java.awt.Dialog; import java.awt.Frame; import java.awt.Window; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.HashMap; import java.util.Map; import javax.swing.JDialog; import javax.swing.JList; import javax.swing.SwingUtilities; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; import org.apache.cayenne.modeler.util.CayenneController; import org.apache.cayenne.pref.PreferenceEditor; @@ -56,10 +52,10 @@ public class PreferenceDialog extends CayenneController { protected Map<String, CayenneController> detailControllers; protected PreferenceEditor editor; - public PreferenceDialog(CayenneController parent) { + public PreferenceDialog(final CayenneController parent) { super(parent); - Window parentView = parent.getView() instanceof Window + final Window parentView = parent.getView() instanceof Window ? (Window) parent.getView() : SwingUtilities.getWindowAncestor(parent.getView()); this.view = (parentView instanceof Dialog) @@ -83,7 +79,7 @@ public class PreferenceDialog extends CayenneController { } public void updateSelection() { - String selection = view.getList().getSelectedValue(); + final String selection = view.getList().getSelectedValue(); if (selection != null) { view.getDetailLayout().show(view.getDetailPanel(), selection); } @@ -103,25 +99,37 @@ public class PreferenceDialog extends CayenneController { * Configures preferences dialog to display an editor for a local DataSource with * specified name. */ - public void showDataSourceEditorAction(Object dataSourceKey) { + public void showDataSourceEditorAction(final Object dataSourceKey) { configure(); // this will install needed controller view.getDetailLayout().show(view.getDetailPanel(), DATA_SOURCES_KEY); - DataSourcePreferences controller = (DataSourcePreferences) detailControllers + final DataSourcePreferences controller = (DataSourcePreferences) detailControllers .get(DATA_SOURCES_KEY); controller.editDataSourceAction(dataSourceKey); view.setVisible(true); } - public void startupAction(String key) { - if (key == null) { - key = GENERAL_KEY; - } + /** + * Configures preferences dialog to display an editor for a local DataSource with + * specified name. + */ + public void showClassPathEditorAction() { + configure(); + + // this will install needed controller + view.getDetailLayout().show(view.getDetailPanel(), CLASS_PATH_KEY); + + ClasspathPreferences controller = (ClasspathPreferences) detailControllers + .get(CLASS_PATH_KEY); + controller.getView().setEnabled(true); + view.setVisible(true); + } + public void startupAction(final String key) { configure(); - view.getList().setSelectedValue(key, true); + view.getList().setSelectedValue(key == null ? GENERAL_KEY : key, true); view.setVisible(true); } @@ -142,7 +150,7 @@ public class PreferenceDialog extends CayenneController { view.setModal(true); } - protected void registerPanel(String name, CayenneController panelController) { + protected void registerPanel(final String name, final CayenneController panelController) { detailControllers.put(name, panelController); view.getDetailPanel().add(panelController.getView(), name); }