Author: aadamchik
Date: Sun Jul 23 12:04:37 2006
New Revision: 424788

URL: http://svn.apache.org/viewvc?rev=424788&view=rev
Log:
CAY-606 - cleaning client project

Added:
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/RollbackAction.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/SetNameAction.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/SetNameElementCommand.java
Removed:
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/cayenne/
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/dist/
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/lib/server/
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/server/
Modified:
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/.classpath
    incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/META-INF/MANIFEST.MF
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorContextMenuProvider.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/DeleteAction.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/DeleteObjectCommand.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/PopOutCommand.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CompartmentFigure.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/SingleFigure.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/AbstractObject.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Connection.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ElementDiagram.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/MemberConnection.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/ModelElement.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/RelationshipConnection.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/SingleModelElement.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Artist.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Gallery.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/auto/_Painting.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/CollectionEditPart.java
    
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/parts/ElementDiagramEditPart.java

Modified: incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/.classpath
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/.classpath?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/.classpath (original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/.classpath Sun Jul 23 
12:04:37 2006
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry 
excluding="org/apache/cayenne/ropbrowser/Artist.java|org/apache/cayenne/ropbrowser/Gallery.java|org/apache/cayenne/ropbrowser/Painting.java|org/apache/cayenne/ropbrowser/auto/|org/apache/cayenne/ropbrowser/server/|org/apache/cayenne/ropbrowser/ModelTest.java"
 kind="src" path="src"/>
+       <classpathentry kind="src" path="src"/>
        <classpathentry kind="con" 
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="src" path="cayenne"/>
        <classpathentry kind="lib" path="lib/commons-collections-3.1.jar"/>
        <classpathentry kind="lib" path="lib/commons-lang-2.1.jar"/>
        <classpathentry kind="lib" path="lib/commons-logging.jar"/>

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/META-INF/MANIFEST.MF
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/META-INF/MANIFEST.MF?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/META-INF/MANIFEST.MF 
(original)
+++ incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/META-INF/MANIFEST.MF 
Sun Jul 23 12:04:37 2006
@@ -5,14 +5,14 @@
 Bundle-Version: 1.0.0
 Bundle-Activator: org.apache.cayenne.ropbrowser.ROPBrowserPlugin
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.ui.forms,
- org.eclipse.ui.views,
- org.eclipse.gef
 Eclipse-AutoStart: true
 Bundle-ClassPath: lib/hessian-3.0.13.jar,
  lib/commons-logging.jar,
  lib/commons-lang-2.1.jar,
  lib/commons-collections-3.1.jar,
  lib/cayenne-client-nodeps-1.2.jar
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.ui,
+ org.eclipse.ui.forms,
+ org.eclipse.gef,
+ org.eclipse.ui.views

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ConnectionManager.java
 Sun Jul 23 12:04:37 2006
@@ -39,10 +39,10 @@
        
        private static ConnectionManager _ref;
        /** All connections made by the application */
-       private Hashtable<String, ObjectContext> connections;
+       private Hashtable<String, ClientConnection> connections;
        
        private ConnectionManager() {
-               connections = new Hashtable<String, ObjectContext>();
+               connections = new Hashtable<String, ClientConnection>();
        }
        
        public static ConnectionManager getInstance() {
@@ -59,16 +59,18 @@
         */
        public ObjectContext getObjectContext(String address) {
                
+               ClientConnection connection;
+               
                if (connections.containsKey(address)) {
-                       return connections.get(address);
+                       connection = connections.get(address);
+               }
+               else {
+                       connection = new HessianConnection(address, null, null, 
"conference");
+                       connections.put(address, connection);
                }
-               
-               ClientConnection connection = new HessianConnection(address, 
null, null, "conference");
                DataChannel channel = new ClientChannel(connection);
                // TODO configure query caching
                ObjectContext context = new CayenneContext(channel);
-               
-               connections.put(address, context);
                
                return context;
        }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditor.java
 Sun Jul 23 12:04:37 2006
@@ -21,8 +21,11 @@
 import org.apache.cayenne.ropbrowser.actions.DeleteAction;
 import org.apache.cayenne.ropbrowser.actions.HideAction;
 import org.apache.cayenne.ropbrowser.actions.InsertAction;
+import org.apache.cayenne.ropbrowser.actions.RollbackAction;
+import org.apache.cayenne.ropbrowser.actions.SetNameAction;
 import org.apache.cayenne.ropbrowser.actions.ToggleLayoutAction;
 import org.apache.cayenne.ropbrowser.model.ElementDiagram;
+import org.apache.cayenne.ropbrowser.parts.ElementDiagramEditPart;
 import org.apache.cayenne.ropbrowser.parts.ElementEditPartFactory;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.gef.ContextMenuProvider;
@@ -52,8 +55,6 @@
        public static final String ID = 
"org.apache.cayenne.ropbrowser.ObjectEditor";
        /** Root component of the data model */
        private ElementDiagram elementDiagram;
-       /** ObjectContext for all the objects in the editor */
-       private ObjectContext context;
        
        private boolean dirty;
        
@@ -100,7 +101,7 @@
         * Saves changes made in the editor back to the database.
         */
        public void doSave(IProgressMonitor monitor) {
-               context.commitChanges();
+               elementDiagram.commitChanges();
                dirty = false;
                firePropertyChange(IEditorPart.PROP_DIRTY);
        }
@@ -127,8 +128,7 @@
         */
        protected void setInput(IEditorInput input) {
                super.setInput(input);
-               this.context = ((ObjectEditorInput) input).getContext();
-               elementDiagram = new ElementDiagram(this.context, 
((ObjectEditorInput) input).getQuery());
+               elementDiagram = new ElementDiagram(((ObjectEditorInput) 
input).getContext(), ((ObjectEditorInput) input).getQuery());
        }
        
        protected void createActions() {
@@ -146,11 +146,26 @@
                getActionRegistry().registerAction(action);
                getSelectionActions().add(action.getId());
                
+               action = new SetNameAction(this);
+               getActionRegistry().registerAction(action);
+               getSelectionActions().add(action.getId());
+               
                action = new ToggleLayoutAction(this);
                getActionRegistry().registerAction(action);
+               
+               action = new RollbackAction(this);
+               getActionRegistry().registerAction(action);
        }
 
        public ElementDiagram getDiagram() {
                return elementDiagram;
+       }
+       
+       public void dispose() {
+               super.dispose();
+               // do it directly so as not to fire property change events
+               if (isDirty()) {
+                       elementDiagram.getObjectContext().rollbackChanges();
+               }
        }
 }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorContextMenuProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorContextMenuProvider.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorContextMenuProvider.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ObjectEditorContextMenuProvider.java
 Sun Jul 23 12:04:37 2006
@@ -19,6 +19,8 @@
 import org.apache.cayenne.ropbrowser.actions.DeleteAction;
 import org.apache.cayenne.ropbrowser.actions.HideAction;
 import org.apache.cayenne.ropbrowser.actions.InsertAction;
+import org.apache.cayenne.ropbrowser.actions.RollbackAction;
+import org.apache.cayenne.ropbrowser.actions.SetNameAction;
 import org.apache.cayenne.ropbrowser.actions.ToggleLayoutAction;
 import org.eclipse.gef.ContextMenuProvider;
 import org.eclipse.gef.EditPartViewer;
@@ -82,7 +84,17 @@
                        menu.appendToGroup(GEFActionConstants.GROUP_EDIT, 
action);
                }
                
