Modeler Reengineer dialog improvement\nSelect newly created data source

Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/963077f3
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/963077f3
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/963077f3

Branch: refs/heads/master
Commit: 963077f3b6d52cc3909976f46d5e916a31801ee5
Parents: 374fa27
Author: Nikita Timofeev <[email protected]>
Authored: Tue Nov 1 12:33:01 2016 +0300
Committer: Savva Kolbachev <[email protected]>
Committed: Thu Nov 3 22:54:28 2016 +0300

----------------------------------------------------------------------
 .../cayenne/modeler/ProjectController.java      | 64 +++++++++-----------
 .../modeler/dialog/db/ConnectionWizard.java     |  6 +-
 .../modeler/dialog/db/DataSourceWizard.java     | 41 +++++++++++--
 .../dialog/pref/DataSourcePreferences.java      | 11 ++++
 4 files changed, 78 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/963077f3/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
index 1872fb9..12f38c4 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
@@ -68,40 +68,7 @@ import org.apache.cayenne.modeler.action.SaveAction;
 import org.apache.cayenne.modeler.action.SaveAsAction;
 import org.apache.cayenne.modeler.editor.CallbackType;
 import org.apache.cayenne.modeler.editor.ObjCallbackMethod;
-import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
-import org.apache.cayenne.modeler.event.CallbackMethodEvent;
-import org.apache.cayenne.modeler.event.CallbackMethodListener;
-import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
-import org.apache.cayenne.modeler.event.DataMapDisplayListener;
-import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
-import org.apache.cayenne.modeler.event.DataNodeDisplayListener;
-import org.apache.cayenne.modeler.event.DbAttributeDisplayListener;
-import org.apache.cayenne.modeler.event.DbEntityDisplayListener;
-import org.apache.cayenne.modeler.event.DbRelationshipDisplayListener;
-import org.apache.cayenne.modeler.event.DisplayEvent;
-import org.apache.cayenne.modeler.event.DomainDisplayEvent;
-import org.apache.cayenne.modeler.event.DomainDisplayListener;
-import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayEvent;
-import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayListener;
-import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
-import org.apache.cayenne.modeler.event.EmbeddableDisplayListener;
-import org.apache.cayenne.modeler.event.EntityDisplayEvent;
-import org.apache.cayenne.modeler.event.EntityListenerEvent;
-import org.apache.cayenne.modeler.event.EntityListenerListener;
-import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent;
-import org.apache.cayenne.modeler.event.MultipleObjectsDisplayListener;
-import org.apache.cayenne.modeler.event.ObjAttributeDisplayListener;
-import org.apache.cayenne.modeler.event.ObjEntityDisplayListener;
-import org.apache.cayenne.modeler.event.ObjRelationshipDisplayListener;
-import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
-import org.apache.cayenne.modeler.event.ProcedureDisplayListener;
-import org.apache.cayenne.modeler.event.ProcedureParameterDisplayEvent;
-import org.apache.cayenne.modeler.event.ProcedureParameterDisplayListener;
-import org.apache.cayenne.modeler.event.ProjectOnSaveEvent;
-import org.apache.cayenne.modeler.event.ProjectOnSaveListener;
-import org.apache.cayenne.modeler.event.QueryDisplayEvent;
-import org.apache.cayenne.modeler.event.QueryDisplayListener;
-import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
+import org.apache.cayenne.modeler.event.*;
 import org.apache.cayenne.modeler.pref.DataMapDefaults;
 import org.apache.cayenne.modeler.pref.DataNodeDefaults;
 import org.apache.cayenne.modeler.pref.ProjectStatePreferences;
@@ -1778,7 +1745,34 @@ public class ProjectController extends CayenneController 
{
                ProjectOnSaveListener temp = (ProjectOnSaveListener) listener;
                temp.beforeSaveChanges(e);
        }
