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/12 04:53:16 UTC

svn commit: r421091 [2/2] - in /incubator/cayenne/soc/trunk/cayenne-rop/rop-browser: ./ META-INF/ dist/ lib/ src/org/apache/cayenne/ropbrowser/ src/org/apache/cayenne/ropbrowser/commands/ src/org/apache/cayenne/ropbrowser/figures/ src/org/apache/cayenn...

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Painting.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Painting.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Painting.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Painting.java Tue Jul 11 19:53:14 2006
@@ -1,6 +1,22 @@
+/*
+ *  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.model;
 
-import org.apache.cayenne.ropbrowser.model.auto._Painting;
+import org.apache.cayenne.ropbrowser.model.auto._Painting;
 
 /**
  * A persistent class mapped as "Painting" Cayenne entity.

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Artist.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Artist.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Artist.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Artist.java Tue Jul 11 19:53:14 2006
@@ -4,7 +4,7 @@
 import java.util.List;
 
 import org.apache.cayenne.ropbrowser.model.AbstractObject;
-import org.apache.cayenne.ropbrowser.model.Painting;
+import org.apache.cayenne.ropbrowser.model.Painting;
 
 /**
  * A generated persistent class mapped as "Artist" Cayenne entity. It is a good idea to

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Gallery.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Gallery.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Gallery.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Gallery.java Tue Jul 11 19:53:14 2006
@@ -3,7 +3,7 @@
 import java.util.List;
 
 import org.apache.cayenne.ropbrowser.model.AbstractObject;
-import org.apache.cayenne.ropbrowser.model.Painting;
+import org.apache.cayenne.ropbrowser.model.Painting;
 
 /**
  * A generated persistent class mapped as "Gallery" Cayenne entity. It is a good idea to

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Painting.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Painting.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Painting.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Painting.java Tue Jul 11 19:53:14 2006
@@ -3,7 +3,7 @@
 import org.apache.cayenne.ropbrowser.model.AbstractObject;
 import org.apache.cayenne.ropbrowser.model.Artist;
 import org.apache.cayenne.ropbrowser.model.Gallery;
-import org.objectstyle.cayenne.ValueHolder;
+import org.objectstyle.cayenne.ValueHolder;
 
 /**
  * A generated persistent class mapped as "Painting" Cayenne entity. It is a good idea to

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java Tue Jul 11 19:53:14 2006
@@ -1,114 +1,61 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 Elias Volanakis and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/*
+ *  Copyright 2006 The Apache Software Foundation
  *
- * Contributors:
- *    Elias Volanakis - initial API and implementation
- *******************************************************************************/
+ *  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.parts;
 
 import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
 
 import org.apache.cayenne.ropbrowser.figures.CollectionFigure;
-import org.apache.cayenne.ropbrowser.model.AbstractObject;
+import org.apache.cayenne.ropbrowser.figures.RelationshipLabel;
 import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
 import org.apache.cayenne.ropbrowser.model.Connection;
+import org.apache.cayenne.ropbrowser.model.ElementDiagram;
 import org.apache.cayenne.ropbrowser.model.ModelElement;
-import org.apache.cayenne.ropbrowser.model.NullModelElement;
-import org.apache.cayenne.ropbrowser.model.ObjectDiagram;
 import org.apache.cayenne.ropbrowser.policies.CollectionDirectEditPolicy;
 import org.apache.cayenne.ropbrowser.policies.CollectionSelectionPolicy;
-import org.eclipse.draw2d.ChopboxAnchor;
-import org.eclipse.draw2d.ConnectionAnchor;
 import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Label;
 import org.eclipse.draw2d.geometry.Point;
-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.editparts.AbstractGraphicalEditPart;
 import org.eclipse.gef.requests.DirectEditRequest;
