You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/08/01 01:59:01 UTC

svn commit: r427379 - in /incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser: ./ commands/ figures/ layout/ model/ parts/ views/ wizards/

Author: aadamchik
Date: Mon Jul 31 16:59:00 2006
New Revision: 427379

URL: http://svn.apache.org/viewvc?rev=427379&view=rev
Log:
CAY-616

Modified:
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorInput.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/ExistingObjectCommand.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/layout/DelegatingLayoutManager.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPart.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/views/ControlPanelView.java
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectParametersPage.java

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java Mon Jul 31 16:59:00 2006
@@ -38,6 +38,8 @@
  */
 public class ConnectionManager {
 	
+	// TODO allow configuration of which attributes are displayed in elements
+	
 	private static ConnectionManager _ref;
 	/** All connections made by the application */
 	private Hashtable<String, DataChannel> connections;
@@ -60,22 +62,32 @@
 	 */
 	public ObjectContext getNewObjectContext(String address) {
 		
-		DataChannel channel;
+		DataChannel channel = null;
 		
 		if (connections.containsKey(address)) {
 			channel = connections.get(address);
 		}
 		else {
 			HessianConnection connection = new HessianConnection(address, null, null, "conference");
-			channel = new ClientChannel(connection);
-			connections.put(address, channel);
+			try {
+				channel = new ClientChannel(connection);
+				connections.put(address, channel);
+			} catch (Exception e) {
+				// TODO log
+				System.out.println("Error connecting to the server: " + e.getMessage());
+			}
 		}
 		
-		ObjectContext context = new CayenneContext(channel, true, false);
-		// TODO XMPP notification of graph changes; DataChannel.* ?
-		channel.getEventManager().addListener(this, "handleXMPP", GraphEvent.class, DataChannel.GRAPH_CHANGED_SUBJECT);
-		channel.getEventManager().addListener(this, "handleXMPP", GraphEvent.class, DataChannel.GRAPH_FLUSHED_SUBJECT);
-		return context;
+		if (channel != null) {
+			// TODO XMPP notification of graph changes; DataChannel.* ?
+			// TODO control panel XMPP option
+			channel.getEventManager().addListener(this, "handleXMPP", GraphEvent.class, DataChannel.GRAPH_CHANGED_SUBJECT);
+			channel.getEventManager().addListener(this, "handleXMPP", GraphEvent.class, DataChannel.GRAPH_FLUSHED_SUBJECT);
+					
+			ObjectContext context = new CayenneContext(channel, true, false);
+			return context;
+		}
+		return null;
 	}
 	
 	public void handleXMPP(GraphEvent event) {

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java Mon Jul 31 16:59:00 2006
@@ -27,7 +27,6 @@
 import org.apache.cayenne.ropbrowser.actions.SetNameAction;
 import org.apache.cayenne.ropbrowser.actions.ToggleLayoutAction;
 import org.apache.cayenne.ropbrowser.model.ElementDiagram;
-import org.apache.cayenne.ropbrowser.parts.ElementDiagramEditPart;
 import org.apache.cayenne.ropbrowser.parts.ElementEditPartFactory;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.gef.ContextMenuProvider;
@@ -39,9 +38,6 @@
 import org.eclipse.jface.action.IAction;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
-import org.objectstyle.cayenne.DataChannel;
-import org.objectstyle.cayenne.ObjectContext;
-import org.objectstyle.cayenne.event.EventSubject;
 
 /**
  * Editor class allowing visual editing of database data via

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorInput.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorInput.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorInput.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorInput.java Mon Jul 31 16:59:00 2006
@@ -30,9 +30,12 @@
 public class ObjectEditorInput implements IEditorInput {
 	
 	private ObjectContext context;
+	
+	private String serverAddress;
 
-	public ObjectEditorInput(ObjectContext context) {
+	public ObjectEditorInput(ObjectContext context, String address) {
 		this.context = context;
+		this.serverAddress = address;
 	}
 	
 	public boolean exists() {
@@ -47,7 +50,7 @@
 	 * The name of the query contained in the Cayenne data map.
 	 */
 	public String getName() {
-		return "Object editor";
+		return serverAddress;
 	}
 
 	public IPersistableElement getPersistable() {
@@ -55,7 +58,7 @@
 	}
 
 	public String getToolTipText() {
-		return "Object editor";
+		return serverAddress + " : " + context.hashCode();
 	}
 
 	public Object getAdapter(Class adapter) {
@@ -71,5 +74,9 @@
 
 	public ObjectContext getContext() {
 		return context;
+	}
+
+	public String getServerAddress() {
+		return serverAddress;
 	}
 }

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java Mon Jul 31 16:59:00 2006
@@ -31,6 +31,9 @@
 	private static ROPBrowserPlugin plugin;
 	private Font boldFont;
 	
+	public static final String IMG_DROP_OPEN = "dropdown_open.gif";
+	public static final String IMG_DROP_CLOSED  = "dropdown_closed.gif";
+	
 	/**
 	 * The constructor.
 	 */
@@ -44,6 +47,8 @@
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		boldFont = new Font(null, "Arial", 9, SWT.BOLD);
+		getImageRegistry().put(IMG_DROP_OPEN, ROPBrowserPlugin.getImageDescriptor("icons/" + IMG_DROP_OPEN));
+		getImageRegistry().put(IMG_DROP_CLOSED, ROPBrowserPlugin.getImageDescriptor("icons/" + IMG_DROP_CLOSED));
 	}
 
 	/**

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/ExistingObjectCommand.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/ExistingObjectCommand.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/ExistingObjectCommand.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/ExistingObjectCommand.java Mon Jul 31 16:59:00 2006
@@ -75,10 +75,12 @@
 						if (conn instanceof RelationshipConnection) {
 							RelationshipConnection relConn = (RelationshipConnection) conn;
 							relConn.getSource().getCurrentObject().setRelationship(relConn.getRelationship(), element.getCurrentObject(), object);
+							relConn.disconnect();
 							RelationshipConnection newConn = new RelationshipConnection(relConn.getSource(), existing, relConn.getRelationship());
+							newConn.connect();
 						}
 					}
-					Command recCommand = new HideElementCommand(element);
+					HideElementCommand recCommand = new HideElementCommand(element);
 					recCommand.execute();
 				}
 			}

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java Mon Jul 31 16:59:00 2006
@@ -15,17 +15,50 @@
  */
 package org.apache.cayenne.ropbrowser.figures;
 
+import java.util.Iterator;
+
+import org.apache.cayenne.ropbrowser.ROPBrowserPlugin;
+import org.apache.cayenne.ropbrowser.figures.CompartmentFigure.CompartmentFigureBorder;
+import org.apache.cayenne.ropbrowser.model.AbstractObject;
 import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
 import org.apache.cayenne.ropbrowser.model.ModelElement;
 import org.apache.cayenne.ropbrowser.parts.CollectionEditPart;
+import org.apache.cayenne.ropbrowser.parts.SingleEditPart;
+import org.eclipse.draw2d.ActionEvent;
+import org.eclipse.draw2d.ActionListener;
+import org.eclipse.draw2d.Button;
+import org.eclipse.draw2d.Clickable;
 import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.CompoundBorder;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.LineBorder;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.objectstyle.cayenne.map.Attribute;
 
-public class CollectionFigure extends ElementFigure {
+public class CollectionFigure extends ElementFigure implements ActionListener {
+	
+	private CompartmentFigure navFigure;
+	private String lastNavAttribute = null;
 	
 	public CollectionFigure(CollectionEditPart part) {
 		super(part);
 	}
 	
+	protected void addComponents() {
+		super.addComponents();
+		
+		navFigure = new CompartmentFigure();
+		ToolbarLayout layout = new ToolbarLayout();
+		layout.setMinorAlignment(ToolbarLayout.ALIGN_TOPLEFT);
+		layout.setStretchMinorAxis(false);
+		layout.setSpacing(1);
+		navFigure.setLayoutManager(layout);
+		navFigure.setBorder(null);
+	}
+	
 	protected void setBackgroundColour() {
 		// root figure should be a different colour
 		if (getElementCast().isRoot()) {
@@ -48,6 +81,72 @@
 		}
 		else {
 			name.setText(MSG_NULL_RESULT);
+		}
+	}
+	
+	protected void setAttributes(AbstractObject model) {
+		getAttributeCompartment().removeAll();
+		
+		if (model != null) {			
+			Iterator i = model.getAttributes().iterator();
+			while (i.hasNext()) {
+				Attribute a = (Attribute) i.next();
+				Button b;
+				if (lastNavAttribute != null && a.getName().equals(lastNavAttribute)) {
+					b = new Button(a.getName() + " : " + model.getPropertyValue(a.getName()) + " ", ROPBrowserPlugin.getDefault().getImageRegistry().get(ROPBrowserPlugin.IMG_DROP_OPEN));
+				}
+				else {
+					b = new Button(a.getName() + " : " + model.getPropertyValue(a.getName()) + " ", ROPBrowserPlugin.getDefault().getImageRegistry().get(ROPBrowserPlugin.IMG_DROP_CLOSED));
+				}
+				if (model.isDeleted()) {
+					b.setForegroundColor(ColorConstants.gray);
+				}
+				b.setBorder(null);
+				b.setOpaque(false);
+				b.addActionListener(this);
+				b.getModel().setUserData(a.getName());
+				getAttributeCompartment().add(b);
+				
+				if (lastNavAttribute != null && a.getName().equals(lastNavAttribute)) {
+					insertDropdown(a.getName());
+				}
+			}	
+		}
+	}
+	
+	public void actionPerformed(ActionEvent event) {
+		
+		Button buttonPressed = (Button) event.getSource();
+		String pressed = (String) buttonPressed.getModel().getUserData();
+		
+		if (lastNavAttribute != null && lastNavAttribute.equals(pressed)) {
+			lastNavAttribute = null;
+			navFigure.removeAll();
+			getAttributeCompartment().remove(navFigure);
+		}
+		else {
+			lastNavAttribute = pressed;
+		}
+		
+		refresh();
+	}
+	
+	protected void insertDropdown(String pressed) {
+		
+		navFigure.removeAll();
+		getAttributeCompartment().add(navFigure);
+		
+		// TODO sort values
+		
+		Iterator<AbstractObject> i = getElementCast().getObjectIterator();
+		while (i.hasNext()) {
+			AbstractObject o = i.next();
+			Button b = new Button(o.getPropertyValue(pressed).toString());
+			b.setBorder(new MarginBorder(0, 10, 0, 0));
+			b.setOpaque(false);
+			b.getModel().setUserData(o);
+			b.addActionListener((CollectionEditPart) part);
+			navFigure.add(b);
 		}
 	}
 }

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java Mon Jul 31 16:59:00 2006
@@ -54,7 +54,7 @@
 		this.part = part;
 		
 		ToolbarLayout layout = new ToolbarLayout();
-		setLayoutManager(layout);	
+		setLayoutManager(layout);
 		setBorder(new LineBorder(ColorConstants.black,1));
 		setOpaque(true);
 		

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/layout/DelegatingLayoutManager.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/layout/DelegatingLayoutManager.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/layout/DelegatingLayoutManager.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/layout/DelegatingLayoutManager.java Mon Jul 31 16:59:00 2006
@@ -108,8 +108,6 @@
 		}
 		else
 		{
-			// TODO allow drag single element onto null single element to set relationship
-			// and single element into collection to add into relationship
 			diagram.installEditPolicy(EditPolicy.LAYOUT_ROLE, new SelectionHandlesEditPolicy());
 		}
 	}

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java Mon Jul 31 16:59:00 2006
@@ -19,6 +19,7 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
@@ -318,6 +319,19 @@
 			for (AbstractObject object : deleted) {
 				removeObject(object);
 			}
