svn commit: r17304 - trunk/src/argouml-app/src/org/argouml/uml/diagram: . collaboration/ui deployment/ui static_structure/ui ui use_case/ui

Bob Tarling <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: bobtarling
Date: 2009-08-31 14:42:02-0700
New Revision: 17304

Added:
   trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramAssociationSettings.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElementSettings.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociation.java
Modified:
   trunk/src/argouml-app/src/org/argouml/uml/diagram/UmlDiagramRenderer.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/FigAssociationRole.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionSetAddAssociationMode.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationClass.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociationClass.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java

Log:
Set association ends in the constructor of FigAssociation

Added: trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramAssociationSettings.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramAssociationSettings.java?view=markup&pathrev=17304
==============================================================================
--- (empty file)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramAssociationSettings.java	2009-08-31 14:42:02-0700
@@ -0,0 +1,47 @@
+// $Id: eclipse-argo-codetemplates.xml 11347 2006-10-26 22:37:44Z linus $
+// Copyright (c) 2009 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.uml.diagram;
+
+public class DiagramAssociationSettings extends DiagramElementSettings {
+    
+    private final Object associationEnd1;
+    private final Object associationEnd2;
+    
+    public DiagramAssociationSettings(
+            final Object association,
+            final Object associationEnd1,
+            final Object associationEnd2) {
+        super(association);
+        this.associationEnd1 = associationEnd1;
+        this.associationEnd2 = associationEnd2;
+    }
+
+    public Object getAssociationEnd1() {
+        return associationEnd1;
+    }
+    public Object getAssociationEnd2() {
+        return associationEnd2;
+    }
+}

Added: trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElementSettings.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElementSettings.java?view=markup&pathrev=17304
==============================================================================
--- (empty file)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElementSettings.java	2009-08-31 14:42:02-0700
@@ -0,0 +1,45 @@
+// $Id: eclipse-argo-codetemplates.xml 11347 2006-10-26 22:37:44Z linus $
+// Copyright (c) 2009 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.uml.diagram;
+
+/**
+ * Diagram element related settings to be supplied at construction of a
+ * diagram element.
+ *
+ * @author Bob Tarling
+ */
+public class DiagramElementSettings {
+    
+    private final Object owner;
+    
+    public DiagramElementSettings(final Object owner) {
+        this.owner = owner;
+    }
+    
+    public Object getOwner() {
+        return owner;
+    }
+
+}

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/UmlDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/UmlDiagramRenderer.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/UmlDiagramRenderer.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/UmlDiagramRenderer.java	2009-08-31 14:42:02-0700
@@ -317,5 +317,12 @@
         return null;
     }
     
-
+    
+    protected FigNode getFigNodeForAssociationEnd(
+            final ArgoDiagram diagram,
+            final Object associationEnd) {
+        Object classifier = 
+            Model.getFacade().getClassifier(associationEnd);
+        return (FigNode) diagram.presentationFor(classifier);
+    }
 }

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java	2009-08-31 14:42:02-0700
@@ -30,6 +30,7 @@
 import org.argouml.model.Model;
 import org.argouml.uml.CommentEdge;
 import org.argouml.uml.diagram.ArgoDiagram;
+import org.argouml.uml.diagram.DiagramAssociationSettings;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.UmlDiagramRenderer;
 import org.argouml.uml.diagram.static_structure.ui.FigEdgeNote;