-import org.objectstyle.cayenne.map.Relationship;
 
 /**
- * EditPart used for Shape instances (more specific for EllipticalShape and
- * RectangularShape instances).
- * <p>This edit part must implement the PropertyChangeListener interface, 
- * so it can be notified of property changes in the corresponding model element.
- * </p>
+ * EditPart for the {@link CollectionModelElement} class. Allows
+ * scrolling through records and expansion of relationships.
  * 
- * @author Elias Volanakis
+ * @author Marcel Gordon
  */
 class CollectionEditPart extends ElementEditPart {
 	
-	/* (non-Javadoc)
-	 * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies()
+	/**
+	 * Extends super to allow scrolling through records on double-click and
+	 * expansion of relationships on single-click.
+	 * 
+	 * @see ElementEditPart#createEditPolicies()
 	 */
 	protected void createEditPolicies() {
-		// allow removal of the associated model element
-		// installEditPolicy(EditPolicy.COMPONENT_ROLE, new ShapeComponentEditPolicy());
-		//installEditPolicy(EditPolicy.COMPONENT_ROLE, new RootComponentEditPolicy());
+		super.createEditPolicies();
+		
 		installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new CollectionSelectionPolicy());
-		installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new CollectionDirectEditPolicy());		
-		// allow the creation of connections and 
-		// and the reconnection of connections between Shape instances
-		/* installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new GraphicalNodeEditPolicy() {
-			/* (non-Javadoc)
-			 * @see org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy#getConnectionCompleteCommand(org.eclipse.gef.requests.CreateConnectionRequest)
-			 *
-			protected Command getConnectionCompleteCommand(CreateConnectionRequest request) {
-				ConnectionCreateCommand cmd 
-					= (ConnectionCreateCommand) request.getStartCommand();
-				cmd.setTarget((Shape) getHost().getModel());
-				return cmd;
-			}
-			/* (non-Javadoc)
-			 * @see org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy#getConnectionCreateCommand(org.eclipse.gef.requests.CreateConnectionRequest)
-			 *
-			protected Command getConnectionCreateCommand(CreateConnectionRequest request) {
-				Shape source = (Shape) getHost().getModel();
-				int style = ((Integer) request.getNewObjectType()).intValue();
-				ConnectionCreateCommand cmd = new ConnectionCreateCommand(source, style);
-				request.setStartCommand(cmd);
-				return cmd;
-			}
-			/* (non-Javadoc)
-			 * @see org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy#getReconnectSourceCommand(org.eclipse.gef.requests.ReconnectRequest)
-			 *
-			protected Command getReconnectSourceCommand(ReconnectRequest request) {
-				Connection conn = (Connection) request.getConnectionEditPart().getModel();
-				Shape newSource = (Shape) getHost().getModel();
-				ConnectionReconnectCommand cmd = new ConnectionReconnectCommand(conn);
-				cmd.setNewSource(newSource);
-				return cmd;
-			}
-			/* (non-Javadoc)
-			 * @see org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy#getReconnectTargetCommand(org.eclipse.gef.requests.ReconnectRequest)
-			 *
-			protected Command getReconnectTargetCommand(ReconnectRequest request) {
-				Connection conn = (Connection) request.getConnectionEditPart().getModel();
-				Shape newTarget = (Shape) getHost().getModel();
-				ConnectionReconnectCommand cmd = new ConnectionReconnectCommand(conn);
-				cmd.setNewTarget(newTarget);
-				return cmd;
-			}
-		}); */
+		installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new CollectionDirectEditPolicy());
 	}
 		
-	/*(non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
 	 */
 	protected IFigure createFigure() {
@@ -120,17 +67,18 @@
 		return figure;
 	}
 	
