svn commit: r16702 - trunk/src/argouml-app/src/org/argouml/uml/diagram: deployment/ui static_structure/ui ui

Bob Tarling <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: bobtarling
Date: 2009-01-25 12:23:28-0800
New Revision: 16702

Modified:
   trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java

Log:
Issue 2991: Allow drag/drop of nary association class

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java	2009-01-25 12:23:28-0800
@@ -574,7 +574,8 @@
         if (Model.getFacade().isANode(droppedObject)) {
             figNode = new FigMNode(droppedObject, bounds, settings);
         } else if (Model.getFacade().isAAssociation(droppedObject)) {
-            figNode = new FigNodeAssociation(droppedObject, bounds, settings);
+            figNode =
+                createNaryAssociationNode(droppedObject, bounds, settings);
         } else if (Model.getFacade().isANodeInstance(droppedObject)) {
             figNode = new FigNodeInstance(droppedObject, bounds, settings);
         } else if (Model.getFacade().isAComponent(droppedObject)) {

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java	2009-01-25 12:23:28-0800
@@ -41,6 +41,8 @@
 import org.argouml.uml.diagram.deployment.ui.FigNodeInstance;
 import org.argouml.uml.diagram.deployment.ui.FigObject;
 import org.argouml.uml.diagram.static_structure.ClassDiagramGraphModel;
+import org.argouml.uml.diagram.ui.FigClassAssociationClass;
+import org.argouml.uml.diagram.ui.FigEdgeAssociationClass;
 import org.argouml.uml.diagram.ui.FigNodeAssociation;
 import org.argouml.uml.diagram.ui.ModeCreateDependency;
 import org.argouml.uml.diagram.ui.ModeCreatePermission;
@@ -664,7 +666,8 @@
         DiagramSettings settings = getDiagramSettings();
         
         if (Model.getFacade().isAAssociation(droppedObject)) {
-            figNode = new FigNodeAssociation(droppedObject, bounds, settings);
+            figNode =
+                createNaryAssociationNode(droppedObject, bounds, settings);
         } else if (Model.getFacade().isAClass(droppedObject)) {
             figNode = new FigClass(droppedObject, bounds, settings);
         } else if (Model.getFacade().isAInterface(droppedObject)) {
@@ -713,9 +716,8 @@
             LOG.debug("Dropped object " + droppedObject + " converted to " 
                     + figNode);
         } else {
-            LOG.debug("Dropped object NOT added " + figNode);
+            LOG.debug("Dropped object NOT added " + droppedObject);
         }
         return figNode;
     }
-    
 }

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java	2009-01-25 12:23:28-0800
@@ -34,6 +34,7 @@
 import org.argouml.kernel.DelayedVChangeListener;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigEdge;
 import org.tigris.gef.presentation.FigNode;
 import org.tigris.gef.presentation.FigPoly;
 
@@ -90,7 +91,7 @@
     }
 
     private void constructFigs(FigClassAssociationClass classBoxFig,
-            FigAssociationClass ownerFig) {
+            Fig ownerFig) {
         LOG.info("FigEdgeAssociationClass constructor");
         if (classBoxFig == null) {
             throw new IllegalArgumentException("No class box found while "
@@ -102,10 +103,15 @@
         }
         setDestFigNode(classBoxFig);
         setDestPortFig(classBoxFig);
-        ownerFig.makeEdgePort();
-        FigEdgePort edgePort = ownerFig.getEdgePort();
-        setSourcePortFig(edgePort);
-        setSourceFigNode(edgePort);
+        final FigNode port;
+        if (ownerFig instanceof FigEdgeModelElement) {
+            ((FigEdgeModelElement) ownerFig).makeEdgePort();
+            port = ((FigEdgeModelElement) ownerFig).getEdgePort();
+        } else {
+            port = (FigNode) ownerFig;
+        }
+        setSourcePortFig(port);
+        setSourceFigNode(port);
         computeRoute();
     }
 
@@ -122,6 +128,19 @@
         constructFigs(classBoxFig, ownerFig);
     }
     
+    /**
+     * The constructor for the AssociationClass fig.
+     * 
+     * @param classBoxFig the figure representing the Class
+     * @param ownerFig the owner fig
+     * @param settings render settings
+     */
+    public FigEdgeAssociationClass(FigClassAssociationClass classBoxFig,
+            FigNodeAssociation ownerFig, DiagramSettings settings) {
+        super(ownerFig.getOwner(), settings);
+        constructFigs(classBoxFig, ownerFig);
+    }
+    
     /*
      * @see org.tigris.gef.presentation.FigEdge#setFig(org.tigris.gef.presentation.Fig)
      */

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java	2009-01-25 12:23:28-0800
@@ -26,6 +26,7 @@
 
 import java.awt.Component;
 import java.awt.Point;
+import java.awt.Rectangle;
 import java.beans.PropertyVetoException;
 
 import javax.swing.Action;
@@ -46,6 +47,7 @@
 import org.argouml.ui.CmdCreateNode;
 import org.argouml.uml.UUIDHelper;
 import org.argouml.uml.diagram.ArgoDiagramImpl;
+import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.Relocatable;
 import org.argouml.uml.diagram.UMLMutableGraphSupport;
 import org.argouml.util.ToolBarUtility;
@@ -652,4 +654,42 @@
         return new ModePlace(gf, instructions);
     }
     
+    /**
+     * Create a nary association diamond shaped FigNode on this diagram.
+     *  
+     * @param modelElement the model element this FigNode is to represent
+     * @param bounds the position and size for the diamond node.
+     * @param settings the diagram setting for presentation.
+     * @return The FigNode of the diamond representing the model element
+     */
+    protected FigNode createNaryAssociationNode(
+            final Object modelElement,
+            final Rectangle bounds,
+            final DiagramSettings settings) {
+        
+        final FigNodeAssociation diamondFig =
+            new FigNodeAssociation(modelElement, bounds, settings);
+        if (Model.getFacade().isAAssociationClass(modelElement)
+                && bounds != null) {
+            final FigClassAssociationClass classBoxFig =
+                new FigClassAssociationClass(
+                        modelElement, bounds, settings);
+            final FigEdgeAssociationClass dashEdgeFig =
+                new FigEdgeAssociationClass(
+                        classBoxFig, diamondFig, settings);
+            classBoxFig.renderingChanged();
+            
+            // TODO: Why isn't this calculation for location working?
+            Point location = bounds.getLocation();
+            location.y = (location.y - diamondFig.getHeight()) - 32;
+            if (location.y < 16) {
+                location.y = 16;
+            }
+            classBoxFig.setLocation(location);
+            this.add(diamondFig);
+            this.add(classBoxFig);
+            this.add(dashEdgeFig);
+        }
+        return diamondFig;
+    }
 }

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=1051333

To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.