@@ -125,7 +126,22 @@
 
         FigEdge newEdge = null;
         if (Model.getFacade().isAAssociationRole(edge)) {
-            newEdge = new FigAssociationRole(edge, settings);
+            Object[] associationEnds = 
+                Model.getFacade().getConnections(edge).toArray();
+            newEdge = new FigAssociationRole(
+                    new DiagramAssociationSettings(
+                            edge, 
+                            associationEnds[0], 
+                            associationEnds[1]), 
+                            settings);
+            FigNode sourceFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[0]);
+            FigNode destFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[1]);
+            newEdge.setSourceFigNode(sourceFig);
+            newEdge.setSourcePortFig(sourceFig);
+            newEdge.setDestFigNode(destFig);
+            newEdge.setDestPortFig(destFig);
         } else if (Model.getFacade().isAGeneralization(edge)) {
             newEdge = new FigGeneralization(edge, settings);
         } else if (Model.getFacade().isADependency(edge)) {

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/FigAssociationRole.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/FigAssociationRole.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/FigAssociationRole.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/FigAssociationRole.java	2009-08-31 14:42:02-0700
@@ -29,12 +29,14 @@
 import java.util.List;
 
 import org.argouml.notation.NotationProviderFactory2;
+import org.argouml.uml.diagram.DiagramElementSettings;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.ui.ArgoFigGroup;
 import org.argouml.uml.diagram.ui.FigAssociation;
 import org.argouml.uml.diagram.ui.FigMessage;
 import org.argouml.uml.diagram.ui.PathItemPlacement;
 import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigPoly;
 
 
 /**
@@ -47,15 +49,33 @@
     private FigMessageGroup messages;
 
     /**
+     * @deprecated Use
+     * FigAssociationClass(Object, Object, Object, DiagramSettings)
+     * @param associationRole The association model element
+     * @param settings The diagram settings
+     */
+    @Deprecated
+    public FigAssociationRole(
+            final Object associationRole, 
+            final DiagramSettings settings) {
+        super(associationRole, settings);
+        
+        messages = new FigMessageGroup(associationRole, settings);
+        addPathItem(messages, new PathItemPlacement(this, messages, 50, 10));
+    }
+    
+    /**
      * Construct an AssociationRole fig with the given onwer and render
      * settings.
      * 
      * @param owner owning UML element
      * @param settings render settings
      */
-    public FigAssociationRole(Object owner, DiagramSettings settings) {
-        super(owner, settings);
-        messages = new FigMessageGroup(owner, settings);
+    public FigAssociationRole(
+            final DiagramElementSettings diagramElementSettings, 
+            final DiagramSettings settings) {
+        super(diagramElementSettings, settings);
+        messages = new FigMessageGroup(getOwner(), settings);
         addPathItem(messages, new PathItemPlacement(this, messages, 50, 10));
     }
     

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java	2009-08-31 14:42:02-0700
@@ -31,6 +31,7 @@
 import org.argouml.model.Model;
 import org.argouml.uml.CommentEdge;
 import org.argouml.uml.diagram.ArgoDiagram;
+import org.argouml.uml.diagram.DiagramAssociationSettings;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.UmlDiagramRenderer;
 import org.argouml.uml.diagram.static_structure.ui.FigEdgeNote;
@@ -106,9 +107,39 @@
         
         FigEdge newEdge = null;
         if (Model.getFacade().isAAssociationClass(edge)) {
-            newEdge = new FigAssociationClass(edge, settings);
+            Object[] associationEnds = 
+                Model.getFacade().getConnections(edge).toArray();
+            newEdge = new FigAssociationClass(
+                    new DiagramAssociationSettings(
+                            edge, 
+                            associationEnds[0], 
+                            associationEnds[1]), 
+                            settings);
+            FigNode sourceFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[0]);
+            FigNode destFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[1]);
+            newEdge.setSourceFigNode(sourceFig);
+            newEdge.setSourcePortFig(sourceFig);
+            newEdge.setDestFigNode(destFig);
+            newEdge.setDestPortFig(destFig);
         } else if (Model.getFacade().isAAssociation(edge)) {
-            newEdge = new FigAssociation(edge, settings);
+            Object[] associationEnds = 
+                Model.getFacade().getConnections(edge).toArray();
+            newEdge = new FigAssociation(
+                    new DiagramAssociationSettings(
+                        edge, 
+                        associationEnds[0], 
+                        associationEnds[1]), 
+                        settings);
+            FigNode sourceFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[0]);
+            FigNode destFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[1]);
+            newEdge.setSourceFigNode(sourceFig);
+            newEdge.setSourcePortFig(sourceFig);
+            newEdge.setDestFigNode(destFig);
+            newEdge.setDestPortFig(destFig);
         } else if (Model.getFacade().isAAssociationEnd(edge)) {
             FigAssociationEnd asend = new FigAssociationEnd(edge, settings);
             Model.getFacade().getAssociation(edge);

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java	2009-08-31 14:42:02-0700
@@ -32,6 +32,7 @@
 import org.argouml.model.Model;
 import org.argouml.uml.CommentEdge;
 import org.argouml.uml.diagram.ArgoDiagram;
+import org.argouml.uml.diagram.DiagramAssociationSettings;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.GraphChangeAdapter;
 import org.argouml.uml.diagram.UmlDiagramRenderer;
@@ -154,7 +155,22 @@
         
         FigEdge newEdge = null;
         if (Model.getFacade().isAAssociationClass(edge)) {
-            newEdge = new FigAssociationClass(edge, settings);
+            Object[] associationEnds = 
+                Model.getFacade().getConnections(edge).toArray();
+            newEdge = new FigAssociationClass(
+                    new DiagramAssociationSettings(
+                            edge, 
+                            associationEnds[0], 
+                            associationEnds[1]), 
+                            settings);
+            FigNode sourceFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[0]);
+            FigNode destFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[1]);
+            newEdge.setSourceFigNode(sourceFig);
+            newEdge.setSourcePortFig(sourceFig);
+            newEdge.setDestFigNode(destFig);
+            newEdge.setDestPortFig(destFig);
         } else if (Model.getFacade().isAAssociationEnd(edge)) {
             FigAssociationEnd asend = new FigAssociationEnd(edge, settings);
             Model.getFacade().getAssociation(edge);
@@ -170,7 +186,22 @@
             asend.setDestFigNode(classifierFN);
             newEdge = asend;
         } else if (Model.getFacade().isAAssociation(edge)) {
-            newEdge = new FigAssociation(edge, settings);
+            Object[] associationEnds = 
+                Model.getFacade().getConnections(edge).toArray();
+            newEdge = new FigAssociation(
+                    new DiagramAssociationSettings(
+                            edge, 
+                            associationEnds[0], 
+                            associationEnds[1]), 
+                            settings);
+            FigNode sourceFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[0]);
+            FigNode destFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[1]);
+            newEdge.setSourceFigNode(sourceFig);
+            newEdge.setSourcePortFig(sourceFig);
+            newEdge.setDestFigNode(destFig);
+            newEdge.setDestPortFig(destFig);
         } else if (Model.getFacade().isALink(edge)) {
             FigLink lnkFig = new FigLink(edge, settings);
             Collection linkEndsColn = Model.getFacade().getConnections(edge);
@@ -259,5 +290,4 @@
         lay.add(newEdge);
         return newEdge;
     }
