You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/11/03 20:13:25 UTC

[4/7] cayenne git commit: Modeler Reengineer dialog improvement\nSelect newly created data source

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 <st...@gmail.com>
Authored: Tue Nov 1 12:33:01 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
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.
 	 */