-	/* (non-Javadoc)
+	/**
 	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
 	 */
 	public void propertyChange(PropertyChangeEvent evt) {
 		super.propertyChange(evt);
 		
-		System.out.println("Event");
-		
 		String prop = evt.getPropertyName();
-		if (!ModelElement.PROP_TRANSIENT.equals(prop) && !ModelElement.PROP_TARGET_CONN.equals(prop) && !ModelElement.PROP_SOURCE_CONN.equals(prop)) {
-			((CollectionFigure) getFigure()).setAttributes(getModelCast().getCurrent());
+		if (CollectionModelElement.PROP_CURRENT_RECORD.equals(prop)) {
+			getModelCast().updateConnectedElements();
+		}
+		else if (!ModelElement.PROP_TRANSIENT.equals(prop) && !ModelElement.PROP_TARGET_CONN.equals(prop) && !ModelElement.PROP_SOURCE_CONN.equals(prop)) {
+			((CollectionFigure) getFigure()).refresh(getModelCast().getCurrent());
 		}
 	}
 
@@ -139,55 +87,43 @@
 	}
 
 	/**
+	 * Handles {@link RequestConstants#REQ_OPEN} and {@link RequestConstants#REQ_DIRECT_EDIT} requests
+	 * to allow scrolling through records and expansion of relationships.
+	 * 
 	 * @see org.eclipse.gef.EditPart#performRequest(org.eclipse.gef.Request)
 	 */
 	public void performRequest(Request request)
 	{
+		// TODO deal with these in terms of commands
 		// TODO keybinding
 		if (request.getType().equals(RequestConstants.REQ_OPEN)) {
 			getModelCast().next();
-			getModelCast().updateConnections();
+			getModelCast().updateConnectedElements();
 		}
 		if (request.getType().equals(RequestConstants.REQ_DIRECT_EDIT)) {
-			Point loc = ((DirectEditRequest) request).getLocation().getCopy();
-			Figure relationshipCompartment = ((CollectionFigure) getFigure()).getRelationshipCompartment();
-			relationshipCompartment.translateToRelative(loc);
-			if (relationshipCompartment.containsPoint(loc)) {
-				Iterator children = relationshipCompartment.getChildren().iterator();
-				Iterator relationships = getModelCast().getCurrent().getRelationships().iterator();
-				while (children.hasNext() && relationships.hasNext()) {
-					Figure figure = (Figure) children.next();
-					Relationship rel = (Relationship) relationships.next();
-					if (figure instanceof Label) {
-						Label label = (Label) figure;
-						Point location = ((DirectEditRequest) request).getLocation().getCopy();
-						label.translateToRelative(location);
-						if (label.containsPoint(location)) {
-							
-							ModelElement element = null;
-							// follow the relationship to get the object
-							Object value = getModelCast().getCurrent().followRelationship(rel);
-							
-							if (value == null || (value instanceof List && ((List) value).isEmpty())) {
-								element = new NullModelElement(rel.getTargetEntityName());
-							}
-							else {
-								CollectionModelElement e = new CollectionModelElement(getModelCast().getCurrent());
-								if (rel.isToMany()) {
-									e.setObjects((List) value);
-								}
-								else {
-									e.setObjects(Arrays.asList(new AbstractObject[] {(AbstractObject) value}));
-								}
-								element = e;
-							}
-							
-							if (((ObjectDiagram) ((ObjectDiagramEditPart) getParent()).getModel()).addElement(element)) {
-								Connection conn = new Connection(getModelCast(), element, rel);
-							}
-							
-							return;
+			if (getModelCast().getCurrent() != null) {
+				
+				Point loc = ((DirectEditRequest) request).getLocation().getCopy();
+				Figure relationshipCompartment = ((CollectionFigure) getFigure()).getRelationshipCompartment();
+				relationshipCompartment.translateToRelative(loc);
+				
+				if (relationshipCompartment.containsPoint(loc)) {
+					
+					RelationshipLabel label = (RelationshipLabel) relationshipCompartment.findFigureAt(loc);
+					
+					if (label != null) {
+						// follow the relationship to get the object
+						Object value = getModelCast().getCurrent().followRelationship(label.getRelationship());
+						
+						CollectionModelElement element = new CollectionModelElement(getModelCast());
+						
+						element.setObjects(value);
+						
+						if (((ElementDiagram) ((ElementDiagramEditPart) getParent()).getModel()).addElement(element)) {
+							Connection conn = new Connection(getModelCast(), element, label.getRelationship());
 						}
+						
+						return;
 					}
 				}
 			}

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ConnectionEditPart.java Tue Jul 11 19:53:14 2006
@@ -1,8 +1,18 @@
 /*
- * Created on 16/06/2006
+ *  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.
  *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
  */
 package org.apache.cayenne.ropbrowser.parts;
 
@@ -11,13 +21,19 @@
 import org.eclipse.draw2d.PolylineConnection;
 import org.eclipse.gef.editparts.AbstractConnectionEditPart;
 
+/**
+ * An EditPart for the {@link org.apache.cayenne.ropbrowser.model.Connection} class,
+ * representing a relationship between two ModelElements.
+ * 
+ * @author Marcel Gordon
+ */
 public class ConnectionEditPart extends AbstractConnectionEditPart {
 
 	@Override
 	protected void createEditPolicies() {
 	}
 	
-	/* (non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
 	 */
 	protected IFigure createFigure() {

Added: 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=421091&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java Tue Jul 11 19:53:14 2006
@@ -0,0 +1,166 @@
+/*
+ *  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.parts;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.List;
+
+import org.apache.cayenne.ropbrowser.commands.ElementSetConstraintCommand;
+import org.apache.cayenne.ropbrowser.model.ElementDiagram;
+import org.apache.cayenne.ropbrowser.model.ModelElement;
+import org.eclipse.draw2d.ConnectionLayer;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.FreeformLayer;
+import org.eclipse.draw2d.FreeformLayout;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.ShortestPathConnectionRouter;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.LayerConstants;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+import org.eclipse.gef.editpolicies.RootComponentEditPolicy;
+import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;
+import org.eclipse.gef.requests.ChangeBoundsRequest;
+import org.eclipse.gef.requests.CreateRequest;
+
+/**
+ * EditPart for the ElementDiagram class, the root of the model.
+ * Effectively represents the canvas of the editor.
+ * 
+ * @author Marcel Gordon
+ */
+public class ElementDiagramEditPart extends AbstractGraphicalEditPart 
+	implements PropertyChangeListener  {
+
+	/**
+	 * Upon activation, attach to the model element as a property change listener.
+	 */
+	public void activate() {
+		if (!isActive()) {
+			super.activate();
+			((ElementDiagram) getModel()).addPropertyChangeListener(this);
+		}
+	}
+	
+	/**
+	 * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies()
+	 */
+	protected void createEditPolicies() {
+		// disallows the removal of this edit part from its parent
+		installEditPolicy(EditPolicy.COMPONENT_ROLE, new RootComponentEditPolicy());
+		// handles constraint changes (e.g. moving and/or resizing) of model elements
+		// and creation of new model elements
+		installEditPolicy(EditPolicy.LAYOUT_ROLE,  new ElementXYLayoutEditPolicy());
+	}
+	
+	/**
+	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
+	 */
+	protected IFigure createFigure() {
+		Figure f = new FreeformLayer();
+		f.setBorder(new MarginBorder(3));
+		f.setLayoutManager(new FreeformLayout());
+	
+		// Create the static router for the connection layer
+		ConnectionLayer connLayer = (ConnectionLayer)getLayer(LayerConstants.CONNECTION_LAYER);
+		connLayer.setConnectionRouter(new ShortestPathConnectionRouter(f));
+		
+		return f;
+	}
+	
+	/**
+	 * Upon deactivation, detach from the model element as a property change listener.
+	 */
+	public void deactivate() {
+		if (isActive()) {
+			super.deactivate();
+			((ElementDiagram) getModel()).removePropertyChangeListener(this);
+		}
+	}
+	
+	/**
+	 * @see org.eclipse.gef.editparts.AbstractEditPart#getModelChildren()
+	 */
+	protected List getModelChildren() {
+		ElementDiagram diagram = (ElementDiagram) this.getModel();
+		return  diagram.getObjects(); // return a list of objects
+	}
+	
+	/**
+	 * Respond to the adding and removing of elements from the diagram
+	 * @see java.beans.PropertyChangeListener#propertyChange(PropertyChangeEvent)
+	 */
+	public void propertyChange(PropertyChangeEvent evt) {
+		String prop = evt.getPropertyName();
+		if (ElementDiagram.PROP_NODE_ADDED.equals(prop)
+				|| ElementDiagram.PROP_NODE_REMOVED.equals(prop)) {
+			refreshChildren();
+		}
+	}
+	
+	/**
+	 * An edit policy handling the layout of elements.
+	 * 
+	 * @author Marcel Gordon
+	 */
+	private static class ElementXYLayoutEditPolicy extends XYLayoutEditPolicy {
+		
+		protected Command createAddCommand(EditPart child, Object constraint) {
+			return null;
+		}
+		
+		/**
+		 * @see ConstrainedLayoutEditPolicy#createChangeConstraintCommand(ChangeBoundsRequest, EditPart, Object)
+		 */
+		protected Command createChangeConstraintCommand(ChangeBoundsRequest request,
+				EditPart child, Object constraint) {
+			if (child instanceof ElementEditPart && constraint instanceof Rectangle) {
+				return new ElementSetConstraintCommand(
+						(ModelElement) child.getModel(), request, (Rectangle) constraint);
+			}
+			return super.createChangeConstraintCommand(request, child, constraint);
+		}
+		
+		/**
+		 * @see ConstrainedLayoutEditPolicy#createChangeConstraintCommand(EditPart, Object)
+		 */
+		protected Command createChangeConstraintCommand(EditPart child,
+				Object constraint) {
+			return null;
+		}
+		
+		/**
+		 * @see LayoutEditPolicy#getCreateCommand(CreateRequest)
+		 */
+		protected Command getCreateCommand(CreateRequest request) {
+			return null;
+		}
+		
+		/**
+		 * @see LayoutEditPolicy#getDeleteDependantCommand(org.eclipse.gef.Request)
+		 */
+		protected Command getDeleteDependantCommand(Request request) {
+			return null;
+		}
+		
+	}
+}
\ No newline at end of file

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=421091&r1=421090&r2=421091&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 Tue Jul 11 19:53:14 2006
@@ -1,57 +1,47 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 Elias Volanakis and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/*
+ *  Copyright 2006 The Apache Software Foundation
  *
- * Contributors:
- *    Elias Volanakis - initial API and implementation
- *******************************************************************************/
+ *  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.parts;
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.util.Iterator;
 import java.util.List;
 
-import org.apache.cayenne.ropbrowser.figures.CollectionFigure;
-import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
-import org.apache.cayenne.ropbrowser.model.Connection;
 import org.apache.cayenne.ropbrowser.model.ModelElement;
-import org.apache.cayenne.ropbrowser.model.ObjectDiagram;
-import org.apache.cayenne.ropbrowser.policies.CollectionDirectEditPolicy;
-import org.apache.cayenne.ropbrowser.policies.CollectionSelectionPolicy;
+import org.apache.cayenne.ropbrowser.policies.ElementEditPolicy;
 import org.eclipse.draw2d.ChopboxAnchor;
 import org.eclipse.draw2d.ConnectionAnchor;
-import org.eclipse.draw2d.Figure;
-import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Label;
-import org.eclipse.draw2d.geometry.Point;
 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.editparts.AbstractGraphicalEditPart;
-import org.eclipse.gef.requests.DirectEditRequest;
-import org.objectstyle.cayenne.map.Relationship;
 
 /**
- * EditPart used for Shape instances (more specific for EllipticalShape and
- * RectangularShape instances).
- * <p>This edit part must implement the PropertyChangeListener interface, 
- * so it can be notified of property changes in the corresponding model element.
- * </p>
+ * Base abstract EditPart class corresponding to org.apache.cayenne.ropbrowser.model.ModelElement.
+ * EditPart classes whose models extend ModelElement ought to extend this class.
  * 
- * @author Elias Volanakis
+ * @author Marcel Gordon
  */
 public abstract class ElementEditPart extends AbstractGraphicalEditPart 
 	implements PropertyChangeListener, NodeEditPart {
 	
+	/** anchor point for connections */
 	private ConnectionAnchor anchor;
 	
 	/**
@@ -74,7 +64,15 @@
 		}
 	}
 	
-	/* (non-Javadoc)
+	/**
+	 * Installs a basic edit policy allowing the deletion of elements. Sub-classes should extend.
+	 */
+	protected void createEditPolicies() {
+		// allow removal of the associated model element
+		installEditPolicy(EditPolicy.COMPONENT_ROLE, new ElementEditPolicy());
+	}
+	
+	/**
 	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
 	 */
 	public void propertyChange(PropertyChangeEvent evt) {
@@ -91,15 +89,19 @@
 		}
 	}
 	
+	/**
+	 * Returns the model cast to its basic type. Sub-classes should override.
+	 */
 	private ModelElement getModelCast() {
 		return (ModelElement) getModel();
 	}
 	
+	/**
+	 * Method called in response to changes in the model and calls to refresh().
+	 * This method should update the visual representation of the EditPart. Sub-classes
+	 * should extend as this implementation handles basic operations such as resize and move.
+	 */
 	protected void refreshVisuals() {
-		// notify parent container of changed position & location
-		// if this line is removed, the XYLayoutManager used by the parent container 
-		// (the Figure of the ShapesDiagramEditPart), will not know the bounds of this figure
-		// and will not draw it correctly.
 		ModelElement model = getModelCast();
 		if (model.getWidth() == 0 && model.getHeight() == 0) {
 			model.setSize(getFigure().getPreferredSize().width, getFigure().getPreferredSize().height);
@@ -108,6 +110,9 @@
 		((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), bounds);
 	}
 	
+	/**
+	 * Obtains the anchor used for connections on this EditPart's figure.
+	 */
 	protected ConnectionAnchor getConnectionAnchor() {
 		if (anchor == null) {
 			anchor = new ChopboxAnchor(getFigure());
@@ -115,54 +120,45 @@
 		return anchor;
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getModelSourceConnections()
 	 */
 	protected List getModelSourceConnections() {
 		return getModelCast().getSourceConnections();
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getModelTargetConnections()
 	 */
 	protected List getModelTargetConnections() {
 		return getModelCast().getTargetConnections();
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
 	 */
 	public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection) {
 		return getConnectionAnchor();
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request)
 	 */
 	public ConnectionAnchor getSourceConnectionAnchor(Request request) {
 		return getConnectionAnchor();
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
 	 */
 	public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection) {
 		return getConnectionAnchor();
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
 	 * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.Request)
 	 */
 	public ConnectionAnchor getTargetConnectionAnchor(Request request) {
 		return getConnectionAnchor();
-	}
-	
-	protected void createEditPolicies() {
 	}
 }

Added: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPartFactory.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPartFactory.java?rev=421091&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPartFactory.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementEditPartFactory.java Tue Jul 11 19:53:14 2006
@@ -0,0 +1,62 @@
+/*
+ *  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.parts;
+
+import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
+import org.apache.cayenne.ropbrowser.model.Connection;
+import org.apache.cayenne.ropbrowser.model.ElementDiagram;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPartFactory;
+
+/**
+ * Factory for edit parts used in the editor.
+ * 
+ * @author Marcel Gordon
+ */
+public class ElementEditPartFactory implements EditPartFactory {
+
+	/**
+	 * @see org.eclipse.gef.EditPartFactory#createEditPart(org.eclipse.gef.EditPart, java.lang.Object)
+	 */
+	public EditPart createEditPart(EditPart context, Object modelElement) {
+		// get EditPart for model element
+		EditPart part = getPartForElement(modelElement);
+		// store model element in EditPart
+		part.setModel(modelElement);
+		return part;
+	}
+
+	/**
+	 * Maps an object to an EditPart. 
+	 * @throws RuntimeException if no match was found (programming error)
+	 */
+	private EditPart getPartForElement(Object object) {
+		if (object instanceof ElementDiagram) {
+			return new ElementDiagramEditPart();
+		}
+		if (object instanceof CollectionModelElement) {
+			return new CollectionEditPart();
+		}
+		if (object instanceof Connection) {
+			return new ConnectionEditPart();
+		}
+		throw new RuntimeException(
+				"Can't create part for model element: "
+				+ ((object != null) ? object.getClass().getName() : "null"));
+	}
+
+}
\ No newline at end of file

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionDirectEditPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionDirectEditPolicy.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionDirectEditPolicy.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionDirectEditPolicy.java Tue Jul 11 19:53:14 2006
@@ -1,8 +1,18 @@
 /*
- * Created on 15/06/2006
+ *  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.
  *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
  */
 package org.apache.cayenne.ropbrowser.policies;
 
@@ -10,6 +20,11 @@
 import org.eclipse.gef.editpolicies.DirectEditPolicy;
 import org.eclipse.gef.requests.DirectEditRequest;
 
+/**
+ * An empty {@link org.eclipse.gef.editpolicies.DirectEditPolicy}.
+ * 
+ * @author Marecl Gordon
+ */
 public class CollectionDirectEditPolicy extends DirectEditPolicy {
 
 	@Override

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionSelectionPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionSelectionPolicy.java?rev=421091&r1=421090&r2=421091&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionSelectionPolicy.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/CollectionSelectionPolicy.java Tue Jul 11 19:53:14 2006
@@ -1,13 +1,28 @@
 /*
- * Created on 15/06/2006
+ *  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.
  *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
  */
 package org.apache.cayenne.ropbrowser.policies;
 
 import org.eclipse.gef.editpolicies.SelectionEditPolicy;
 
+/**
+ * An empty {@link org.eclipse.gef.editpolicies.SelectionEditPolicy}.
+ * 
+ * @author Marcel Gordon
+ */
 public class CollectionSelectionPolicy extends SelectionEditPolicy {
 	
 	protected void showSelection() {

Added: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementEditPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementEditPolicy.java?rev=421091&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementEditPolicy.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementEditPolicy.java Tue Jul 11 19:53:14 2006
@@ -0,0 +1,51 @@
+/*
+ *  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.policies;
+
+import org.apache.cayenne.ropbrowser.commands.ElementDeleteCommand;
+import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
+import org.apache.cayenne.ropbrowser.model.ElementDiagram;
+import org.apache.cayenne.ropbrowser.model.ModelElement;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.ComponentEditPolicy;
+import org.eclipse.gef.requests.GroupRequest;
+
+/**
+ * A {@link org.eclipse.gef.editpolicies.ComponentEditPolicy} which provides a delete command
+ * 
+ * @author Marcel Gordon
+ */
+public class ElementEditPolicy extends ComponentEditPolicy {
+
+	/**
+	 * @see org.eclipse.gef.editpolicies.ComponentEditPolicy#createDeleteCommand(org.eclipse.gef.requests.GroupRequest)
+	 */
+	protected Command createDeleteCommand(GroupRequest deleteRequest) {
+		Object parent = getHost().getParent().getModel();
+		Object child = getHost().getModel();
+		if (parent instanceof ElementDiagram && child instanceof ModelElement) {
+			if (child instanceof CollectionModelElement) {
+				// don't allow deletion of the original ModelElement
+				if (((CollectionModelElement) child).getCreatedFrom() == null) {
+					return null;
+				}
+			}
+			return new ElementDeleteCommand((ElementDiagram) parent, (ModelElement) child);
+		}
+		return super.createDeleteCommand(deleteRequest);
+	}
+}
\ No newline at end of file

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=421091&r1=421090&r2=421091&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 Tue Jul 11 19:53:14 2006
@@ -1,22 +1,27 @@
 /*
- * Created on 6/06/2006
+ *  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.
  *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
  */
 package org.apache.cayenne.ropbrowser.views;
 
-import java.util.Date;
-import java.util.Hashtable;
 import java.util.Iterator;
-import java.util.List;
 
 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.model.Artist;
-import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.events.SelectionEvent;
@@ -30,42 +35,48 @@
 import org.eclipse.ui.forms.widgets.Form;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.part.ViewPart;
-import org.eclipse.ui.views.properties.IPropertyDescriptor;
-import org.objectstyle.cayenne.CayenneContext;
-import org.objectstyle.cayenne.DataObject;
 import org.objectstyle.cayenne.ObjectContext;
-import org.objectstyle.cayenne.map.Attribute;
+import org.objectstyle.cayenne.event.CayenneEvent;
 import org.objectstyle.cayenne.map.EntityResolver;
-import org.objectstyle.cayenne.map.ObjAttribute;
-import org.objectstyle.cayenne.map.ObjEntity;
-import org.objectstyle.cayenne.property.ClassDescriptor;
-import org.objectstyle.cayenne.property.Property;
-import org.objectstyle.cayenne.query.NamedQuery;
 import org.objectstyle.cayenne.query.Query;
 
+/**
+ * An Eclipse view for connecting to the Cayenne web service and launching queries.
+ * 
+ * @author Marcel Gordon
+ */
 public class ControlPanelView extends ViewPart implements SelectionListener {
 
+	/** ID of the view */
 	public static final String ID = "org.apache.cayenne.ropbrowser.views.ControlPanelView";
 
+	/** name of the preference used to store the server last connected to */
 	private static final String PREF_SERVER = "CONTROL_PANEL_SERVER";
 
+	/** toolkit for creating of form elements */
 	private FormToolkit	toolkit;
 	private Form form;
 	// TODO change to a drop down to take advantage of maintained connections
 	// reselecting should switch back
+	/** server to connect to */
 	private Text serverText;
+	/** button initiates connection */
 	private Button connectButton;
+	/** dropdown for selecting a query to run */
 	private CCombo queryCombo;
+	/** button to launch query editor */
 	private Button runQueryButton;
 
+	/** manages connections to the server */
 	private ConnectionManager connectionManager;
-	private ObjectContext currentContext;
 	
 	public ControlPanelView() {
 		connectionManager = ConnectionManager.getInstance();
 	}
 	
-	@Override
+	/**
+	 * Create the controls for the view. Called internally.
+	 */
 	public void createPartControl(Composite parent) {
 		toolkit = new FormToolkit(parent.getDisplay());
 		form = toolkit.createForm(parent);
@@ -96,22 +107,25 @@
 		runQueryButton.addSelectionListener(this);
 		
 		toolkit.paintBordersFor(form.getBody());
-		form.getBody().pack();
+		form.getBody().pack();		
 	}
-
+	
 	@Override
 	public void setFocus() {
 		form.setFocus();
 	}
 
+	/**
+	 * Handle connections to the server and running of queries.
+	 */
 	public void widgetSelected(SelectionEvent e) {
 		if (e.getSource() == connectButton) {
 			ROPBrowserPlugin.getDefault().getPluginPreferences().setValue(PREF_SERVER, serverText.getText());
 			
-			this.currentContext = connectionManager.connect(serverText.getText());
+			ObjectContext currentContext = connectionManager.getObjectContext(serverText.getText());
 					
 			// get all the queries for this connection
-			EntityResolver entityResolver = this.currentContext.getEntityResolver();
+			EntityResolver entityResolver = currentContext.getEntityResolver();
 			Iterator i = entityResolver.getQueries().iterator();
 			while (i.hasNext()) {
 				queryCombo.add(((Query)i.next()).getName());
@@ -119,76 +133,11 @@
 		}
 		else if (e.getSource() == runQueryButton) {
 			try {
-				getViewSite().getPage().openEditor(new ObjectEditorInput(this.currentContext, queryCombo.getText()), ObjectEditor.ID, true);
+				getViewSite().getPage().openEditor(new ObjectEditorInput(this.connectionManager.getObjectContext(serverText.getText()), queryCombo.getText()), ObjectEditor.ID, true);
 			} catch (PartInitException ex) {
 				System.out.println(ex.getMessage());
 			}
 		}
-			/*
-			NamedQuery select = new NamedQuery("ArtistQuery");
-			List matches = context.performQuery(select);
-			
-			CollectionModelElement coll = new CollectionModelElement();
-			coll.setObjects(matches);
-						
-			IPropertyDescriptor [] descs = coll.getPropertyDescriptors();
-			System.out.println("--------Artists-------");
-			System.out.println("Descs: " + descs.length);
-			for (int j = 0; j < 3; j++) {
-				System.out.println("--------");
-				for (IPropertyDescriptor desc : descs) {
-					System.out.println(desc.getDisplayName());
-					System.out.println(coll.getPropertyValue(desc.getId()));
-				}
-				coll.next();
-			}
-			
-			coll.setObjects(context.performQuery(new NamedQuery("GalleryQuery")));
-						
-			descs = coll.getPropertyDescriptors();
-			System.out.println("--------Galleries-------");
-			System.out.println("Descs: " + descs.length);
-			for (int j = 0; j < 3; j++) {
-				System.out.println("--------");
-				for (IPropertyDescriptor desc : descs) {
-					System.out.println(desc.getDisplayName());
-					System.out.println(coll.getPropertyValue(desc.getId()));
-				}
-				coll.next();
-			}
-			
-			*/
-			//artist.setPropertyValue(descs[0].getId(), "false");
-			//context.commitChanges();
-			
-			// TESTING SECTION
-			/*
-			
-			ObjEntity obj = entityResolver.getObjEntity("Artist");
-			Iterator k = obj.getAttributes().iterator();
-			
-			ClassDescriptor test = entityResolver.getClassDescriptor("Artist");
-			
-			System.out.println("Attributes");
-			while (k.hasNext()) {
-				ObjAttribute a = (ObjAttribute) k.next();
-				System.out.println(a.getName());
-				System.out.println(a.getType());
-				Property p = test.getProperty(a.getName());
-				System.out.println(p.getName());
-				System.out.println(p.readProperty(artist));
-			}
-			
-			
-			i = test.getProperties();
-			
-			System.out.println("Properties");
-			while (i.hasNext()) {
-				Property p = (Property) i.next();
-				System.out.println(p.getName());
-				System.out.println(p.readProperty(artist));
-			}
-			*/
 	}
 
 	public void widgetDefaultSelected(SelectionEvent e) {