-
 }

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionSetAddAssociationMode.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionSetAddAssociationMode.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionSetAddAssociationMode.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionSetAddAssociationMode.java	2009-08-31 14:42:02-0700
@@ -57,8 +57,10 @@
     public ActionSetAddAssociationMode(Object aggregationKind,
             boolean unidirectional,
             String name) {
-        super(ModeCreatePolyEdge.class, "edgeClass",
-	      Model.getMetaTypes().getAssociation(), name);
+//        super(ModeCreatePolyEdge.class, "edgeClass",
+//	      Model.getMetaTypes().getAssociation(), name);
+        super(ModeCreateAssociation.class, "edgeClass",
+                Model.getMetaTypes().getAssociation(), name);
         modeArgs.put("aggregation", aggregationKind);
         modeArgs.put("unidirectional", Boolean.valueOf(unidirectional));
     }

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java	2009-08-31 14:42:02-0700
@@ -43,6 +43,8 @@
 import org.argouml.notation.NotationProviderFactory2;
 import org.argouml.ui.ArgoJMenu;
 import org.argouml.ui.targetmanager.TargetManager;
+import org.argouml.uml.diagram.DiagramAssociationSettings;
+import org.argouml.uml.diagram.DiagramElementSettings;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.tigris.gef.presentation.ArrowHead;
 import org.tigris.gef.presentation.ArrowHeadComposite;
