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