+               action = getAction(SetNameAction.ID);
+               if (action.isEnabled()) {
+                       menu.appendToGroup(GEFActionConstants.GROUP_EDIT, 
action);
+               }
+               
                action = getAction(ToggleLayoutAction.ID);
+               if (action.isEnabled()) {
+                       menu.appendToGroup(GEFActionConstants.GROUP_REST, 
action);
+               }
+               
+               action = getAction(RollbackAction.ID);
                if (action.isEnabled()) {
                        menu.appendToGroup(GEFActionConstants.GROUP_REST, 
action);
                }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/ROPBrowserPlugin.java
 Sun Jul 23 12:04:37 2006
@@ -17,6 +17,8 @@
 package org.apache.cayenne.ropbrowser;
 
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
@@ -27,6 +29,7 @@
 
        //The shared instance.
        private static ROPBrowserPlugin plugin;
+       private Font boldFont;
        
        /**
         * The constructor.
@@ -40,6 +43,7 @@
         */
        public void start(BundleContext context) throws Exception {
                super.start(context);
+               boldFont = new Font(null, "Arial", 9, SWT.BOLD);
        }
 
        /**
@@ -47,6 +51,7 @@
         */
        public void stop(BundleContext context) throws Exception {
                super.stop(context);
+               boldFont.dispose();
                plugin = null;
        }
 
@@ -66,5 +71,9 @@
         */
        public static ImageDescriptor getImageDescriptor(String path) {
                return AbstractUIPlugin.imageDescriptorFromPlugin("ropbrowser", 
path);
+       }
+       
+       public Font getBoldFont() {
+               return boldFont;
        }
 }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/DeleteAction.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/DeleteAction.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/DeleteAction.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/DeleteAction.java
 Sun Jul 23 12:04:37 2006
@@ -17,6 +17,7 @@
 
 import java.util.List;
 
+import org.apache.cayenne.ropbrowser.model.ModelElement;
 import org.apache.cayenne.ropbrowser.parts.SingleEditPart;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.Request;
