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>Preferences>Java>Code Generation>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>Preferences>Java>Code Generation>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>Preferences>Java>Code Generation>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>Preferences>Java>Code Generation>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) {
