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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] RequestConstants#REQ_OPEN} and [EMAIL 
PROTECTED] 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 [EMAIL PROTECTED] 
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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] 
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 [EMAIL PROTECTED] 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) {


Reply via email to