@@ -54,6 +55,9 @@
                for (int i=0; i<parts.size(); i++){
                        Object o = parts.get(i);
                        if (!(o instanceof SingleEditPart)) {
+                               return false;
+                       }
+                       if (((ModelElement) ((SingleEditPart) 
o).getModel()).isNull()) {
                                return false;
                        }
                }

Added: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/RollbackAction.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/RollbackAction.java?rev=424788&view=auto
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/RollbackAction.java
 (added)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/RollbackAction.java
 Sun Jul 23 12:04:37 2006
@@ -0,0 +1,37 @@
+/*
+ *  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.actions;
+
+import org.apache.cayenne.ropbrowser.ObjectEditor;
+import org.eclipse.jface.action.Action;
+
+
+public class RollbackAction  extends Action {
+       
+       private ObjectEditor editor;
+       
+       public static final String ID = 
"org.apache.cayenne.ropbrowser.actions.RollbackAction";
+       
+       public RollbackAction(ObjectEditor editor) {
+               this.editor = editor;
+               setId(ID);
+               setText("Rollback Changes");
+       }
+       
+       public void run() {
+               editor.getDiagram().rollbackChanges();
+       }
+}

Added: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/SetNameAction.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/SetNameAction.java?rev=424788&view=auto
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/SetNameAction.java
 (added)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/actions/SetNameAction.java
 Sun Jul 23 12:04:37 2006
@@ -0,0 +1,72 @@
+/*
+ *  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.actions;
+
+import java.util.List;
+
+import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
+import org.apache.cayenne.ropbrowser.model.ModelElement;
+import org.apache.cayenne.ropbrowser.parts.CollectionEditPart;
+import org.apache.cayenne.ropbrowser.parts.SingleEditPart;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gef.ui.actions.SelectionAction;
+import org.eclipse.ui.IWorkbenchPart;
+
+public class SetNameAction extends SelectionAction {
+       
+       private Request request;
+       
+       public static final String ID = 
"org.apache.cayenne.ropbrowser.actions.SetNameAction";
+       public static final String SET_NAME_REQUEST = "Set Name";
+       
+       public SetNameAction(IWorkbenchPart part) {
+               super(part);
+               setId(ID);
+               setText("Set Name");
+               request = new Request(SET_NAME_REQUEST);
+       }
+
+       protected boolean calculateEnabled() {
+               return canPerformAction();
+       }
+       
+       public void run() {
+               execute(getCommand());
+       }
+       
+       private boolean canPerformAction() {
+               if (getSelectedObjects().isEmpty() || 
getSelectedObjects().size() > 1)
+                       return false;
+               List parts = getSelectedObjects();
+               Object o = parts.get(0);
+               if (!(o instanceof CollectionEditPart)) {
+                       return false;
+               }
+               if (((CollectionModelElement) ((CollectionEditPart) 
o).getModel()).isRoot()) {
+                       return true;
+               }
+               return false;
+       }
+       
+       private Command getCommand() {
+               List editparts = getSelectedObjects();
+               EditPart part = (EditPart)editparts.get(0);
+               return part.getCommand(request);
+       }
+}

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/DeleteObjectCommand.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/DeleteObjectCommand.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/DeleteObjectCommand.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/DeleteObjectCommand.java
 Sun Jul 23 12:04:37 2006
@@ -37,7 +37,7 @@
                if (element == null) {
                        throw new IllegalArgumentException();
                }
-               setLabel("element expunction");
+               setLabel("delete");
                this.element = element;
        }
        
@@ -52,7 +52,7 @@
         * @see org.eclipse.gef.commands.Command#execute()
         */
        public void execute() {
-               element.getDiagram().removeObject(element.getCurrentObject());
+               //element.getDiagram().removeObject(element.getCurrentObject());
                element.deleteCurrentObject();
        }
 }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/PopOutCommand.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/PopOutCommand.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/PopOutCommand.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/PopOutCommand.java
 Sun Jul 23 12:04:37 2006
@@ -38,13 +38,15 @@
                return true;
        }
        