@@ -77,23 +79,56 @@
      */
     private FigTextGroup middleGroup;
 
-
+    /**
+     * @deprecated Use
+     * FigAssociation(Object, Object, Object, DiagramSettings)
+     * @param association The association model element
+     * @param settings The diagram settings
+     */
+    @Deprecated
+    public FigAssociation(
+            final Object association, 
+            final DiagramSettings settings) {
+        super(association, settings);
+        
+        createNameLabel(association, settings);
+        
+        Iterator it = Model.getFacade().getAssociationEnds(association).iterator();
+        
+        final Object sourceAssociationEnd = it.next();
+        final Object destAssociationEnd = it.next();
+        
+        createEndFigs(sourceAssociationEnd, destAssociationEnd, settings, 45);
+        
+        setBetweenNearestPoints(true);
+        
+        initializeNotationProvidersInternal(association);
+    }
+    
     /**
      * Constructor used by PGML parser.
      * 
-     * @param owner owning uml element
+     * @param diagramElementSettings the destination uml association-end element
      * @param settings rendering settings
      */
-    public FigAssociation(Object owner, DiagramSettings settings) {
-        super(owner, settings);
+    public FigAssociation(
+            final DiagramElementSettings diagramElementSettings, 
+            final DiagramSettings settings) {
+        super(diagramElementSettings.getOwner(), settings);
         
-        createNameLabel(owner, settings);
+        createNameLabel(getOwner(), settings);
         
-        createEndFigs(owner, settings);
+        final DiagramAssociationSettings set =
+            (DiagramAssociationSettings) diagramElementSettings;
+        
+        createEndFigs(
+                set.getAssociationEnd1(),
+                set.getAssociationEnd2(),
+                settings, 45);
         
         setBetweenNearestPoints(true);
         
-        initializeNotationProvidersInternal(owner);
+        initializeNotationProvidersInternal(getOwner());
     }
     
     /**
@@ -104,17 +139,21 @@
      * That will allow the same pattern to work for UML2 where we cannot assume
      * the connection order.
      * 
-     * @param owner
+     * @param sourceAssociationEnd
+     * @param destAssociationEnd
      * @param settings
      */
     private void createEndFigs(
-            final Object owner,
-            final DiagramSettings settings) {
-        final Object[] ends = // UML objects of AssociationEnd type
-            Model.getFacade().getConnections(owner).toArray();
-        
-        srcEnd = createEnd(ends[0], settings, 0, 5, 135, 5);
-        destEnd = createEnd(ends[1], settings, 100, -5, 45, 5);
+            final Object sourceAssociationEnd,
+            final Object destAssociationEnd,
+            final DiagramSettings settings,
+            final int displacementAngle) {
+        srcEnd = createEnd(
+                sourceAssociationEnd, 
+                settings, 0, 5, 180 - displacementAngle, 5);
+        destEnd = createEnd(
+                destAssociationEnd, 
+                settings, 100, -5, displacementAngle, 5);
     }
     
     private EndDecoration createEnd(

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationClass.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationClass.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationClass.java	2009-08-31 14:42:02-0700
@@ -29,7 +29,9 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.argouml.model.Model;
 import org.argouml.uml.diagram.AttributesCompartmentContainer;
+import org.argouml.uml.diagram.DiagramElementSettings;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.OperationsCompartmentContainer;
 import org.argouml.uml.diagram.PathContainer;
@@ -68,14 +70,36 @@
     private static final long serialVersionUID = 3643715304027095083L;
 
     /**
+     * @deprecated Use
+     * FigAssociationClass(Object, Object, Object, DiagramSettings)
+     * @param associationClass The association model element
+     * @param settings The diagram settings
+     */
+    @Deprecated
+    public FigAssociationClass(
+            final Object associationClass, 
+            final DiagramSettings settings) {
+        super(associationClass, settings);
+        
+        setBetweenNearestPoints(true);
+        ((FigPoly) getFig()).setRectilinear(false);
+        setDashed(false);
+    }
+    
+    
+    
+    
+    /**
      * Construct an association class figure for the given AssociationClass
      * model element using the rendering settings.
      * 
      * @param element model element
      * @param settings rendering settings
      */
-    public FigAssociationClass(Object element, DiagramSettings settings) {
-        super(element, settings);
+    public FigAssociationClass(
+            final DiagramElementSettings diagramElementSettings, 
+            final DiagramSettings settings) {
+        super(diagramElementSettings, settings);
         setBetweenNearestPoints(true);
         ((FigPoly) getFig()).setRectilinear(false);
         setDashed(false);

Added: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociation.java?view=markup&pathrev=17304
==============================================================================
--- (empty file)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociation.java	2009-08-31 14:42:02-0700
@@ -0,0 +1,126 @@
+// $Id: FigStereotype.java 11516 2006-11-25 04:30:15Z tfmorris $
+// Copyright (c) 2006 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies.  This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason.  IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.uml.diagram.ui;
+
+import java.awt.Color;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.argouml.model.IllegalModelElementConnectionException;
+import org.argouml.model.Model;
+import org.argouml.uml.diagram.static_structure.ui.FigClassifierBox;
+import org.tigris.gef.base.Layer;
+import org.tigris.gef.graph.MutableGraphModel;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigEdge;
+import org.tigris.gef.presentation.FigNode;
+
+/**
+ * A Mode to interpret user input while drawing a binary association.
+ * The association can connect two existing classifiers.
+ * 
+ * @author Bob Tarling
+ */
+public class ModeCreateAssociation extends ModeCreateGraphEdge {
+
+    public Object getMetaType() {
+        return Model.getMetaTypes().getAssociation();
+    }
+    
+    /**
+     * Create an edge of the given type and connect it to the
+     * given nodes.
+     *
+     * @param graphModel     the graph model in which to create the connection
+     *                       element
+     * @param edgeType       the UML object type of the connection
+     * @param sourceFigNode      the FigNode for the source element
+     * @param destFigNode        the FigNode for the destination element
+     * @return The FigEdge representing the newly created model element
+     */
+    @Override
+    protected FigEdge buildConnection(
+            MutableGraphModel graphModel,
+            Object edgeType,
+            Fig sourceFigNode,
+            Fig destFigNode) {
+        Object association = graphModel.connect(
+                sourceFigNode.getOwner(), 
+                destFigNode.getOwner(), 
+                edgeType);
+        
+        setNewEdge(association);
+
+        // Calling connect() will add the edge to the GraphModel and
+        // any LayerPersectives on that GraphModel will get a
+        // edgeAdded event and will add an appropriate FigEdge
+        // (determined by the GraphEdgeRenderer).
+
+        if (getNewEdge() != null) {
+            
+            getSourceFigNode().damage();
+            destFigNode.damage();
+            Layer lay = editor.getLayerManager().getActiveLayer();
+            FigAssociation fe = (FigAssociation) lay.presentationFor(getNewEdge());
+            _newItem.setLineColor(Color.black);
+            fe.setFig(_newItem);
+            
+//            boolean flip = false;
+//            
+//            final Iterator iter = 
+//                Model.getFacade().getConnections(association).iterator();
+//            
+//            Object sourceAssociationEnd = iter.next();
+//            Object destAssociationEnd = iter.next();
+//            
+//            if (getArg("unidirectional").equals(Boolean.TRUE)) {
+//                if (!Model.getFacade().isNavigable(destAssociationEnd)) {
+//                    flip = true;
+//                }
+//            } else if (!getArg("aggregation").equals(Model.getAggregationKind().getNone())) {
+//                if (Model.getFacade().getAggregation(destAssociationEnd).equals(
+//                        getArg("aggregation"))) {
+//                    flip = true;
+//                }
+//            }
+//            if (flip) {
+//                fe.setDestPortFig(getStartPortFig());
+//                fe.setDestFigNode(getSourceFigNode());
+//                fe.setSourcePortFig(destFigNode);
+//                fe.setSourceFigNode((FigNode) destFigNode);
+//            } else {
+//                fe.setSourcePortFig(getStartPortFig());
+//                fe.setSourceFigNode(getSourceFigNode());
+//                fe.setDestPortFig(destFigNode);
+//                fe.setDestFigNode((FigNode) destFigNode);
+//            }
+            return fe;
+
+        } else {
+            return null;
+        }
+    }
+    
+}

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociationClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociationClass.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociationClass.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ModeCreateAssociationClass.java	2009-08-31 14:42:02-0700
@@ -33,7 +33,6 @@
 import org.tigris.gef.base.Editor;
 import org.tigris.gef.base.Layer;
 import org.tigris.gef.base.LayerPerspective;
-import org.tigris.gef.base.ModeCreatePolyEdge;
 import org.tigris.gef.graph.MutableGraphModel;
 import org.tigris.gef.presentation.FigEdge;
 
@@ -45,7 +44,7 @@
  * 
  * @author Bob Tarling
  */
-public class ModeCreateAssociationClass extends ModeCreatePolyEdge {
+public class ModeCreateAssociationClass extends ModeCreateAssociation {
 
     private static final long serialVersionUID = -8656139458297932182L;
     

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java?view=diff&pathrev=17304&r1=17303&r2=17304
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java	2009-08-31 14:42:02-0700
@@ -30,6 +30,7 @@
 import org.argouml.model.Model;
 import org.argouml.uml.CommentEdge;
 import org.argouml.uml.diagram.ArgoDiagram;
+import org.argouml.uml.diagram.DiagramAssociationSettings;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.DiagramUtils;
 import org.argouml.uml.diagram.GraphChangeAdapter;
@@ -158,13 +159,29 @@
             throw new IllegalArgumentException("A model edge must be supplied");
         }
 
-        DiagramSettings settings = ((ArgoDiagram) ((LayerPerspective) lay)
-                .getDiagram()).getDiagramSettings();
+        assert lay instanceof LayerPerspective;
+        ArgoDiagram diag = (ArgoDiagram) ((LayerPerspective) lay).getDiagram();
+        DiagramSettings settings = diag.getDiagramSettings();
         
         FigEdge newEdge = null;
 
         if (Model.getFacade().isAAssociation(edge)) {
-            newEdge = new FigAssociation(edge, settings);
+            final Object[] associationEnds = 
+                Model.getFacade().getConnections(edge).toArray();
+            newEdge = new FigAssociation(
+                    new DiagramAssociationSettings(
+                            edge, 
+                            associationEnds[0], 
+                            associationEnds[1]), 
+                            settings);
+            final FigNode sourceFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[0]);
+            final FigNode destFig =
+                getFigNodeForAssociationEnd(diag, associationEnds[1]);
+            newEdge.setSourceFigNode(sourceFig);
+            newEdge.setSourcePortFig(sourceFig);
+            newEdge.setDestFigNode(destFig);
+            newEdge.setDestPortFig(destFig);
         } else if (Model.getFacade().isAGeneralization(edge)) {
             newEdge = new FigGeneralization(edge, settings);
         } else if (Model.getFacade().isAExtend(edge)) {

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

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.