+		}
+	}
+
+	public Iterator<AbstractObject> getObjectIterator() {
+		return objects.iterator();
+	}
+
+	public void setCurrentObject(AbstractObject object) {
+		if (objects != null && objects.contains(object)) {
+			int oldCurrent = currentRecord;
+			current = object;
+			currentRecord = objects.indexOf(object);
+			firePropertyChange(PROP_CURRENT_RECORD, new Integer(oldCurrent), new Integer(currentRecord));
 		}
 	}
 }

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java Mon Jul 31 16:59:00 2006
@@ -210,6 +210,9 @@
 	public void rollbackChanges() {
 		context.rollbackChanges();
 		firePropertyChange(PROP_ROLLBACK, false, true);
+		for (ModelElement element : elements) {
+			element.removeDeletedObjects();
+		}
 	}
 
 	public void toggleAutoLayout() {

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java Mon Jul 31 16:59:00 2006
@@ -23,6 +23,8 @@
 import org.objectstyle.cayenne.PersistenceState;
 import org.objectstyle.cayenne.map.Relationship;
 
+// TODO allow drag and drop of single model element as insert existing
+
 /**
  * Class representing a collection of AbstractObjects.
  * Used to display a number of records as one element on the

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java Mon Jul 31 16:59:00 2006
@@ -17,6 +17,7 @@
 package org.apache.cayenne.ropbrowser.parts;
 
 import java.beans.PropertyChangeEvent;
+import java.util.Iterator;
 
 import org.apache.cayenne.ropbrowser.actions.HideAction;
 import org.apache.cayenne.ropbrowser.actions.InsertAction;
@@ -27,12 +28,20 @@
 import org.apache.cayenne.ropbrowser.commands.ObjectInsertCommand;
 import org.apache.cayenne.ropbrowser.commands.SetNameElementCommand;
 import org.apache.cayenne.ropbrowser.figures.CollectionFigure;
+import org.apache.cayenne.ropbrowser.figures.CompartmentFigure;
 import org.apache.cayenne.ropbrowser.figures.ElementFigure;
+import org.apache.cayenne.ropbrowser.model.AbstractObject;
 import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
 import org.apache.cayenne.ropbrowser.model.ModelElement;
 import org.apache.cayenne.ropbrowser.policies.CollectionDirectEditPolicy;
 import org.apache.cayenne.ropbrowser.policies.CollectionSelectionPolicy;
+import org.eclipse.draw2d.ActionEvent;
+import org.eclipse.draw2d.ActionListener;
+import org.eclipse.draw2d.Button;
+import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.Request;
 import org.eclipse.gef.commands.Command;
@@ -43,7 +52,7 @@
  * 
  * @author Marcel Gordon
  */
-public class CollectionEditPart extends ElementEditPart {
+public class CollectionEditPart extends ElementEditPart implements ActionListener {
 	
 	/**
 	 * Extends super to allow scrolling through records on double-click and
@@ -77,5 +86,9 @@
 		}
 		// handle requests not in policies; pass the rest along
 		return super.getCommand(request); 
+	}
+
+	public void actionPerformed(ActionEvent event) {
+		getModelCast().setCurrentObject((AbstractObject) ((Button) event.getSource()).getModel().getUserData());
 	}
 }

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java Mon Jul 31 16:59:00 2006
@@ -38,8 +38,6 @@
 
 	@Override
 	protected void createEditPolicies() {
-		// TODO reconnection?
-		installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new EndpointsEditPolicy());
 	}
 	
 	/**
@@ -56,11 +54,5 @@
 			connection.setToolTip(new Label(((RelationshipConnection) getModel()).getRelationship().getName()));
 		}
 		return connection;
-	}
-	
-	
-	// TODO reconnection?
-	class EndpointsEditPolicy extends ConnectionEndpointEditPolicy {
-		
 	}
 }

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java Mon Jul 31 16:59:00 2006
@@ -140,11 +140,11 @@
 			hideNullObjects();
 		}
 		else if (ElementDiagram.PROP_ROLLBACK.equals(prop)) {
-			// TODO deal with undone new elements, changes etc
 			for (Object o : getChildren()) {
 				ElementFigure figure = (ElementFigure) ((ElementEditPart) o).getFigure();
 				figure.refresh();
 			}
+			hideNullObjects();
 		}
 	}
 

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPart.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPart.java Mon Jul 31 16:59:00 2006
@@ -85,7 +85,6 @@
 	protected void createEditPolicies() {
 		// allow removal of the associated model element
 		installEditPolicy(EditPolicy.COMPONENT_ROLE, new ElementEditPolicy());
-		installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new ElementNodeEditPolicy());
 	}
 	
 	/**
@@ -215,30 +214,5 @@
 
 	public boolean isRoot() {
 		return getModelCast().isRoot();
-	}
-	
-	// TODO allow reconnections?
-	class ElementNodeEditPolicy extends GraphicalNodeEditPolicy {
-
-		@Override
-		protected Command getConnectionCompleteCommand(CreateConnectionRequest request) {
-			return null;
-		}
-
-		@Override
-		protected Command getConnectionCreateCommand(CreateConnectionRequest request) {
-			return null;
-		}
-
-		@Override
-		protected Command getReconnectSourceCommand(ReconnectRequest request) {
-			return null;
-		}
-
-		@Override
-		protected Command getReconnectTargetCommand(ReconnectRequest request) {
-			return null;
-		}
-		
 	}
 }

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/views/ControlPanelView.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/views/ControlPanelView.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/views/ControlPanelView.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/views/ControlPanelView.java Mon Jul 31 16:59:00 2006
@@ -36,6 +36,8 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.widgets.ColumnLayout;
 import org.eclipse.ui.forms.widgets.Form;
@@ -86,8 +88,6 @@
 
 	/** manages connections to the server */
 	private ConnectionManager connectionManager;
-
-	private ObjectEditor lastEditor;
 	
 	private SelectQueryWizard selectWizard; 
 	
@@ -201,24 +201,28 @@
 			while (i.hasNext()) {
 				namedQueryCombo.add(((Query)i.next()).getName());
 			}
+			namedQueryCombo.setData(serverCombo.getText());
 			
 			i = entityResolver.getObjEntities().iterator();
 			while (i.hasNext()) {
 				selectQueryCombo.add(((ObjEntity)i.next()).getName());
 			}
+			selectQueryCombo.setData(serverCombo.getText());
 		}
 		else if (e.getSource() == runNamedQueryButton) {
 			if (namedQueryCombo.indexOf(namedQueryCombo.getText()) != -1) {
-				ObjectContext context = getObjectContext();
+				ObjectContext context = getObjectContext((String) namedQueryCombo.getData());
 				NamedQuery select = new NamedQuery(namedQueryCombo.getText());
-				Object matches = context.performQuery(select);
+				if (context != null) {
+					Object matches = context.performQuery(select);
 				
-				displayInEditor(context, matches);
+					displayInEditor(context, (String) namedQueryCombo.getData(), matches);
+				}
 			}
 		}
 		else if (e.getSource() == parametersButton && selectQueryCombo.indexOf(selectQueryCombo.getText()) != -1) {
 			if (selectWizard == null) {
-				selectWizard = new SelectQueryWizard(connectionManager.getNewObjectContext(serverCombo.getText()), selectQueryCombo.getText(), SelectQueryWizard.RETURN_PARAMS);
+				selectWizard = new SelectQueryWizard(connectionManager.getNewObjectContext((String) selectQueryCombo.getData()), selectQueryCombo.getText(), SelectQueryWizard.RETURN_PARAMS);
 			}
 			WizardDialog dialog = new WizardDialog(getViewSite().getShell(), selectWizard);
 			dialog.create();
@@ -226,8 +230,8 @@
 		}
 		else if (e.getSource() == runSelectQueryButton) {
 			if (selectQueryCombo.indexOf(selectQueryCombo.getText()) != -1) {
-				ObjectContext context = getObjectContext();
-				Object matches; // TODO allow initialisation of wizard values
+				ObjectContext context = getObjectContext((String) selectQueryCombo.getData());
+				Object matches;
 				if (selectWizard != null && selectWizard.getEntityName().equals(selectQueryCombo.getText())) {
 					String [] paramNames = selectWizard.getParameterNames();
 					Object [] paramValues = selectWizard.getParameterValues();
@@ -238,36 +242,65 @@
 					matches = context.performQuery(new SelectQuery(selectQueryCombo.getText()));
 				}
 				
-				displayInEditor(context, matches);
+				displayInEditor(context, (String) selectQueryCombo.getData(), matches);
 			}
 		}
 	}
 
-	private ObjectContext getObjectContext() {
+	private ObjectContext getObjectContext(String address) {
 		// TODO more efficient method?
 		ObjectContext context;
 		if (newDiagramButton.getSelection()) {
-			context = this.connectionManager.getNewObjectContext(serverCombo.getText());
+			context = this.connectionManager.getNewObjectContext(address);
 		}
 		else {
-			context = lastEditor.getDiagram().getObjectContext();
+			ObjectEditor existingEditor = getExistingEditor(address);
+			if (existingEditor == null) {
+				context = this.connectionManager.getNewObjectContext(address);
+			}
+			else {
+				context = existingEditor.getDiagram().getObjectContext();
+			}
 		}
 		return context;
 	}
 
-	private void displayInEditor(ObjectContext context, Object matches) {
-		// TODO what if the editor has been shut?
-		// TODO can only open in same window if same server
+	private void displayInEditor(ObjectContext context, String address, Object matches) {
 		// TODO new context option
 		// TODO XMPP on/off option
 		try {
-			if (lastEditor == null || newDiagramButton.getSelection()) {
-				lastEditor = (ObjectEditor) getViewSite().getPage().openEditor(new ObjectEditorInput(context), ObjectEditor.ID, true);
+			ObjectEditor editor;
+			if (newDiagramButton.getSelection()) {
+				editor = getNewEditor(context, address);
 			}
-			lastEditor.getDiagram().addRootElement(matches);
+			else {
+				editor = getExistingEditor(address);
+				if (editor == null) {
+					editor = getNewEditor(context, address);
+				}
+			}
+			editor.getDiagram().addRootElement(matches);
 		} catch (PartInitException ex) {
 			System.out.println(ex.getMessage());
 		}
+	}
+	
+	private ObjectEditor getNewEditor(ObjectContext context, String address) throws PartInitException {
+		return (ObjectEditor) getViewSite().getPage().openEditor(new ObjectEditorInput(context, address), ObjectEditor.ID, true);
+	}
+
+	private ObjectEditor getExistingEditor(String address) {
+		for (IEditorReference editor : getViewSite().getPage().findEditors(null, ObjectEditor.ID, IWorkbenchPage.MATCH_ID)) {
+			try {
+				ObjectEditorInput input = (ObjectEditorInput) editor.getEditorInput();
+				if (input.getServerAddress().equals(address)) {
+					return (ObjectEditor) editor.getEditor(false);
+				}
+			} catch (PartInitException e) {
+				System.out.println("Error restoring editor: " + e.getMessage());
+			}
+		}
+		return null;
 	}
 
 	public void widgetDefaultSelected(SelectionEvent e) {

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectParametersPage.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectParametersPage.java?rev=427379&r1=427378&r2=427379&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectParametersPage.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectParametersPage.java Mon Jul 31 16:59:00 2006
@@ -58,6 +58,8 @@
 	
 	private Button setButton;
 	
+	private Button clearAllButton;
+	
 	private Text parameterValue;
 	
 	private Label errorLabel;
@@ -116,7 +118,11 @@
 		
 		errorLabel = new Label(base, SWT.NULL);
 		errorLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
-		errorLabel.setLayoutData(fillSpan);
+		errorLabel.setLayoutData(fillGrab);
+		
+		clearAllButton = new Button(base, SWT.PUSH | SWT.BORDER);
+		clearAllButton.setText("Clear all");
+		clearAllButton.addSelectionListener(this);
 		
 		base.setLayout(layout);
 		
@@ -135,7 +141,7 @@
 	}
 	
 	private boolean isNextPage() {
-		return (super.getNextPage() == null);
+		return (super.getNextPage() != null);
 	}
 
 	public void widgetDefaultSelected(SelectionEvent e) {
@@ -155,6 +161,12 @@
 		}
 		else if (e.getSource() == setButton) {
 			setParameterValue();
+		}
+		else if (e.getSource() == clearAllButton) {
+			for (TableItem item : attributeTable.getItems()) {
+				item.setData(null);
+				item.setBackground(attributeTable.getBackground());
+			}
 		}
 	}