+       public boolean canExecute() {
+               return !element.isNull();
+       }
+       
        /**
         * @see org.eclipse.gef.commands.Command#execute()
         */
        public void execute() {
-               if (element.getCurrentObject() != null) {
-                       redo();
-               }
+               redo();
        }
        
        /**

Added: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/SetNameElementCommand.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/SetNameElementCommand.java?rev=424788&view=auto
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/SetNameElementCommand.java
 (added)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/commands/SetNameElementCommand.java
 Sun Jul 23 12:04:37 2006
@@ -0,0 +1,93 @@
+/*
+ *  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.commands;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
+import org.apache.cayenne.ropbrowser.model.Connection;
+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.eclipse.gef.commands.Command;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Command for deleting an element from the ObjectDiagram.
+ * 
+ * @author Marcel Gordon
+ */
+public class SetNameElementCommand extends Command {
+       
+       /** ModelElement to remove. */
+       private final ModelElement element;
+       
+       private String newName;
+       private String oldName;
+       
+       /**
+        * Create a command that will remove the ModelElement from its parent 
ElementDiagram.
+        * @param parent the ElementDiagram containing the child
+        * @param child    the ModelElement to remove
+        * @throws IllegalArgumentException if any parameter is null
+        */
+       public SetNameElementCommand(ModelElement element) {
+               if (element == null) {
+                       throw new IllegalArgumentException();
+               }
+               setLabel("set name");
+               this.element = element;
+       }
+       
+       /**
+        * @see org.eclipse.gef.commands.Command#canUndo()
+        */
+       public boolean canUndo() {
+               return true;
+       }
+       
+       /**
+        * @see org.eclipse.gef.commands.Command#execute()
+        */
+       public void execute() {
+               oldName = element.getName();
+               InputDialog iDialog = new 
InputDialog(Display.getCurrent().getActiveShell(), "Set Name", "Enter the name 
of the object", "", null);
+               int result = iDialog.open();
+               if (result == InputDialog.OK) {
+                       newName = iDialog.getValue();
+                       redo();
+               }
+       }
+       
+       /**
+        * @see org.eclipse.gef.commands.Command#redo()
+        */
+       public void redo() {
+               element.setName(newName);
+       }
+       
+       /**
+        * @see org.eclipse.gef.commands.Command#undo()
+        */
+       public void undo() {
+               element.setName(oldName);
+       }
+}
\ No newline at end of file

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CollectionFigure.java
 Sun Jul 23 12:04:37 2006
@@ -29,10 +29,10 @@
        protected void setBackgroundColour() {
                // root figure should be a different colour
                if (getElementCast().isRoot()) {
-                       setBackgroundColor(ColorConstants.lightBlue);
+                       name.setBackgroundColor(ColorConstants.lightBlue);
                }
                else {
-                       setBackgroundColor(ColorConstants.yellow);
+                       name.setBackgroundColor(ColorConstants.yellow);
                }
        }
 

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CompartmentFigure.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CompartmentFigure.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CompartmentFigure.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/CompartmentFigure.java
 Sun Jul 23 12:04:37 2006
@@ -17,6 +17,7 @@
 package org.apache.cayenne.ropbrowser.figures;
 
 import org.eclipse.draw2d.AbstractBorder;
+import org.eclipse.draw2d.Border;
 import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.Graphics;
 import org.eclipse.draw2d.IFigure;
@@ -34,14 +35,14 @@
                ToolbarLayout layout = new ToolbarLayout();
                layout.setMinorAlignment(ToolbarLayout.ALIGN_TOPLEFT);
                layout.setStretchMinorAxis(false);
-               layout.setSpacing(2);
+               layout.setSpacing(5);
                setLayoutManager(layout);
                setBorder(new CompartmentFigureBorder());
        }
            
        public class CompartmentFigureBorder extends AbstractBorder {
                public Insets getInsets(IFigure figure) {
-                       return new Insets(1,0,0,0);
+                       return new Insets(5,5,5,5);
                }
                public void paint(IFigure figure, Graphics graphics, Insets 
insets) {
                        graphics.drawLine(getPaintRectangle(figure, 
insets).getTopLeft(), tempRect.getTopRight());

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/ElementFigure.java
 Sun Jul 23 12:04:37 2006
@@ -18,6 +18,7 @@
 
 import java.util.Iterator;
 
+import org.apache.cayenne.ropbrowser.ROPBrowserPlugin;
 import org.apache.cayenne.ropbrowser.model.AbstractObject;
 import org.apache.cayenne.ropbrowser.model.ModelElement;
 import org.apache.cayenne.ropbrowser.parts.ElementEditPart;
@@ -26,6 +27,9 @@
 import org.eclipse.draw2d.Label;
 import org.eclipse.draw2d.LineBorder;
 import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Display;
 import org.objectstyle.cayenne.map.Attribute;
 
 /**
@@ -41,7 +45,7 @@
        /** name of the object, or MSG_NULL_RESULT if none can be obtained */
        protected Label name;
        /** name to be used where no name can be located */
-       public static final String MSG_NULL_RESULT = "NULL";
+       public static final String MSG_NULL_RESULT = "NULL"; 
        
        protected ElementEditPart part;
        
@@ -62,6 +66,8 @@
        protected void addComponents() {
                name = new Label();
                add(name);
+               name.setOpaque(true);
+               name.setFont(ROPBrowserPlugin.getDefault().getBoldFont());
                
                add(attributeFigure);
        }
@@ -86,15 +92,18 @@
        }
 
        protected void setAttributes(AbstractObject model) {
-               getAttributeCompartment().removeAll();
-               
                if (model != null) {
+                       getAttributeCompartment().removeAll();
+                       
                        Iterator i = model.getAttributes().iterator();
                        while (i.hasNext()) {
                                Attribute a = (Attribute) i.next();
                                Label l = new Label(a.getName() + " : " + 
model.getPropertyValue(a.getName()));
+                               if (model.isDeleted()) {
+                                       
l.setForegroundColor(ColorConstants.gray);
+                               }
                                getAttributeCompartment().add(l);
-                       }
+                       }       
                }
        }
 

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/SingleFigure.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/SingleFigure.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/SingleFigure.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/figures/SingleFigure.java
 Sun Jul 23 12:04:37 2006
