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


Reply via email to