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

Reply via email to