@@ -15,16 +15,13 @@
  */
 package org.apache.cayenne.ropbrowser.figures;
 
-import org.apache.cayenne.ropbrowser.model.AbstractObject;
-import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
 import org.apache.cayenne.ropbrowser.model.SingleModelElement;
 import org.apache.cayenne.ropbrowser.parts.SingleEditPart;
-import org.eclipse.draw2d.ActionEvent;
-import org.eclipse.draw2d.ActionListener;
 import org.eclipse.draw2d.Button;
 import org.eclipse.draw2d.Clickable;
 import org.eclipse.draw2d.ColorConstants;
-import org.objectstyle.cayenne.PersistenceState;
+import org.eclipse.draw2d.CompoundBorder;
+import org.eclipse.draw2d.MarginBorder;
 import org.objectstyle.cayenne.map.Relationship;
 
 public class SingleFigure extends ElementFigure {
@@ -38,11 +35,11 @@
        
        protected void setBackgroundColour() {
                if (getElementCast().getCurrentObject() != null &&
-                               
getElementCast().getCurrentObject().getPersistenceState() == 
PersistenceState.DELETED) {
-                       setBackgroundColor(ColorConstants.red);
+                               getElementCast().isDeleted()) {
+                       name.setBackgroundColor(ColorConstants.red);
                }
                else {
-                       setBackgroundColor(ColorConstants.lightGray);
+                       name.setBackgroundColor(ColorConstants.green);
                }
        }
 
@@ -66,7 +63,6 @@
                if (getElementCast().getCurrentObject() == null) return;
                
                Button relButton;
-               String buttonLabel;
                for (Object o : 
getElementCast().getCurrentObject().getRelationships()) {
                        Relationship relationship = (Relationship) o;
                        relButton = new Button(relationship.getName() + " -> " 
+ relationship.getTargetEntityName() + (relationship.isToMany() ? " (1-n)" : " 
(1-1)"));
@@ -74,6 +70,9 @@
                        relButton.getModel().setUserData(relationship);
                        relButton.addActionListener((SingleEditPart) part);
                        relButton.setSelected(((SingleEditPart) 
part).isRelationshipExpanded(relationship));
+                       relButton.setOpaque(true);
+                       relButton.setBackgroundColor(ColorConstants.button);
+                       relButton.setBorder(new 
CompoundBorder(relButton.getBorder(), new MarginBorder(1)));
                        relationshipFigure.add(relButton);
                }
        }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/AbstractObject.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/AbstractObject.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/AbstractObject.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/AbstractObject.java
 Sun Jul 23 12:04:37 2006
@@ -26,6 +26,7 @@
 
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+import org.objectstyle.cayenne.PersistenceState;
 import org.objectstyle.cayenne.PersistentObject;
 import org.objectstyle.cayenne.map.EntityResolver;
 import org.objectstyle.cayenne.map.ObjAttribute;
@@ -46,6 +47,8 @@
        /** Delegate used to implemenent property-change-support. */
        private transient PropertyChangeSupport pcsDelegate = new 
PropertyChangeSupport(this);
        
+       protected Collection attributes;
+       
        public String getName() {
                return this.getClass().getSimpleName();
        }
@@ -64,8 +67,12 @@
         * @return a collection of [EMAIL PROTECTED] 
org.objectstyle.cayenne.map.Attribute} objects.
         */
        public Collection getAttributes() {
-               if (objectContext != null) {
-                       return 
objectContext.getEntityResolver().getObjEntity(getName()).getAttributes();
+               if (attributes != null) {
+                       return attributes;
+               }
+               else if (objectContext != null) {
+                       attributes = 
objectContext.getEntityResolver().getObjEntity(getName()).getAttributes();
+                       return attributes;
                }
                return Collections.EMPTY_LIST;
        }
@@ -256,5 +263,9 @@
                        return properties;
                }
                return new IPropertyDescriptor[0];
+       }
+
+       public boolean isDeleted() {
+               return (getPersistenceState() == PersistenceState.DELETED);
        }
 }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/CollectionModelElement.java
 Sun Jul 23 12:04:37 2006
