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/07/28 04:18:02 UTC

svn commit: r426358 [2/2] - in /incubator/cayenne/soc/trunk/cayenne-rop/rop-browser: ./ META-INF/ src/org/apache/cayenne/ropbrowser/ src/org/apache/cayenne/ropbrowser/actions/ src/org/apache/cayenne/ropbrowser/commands/ src/org/apache/cayenne/ropbrowse...

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=426358&r1=426357&r2=426358&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 Thu Jul 27 19:18:00 2006
@@ -19,10 +19,12 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
 import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
+import org.apache.cayenne.ropbrowser.figures.ElementFigure;
 import org.apache.cayenne.ropbrowser.layout.DelegatingLayoutManager;
 import org.apache.cayenne.ropbrowser.model.ElementDiagram;
 import org.apache.cayenne.ropbrowser.model.ModelElement;
@@ -32,6 +34,7 @@
 import org.eclipse.draw2d.FreeformLayer;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.PolylineConnection;
 import org.eclipse.draw2d.ShortestPathConnectionRouter;
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.EditPart;
@@ -137,7 +140,11 @@
 			hideNullObjects();
 		}
 		else if (ElementDiagram.PROP_ROLLBACK.equals(prop)) {
-			refreshVisuals();
+			// TODO deal with undone new elements, changes etc
+			for (Object o : getChildren()) {
+				ElementFigure figure = (ElementFigure) ((ElementEditPart) o).getFigure();
+				figure.refresh();
+			}
 		}
 	}
 

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=426358&r1=426357&r2=426358&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 Thu Jul 27 19:18:00 2006
@@ -20,12 +20,15 @@
 import java.beans.PropertyChangeListener;
 import java.util.List;
 
-import org.apache.cayenne.ropbrowser.actions.DeleteAction;
 import org.apache.cayenne.ropbrowser.actions.HideAction;
 import org.apache.cayenne.ropbrowser.actions.InsertAction;
+import org.apache.cayenne.ropbrowser.actions.RemoveAction;
+import org.apache.cayenne.ropbrowser.commands.ExistingObjectCommand;
+import org.apache.cayenne.ropbrowser.commands.ExistingObjectRequest;
 import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
-import org.apache.cayenne.ropbrowser.commands.DeleteObjectCommand;
 import org.apache.cayenne.ropbrowser.commands.ObjectInsertCommand;
+import org.apache.cayenne.ropbrowser.commands.RemoveObjectCommand;
+import org.apache.cayenne.ropbrowser.figures.ElementFigure;
 import org.apache.cayenne.ropbrowser.model.ModelElement;
 import org.apache.cayenne.ropbrowser.policies.ElementEditPolicy;
 import org.eclipse.draw2d.ChopboxAnchor;
@@ -35,12 +38,14 @@
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.ConnectionEditPart;
 import org.eclipse.gef.EditPolicy;
-import org.eclipse.gef.GraphicalEditPart;
 import org.eclipse.gef.NodeEditPart;
 import org.eclipse.gef.Request;
 import org.eclipse.gef.RequestConstants;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy;