-       
+    }
+
+    public void 
addDataSourceModificationListener(DataSourceModificationListener listener) {
+        listenerList.add(DataSourceModificationListener.class, listener);
+    }
+
+    public void 
removeDataSourceModificationListener(DataSourceModificationListener listener) {
+        listenerList.remove(DataSourceModificationListener.class, listener);
+    }
+
+    public void fireDataSourceModificationEvent(DataSourceModificationEvent e) 
{
+        for (DataSourceModificationListener listener : 
listenerList.getListeners(DataSourceModificationListener.class)) {
+            switch (e.getId()) {
+                case MapEvent.ADD:
+                    listener.callbackDataSourceAdded(e);
+                    break;
+                // TODO Change event not supported for now. Nikita Timofeev
+                // There is no good place to catch data source modification
+                /*case MapEvent.CHANGE:
+                    listener.callbackDataSourceChanged(e);
+                    break;*/
+                case MapEvent.REMOVE:
+                    listener.callbackDataSourceRemoved(e);
+                    break;
+                default:
+                    throw new IllegalArgumentException("Invalid 
RelationshipEvent type: " + e.getId());
+            }
+        }
     }
 
     public ArrayList<Embeddable> getEmbeddablesInCurrentDataDomain() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/963077f3/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
index 7af622b..45a8bca 100644
--- 
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
@@ -67,10 +67,8 @@ public class ConnectionWizard extends DataSourceWizard {
             reportError("Connection Error", th);
             return;
         }
-        
-        // set success flag, and unblock the caller...
-        canceled = false;
-        view.dispose();
+
+        onClose(false);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/963077f3/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 101bb8b..70eb82a 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
@@ -21,6 +21,8 @@ package org.apache.cayenne.modeler.dialog.db;
 
 import org.apache.cayenne.modeler.ClassLoadingService;
 import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
+import org.apache.cayenne.modeler.event.DataSourceModificationEvent;
+import org.apache.cayenne.modeler.event.DataSourceModificationListener;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.swing.BindingBuilder;
@@ -31,7 +33,6 @@ import java.awt.*;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.Map;
 
 /**
@@ -57,6 +58,8 @@ public class DataSourceWizard extends CayenneController {
 
        protected boolean canceled;
 
+       protected DataSourceModificationListener dataSourceListener;
+
        public DataSourceWizard(CayenneController parent, String title, String 
altDataSourceKey,
                             DBConnectionInfo altDataSource) {
                super(parent);
@@ -68,6 +71,7 @@ public class DataSourceWizard extends CayenneController {
                this.connectionInfo = new DBConnectionInfo();
 
                initBindings();
+               initDataSourceListener();
        }
 
        /**
@@ -87,6 +91,26 @@ public class DataSourceWizard extends CayenneController {
                builder.bindToAction(view.getConfigButton(), 
"dataSourceConfigAction()");
        }
 
+       protected void initDataSourceListener() {
+               dataSourceListener = new DataSourceModificationListener() {
+                       @Override
+                       public void 
callbackDataSourceRemoved(DataSourceModificationEvent e) {}
+
+                       @Override
+                       public void 
callbackDataSourceAdded(DataSourceModificationEvent e) {
+                               setDataSourceKey(e.getDataSourceName());
+                               refreshDataSources();
+                       }
+               };
+               getApplication().getFrameController().getProjectController()
+                               
.addDataSourceModificationListener(dataSourceListener);
+       }
+
+       protected void removeDataSourceListener() {
+               getApplication().getFrameController().getProjectController()
+                               
.removeDataSourceModificationListener(dataSourceListener);
+       }
+
        public String getDataSourceKey() {
                return dataSourceKey;
        }
@@ -158,14 +182,21 @@ public class DataSourceWizard extends CayenneController {
                        return;
                }
 
-               // set success flag, and unblock the caller...
-               canceled = false;
-               view.dispose();
+               onClose(false);
        }
 
        public void cancelAction() {
-               canceled = true;
+               onClose(true);
+       }
+
+       /**
+        * On close handler. Introduced to remove data source listener.
+        */
+       protected void onClose(boolean canceled) {
+               // set success flag, and unblock the caller...
+               this.canceled = canceled;
                view.dispose();
+               removeDataSourceListener();
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/963077f3/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java
index 19c031c..0f43513 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java
@@ -37,7 +37,10 @@ import javax.swing.DefaultComboBoxModel;
 import javax.swing.JOptionPane;
 
 import org.apache.cayenne.datasource.DriverDataSource;
+import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.modeler.FileClassLoadingService;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.DataSourceModificationEvent;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.pref.CayennePreferenceEditor;
@@ -137,6 +140,7 @@ public class DataSourcePreferences extends 
CayenneController {
                        view.getDataSources().setModel(new 
DefaultComboBoxModel(keys));
                        
view.getDataSources().setSelectedItem(creatorWizard.getName());
                        editDataSourceAction();
+                       fireEvent(creatorWizard.getName(), MapEvent.ADD);
                }
        }
 
@@ -158,6 +162,7 @@ public class DataSourcePreferences extends 
CayenneController {
                                view.getDataSources().setModel(new 
DefaultComboBoxModel(keys));
                                
view.getDataSources().setSelectedItem(wizard.getName());
                                editDataSourceAction();
+                               fireEvent(wizard.getName(), MapEvent.ADD);
                        }
                }
        }
@@ -175,9 +180,15 @@ public class DataSourcePreferences extends 
CayenneController {
                        Arrays.sort(keys);
                        view.getDataSources().setModel(new 
DefaultComboBoxModel(keys));
                        editDataSourceAction(keys.length > 0 ? keys[0] : null);
+                       fireEvent(key, MapEvent.REMOVE);
                }
        }
 
+       private void fireEvent(String dataSourceKey, int eventId) {
+               DataSourceModificationEvent event = new 
DataSourceModificationEvent(this, dataSourceKey, eventId);
+               
getApplication().getFrameController().getProjectController().fireDataSourceModificationEvent(event);
+       }
+
        /**
         * Opens specified DataSource in the editor.
         */

Reply via email to