@@ -286,4 +286,23 @@
                firePropertyChange(PROP_RECORDS, null, objects);
                validateCurrent();
        }
+
+       @Override
+       public boolean isNull() {
+               return (objects == null || objects.isEmpty());
+       }
+
+       public void memberObjectChanged() {
+               firePropertyChange(PROP_RECORDS, null, objects);
+       }
+
+       @Override
+       public boolean isContextless() {
+               for (AbstractObject object : objects) {
+                       if (object.getObjectContext() != null) {
+                               return false;
+                       }
+               }
+               return !isNull();
+       }
 }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Connection.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Connection.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Connection.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/Connection.java
 Sun Jul 23 12:04:37 2006
@@ -24,9 +24,9 @@
 public class Connection {
        
        /** Connection's source endpoint. */
-       private ModelElement source;
+       protected ModelElement source;
        /** Connection's target endpoint. */
-       private ModelElement target;
+       protected ModelElement target;
        
        private boolean connected;
 

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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 2006
@@ -19,14 +19,9 @@
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.util.ArrayList;
-import java.util.EventObject;
-import java.util.Iterator;
+import java.util.Collection;
 import java.util.List;
-
-import org.apache.cayenne.ropbrowser.ConnectionManager;
-import org.objectstyle.cayenne.DataChannel;
 import org.objectstyle.cayenne.ObjectContext;
-import org.objectstyle.cayenne.event.EventSubject;
 import org.objectstyle.cayenne.query.NamedQuery;
 
 /**
@@ -39,21 +34,23 @@
        
        // TODO label connections (not just tooltip)
        
+       public static final String PROP_COMMIT = "ObjectDiagram.GraphCommitted";
+       public static final String PROP_LAYOUT = "ObjectDiagram.LayoutChanged";
        /** 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> elements = new ArrayList<ModelElement>();
+       public static final String PROP_ROLLBACK = 
"ObjectDiagram.GraphRollback";
+       private boolean autoLayout;
        /** the Cayenne context in which the objects represented by the 
ModelElements exist */
        protected ObjectContext context;
        
+       /** the ModelElements contained in the diagram */
+       protected List<ModelElement> elements = new ArrayList<ModelElement>();
+       
        /** 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
@@ -91,35 +88,6 @@
                return false;
        }
        
-       /**
-        * Remove an element from the diagram
-        * @param element the element to remove
-        * @return true if removed; false otherwise
-        */
-       public boolean removeElement(ModelElement element) {
-               if (element != null) {
-                       elements.remove(element);
-                       firePropertyChange(PROP_NODE_REMOVED, null, element);
-                       return true;
-               }
-               return false;
-       }
-       
-       /** Return a List of Objects in this diagram.  The returned List should 
not be modified. */
-       public List<ModelElement> getElements() {
-               return elements;
-       }
-       
-       /** 
-        * Remove a PropertyChangeListener from this component.
-        * @param l a PropertyChangeListener instance
-        */
-       public synchronized void 
removePropertyChangeListener(PropertyChangeListener l) {
-               if (l != null) {
-                       pcsDelegate.removePropertyChangeListener(l);
-               }
-       }
-       
        /** 
         * Attach a non-null PropertyChangeListener to this object.
         * @param l a non-null PropertyChangeListener instance
@@ -132,6 +100,35 @@
                pcsDelegate.addPropertyChangeListener(l);
        }
        
+       public void commitChanges() {
+               removeDeletedObjects();
+               context.commitChanges();
+               firePropertyChange(PROP_COMMIT, false, true);
+       }
+       
+       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((CollectionModelElement) element, (SingleModelElement) 
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((CollectionModelElement) child, (SingleModelElement) 
element);
+                                               connection.connect();
+                                       }
+                               }
+                       }
+               }
+       }
+       
        /** 
         * Report a property change to registered listeners (for example edit 
parts).
         * @param property the programmatic name of the property that changed
@@ -143,57 +140,76 @@
                        pcsDelegate.firePropertyChange(property, oldValue, 
newValue);
                }
        }
-
-       public void removeObject(AbstractObject current) {
+       
+       public ModelElement getElement(ModelElement newElement) {
                for (ModelElement element : elements) {
-                       if (element instanceof CollectionModelElement) {
-                               ((CollectionModelElement) 
element).removeObject(current);
+                       if (element.equals(newElement)) {
+                               return element;
                        }
                }
+               return null;
        }
 
-       public void toggleAutoLayout() {
-               autoLayout = !autoLayout;
-               firePropertyChange(PROP_LAYOUT, !autoLayout, autoLayout);
+       /** Return a List of Objects in this diagram.  The returned List should 
not be modified. */
+       public List<ModelElement> getElements() {
+               return elements;
+       }
+
+       public ObjectContext getObjectContext() {
+               return context;
        }
        
        public boolean isAutoLayoutDesired() {
                return autoLayout;
        }
 
-       public ModelElement getElement(ModelElement newElement) {
-               for (ModelElement element : elements) {
-                       if (element.equals(newElement)) {
-                               return element;
-                       }
+       private void removeDeletedObjects() {
+               Collection deleted = context.deletedObjects();
+               for (Object o : deleted) {
+                       AbstractObject abstractObject = (AbstractObject) o;
+                       removeObjectFromDiagram(abstractObject);
                }
-               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();
-                                       }
-                               }
-                       }
+       /**
+        * Remove an element from the diagram
+        * @param element the element to remove
+        * @return true if removed; false otherwise
+        */
+       public boolean removeElement(ModelElement element) {
+               if (element != null) {
+                       elements.remove(element);
+                       firePropertyChange(PROP_NODE_REMOVED, null, element);
+                       return true;
                }
-               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();
-                                       }
-                               }
+               return false;
+       }
+       
+       private void removeObjectFromDiagram(AbstractObject current) {
+               for (ModelElement element : elements) {
+                       if (element instanceof CollectionModelElement) {
+                               ((CollectionModelElement) 
element).removeObject(current);
                        }
                }
        }