+import org.eclipse.gef.requests.CreateConnectionRequest;
+import org.eclipse.gef.requests.ReconnectRequest;
 
 /**
  * Base abstract EditPart class corresponding to org.apache.cayenne.ropbrowser.model.ModelElement.
@@ -80,6 +85,7 @@
 	protected void createEditPolicies() {
 		// allow removal of the associated model element
 		installEditPolicy(EditPolicy.COMPONENT_ROLE, new ElementEditPolicy());
+		installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new ElementNodeEditPolicy());
 	}
 	
 	/**
@@ -96,10 +102,16 @@
 		}
 		else if (ModelElement.PROP_SOURCE_CONN.equals(prop)) {
 			refreshSourceConnections();
+			// in case relationship button states have changed
+			((ElementFigure) getFigure()).refresh();
 		}
 		else if (ModelElement.PROP_TARGET_CONN.equals(prop)) {
 			refreshTargetConnections();
 		}
+		else {
+			// for any other kind of property change, refresh the figure
+			((ElementFigure) getFigure()).refresh();
+		}
 	}
 	
 	/**
@@ -192,10 +204,41 @@
 		if (request.getType().equals(InsertAction.INSERT_REQUEST)) {
 			return new ObjectInsertCommand(this.getModelCast());
 		}
+		if (request.getType().equals(RemoveAction.REMOVE_REQUEST)) {
+			return new RemoveObjectCommand(this.getModelCast());
+		}
+		if (request.getType().equals(ExistingObjectRequest.EXISTING_REQUEST)) {
+			return new ExistingObjectCommand(this.getModelCast(), ((ExistingObjectRequest) request).getSelectedObject());
+		}
 		return super.getCommand(request); 
 	}
 
 	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/parts/SingleEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/SingleEditPart.java?rev=426358&r1=426357&r2=426358&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/SingleEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/SingleEditPart.java Thu Jul 27 19:18:00 2006
@@ -20,6 +20,8 @@
 
 import org.apache.cayenne.ropbrowser.actions.DeleteAction;
 import org.apache.cayenne.ropbrowser.commands.ContractRelationshipCommand;
+import org.apache.cayenne.ropbrowser.commands.ExistingObjectCommand;
+import org.apache.cayenne.ropbrowser.commands.ExistingObjectRequest;
 import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
 import org.apache.cayenne.ropbrowser.commands.ExpandRelationshipCommand;
 import org.apache.cayenne.ropbrowser.commands.DeleteObjectCommand;
@@ -71,19 +73,6 @@
 		SingleFigure figure = new SingleFigure(this);
 				
 		return figure;
-	}
-	
-	/**
-	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
-	 */
-	public void propertyChange(PropertyChangeEvent evt) {
-		super.propertyChange(evt);
-		
-		String prop = evt.getPropertyName();
-		
-		if (!ModelElement.PROP_BOUNDS.equals(prop) && !ModelElement.PROP_TARGET_CONN.equals(prop)) {
-			((ElementFigure) getFigure()).refresh();
-		}
 	}
 
 	private SingleModelElement getModelCast() {

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java?rev=426358&r1=426357&r2=426358&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java Thu Jul 27 19:18:00 2006
@@ -39,10 +39,6 @@
  */
 public class ElementXYLayoutEditPolicy extends XYLayoutEditPolicy {
 	
-	protected Command createAddCommand(EditPart child, Object constraint) {
-		return null;
-	}
-	
 	/**
 	 * @see ConstrainedLayoutEditPolicy#createChangeConstraintCommand(ChangeBoundsRequest, EditPart, Object)
 	 */
@@ -104,5 +100,4 @@
 	protected Command getDeleteDependantCommand(Request request) {
 		return null;
 	}
-	
 }

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java?rev=426358&r1=426357&r2=426358&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java Thu Jul 27 19:18:00 2006
@@ -49,4 +49,6 @@
 	protected Command getMoveChildrenCommand(Request 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=426358&r1=426357&r2=426358&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 Thu Jul 27 19:18:00 2006
@@ -16,12 +16,15 @@
  */
 package org.apache.cayenne.ropbrowser.views;
 
+import java.util.HashMap;
 import java.util.Iterator;
 
 import org.apache.cayenne.ropbrowser.ConnectionManager;
 import org.apache.cayenne.ropbrowser.ObjectEditor;
 import org.apache.cayenne.ropbrowser.ObjectEditorInput;
 import org.apache.cayenne.ropbrowser.ROPBrowserPlugin;
+import org.apache.cayenne.ropbrowser.wizards.SelectQueryWizard;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.events.SelectionEvent;
@@ -30,14 +33,24 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.widgets.ColumnLayout;
 import org.eclipse.ui.forms.widgets.Form;
 import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
 import org.eclipse.ui.part.ViewPart;
 import org.objectstyle.cayenne.ObjectContext;
+import org.objectstyle.cayenne.exp.Expression;
+import org.objectstyle.cayenne.exp.ExpressionFactory;
 import org.objectstyle.cayenne.map.EntityResolver;
+import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.query.NamedQuery;
 import org.objectstyle.cayenne.query.Query;
+import org.objectstyle.cayenne.query.SelectQuery;
+import org.objectstyle.cayenne.util.Util;
 
 /**
  * An Eclipse view for connecting to the Cayenne web service and launching queries.
@@ -56,18 +69,27 @@
 	private FormToolkit	toolkit;
 	private Form form;
 	/** server to connect to */
-	private CCombo serverText;
+	private CCombo serverCombo;
 	/** button initiates connection */
 	private Button connectButton;
+	
 	/** dropdown for selecting a query to run */
-	private CCombo queryCombo;
+	private CCombo namedQueryCombo;
 	/** button to launch query editor */
-	private Button runQueryButton;
-
-	private Button xmppEnabledButton;
+	private Button runNamedQueryButton;
+	
+	private CCombo selectQueryCombo;
+	private Button parametersButton;
+	private Button runSelectQueryButton;
+	
+	private Button newDiagramButton;
 
 	/** manages connections to the server */
 	private ConnectionManager connectionManager;
+
+	private ObjectEditor lastEditor;
+	
+	private SelectQueryWizard selectWizard; 
 	
 	public ControlPanelView() {
 		connectionManager = ConnectionManager.getInstance();
@@ -80,34 +102,77 @@
 		toolkit = new FormToolkit(parent.getDisplay());
 		form = toolkit.createForm(parent);
 		
-		GridLayout layout = new GridLayout(3, false);
-		layout.horizontalSpacing = 10;
-		layout.verticalSpacing = 10;
+		ColumnLayout layout = new ColumnLayout();
+		layout.maxNumColumns = 4;
 		form.getBody().setLayout(layout);
-				
-		toolkit.createLabel(form.getBody(), "Server");
-		serverText = new CCombo(form.getBody(), SWT.FLAT);
-		serverText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		
+		// Create the server section
+		Section serverSection = toolkit.createSection(form.getBody(), Section.TITLE_BAR | Section.EXPANDED);
+		serverSection.setText("Server");
+		Composite serverComposite = toolkit.createComposite(serverSection);
+		serverComposite.setLayout(new GridLayout());
+		
+		serverCombo = new CCombo(serverComposite, SWT.FLAT);
+		serverCombo.setLayoutData(new GridData(SWT.FILL, SWT.NULL, true, false));
 		String defaultServer = ROPBrowserPlugin.getDefault().getPluginPreferences().getString(PREF_SERVER);
 		if (defaultServer != null) {
-			serverText.add(defaultServer);
-			serverText.setText(defaultServer);
+			serverCombo.add(defaultServer);
+			serverCombo.setText(defaultServer);
 		}
-		
-		connectButton = toolkit.createButton(form.getBody(), "Connect", SWT.PUSH);
+		connectButton = toolkit.createButton(serverComposite, "Connect", SWT.PUSH);
 		connectButton.addSelectionListener(this);
 		
-		queryCombo = new CCombo(form.getBody(), SWT.READ_ONLY | SWT.FLAT);
-		GridData data = new GridData(SWT.FILL, SWT.NULL, true, false);
-		data.horizontalSpan = 2;
-		queryCombo.setLayoutData(data);
-		queryCombo.addSelectionListener(this);
+		serverSection.setClient(serverComposite);
+		
+		// create the named query section
+		Section namedQuerySection = toolkit.createSection(form.getBody(), Section.TITLE_BAR | Section.EXPANDED);
+		namedQuerySection.setText("Named Query");
+		Composite namedQueryComposite = toolkit.createComposite(namedQuerySection);
+		namedQueryComposite.setLayout(new GridLayout());
+		
+		namedQueryCombo = new CCombo(namedQueryComposite, SWT.READ_ONLY | SWT.FLAT);
+		namedQueryCombo.setLayoutData(new GridData(SWT.FILL, SWT.NULL, true, false));
+		
+		runNamedQueryButton = toolkit.createButton(namedQueryComposite, "Run", SWT.PUSH);
+		runNamedQueryButton.addSelectionListener(this);
+		
+		namedQuerySection.setClient(namedQueryComposite);
+		
+		// create the select query section
+		Section selectQuerySection = toolkit.createSection(form.getBody(), Section.TITLE_BAR | Section.EXPANDED);
+		selectQuerySection.setText("Select Query");
+		Composite selectQueryComposite = toolkit.createComposite(selectQuerySection);
+		selectQueryComposite.setLayout(new GridLayout());
+		
+		selectQueryCombo = new CCombo(selectQueryComposite, SWT.READ_ONLY | SWT.FLAT);
+		selectQueryCombo.setLayoutData(new GridData(SWT.FILL, SWT.NULL, true, false));
+		
+		parametersButton = toolkit.createButton(selectQueryComposite, "Parameters...", SWT.PUSH);
+		parametersButton.addSelectionListener(this);
+		
+		runSelectQueryButton = toolkit.createButton(selectQueryComposite, "Run", SWT.PUSH);
+		runSelectQueryButton.addSelectionListener(this);
+		
+		selectQuerySection.setClient(selectQueryComposite);
+		
+		// create the misc section
+		Section miscSection = toolkit.createSection(form.getBody(), Section.TITLE_BAR | Section.EXPANDED);
+		miscSection.setText("Other Settings");
+		Composite miscComposite = toolkit.createComposite(miscSection);
+		miscComposite.setLayout(new GridLayout());
 		
-		runQueryButton = toolkit.createButton(form.getBody(), "Run", SWT.PUSH);
-		runQueryButton.addSelectionListener(this);
+		newDiagramButton = toolkit.createButton(miscComposite, "Display in new editor", SWT.CHECK);
+		newDiagramButton.setSelection(true);
+		
+		miscSection.setClient(miscComposite);
 		
 		toolkit.paintBordersFor(form.getBody());
-		form.getBody().pack();		
+		toolkit.paintBordersFor(serverComposite);
+		toolkit.paintBordersFor(namedQueryComposite);
+		toolkit.paintBordersFor(selectQueryComposite);
+		toolkit.paintBordersFor(miscComposite);
+		
+		form.getBody().pack();
 	}
 	
 	@Override
@@ -120,29 +185,88 @@
 	 */
 	public void widgetSelected(SelectionEvent e) {
 		if (e.getSource() == connectButton) {
-			queryCombo.removeAll();
+			namedQueryCombo.removeAll();
 			
-			if (serverText.indexOf(serverText.getText()) == -1) {
-				serverText.add(serverText.getText());
+			if (serverCombo.indexOf(serverCombo.getText()) == -1) {
+				serverCombo.add(serverCombo.getText());
 			}
 			
-			ROPBrowserPlugin.getDefault().getPluginPreferences().setValue(PREF_SERVER, serverText.getText());
+			ROPBrowserPlugin.getDefault().getPluginPreferences().setValue(PREF_SERVER, serverCombo.getText());
 			
-			ObjectContext currentContext = connectionManager.getObjectContext(serverText.getText());
+			ObjectContext currentContext = connectionManager.getNewObjectContext(serverCombo.getText());
 					
 			// get all the queries for this connection
 			EntityResolver entityResolver = currentContext.getEntityResolver();
 			Iterator i = entityResolver.getQueries().iterator();
 			while (i.hasNext()) {
-				queryCombo.add(((Query)i.next()).getName());
+				namedQueryCombo.add(((Query)i.next()).getName());
+			}
+			
+			i = entityResolver.getObjEntities().iterator();
+			while (i.hasNext()) {
+				selectQueryCombo.add(((ObjEntity)i.next()).getName());
+			}
+		}
+		else if (e.getSource() == runNamedQueryButton) {
+			if (namedQueryCombo.indexOf(namedQueryCombo.getText()) != -1) {
+				ObjectContext context = getObjectContext();
+				NamedQuery select = new NamedQuery(namedQueryCombo.getText());
+				Object matches = context.performQuery(select);
+				
+				displayInEditor(context, 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);
 			}
+			WizardDialog dialog = new WizardDialog(getViewSite().getShell(), selectWizard);
+			dialog.create();
+			dialog.open();
 		}
-		else if (e.getSource() == runQueryButton) {
-			try {
-				getViewSite().getPage().openEditor(new ObjectEditorInput(this.connectionManager.getObjectContext(serverText.getText()), queryCombo.getText()), ObjectEditor.ID, true);
-			} catch (PartInitException ex) {
-				System.out.println(ex.getMessage());
+		else if (e.getSource() == runSelectQueryButton) {
+			if (selectQueryCombo.indexOf(selectQueryCombo.getText()) != -1) {
+				ObjectContext context = getObjectContext();
+				Object matches; // TODO allow initialisation of wizard values
+				if (selectWizard != null && selectWizard.getEntityName().equals(selectQueryCombo.getText())) {
+					String [] paramNames = selectWizard.getParameterNames();
+					Object [] paramValues = selectWizard.getParameterValues();
+					
+					matches = context.performQuery(new SelectQuery(selectQueryCombo.getText(), ExpressionFactory.matchAllExp(Util.toMap(paramNames, paramValues), Expression.EQUAL_TO)));
+				}
+				else {
+					matches = context.performQuery(new SelectQuery(selectQueryCombo.getText()));
+				}
+				
+				displayInEditor(context, matches);
+			}
+		}
+	}
+
+	private ObjectContext getObjectContext() {
+		// TODO more efficient method?
+		ObjectContext context;
+		if (newDiagramButton.getSelection()) {
+			context = this.connectionManager.getNewObjectContext(serverCombo.getText());
+		}
+		else {
+			context = lastEditor.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
+		// 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);
 			}
+			lastEditor.getDiagram().addRootElement(matches);
+		} catch (PartInitException ex) {
+			System.out.println(ex.getMessage());
 		}
 	}
 

Added: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectObjectPage.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectObjectPage.java?rev=426358&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectObjectPage.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectObjectPage.java Thu Jul 27 19:18:00 2006
@@ -0,0 +1,191 @@
+/*
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.cayenne.ropbrowser.wizards;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.cayenne.ropbrowser.model.AbstractObject;
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.objectstyle.cayenne.ObjectContext;
+import org.objectstyle.cayenne.exp.Expression;
+import org.objectstyle.cayenne.exp.ExpressionFactory;
+import org.objectstyle.cayenne.map.EntityResolver;
+import org.objectstyle.cayenne.map.ObjAttribute;
+import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.query.NamedQuery;
+import org.objectstyle.cayenne.query.Query;
+import org.objectstyle.cayenne.query.SelectQuery;
+import org.objectstyle.cayenne.util.Util;
+
+public class SelectObjectPage extends WizardPage implements SelectionListener, ControlListener {
+	
+	private ObjectContext context;
+	
+	private String entityName;
+	
+	private Table objectTable;
+	
+	private String[] paramNames;
+	private Object[] paramValues;
+
+	public SelectObjectPage(String pageName, ObjectContext context, String entityName) {
+		super(pageName);
+		this.context = context;
+		this.entityName = entityName;
+	}
+
+	public void createControl(Composite parent) {
+		setTitle("Select object");
+		setMessage("Select the desired object from the list");
+		
+		Composite base = new Composite(parent, SWT.NULL);
+		
+		setControl(base);
+
+		GridLayout layout = new GridLayout();
+		layout.horizontalSpacing = 20;
+		layout.verticalSpacing = 10;
+		GridData fillGrab = new GridData(SWT.FILL, SWT.FILL, true, true);
+
+		objectTable = new Table(base, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL);
+		objectTable.setHeaderVisible(true);
+		objectTable.setLinesVisible(true);
+		objectTable.setLayoutData(fillGrab);
+		objectTable.addSelectionListener(this);
+		objectTable.addControlListener(this);
+		
+		// get the attributes for this entity
+		EntityResolver entityResolver = context.getEntityResolver();
+		ObjEntity entity = entityResolver.getObjEntity(entityName);
+		Iterator i = entity.getAttributes().iterator();
+		while (i.hasNext()) {
+			TableColumn column = new TableColumn(objectTable, SWT.NULL);
+			ObjAttribute attribute = (ObjAttribute) i.next();
+			column.setText(attribute.getName());
+		}
+		
+		base.setLayout(layout);
+		
+		setPageComplete(true);
+	}
+
+	public void widgetDefaultSelected(SelectionEvent e) {
+	}
+
+	public void widgetSelected(SelectionEvent e) {
+		TableItem[] selection = objectTable.getSelection();
+		if (selection != null && selection.length > 0) {
+			((SelectQueryWizard) getWizard()).setSelectedObject((AbstractObject) selection[0].getData());
+		}
+	}
+	
+	public void controlResized(ControlEvent e) {		
+		// handle the sizing of the table columns
+		Point size = objectTable.getSize();
+		size.x -= objectTable.getBorderWidth();
+		if (objectTable.getVerticalBar() != null) {
+			size.x -= objectTable.getVerticalBar().getSize().x;
+		} 
+
+		for (TableColumn col : objectTable.getColumns()) {
+			col.setWidth((int) size.x/3);
+		}
+	}
+
+	public void controlMoved(ControlEvent e) {
+	}
+
+	public void onEnterPage() {
+		if (getNewValues()) {
+			objectTable.removeAll();
+			
+			EntityResolver entityResolver = context.getEntityResolver();
+			ObjEntity entity = entityResolver.getObjEntity(entityName);
+			
+			Expression qual = ExpressionFactory.matchAllExp(Util.toMap(paramNames, paramValues), Expression.EQUAL_TO);
+			SelectQuery query = new SelectQuery(entity.getJavaClass(), qual);
+							
+			Object matches = this.context.performQuery(query);
+			
+			if (matches instanceof List) {
+				for (Object o : (List) matches) {
+					AbstractObject abstractObject = (AbstractObject) o;
+					TableItem item = new TableItem(objectTable, SWT.NULL);
+					int i = 0;
+					for (TableColumn col : objectTable.getColumns()) {
+						item.setText(i++, abstractObject.getPropertyValue(col.getText()).toString());
+						item.setData(abstractObject);
+					}
+				}
+			}
+			if (matches instanceof AbstractObject) {
+				AbstractObject abstractObject = (AbstractObject) matches;
+				TableItem item = new TableItem(objectTable, SWT.NULL);
+				int i = 0;
+				for (TableColumn col : objectTable.getColumns()) {
+					item.setText(i++, abstractObject.getPropertyValue(col.getText()).toString());
+					item.setData(abstractObject);
+				}
+			}
+			controlResized(null);
+			if (objectTable.getItemCount() > 0) {
+				objectTable.select(0);
+				objectTable.setFocus();
+				widgetSelected(null);
+			}
+		}
+	}
+
+	private boolean getNewValues() {
+		SelectQueryWizard wizard = (SelectQueryWizard) getWizard();
+		String [] newParamNames = wizard.getParameterNames();
+		Object [] newParamValues = wizard.getParameterValues();
+		
+		if (Arrays.equals(paramNames, newParamNames)
+				&& Arrays.equals(paramValues, newParamValues)) {
+			return false;
+		}
+		
+		paramNames = newParamNames;
+		paramValues = newParamValues;
+		
+		return true;
+	}
+}

Added: 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=426358&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectParametersPage.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectParametersPage.java Thu Jul 27 19:18:00 2006
@@ -0,0 +1,220 @@
+/*
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.cayenne.ropbrowser.wizards;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.objectstyle.cayenne.ObjectContext;
+import org.objectstyle.cayenne.map.EntityResolver;
+import org.objectstyle.cayenne.map.ObjAttribute;
+import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.query.NamedQuery;
+import org.objectstyle.cayenne.query.Query;
+
+public class SelectParametersPage extends WizardPage implements SelectionListener, ControlListener {
+	
+	private ObjectContext context;
+	
+	private String entityName;
+	
+	private Table attributeTable;
+	private TableColumn attributeName;
+	private TableColumn attributeType;
+	
+	private Button setButton;
+	
+	private Text parameterValue;
+	
+	private Label errorLabel;
+
+	public SelectParametersPage(String pageName, ObjectContext context, String entityName) {
+		super(pageName);
+		this.context = context;
+		this.entityName = entityName;
+	}
+
+	public void createControl(Composite parent) {
+		setTitle("Enter parameters");
+		setMessage("Select the parameters to use to retrieve a list of objects");
+				
+		Composite base = new Composite(parent, SWT.NULL);
+		
+		setControl(base);
+
+		GridLayout layout = new GridLayout();
+		layout.horizontalSpacing = 20;
+		layout.verticalSpacing = 10;
+		layout.numColumns = 2;
+		GridData fillSpan = new GridData(SWT.FILL, SWT.NULL, false, false);
+		fillSpan.horizontalSpan = 2;
+		GridData fillGrab = new GridData(SWT.FILL, SWT.NULL, true, false);
+
+		attributeTable = new Table(base, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL);
+		attributeTable.setHeaderVisible(true);
+		attributeTable.setLinesVisible(true);
+		attributeTable.setLayoutData(fillSpan);
+		attributeTable.addSelectionListener(this);
+		attributeTable.addControlListener(this);
+		
+		attributeName = new TableColumn(attributeTable, SWT.NULL);
+		attributeName.setText("Attribute Name");
+		attributeType = new TableColumn(attributeTable, SWT.NULL);
+		attributeType.setText("Attribute Type");
+		
+		// get the attributes for this entity
+		EntityResolver entityResolver = context.getEntityResolver();
+		ObjEntity entity = entityResolver.getObjEntity(entityName);
+		Iterator i = entity.getAttributes().iterator();
+		while (i.hasNext()) {
+			TableItem item = new TableItem(attributeTable, SWT.NULL);
+			ObjAttribute attribute = (ObjAttribute) i.next();
+			item.setText(new String[] {attribute.getName(), attribute.getType()});
+		}
+		
+		parameterValue = new Text(base, SWT.SINGLE | SWT.BORDER);
+		parameterValue.setLayoutData(fillGrab);
+		parameterValue.addSelectionListener(this);
+		
+		setButton = new Button(base, SWT.PUSH | SWT.BORDER);
+		setButton.setText("Set");
+		setButton.addSelectionListener(this);
+		
+		errorLabel = new Label(base, SWT.NULL);
+		errorLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+		errorLabel.setLayoutData(fillSpan);
+		
+		base.setLayout(layout);
+		
+		setPageComplete(true);
+	}
+	
+	public IWizardPage getNextPage() {
+		SelectObjectPage page2 = ((SelectQueryWizard) getWizard()).getPage2();
+		page2.onEnterPage();
+		return page2;
+	}
+	
+	// override to avoid getNextPage being called
+	public boolean canFlipToNextPage() {
+		return isPageComplete() && isNextPage();
+	}
+	
+	private boolean isNextPage() {
+		return (super.getNextPage() == null);
+	}
+
+	public void widgetDefaultSelected(SelectionEvent e) {
+		if (e.getSource() == parameterValue) {
+			setParameterValue();
+		}
+	}
+
+	public void widgetSelected(SelectionEvent e) {
+		errorLabel.setText("");
+		if (e.getSource() == attributeTable) {
+			TableItem [] selection = attributeTable.getSelection();
+			if (selection[0].getData() != null) {
+				parameterValue.setText(selection[0].getData().toString());
+			}
+			parameterValue.setFocus();
+		}
+		else if (e.getSource() == setButton) {
+			setParameterValue();
+		}
+	}
+	
+	private void setParameterValue() {
+		TableItem [] selection = attributeTable.getSelection();
+		if (selection != null && selection.length != 0) {
+			if (parameterValue.getText() != null && parameterValue.getText().trim().length() != 0) {
+				try {
+					Class typeClass = Class.forName(selection[0].getText(1));
+					Object value = typeClass.getConstructor(Class.forName("java.lang.String")).newInstance(parameterValue.getText());
+					selection[0].setData(value);
+					selection[0].setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
+				}
+				catch (Exception ex) {
+					errorLabel.setText("Error setting parameter value: could not be converted from String");
+				}
+			}
+			else {
+				selection[0].setData(null);
+				selection[0].setBackground(attributeTable.getBackground());
+			}
+		}
+	}
+
+	public void controlResized(ControlEvent e) {
+		if (e.getSource() == attributeTable) {
+			Point size;
+			
+			// handle the sizing of the table columns
+			size = attributeTable.getSize();
+			size.x -= attributeTable.getBorderWidth();
+			if (attributeTable.getVerticalBar() != null) {
+				size.x -= attributeTable.getVerticalBar().getSize().x;
+			} 
+
+			attributeName.setWidth((int) (size.x/2));
+			attributeType.setWidth((int) (size.x/2));
+		}
+	}
+
+	public void controlMoved(ControlEvent e) {
+	}
+
+	public String[] getParameterNames() {
+		ArrayList<String> names = new ArrayList<String>();
+		for (TableItem item : attributeTable.getItems()) {
+			if (item.getData() != null) {
+				names.add(item.getText(0));
+			}
+		}
+		return names.toArray(new String[names.size()]);
+	}
+
+	public Object[] getParameterValues() {
+		ArrayList<Object> values = new ArrayList<Object>();
+		for (TableItem item : attributeTable.getItems()) {
+			if (item.getData() != null) {
+				values.add(item.getData());
+			}
+		}
+		return values.toArray(new Object[values.size()]);
+	}
+}

Added: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectQueryWizard.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectQueryWizard.java?rev=426358&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectQueryWizard.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/wizards/SelectQueryWizard.java Thu Jul 27 19:18:00 2006
@@ -0,0 +1,116 @@
+/*
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.cayenne.ropbrowser.wizards;
+
+import org.apache.cayenne.ropbrowser.model.AbstractObject;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.objectstyle.cayenne.ObjectContext;
+import org.objectstyle.cayenne.query.NamedQuery;
+
+public class SelectQueryWizard extends Wizard {
+
+	private SelectParametersPage page1; // select a query and enter parameters
+	private SelectObjectPage page2; // select an object
+	
+	private AbstractObject selectedObject;
+	
+	private ObjectContext context;
+	private String entityName;
+	
+	private int mode;
+	private Object[] paramValues;
+	private String[] paramNames;
+	
+	public static final int RETURN_OBJECT = 1;
+	public static final int RETURN_PARAMS = 2;
+	
+	public SelectQueryWizard(ObjectContext context, String entityName, int mode) {
+		this.context = context;
+		this.entityName = entityName;
+		this.mode = mode;
+	}
+	
+	@Override
+	public boolean performFinish() {
+		if (mode == RETURN_OBJECT) {
+			return (selectedObject != null);
+		}
+		if (mode == RETURN_PARAMS) {
+			paramNames = page1.getParameterNames();
+			paramValues = page1.getParameterValues();
+			return true;
+		}
+		return true;
+	}
+	
+	public void addPages() {		
+		setWindowTitle("Select Object");
+		setHelpAvailable(false);
+		setNeedsProgressMonitor(false);
+		
+		page1 = new SelectParametersPage("Enter parameters", context, entityName);
+		addPage(page1);
+		
+		if (mode == RETURN_OBJECT) {
+			page2 = new SelectObjectPage("Select an object", context, entityName);
+			addPage(page2);
+		}
+	}
+
+	public boolean canFinish() {
+		if (mode == RETURN_OBJECT) {
+			return (selectedObject != null);
+		}
+		if (mode == RETURN_PARAMS) {
+			return true;
+		}
+		return true;
+	}
+	
+	public AbstractObject getSelectedObject() {
+		return selectedObject;
+	}
+	
+	public String[] getParameterNames() {
+		// the page has been disposed, need to go to copy stored on finish
+		if (mode == RETURN_PARAMS) {
+			return paramNames;
+		}
+		return page1.getParameterNames();
+	}
+	
+	public Object[] getParameterValues() {
+		// the page has been disposed, need to go to copy stored on finish
+		if (mode == RETURN_PARAMS) {
+			return paramValues;
+		}
+		return page1.getParameterValues();
+	}
+	
+	public String getEntityName() {
+		return entityName;
+	}
+
+	public SelectObjectPage getPage2() {
+		return page2;
+	}
+
+	public void setSelectedObject(AbstractObject data) {
+		selectedObject = data;
+		getContainer().updateButtons();
+	}
+}