You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/07/23 00:44:41 UTC
svn commit: r424641 [2/2] - in
/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser: ./ META-INF/ lib/
lib/server/ src/org/apache/cayenne/ropbrowser/
src/org/apache/cayenne/ropbrowser/actions/
src/org/apache/cayenne/ropbrowser/commands/ src/org/apache/...
Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java?rev=424641&r1=424640&r2=424641&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java Sat Jul 22 15:44:39 2006
@@ -22,8 +22,6 @@
import java.util.Iterator;
import java.util.List;
-import org.eclipse.ui.views.properties.IPropertyDescriptor;
-import org.eclipse.ui.views.properties.IPropertySource;
import org.objectstyle.cayenne.ObjectContext;
import org.objectstyle.cayenne.query.NamedQuery;
@@ -35,22 +33,23 @@
*/
public class ElementDiagram {
- // TODO consider removing update connections
- // TODO fix delete
// TODO label connections (not just tooltip)
/** property indicating a node (element) has been added */
public static final String PROP_NODE_ADDED = "ObjectDiagram.NodeAdded";
/** property indicating that a node (element) has been removed */
public static final String PROP_NODE_REMOVED = "ObjectDiagram.NodeRemoved";
+ public static final String PROP_LAYOUT = "ObjectDiagram.LayoutChanged";
/** the ModelElements contained in the diagram */
- protected List<ModelElement> objects = new ArrayList<ModelElement>();
+ protected List<ModelElement> elements = new ArrayList<ModelElement>();
/** the Cayenne context in which the objects represented by the ModelElements exist */
protected ObjectContext context;
/** Delegate used to implemenent property-change-support. */
private transient PropertyChangeSupport pcsDelegate = new PropertyChangeSupport(this);
+ private boolean autoLayout;
+
/**
* @param context the Cayenne context in which the objects in the diagram are found
* @param query the name of the query contained in the Cayenne data map from which
@@ -61,49 +60,31 @@
NamedQuery select = new NamedQuery(query);
Object matches = this.context.performQuery(select);
- ModelElement rootElement = ModelElementFactory.createModelElement(matches, null);
+ CollectionModelElement rootElement = new CollectionModelElement(null, "ROOT");
+ rootElement.setObject(matches);
+ rootElement.setRoot(true);
rootElement.setDiagram(this);
addElement(rootElement);
+
+ autoLayout = true;
}
/**
* Add a ModelElement to the diagram
* @param element the element to add
* @return the element or its equivalent if it already exists
- */
- public ModelElement addElement(ModelElement element) {
+ */
+ public boolean addElement(ModelElement element) {
if (element != null) {
- if (!objects.contains(element)) {
- objects.add(element);
- if (element instanceof CollectionModelElement) {
- for (ModelElement child : objects) {
- if (child instanceof SingleModelElement) {
- if (((CollectionModelElement) element).contains(child.getCurrent())) {
- MemberConnection connection = new MemberConnection(element, child);
- connection.connect();
- }
- }
- }
- }
- else if (element instanceof SingleModelElement) {
- for (ModelElement child : objects) {
- if (child instanceof CollectionModelElement) {
- if (((CollectionModelElement) child).contains(element.getCurrent())
- && !((SingleModelElement) element).memberOf(child)) {
- MemberConnection connection = new MemberConnection(child, element);
- connection.connect();
- }
- }
- }
- }
+ if (!elements.contains(element)) {
+ elements.add(element);
firePropertyChange(PROP_NODE_ADDED, null, element);
- }
- else {
- element = objects.get(objects.indexOf(element));
+
+ return true;
}
}
- return element;
+ return false;
}
/**
@@ -111,14 +92,9 @@
* @param element the element to remove
* @return true if removed; false otherwise
*/
- public boolean removeChild(ModelElement element) {
+ public boolean removeElement(ModelElement element) {
if (element != null) {
- Iterator i = element.getSourceConnections().iterator();
- while (i.hasNext()) {
- Connection conn = (Connection) i.next();
- removeChild(conn.getTarget());
- }
- objects.remove(element);
+ elements.remove(element);
firePropertyChange(PROP_NODE_REMOVED, null, element);
return true;
}
@@ -126,8 +102,8 @@
}
/** Return a List of Objects in this diagram. The returned List should not be modified. */
- public List getObjects() {
- return objects;
+ public List<ModelElement> getElements() {
+ return elements;
}
/**
@@ -162,5 +138,58 @@
if (pcsDelegate.hasListeners(property)) {
pcsDelegate.firePropertyChange(property, oldValue, newValue);
}
+ }
+
+ public void removeObject(AbstractObject current) {
+ for (ModelElement element : elements) {
+ if (element instanceof CollectionModelElement) {
+ ((CollectionModelElement) element).removeObject(current);
+ }
+ }
+ }
+
+ public void toggleAutoLayout() {
+ autoLayout = !autoLayout;
+ firePropertyChange(PROP_LAYOUT, !autoLayout, autoLayout);
+ }
+
+ public boolean isAutoLayoutDesired() {
+ return autoLayout;
+ }
+
+ public ModelElement getElement(ModelElement newElement) {
+ for (ModelElement element : elements) {
+ if (element.equals(newElement)) {
+ return element;
+ }
+ }
+ return null;
+ }
+
+ public void createMemberConnections(ModelElement element) {
+ if (element instanceof CollectionModelElement) {
+ for (ModelElement child : elements) {
+ if (child instanceof SingleModelElement) {
+ if (((CollectionModelElement) element).contains(child.getCurrentObject())) {
+ MemberConnection connection = new MemberConnection(element, child);
+ connection.connect();
+ }
+ }
+ }
+ }
+ else if (element instanceof SingleModelElement) {
+ for (ModelElement child : elements) {
+ if (child instanceof CollectionModelElement) {
+ if (((CollectionModelElement) child).contains(element.getCurrentObject())) {
+ MemberConnection connection = new MemberConnection(child, element);
+ connection.connect();
+ }
+ }
+ }
+ }
+ }
+
+ public ObjectContext getObjectContext() {
+ return context;
}
}
Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ModelElement.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ModelElement.java?rev=424641&r1=424640&r2=424641&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ModelElement.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ModelElement.java Sat Jul 22 15:44:39 2006
@@ -21,6 +21,8 @@
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.draw2d.ActionListener;
+import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
@@ -33,52 +35,47 @@
*/
public abstract class ModelElement implements IPropertySource {
- /** Property indicating a transient visual property has changed */
- public static final String PROP_TRANSIENT = "ModelElement.transient";
/** Property indicating that a source connection has been added or removed */
public static final String PROP_SOURCE_CONN = "ModelElement.sourceConnection";
+
/** Property indicating that a target connection has been added or removed */
public static final String PROP_TARGET_CONN = "ModelElement.targetConnection";
+
+ /** Property indicating a transient visual property has changed */
+ public static final String PROP_BOUNDS = "ModelElement.bounds";
- // TODO remove this - ensure uniquing
/**
- * The ModelElement which initiated the creation of this element. Used to
- * prevent duplication of elements.
+ * Property for changes to the records being displayed by this element.
*/
- protected ModelElement createdFrom;
- private ElementDiagram diagram;
-
+ public static final String PROP_RECORDS = "ModelElement.Records";
- protected int x = 0;
- protected int y = 0;
- protected int height;
- protected int width;
+ protected ElementDiagram diagram;
- protected List<Connection> sourceConnections = new ArrayList<Connection>();
- protected List<Connection> targetConnections = new ArrayList<Connection>();
+ protected String name;
/** Delegate used to implemenent property-change-support. */
private transient PropertyChangeSupport pcsDelegate = new PropertyChangeSupport(this);
- public ModelElement(ModelElement createdFrom) {
- this.createdFrom = createdFrom;
- if (createdFrom != null) {
- this.diagram = createdFrom.getDiagram();
- }
+ protected List<Connection> sourceConnections = new ArrayList<Connection>();
+ protected List<Connection> targetConnections = new ArrayList<Connection>();
+
+ protected boolean root = false;
+
+ private boolean alreadyPolled = false;
+
+ private Rectangle bounds;
+
+ public ModelElement(ElementDiagram diagram) {
+ this.diagram = diagram;
}
- /**
- * @return copy of the List of Connections originating at the ModelElement.
- */
- public List getSourceConnections() {
- return new ArrayList<Connection>(sourceConnections);
+ public ModelElement(ElementDiagram diagram, String name) {
+ this.diagram = diagram;
+ this.name = name;
}
- /**
- * @return copy of the List of Connections terminating at the ModelElement.
- */
- public List getTargetConnections() {
- return new ArrayList<Connection>(targetConnections);
+ public void setRoot(boolean root) {
+ this.root = root;
}
/**
@@ -103,22 +100,6 @@
}
}
}
-
- public int getX() {
- return x;
- }
-
- public int getY() {
- return y;
- }
-
- public int getWidth() {
- return width;
- }
-
- public int getHeight() {
- return height;
- }
/**
* Attach a non-null PropertyChangeListener to this object.
@@ -131,7 +112,7 @@
}
pcsDelegate.addPropertyChangeListener(l);
}
-
+
/**
* Report a property change to registered listeners (for example edit parts).
* @param property the programmatic name of the property that changed
@@ -143,6 +124,10 @@
pcsDelegate.firePropertyChange(property, oldValue, newValue);
}
}
+
+ public ElementDiagram getDiagram() {
+ return diagram;
+ }
/**
* Returns a value for this property source that can be edited in a property sheet.
@@ -152,6 +137,12 @@
return this;
}
+ public String getName() {
+ return name;
+ }
+
+ public abstract AbstractObject getCurrentObject();
+
/**
* Property descriptors for editing via the Eclipse Properties view.
* <p>Default implementation returns an array of size 0. Extending classes
@@ -160,50 +151,32 @@
public IPropertyDescriptor[] getPropertyDescriptors() {
return new IPropertyDescriptor[0];
}
-
+
/**
* @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
*/
public abstract Object getPropertyValue(Object id);
- /**
- * @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
+ /**
+ * @return copy of the List of Connections originating at the ModelElement.
*/
- public abstract boolean isPropertySet(Object id);
+ public List<Connection> getSourceConnections() {
+ return new ArrayList<Connection>(sourceConnections);
+ }
/**
- * Remove a PropertyChangeListener from this component.
- * @param l a PropertyChangeListener instance
+ * @return copy of the List of Connections terminating at the ModelElement.
*/
- public synchronized void removePropertyChangeListener(PropertyChangeListener l) {
- if (l != null) {
- pcsDelegate.removePropertyChangeListener(l);
- }
+ public List<Connection> getTargetConnections() {
+ return new ArrayList<Connection>(targetConnections);
}
/**
- * @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
+ * @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
*/
- public abstract void resetPropertyValue(Object id);
+ public abstract boolean isPropertySet(Object id);
/**
- * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object, java.lang.Object)
- */
- public abstract void setPropertyValue(Object id, Object value);
-
- public void setSize(int width, int height) {
- this.width = width;
- this.height = height;
- firePropertyChange(PROP_TRANSIENT, null, null);
- }
-
- public void setLocation(int x, int y) {
- this.x = x;
- this.y = y;
- firePropertyChange(PROP_TRANSIENT, null, null);
- }
-
- /**
* Remove a connection from the ModelElement. The connection
* will be removed from the source or target list depending
* upon its role in the connection.
@@ -221,29 +194,79 @@
}
}
- public abstract AbstractObject getCurrent();
-
- public String getName() {
- if (getCurrent() != null) {
- return getCurrent().getName();
+ /**
+ * Remove a PropertyChangeListener from this component.
+ * @param l a PropertyChangeListener instance
+ */
+ public synchronized void removePropertyChangeListener(PropertyChangeListener l) {
+ if (l != null) {
+ pcsDelegate.removePropertyChangeListener(l);
}
- return null;
- }
-
- public ElementDiagram getDiagram() {
- return diagram;
}
+ /**
+ * @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
+ */
+ public abstract void resetPropertyValue(Object id);
+
public void setDiagram(ElementDiagram diagram) {
this.diagram = diagram;
}
+ public abstract void setObject(Object object);
+
/**
- * @return the ModelElement which initiated the creation of this element.
+ * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object, java.lang.Object)
*/
- public ModelElement getCreatedFrom() {
- return createdFrom;
+ public abstract void setPropertyValue(Object id, Object value);
+
+ public boolean isConnectedToRoot() {
+ if (isRoot()) {
+ return true;
+ }
+ if (!alreadyPolled) {
+ alreadyPolled = true;
+ for (Connection conn : getTargetConnections()) {
+ if (conn.getSource().isConnectedToRoot()) {
+ alreadyPolled = false;
+ return true;
+ }
+ }
+ }
+
+ alreadyPolled = false;
+ return false;
}
- public abstract void setData(Object object);
+ public boolean isRoot() {
+ return this.root;
+ }
+
+ public void deleteCurrentObject() {
+ getCurrentObject().getObjectContext().deleteObject(getCurrentObject());
+ firePropertyChange(PROP_RECORDS, null, getCurrentObject());
+ }
+
+ public abstract void addObject(AbstractObject object);
+
+ public void modifyBounds(Rectangle newBounds) {
+ Rectangle oldBounds = this.bounds;
+ if (!newBounds.equals(oldBounds))
+ {
+ this.bounds = newBounds;
+ firePropertyChange(PROP_BOUNDS, oldBounds, this.bounds);
+ }
+ }
+
+ public void setBounds(Rectangle newBounds) {
+ this.bounds = newBounds;
+ }
+
+ /**
+ * @return Returns the bounds.
+ */
+ public Rectangle getBounds()
+ {
+ return bounds;
+ }
}
Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java?rev=424641&r1=424640&r2=424641&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java Sat Jul 22 15:44:39 2006
@@ -18,17 +18,9 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
-import org.eclipse.ui.views.properties.PropertyDescriptor;
-import org.eclipse.ui.views.properties.TextPropertyDescriptor;
-import org.objectstyle.cayenne.map.EntityResolver;
-import org.objectstyle.cayenne.map.ObjAttribute;
-import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.map.Relationship;
/**
* Class representing a collection of AbstractObjects.
@@ -49,20 +41,8 @@
/**
* @param createdFrom the ModelElement which initiated this element's creation.
*/
- public SingleModelElement(ModelElement createdFrom) {
- super(createdFrom);
- }
-
- /**
- * Gets the name of the CollectionModelElement.
- *
- * @return the name as a String, or null if it cannot be determined.
- */
- public String getName() {
- if (object != null) {
- return object.getName();
- }
- return null;
+ public SingleModelElement(ElementDiagram diagram, String name) {
+ super(diagram, name);
}
/**
@@ -71,15 +51,18 @@
* own property change events when the underlying data is changed.
* @param value may be null, an empty list or a list of AbstractObjects.
*/
- public void setData(Object value) {
+ public void setObject(Object value) {
- if (value == null) {
- throw new IllegalArgumentException();
- }
+ AbstractObject oldObject = this.object;
this.object = (AbstractObject) value;
-
- this.object.addPropertyChangeListener(this);
+
+ if (object != null) {
+ this.object.addPropertyChangeListener(this);
+ name = this.object.getName();
+ }
+
+ firePropertyChange(PROP_RECORDS, oldObject, object);
}
/**
@@ -89,75 +72,56 @@
* CollectionModelElement, or just the latter if the former is null.
*/
public IPropertyDescriptor[] getPropertyDescriptors() {
- return object.getPropertyDescriptors();
- }
-
- /**
- * @return all the {@link org.objectstyle.cayenne.map.Relationship} of the currently displayed AbstractObject,
- * or null if no object is being displayed.
- */
- public Collection getRelationships() {
- return object.getRelationships();
+ if (object != null) {
+ return object.getPropertyDescriptors();
+ }
+ return new IPropertyDescriptor[0];
}
@Override
public Object getPropertyValue(Object id) {
- return object.getPropertyValue(id);
+ if (object != null) {
+ return object.getPropertyValue(id);
+ }
+ return null;
}
@Override
public boolean isPropertySet(Object id) {
- return object.isPropertySet(id);
+ if (object != null) {
+ return object.isPropertySet(id);
+ }
+ return false;
}
@Override
public void resetPropertyValue(Object id) {
- object.resetPropertyValue(id);
+ if (object != null) {
+ object.resetPropertyValue(id);
+ }
}
@Override
public void setPropertyValue(Object id, Object value) {
- object.setPropertyValue(id, value);
+ if (object != null) {
+ object.setPropertyValue(id, value);
+ }
}
/**
* @return the AbstractObject objectly being displayed.
*/
- public AbstractObject getCurrent() {
+ public AbstractObject getCurrentObject() {
return object;
}
/**
- * @return all the {@link org.objectstyle.cayenne.map.Attribute} of the objectly displayed AbstractObject,
- * or null if no object is being displayed.
- */
- public Collection getAttributes() {
- return object.getObjectContext().getEntityResolver().getObjEntity(object.getName()).getAttributes();
- }
-
- /**
- * @return the ModelElement which initiated the creation of this element.
- */
- public ModelElement getCreatedFrom() {
- return createdFrom;
- }
-
- /**
* Listens for property changes in the underlying AbstractObject
* and fires property change notifications of its own.
*/
public void propertyChange(PropertyChangeEvent evt) {
firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue());
}
-
- public boolean memberOf(ModelElement child) {
- for (Connection conn : targetConnections) {
- if (conn instanceof MemberConnection && conn.getSource() == child) {
- return true;
- }
- }
- return false;
- }
/**
* Used to compare two CollectionModelElements to determine if one is
@@ -165,10 +129,32 @@
*/
public boolean equals(Object o) {
if (o instanceof SingleModelElement) {
- if (this.object.equals(((SingleModelElement) o).getCurrent())) {
- return true;
- }
+ return (this.object == ((SingleModelElement) o).getCurrentObject()) &&
+ (this.name.equals(((ModelElement) o).getName()));
}
return false;
+ }
+
+ public ModelElement followRelationship(Relationship relationship) {
+ for (Connection conn : getSourceConnections()) {
+ if (conn instanceof RelationshipConnection) {
+ if (((RelationshipConnection) conn).getRelationship() == relationship) {
+ return conn.getTarget();
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void addObject(AbstractObject object) {
+ for (Connection conn : getTargetConnections()) {
+ if (conn instanceof RelationshipConnection) {
+ RelationshipConnection relConn = (RelationshipConnection) conn;
+ conn.getSource().getCurrentObject().setRelationship(relConn.getRelationship(), getCurrentObject(), object);
+ //object.setRelationship(relConn.getRelationship(), object);
+ }
+ }
+ setObject(object);
}
}
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=424641&r1=424640&r2=424641&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 Sat Jul 22 15:44:39 2006
@@ -18,25 +18,18 @@
import java.beans.PropertyChangeEvent;
+import org.apache.cayenne.ropbrowser.actions.InsertAction;
+import org.apache.cayenne.ropbrowser.commands.ObjectInsertCommand;
import org.apache.cayenne.ropbrowser.figures.CollectionFigure;
import org.apache.cayenne.ropbrowser.figures.ElementFigure;
-import org.apache.cayenne.ropbrowser.figures.AbstractButton;
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.MemberConnection;
import org.apache.cayenne.ropbrowser.model.ModelElement;
-import org.apache.cayenne.ropbrowser.model.RelationshipConnection;
import org.apache.cayenne.ropbrowser.policies.CollectionDirectEditPolicy;
import org.apache.cayenne.ropbrowser.policies.CollectionSelectionPolicy;
-import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Label;
-import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
-import org.eclipse.gef.RequestConstants;
-import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.commands.Command;
/**
* EditPart for the {@link CollectionModelElement} class. Allows
@@ -44,7 +37,7 @@
*
* @author Marcel Gordon
*/
-class CollectionEditPart extends ElementEditPart {
+public class CollectionEditPart extends ElementEditPart {
/**
* Extends super to allow scrolling through records on double-click and
@@ -55,18 +48,15 @@
protected void createEditPolicies() {
super.createEditPolicies();
- installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new CollectionSelectionPolicy());
- installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new CollectionDirectEditPolicy());
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new CollectionSelectionPolicy(getModelCast()));
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new CollectionDirectEditPolicy(getModelCast()));
}
/**
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
*/
- protected IFigure createFigure() {
-
- CollectionModelElement model = getModelCast();
-
- CollectionFigure figure = new CollectionFigure(model);
+ protected IFigure createFigure() {
+ CollectionFigure figure = new CollectionFigure(this);
return figure;
}
@@ -78,10 +68,7 @@
super.propertyChange(evt);
String prop = evt.getPropertyName();
- if (CollectionModelElement.PROP_CURRENT_RECORD.equals(prop)) {
- getModelCast().updateConnectedElements();
- }
- if (!ModelElement.PROP_TRANSIENT.equals(prop) && !ModelElement.PROP_TARGET_CONN.equals(prop) && !ModelElement.PROP_SOURCE_CONN.equals(prop)) {
+ if (!ModelElement.PROP_BOUNDS.equals(prop) && !ModelElement.PROP_TARGET_CONN.equals(prop) && !ModelElement.PROP_SOURCE_CONN.equals(prop)) {
((ElementFigure) getFigure()).refresh();
}
}
@@ -89,25 +76,9 @@
private CollectionModelElement getModelCast() {
return (CollectionModelElement) getModel();
}
-
- /**
- * Handles {@link RequestConstants#REQ_OPEN} and {@link RequestConstants#REQ_DIRECT_EDIT} requests
- * to allow scrolling through records and expansion of relationships.
- *
- * @see org.eclipse.gef.EditPart#performRequest(org.eclipse.gef.Request)
- */
- public void performRequest(Request request)
- {
- // TODO deal with these in terms of commands / policies
- // TODO keybinding
- if (request.getType().equals(RequestConstants.REQ_OPEN)) {
- getModelCast().next();
- getModelCast().updateConnectedElements();
- }
- else if (request.getType().equals(RequestConstants.REQ_DIRECT_EDIT)) {
- if (getModelCast().getCurrent() != null) {
- ((ElementFigure) getFigure()).doButtonAtPoint(((DirectEditRequest) request).getLocation().getCopy(), getModelCast());
- }
- }
+
+ public Command getCommand(Request request) {
+ // handle requests not in policies; pass the rest along
+ return super.getCommand(request);
}
}
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=424641&r1=424640&r2=424641&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 Sat Jul 22 15:44:39 2006
@@ -18,13 +18,13 @@
import org.apache.cayenne.ropbrowser.model.MemberConnection;
import org.apache.cayenne.ropbrowser.model.RelationshipConnection;
+import org.apache.cayenne.ropbrowser.policies.SingleSelectionPolicy;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.PolygonDecoration;
import org.eclipse.draw2d.PolylineConnection;
-import org.eclipse.draw2d.PolylineDecoration;
-import org.eclipse.draw2d.RotatableDecoration;
+import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.editparts.AbstractConnectionEditPart;
/**
Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java?rev=424641&r1=424640&r2=424641&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java Sat Jul 22 15:44:39 2006
@@ -18,17 +18,15 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.util.Iterator;
import java.util.List;
-import org.apache.cayenne.ropbrowser.commands.ElementSetConstraintCommand;
import org.apache.cayenne.ropbrowser.layout.DelegatingLayoutManager;
import org.apache.cayenne.ropbrowser.model.ElementDiagram;
import org.apache.cayenne.ropbrowser.model.ModelElement;
-import org.apache.cayenne.ropbrowser.policies.ElementXYLayoutEditPolicy;
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;
@@ -36,15 +34,9 @@
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;
-// TODO discover why toggling layout modes changes the decorations on the connections
/**
* EditPart for the ElementDiagram class, the root of the model.
@@ -113,7 +105,7 @@
*/
protected List getModelChildren() {
ElementDiagram diagram = (ElementDiagram) this.getModel();
- return diagram.getObjects(); // return a list of objects
+ return diagram.getElements(); // return a list of objects
}
/**
@@ -126,25 +118,92 @@
|| ElementDiagram.PROP_NODE_REMOVED.equals(prop)) {
refreshChildren();
}
+ else if (ElementDiagram.PROP_LAYOUT.equals(prop)) {
+ getFigure().setLayoutManager(delegatingLayoutManager);
+ }
}
-
+
+ public boolean isAutoLayoutDesired() {
+ return ((ElementDiagram) getModel()).isAutoLayoutDesired();
+ }
+
/**
- * Passes on to the delegating layout manager that the layout type has
- * changed. The delegating layout manager will then decide whether to
- * delegate layout to the XY or Graph layout
+ * Updates the table bounds in the model so that the same bounds can be
+ * restored after saving
+ *
+ * @return whether the procedure execute successfully without any omissions.
+ * The latter occurs if any TableFigure has no bounds set for any of
+ * the Table model objects
*/
- protected void handleLayoutChange(PropertyChangeEvent evt)
+ public boolean setTableModelBounds()
{
- Boolean layoutType = (Boolean) evt.getNewValue();
- boolean isManualLayoutDesired = layoutType.booleanValue();
- getFigure().setLayoutManager(delegatingLayoutManager);
- }
- public boolean isLayoutManualDesired() {
- return false;
+ List tableParts = getChildren();
+
+ for (Iterator iter = tableParts.iterator(); iter.hasNext();)
+ {
+ ElementEditPart tablePart = (ElementEditPart) iter.next();
+ Figure tableFigure = (Figure) tablePart.getFigure();
+
+ //if we don't find a node for one of the children then we should
+ // continue
+ if (tableFigure == null)
+ continue;
+
+ Rectangle bounds = tableFigure.getBounds().getCopy();
+ ModelElement table = (ModelElement) tablePart.getModel();
+ table.setBounds(bounds);
+ }
+
+ return true;
+
}
- public boolean isLayoutManualAllowed() {
+ /**
+ * Updates the bounds of the table figure (without invoking any event
+ * handling), and sets layout constraint data
+ *
+ * @return whether the procedure execute successfully without any omissions.
+ * The latter occurs if any Table objects have no bounds set or if
+ * no figure is available for the TablePart
+ */
+ public boolean setTableFigureBounds(boolean updateConstraint)
+ {
+
+ List tableParts = getChildren();
+
+ for (Iterator iter = tableParts.iterator(); iter.hasNext();)
+ {
+ ElementEditPart tablePart = (ElementEditPart) iter.next();
+ ModelElement table = (ModelElement) tablePart.getModel();
+
+ //now check whether we can find an entry in the tableToNodesMap
+ Rectangle bounds = table.getBounds();
+ if (bounds == null)
+ {
+ //TODO handle this better
+ return false;
+ }
+ else
+ {
+ Figure tableFigure = (Figure) tablePart.getFigure();
+ if (tableFigure == null)
+ {
+ return false;
+ }
+ else
+ {
+ if (updateConstraint)
+ {
+ //pass the constraint information to the xy layout
+ //setting the width and height so that the preferred size will be applied
+ delegatingLayoutManager.setXYLayoutConstraint(tableFigure, new Rectangle(bounds.x, bounds.y,
+ -1, -1));
+ }
+ }
+ }
+ }
return true;
+
}
}
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=424641&r1=424640&r2=424641&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 Sat Jul 22 15:44:39 2006
@@ -20,16 +20,26 @@
import java.beans.PropertyChangeListener;
import java.util.List;
+import org.apache.cayenne.ropbrowser.actions.DeleteAction;
+import org.apache.cayenne.ropbrowser.actions.HideAction;
+import org.apache.cayenne.ropbrowser.actions.InsertAction;
+import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
+import org.apache.cayenne.ropbrowser.commands.DeleteObjectCommand;
+import org.apache.cayenne.ropbrowser.commands.ObjectInsertCommand;
import org.apache.cayenne.ropbrowser.model.ModelElement;
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.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.commands.Command;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
/**
@@ -50,7 +60,7 @@
public void activate() {
if (!isActive()) {
super.activate();
- ((ModelElement) getModel()).addPropertyChangeListener(this);
+ getModelCast().addPropertyChangeListener(this);
}
}
@@ -60,7 +70,7 @@
public void deactivate() {
if (isActive()) {
super.deactivate();
- ((ModelElement) getModel()).removePropertyChangeListener(this);
+ getModelCast().removePropertyChangeListener(this);
}
}
@@ -78,8 +88,11 @@
public void propertyChange(PropertyChangeEvent evt) {
String prop = evt.getPropertyName();
- if (ModelElement.PROP_TRANSIENT.equals(prop)) {
- refreshVisuals();
+ if (ModelElement.PROP_BOUNDS.equals(prop)) {
+ Figure tableFigure = (Figure) getFigure();
+ Rectangle constraint = (Rectangle) evt.getNewValue();
+ ElementDiagramEditPart parent = (ElementDiagramEditPart) getParent();
+ parent.setLayoutConstraint(this, tableFigure, constraint);
}
else if (ModelElement.PROP_SOURCE_CONN.equals(prop)) {
refreshSourceConnections();
@@ -102,12 +115,11 @@
* should extend as this implementation handles basic operations such as resize and move.
*/
protected void refreshVisuals() {
- ModelElement model = getModelCast();
- if (model.getWidth() == 0 && model.getHeight() == 0) {
- model.setSize(getFigure().getPreferredSize().width, getFigure().getPreferredSize().height);
- }
- Rectangle bounds = new Rectangle(model.getX(), model.getY(), model.getWidth(), model.getHeight());
- ((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), bounds);
+ Figure tableFigure = (Figure) getFigure();
+ Point location = tableFigure.getLocation();
+ ElementDiagramEditPart parent = (ElementDiagramEditPart) getParent();
+ Rectangle constraint = new Rectangle(location.x, location.y, -1, -1);
+ parent.setLayoutConstraint(this, tableFigure, constraint);
}
/**
@@ -160,5 +172,30 @@
*/
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
return getConnectionAnchor();
+ }
+
+ /**
+ * Handles {@link RequestConstants#REQ_OPEN} and {@link RequestConstants#REQ_DIRECT_EDIT} requests
+ * to allow scrolling through records and expansion of relationships.
+ *
+ * @see org.eclipse.gef.EditPart#performRequest(org.eclipse.gef.Request)
+ */
+ public void performRequest(Request request)
+ {
+ getViewer().getEditDomain().getCommandStack().execute(getCommand(request));
+ }
+
+ public Command getCommand(Request request) {
+ if (request.getType().equals(HideAction.HIDE_REQUEST)) {
+ return new HideElementCommand(this.getModelCast());
+ }
+ if (request.getType().equals(InsertAction.INSERT_REQUEST)) {
+ return new ObjectInsertCommand(this.getModelCast());
+ }
+ return super.getCommand(request);
+ }
+
+ public boolean isRoot() {
+ return getModelCast().isRoot();
}
}
Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/SingleEditPart.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/SingleEditPart.java?rev=424641&r1=424640&r2=424641&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/SingleEditPart.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/SingleEditPart.java Sat Jul 22 15:44:39 2006
@@ -18,26 +18,29 @@
import java.beans.PropertyChangeEvent;
+import org.apache.cayenne.ropbrowser.actions.DeleteAction;
+import org.apache.cayenne.ropbrowser.commands.ContractRelationshipCommand;
+import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
+import org.apache.cayenne.ropbrowser.commands.ExpandRelationshipCommand;
+import org.apache.cayenne.ropbrowser.commands.DeleteObjectCommand;
import org.apache.cayenne.ropbrowser.figures.ElementFigure;
-import org.apache.cayenne.ropbrowser.figures.AbstractButton;
import org.apache.cayenne.ropbrowser.figures.SingleFigure;
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.MemberConnection;
import org.apache.cayenne.ropbrowser.model.ModelElement;
import org.apache.cayenne.ropbrowser.model.RelationshipConnection;
import org.apache.cayenne.ropbrowser.model.SingleModelElement;
-import org.apache.cayenne.ropbrowser.policies.CollectionDirectEditPolicy;
-import org.apache.cayenne.ropbrowser.policies.CollectionSelectionPolicy;
-import org.eclipse.draw2d.Figure;
+import org.apache.cayenne.ropbrowser.policies.SingleDirectEditPolicy;
+import org.apache.cayenne.ropbrowser.policies.SingleSelectionPolicy;
+import org.eclipse.draw2d.ActionEvent;
+import org.eclipse.draw2d.ActionListener;
+import org.eclipse.draw2d.Button;
+import org.eclipse.draw2d.ButtonModel;
import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Label;
-import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
-import org.eclipse.gef.RequestConstants;
-import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.commands.Command;
+import org.objectstyle.cayenne.map.Relationship;
/**
* EditPart for the {@link CollectionModelElement} class. Allows
@@ -45,7 +48,7 @@
*
* @author Marcel Gordon
*/
-class SingleEditPart extends ElementEditPart {
+public class SingleEditPart extends ElementEditPart implements ActionListener {
/**
* Extends super to allow scrolling through records on double-click and
@@ -56,8 +59,8 @@
protected void createEditPolicies() {
super.createEditPolicies();
- installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new CollectionSelectionPolicy());
- installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new CollectionDirectEditPolicy());
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new SingleSelectionPolicy());
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new SingleDirectEditPolicy());
}
/**
@@ -65,9 +68,7 @@
*/
protected IFigure createFigure() {
- SingleModelElement model = getModelCast();
-
- SingleFigure figure = new SingleFigure(model);
+ SingleFigure figure = new SingleFigure(this);
return figure;
}
@@ -80,7 +81,7 @@
String prop = evt.getPropertyName();
- if (!ModelElement.PROP_TRANSIENT.equals(prop) && !ModelElement.PROP_TARGET_CONN.equals(prop) && !ModelElement.PROP_SOURCE_CONN.equals(prop)) {
+ if (!ModelElement.PROP_BOUNDS.equals(prop) && !ModelElement.PROP_TARGET_CONN.equals(prop)) {
((ElementFigure) getFigure()).refresh();
}
}
@@ -89,20 +90,42 @@
return (SingleModelElement) getModel();
}
- /**
- * Handles {@link RequestConstants#REQ_OPEN} and {@link RequestConstants#REQ_DIRECT_EDIT} requests
- * to allow scrolling through records and expansion of relationships.
- *
- * @see org.eclipse.gef.EditPart#performRequest(org.eclipse.gef.Request)
- */
- public void performRequest(Request request)
- {
- // TODO deal with these in terms of commands / policies
- // TODO keybinding
- if (request.getType().equals(RequestConstants.REQ_DIRECT_EDIT)) {
- if (getModelCast().getCurrent() != null) {
- ((ElementFigure) getFigure()).doButtonAtPoint(((DirectEditRequest) request).getLocation().getCopy(), getModelCast());
+ public Command getCommand(Request request) {
+ if (request.getType().equals(DeleteAction.DELETE_REQUEST)) {
+ return new DeleteObjectCommand(this.getModelCast());
+ }
+ return super.getCommand(request);
+ }
+
+ public void actionPerformed(ActionEvent event) {
+ ButtonModel buttonModel = ((Button) event.getSource()).getModel();
+ if (buttonModel.isSelected()) {
+ getViewer().getEditDomain().getCommandStack().execute(new ExpandRelationshipCommand(getModelCast(), (Relationship) buttonModel.getUserData()));
+ }
+ else {
+ getViewer().getEditDomain().getCommandStack().execute(new ContractRelationshipCommand(getRelationshipConnection((Relationship) buttonModel.getUserData())));
+ }
+ }
+
+ public boolean isRelationshipExpanded(Relationship relationship) {
+ for (Connection conn : getModelCast().getSourceConnections()) {
+ if (conn instanceof RelationshipConnection) {
+ if (((RelationshipConnection) conn).getRelationship() == relationship) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ protected RelationshipConnection getRelationshipConnection(Relationship relationship) {
+ for (Connection conn : getModelCast().getSourceConnections()) {
+ if (conn instanceof RelationshipConnection) {
+ if (((RelationshipConnection) conn).getRelationship() == relationship) {
+ return (RelationshipConnection) conn;
+ }
}
}
+ return null;
}
}
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=424641&r1=424640&r2=424641&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 Sat Jul 22 15:44:39 2006
@@ -16,6 +16,8 @@
*/
package org.apache.cayenne.ropbrowser.policies;
+import org.apache.cayenne.ropbrowser.commands.PopOutCommand;
+import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.DirectEditPolicy;
import org.eclipse.gef.requests.DirectEditRequest;
@@ -27,9 +29,15 @@
*/
public class CollectionDirectEditPolicy extends DirectEditPolicy {
+ protected CollectionModelElement element;
+
+ public CollectionDirectEditPolicy(CollectionModelElement element) {
+ this.element = element;
+ }
+
@Override
protected Command getDirectEditCommand(DirectEditRequest request) {
- return null;
+ return new PopOutCommand(element);
}
@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=424641&r1=424640&r2=424641&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 Sat Jul 22 15:44:39 2006
@@ -16,11 +16,12 @@
*/
package org.apache.cayenne.ropbrowser.policies;
-import org.eclipse.gef.EditPart;
+import org.apache.cayenne.ropbrowser.commands.NextObjectCommand;
+import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
+import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.SelectionEditPolicy;
-import org.eclipse.gef.requests.SelectionRequest;
/**
* An empty {@link org.eclipse.gef.editpolicies.SelectionEditPolicy}.
@@ -29,14 +30,22 @@
*/
public class CollectionSelectionPolicy extends SelectionEditPolicy {
+ protected CollectionModelElement element;
+
+ public CollectionSelectionPolicy(CollectionModelElement element) {
+ this.element = element;
+ }
+
protected void showSelection() {
}
protected void hideSelection() {
}
- // TODO fix exception on drag
- public EditPart getTargetEditPart(Request request) {
- return null;
+ public Command getCommand(Request request) {
+ if (request.getType().equals(RequestConstants.REQ_OPEN)) {
+ return new NextObjectCommand(element);
+ }
+ return super.getCommand(request);
}
}
Modified: 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=424641&r1=424640&r2=424641&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementEditPolicy.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementEditPolicy.java Sat Jul 22 15:44:39 2006
@@ -16,7 +16,7 @@
*/
package org.apache.cayenne.ropbrowser.policies;
-import org.apache.cayenne.ropbrowser.commands.ElementDeleteCommand;
+import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
import org.apache.cayenne.ropbrowser.model.ElementDiagram;
import org.apache.cayenne.ropbrowser.model.ModelElement;
@@ -40,11 +40,11 @@
if (parent instanceof ElementDiagram && child instanceof ModelElement) {
if (child instanceof CollectionModelElement) {
// don't allow deletion of the original ModelElement
- if (((CollectionModelElement) child).getCreatedFrom() == null) {
+ if (((CollectionModelElement) child).isRoot()) {
return null;
}
}
- return new ElementDeleteCommand((ElementDiagram) parent, (ModelElement) child);
+ return new HideElementCommand((ModelElement) child);
}
return super.createDeleteCommand(deleteRequest);
}
Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java?rev=424641&r1=424640&r2=424641&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/ElementXYLayoutEditPolicy.java Sat Jul 22 15:44:39 2006
@@ -17,11 +17,17 @@
import org.apache.cayenne.ropbrowser.commands.ElementSetConstraintCommand;
import org.apache.cayenne.ropbrowser.model.ModelElement;
+import org.apache.cayenne.ropbrowser.parts.ElementDiagramEditPart;
import org.apache.cayenne.ropbrowser.parts.ElementEditPart;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
+import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.ConstrainedLayoutEditPolicy;
+import org.eclipse.gef.editpolicies.LayoutEditPolicy;
import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.CreateRequest;
@@ -42,11 +48,39 @@
*/
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);
+ if (!(child instanceof ElementEditPart))
+ return null;
+ if (!(constraint instanceof Rectangle))
+ return null;
+
+ ElementEditPart tablePart = (ElementEditPart) child;
+ ModelElement table = (ModelElement) tablePart.getModel();
+ Figure figure = (Figure) tablePart.getFigure();
+ Rectangle oldBounds = figure.getBounds();
+ Rectangle newBounds = (Rectangle) constraint;
+
+ if (oldBounds.width != newBounds.width && newBounds.width != -1)
+ return null;
+ if (oldBounds.height != newBounds.height && newBounds.height != -1)
+ return null;
+
+ ElementSetConstraintCommand command = new ElementSetConstraintCommand(table, oldBounds.getCopy(), newBounds.getCopy());
+ return command;
+ }
+
+ /**
+ * Returns the current bounds as the constraint if none can be found in the
+ * figures Constraint object
+ */
+ public Rectangle getCurrentConstraintFor(GraphicalEditPart child)
+ {
+ IFigure fig = child.getFigure();
+ Rectangle rectangle = (Rectangle) fig.getParent().getLayoutManager().getConstraint(fig);
+ if (rectangle == null)
+ {
+ rectangle = fig.getBounds();
}
- return super.createChangeConstraintCommand(request, child, constraint);
+ return rectangle;
}
/**
Added: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java?rev=424641&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SelectionHandlesEditPolicy.java Sat Jul 22 15:44:39 2006
@@ -0,0 +1,52 @@
+/*
+ * 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.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.LayoutEditPolicy;
+import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
+import org.eclipse.gef.requests.CreateRequest;
+
+/**
+ * An edit policy handling the layout of elements.
+ *
+ * @author Marcel Gordon
+ */
+public class SelectionHandlesEditPolicy extends LayoutEditPolicy {
+
+ @Override
+ protected EditPolicy createChildEditPolicy(EditPart child) {
+ return new NonResizableEditPolicy();
+ }
+
+ @Override
+ protected Command getCreateCommand(CreateRequest request) {
+ return null;
+ }
+
+ @Override
+ protected Command getDeleteDependantCommand(Request request) {
+ return null;
+ }
+
+ @Override
+ protected Command getMoveChildrenCommand(Request request) {
+ return null;
+ }
+}
Added: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleDirectEditPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleDirectEditPolicy.java?rev=424641&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleDirectEditPolicy.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleDirectEditPolicy.java Sat Jul 22 15:44:39 2006
@@ -0,0 +1,41 @@
+/*
+ * 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.ExpandRelationshipCommand;
+import org.eclipse.gef.RequestConstants;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.DirectEditPolicy;
+import org.eclipse.gef.requests.DirectEditRequest;
+
+/**
+ * An empty {@link org.eclipse.gef.editpolicies.DirectEditPolicy}.
+ *
+ * @author Marecl Gordon
+ */
+public class SingleDirectEditPolicy extends DirectEditPolicy {
+
+ @Override
+ protected Command getDirectEditCommand(DirectEditRequest request) {
+ return null;
+ }
+
+ @Override
+ protected void showCurrentEditValue(DirectEditRequest request) {
+ }
+
+}
Added: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleSelectionPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleSelectionPolicy.java?rev=424641&view=auto
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleSelectionPolicy.java (added)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/policies/SingleSelectionPolicy.java Sat Jul 22 15:44:39 2006
@@ -0,0 +1,33 @@
+/*
+ * 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.eclipse.gef.editpolicies.SelectionEditPolicy;
+
+/**
+ * An empty {@link org.eclipse.gef.editpolicies.SelectionEditPolicy}.
+ *
+ * @author Marcel Gordon
+ */
+public class SingleSelectionPolicy extends SelectionEditPolicy {
+
+ protected void showSelection() {
+ }
+
+ protected void hideSelection() {
+ }
+}
\ 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=424641&r1=424640&r2=424641&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 Sat Jul 22 15:44:39 2006
@@ -36,7 +36,6 @@
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.ViewPart;
import org.objectstyle.cayenne.ObjectContext;
-import org.objectstyle.cayenne.event.CayenneEvent;
import org.objectstyle.cayenne.map.EntityResolver;
import org.objectstyle.cayenne.query.Query;
@@ -56,10 +55,8 @@
/** 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;
+ private CCombo serverText;
/** button initiates connection */
private Button connectButton;
/** dropdown for selecting a query to run */
@@ -87,10 +84,11 @@
form.getBody().setLayout(layout);
toolkit.createLabel(form.getBody(), "Server");
- serverText = toolkit.createText(form.getBody(), "", SWT.NULL);
+ serverText = new CCombo(form.getBody(), SWT.FLAT);
serverText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
String defaultServer = ROPBrowserPlugin.getDefault().getPluginPreferences().getString(PREF_SERVER);
if (defaultServer != null) {
+ serverText.add(defaultServer);
serverText.setText(defaultServer);
}
@@ -120,6 +118,10 @@
*/
public void widgetSelected(SelectionEvent e) {
if (e.getSource() == connectButton) {
+ if (serverText.indexOf(serverText.getText()) == -1) {
+ serverText.add(serverText.getText());
+ }
+
ROPBrowserPlugin.getDefault().getPluginPreferences().setValue(PREF_SERVER, serverText.getText());
ObjectContext currentContext = connectionManager.getObjectContext(serverText.getText());