-       
-       public ObjectContext getObjectContext() {
-               return context;
+
+       /** 
+        * Remove a PropertyChangeListener from this component.
+        * @param l a PropertyChangeListener instance
+        */
+       public synchronized void 
removePropertyChangeListener(PropertyChangeListener l) {
+               if (l != null) {
+                       pcsDelegate.removePropertyChangeListener(l);
+               }
+       }
+
+       public void rollbackChanges() {
+               context.rollbackChanges();
+               firePropertyChange(PROP_ROLLBACK, false, true);
+       }
+
+       public void toggleAutoLayout() {
+               autoLayout = !autoLayout;
+               firePropertyChange(PROP_LAYOUT, !autoLayout, autoLayout);
        }
 }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/MemberConnection.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/MemberConnection.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/MemberConnection.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/MemberConnection.java
 Sun Jul 23 12:04:37 2006
@@ -29,7 +29,15 @@
         * @param target a target endpoint for this connection (non null)
         * @throws IllegalArgumentException if any of the parameters are null 
or source == target 
         */
-       public MemberConnection(ModelElement source, ModelElement target) {
+       public MemberConnection(CollectionModelElement source, 
SingleModelElement target) {
                super(source, target);
+       }
+       
+       public CollectionModelElement getSource() {
+               return (CollectionModelElement) source;
+       }
+       
+       public SingleModelElement getTarget() {
+               return (SingleModelElement) target;
        }
 }

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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 2006
@@ -49,6 +49,8 @@
         */
        public static final String PROP_RECORDS = "ModelElement.Records";
        
+       public static final String PROP_NAME = "ModelElement.Name";
+       
        protected ElementDiagram diagram;
        
        protected String name;
@@ -245,6 +247,11 @@
        public void deleteCurrentObject() {
                
getCurrentObject().getObjectContext().deleteObject(getCurrentObject());
                firePropertyChange(PROP_RECORDS, null, getCurrentObject());
+               for (Connection conn : getTargetConnections()) {
+                       if (conn instanceof MemberConnection) {
+                               ((MemberConnection) 
conn).getSource().memberObjectChanged();
+                       }
+               }
        }
 
        public abstract void addObject(AbstractObject object);
@@ -269,4 +276,19 @@
        {
                return bounds;
        }
+       
+       public abstract boolean isNull();
+
+       public void setName(String newName) {
+               String oldName = name;
+               name = newName;
+               firePropertyChange(PROP_NAME, oldName, name);
+       }
+
+       /**
+        * Check if the element has objects, but none with a context.
+        * If isNull returns true, isContextless should return false (ie an 
element
+        * that is null is not contextless).
+        */
+       public abstract boolean isContextless();
 }

Modified: 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/RelationshipConnection.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/RelationshipConnection.java?rev=424788&r1=424787&r2=424788&view=diff
==============================================================================
--- 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/RelationshipConnection.java
 (original)
+++ 
incubator/cayenne/soc/trunk/cayenne-rop/rop-browser/src/org/apache/cayenne/ropbrowser/model/RelationshipConnection.java
 Sun Jul 23 12:04:37 2006
@@ -34,7 +34,7 @@
         * @param target a target endpoint for this connection (non null)
         * @throws IllegalArgumentException if any of the parameters are null 
or source == target 
         */
-       public RelationshipConnection(ModelElement source, ModelElement target, 
Relationship relationship) {
+       public RelationshipConnection(SingleModelElement source, ModelElement 
target, Relationship relationship) {
                super(source, target);
                this.relationship = relationship;               
        }
@@ -44,5 +44,9 @@
         */
        public Relationship getRelationship() {
                return relationship;
+       }
+       
+       public SingleModelElement getSource() {
+               return (SingleModelElement) source;
        }
 }

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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 2006
@@ -20,6 +20,7 @@
 import java.beans.PropertyChangeListener;
 
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.objectstyle.cayenne.PersistenceState;
 import org.objectstyle.cayenne.map.Relationship;
 
 /**
@@ -156,5 +157,19 @@
                        }
                }
                setObject(object);
+       }
+
+       public boolean isDeleted() {
+               return getCurrentObject().isDeleted();
+       }
+
+       @Override
+       public boolean isNull() {
+               return (object == null);
+       }
+
+       @Override
+       public boolean isContextless() {
+               return (getCurrentObject() != null && 
getCurrentObject().getObjectContext() == null);
        }
 }

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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 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
@@ -17,19 +17,19 @@
     public static final String PAINTING_ARTIST_PROPERTY = "paintingArtist";
     public static final String PAINTING_GALLERY_PROPERTY = "paintingGallery";
 
-    protected Float estimatedPrice;
+    protected Double estimatedPrice;
     protected String paintingName;
     protected ValueHolder paintingArtist;
     protected ValueHolder paintingGallery;
 
-    public Float getEstimatedPrice() {
+    public Double getEstimatedPrice() {
         if(objectContext != null) {
             objectContext.prepareForAccess(this, "estimatedPrice");
         }
         
         return estimatedPrice;
     }
-    public void setEstimatedPrice(Float estimatedPrice) {
+    public void setEstimatedPrice(Double estimatedPrice) {
         if(objectContext != null) {
             objectContext.prepareForAccess(this, "estimatedPrice");
         }

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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 2006
@@ -18,8 +18,12 @@
 
 import java.beans.PropertyChangeEvent;
 
+import org.apache.cayenne.ropbrowser.actions.HideAction;
 import org.apache.cayenne.ropbrowser.actions.InsertAction;
+import org.apache.cayenne.ropbrowser.actions.SetNameAction;
+import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
 import org.apache.cayenne.ropbrowser.commands.ObjectInsertCommand;
+import org.apache.cayenne.ropbrowser.commands.SetNameElementCommand;
 import org.apache.cayenne.ropbrowser.figures.CollectionFigure;
 import org.apache.cayenne.ropbrowser.figures.ElementFigure;
 import org.apache.cayenne.ropbrowser.model.CollectionModelElement;
@@ -78,6 +82,9 @@
        }
        
        public Command getCommand(Request request) {
+               if (request.getType().equals(SetNameAction.SET_NAME_REQUEST)) {
+                       return new SetNameElementCommand(this.getModelCast());
+               }
                // 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/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=424788&r1=424787&r2=424788&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
 Sun Jul 23 12:04:37 2006
@@ -18,12 +18,15 @@
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.cayenne.ropbrowser.commands.HideElementCommand;
 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.model.SingleModelElement;
 import org.eclipse.draw2d.ConnectionLayer;
 import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.FreeformLayer;
@@ -105,7 +108,16 @@
         */
        protected List getModelChildren() {
                ElementDiagram diagram = (ElementDiagram) this.getModel();
-               return  diagram.getElements(); // return a list of objects
+               return new ArrayList<ModelElement>(diagram.getElements()); // 
return a list of objects
+       }
+       
+       public void hideNullObjects() {
+               for (Object o : getModelChildren()) {
+                       ModelElement element = (ModelElement) o;
+                       if (element.isNull() || element.isContextless()) {
+                               
getViewer().getEditDomain().getCommandStack().execute(new 
HideElementCommand(element));
+                       }
+               }
        }
        
        /**
@@ -121,10 +133,20 @@
                else if (ElementDiagram.PROP_LAYOUT.equals(prop)) {
                        getFigure().setLayoutManager(delegatingLayoutManager);
                }
+               else if (ElementDiagram.PROP_COMMIT.equals(prop)) {
+                       hideNullObjects();
+               }
+               else if (ElementDiagram.PROP_ROLLBACK.equals(prop)) {
+                       refreshVisuals();
+               }
        }
 
        public boolean isAutoLayoutDesired() {
-               return ((ElementDiagram) getModel()).isAutoLayoutDesired();
+               return getModelCast().isAutoLayoutDesired();
+       }
+       
+       public ElementDiagram getModelCast() {
+               return (ElementDiagram) getModel();
        }
 
        /**


Reply via email to