Author: bobtarling
Date: 2010-07-18 06:50:09-0700
New Revision: 18529

Added:
   
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityEdge.java
Modified:
   
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ActivityDiagramRenderer.java
   
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlHelperEUMLImpl.java

Log:
Allow ControlFlow to be added to activity diagram

Modified: 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ActivityDiagramRenderer.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ActivityDiagramRenderer.java?view=diff&pathrev=18529&r1=18528&r2=18529
==============================================================================
--- 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ActivityDiagramRenderer.java
    (original)
+++ 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ActivityDiagramRenderer.java
    2010-07-18 06:50:09-0700
@@ -1,6 +1,6 @@
-/* $Id: ActivityDiagramRenderer.java bobtarling $
+/* $Id: $
  *****************************************************************************
- * Copyright (c) 2009 Contributors - see below
+ * Copyright (c) 2010 Contributors - see below
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@
 import java.util.Map;
 
 import org.apache.log4j.Logger;
+import org.argouml.model.Model;
 import org.argouml.uml.CommentEdge;
 import org.argouml.uml.diagram.ArgoDiagram;
 import org.argouml.uml.diagram.DiagramSettings;
@@ -54,20 +55,20 @@
     }
 
     public FigEdge getFigEdgeFor(GraphModel gm, Layer lay, Object edge,
-                                 Map styleAttributes) {
-        FigEdge figEdge = null;
-        
+            Map styleAttributes) {
+        assert edge != null;
         assert lay instanceof LayerPerspective;
+
         ArgoDiagram diag = (ArgoDiagram) ((LayerPerspective) lay).getDiagram();
         DiagramSettings settings = diag.getDiagramSettings();
-        
-        if (edge instanceof CommentEdge) {
-            figEdge = new FigEdgeNote(edge, settings);
-        } else {
-            figEdge = getFigEdgeFor(edge, styleAttributes);
-        }       
-        addEdge(lay, figEdge, edge);
-        return figEdge;
-    }
+        FigEdge newEdge = null;
 
+        if (Model.getFacade().isAActivityEdge(edge)) {
+            newEdge = new FigActivityEdge(edge, settings);
+        } else if (edge instanceof CommentEdge) {
+            newEdge = new FigEdgeNote(edge, settings);
+        } 
+        addEdge(lay, newEdge, edge);
+        return newEdge;
+    }
 }

Added: 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityEdge.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityEdge.java?view=markup&pathrev=18529
==============================================================================
--- (empty file)
+++ 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityEdge.java
    2010-07-18 06:50:09-0700
@@ -0,0 +1,33 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2009 Contributors - see below
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Bob Tarling
+ *****************************************************************************
+ */
+
+package org.argouml.activity2.diagram;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.argouml.uml.diagram.ui.FigEdgeModelElement;
+import org.argouml.uml.diagram.ui.PathItemPlacement;
+import org.tigris.gef.presentation.ArrowHeadGreater;
+
+public class FigActivityEdge extends FigEdgeModelElement {
+
+    private ArrowHeadGreater endArrow = new ArrowHeadGreater();
+
+    public FigActivityEdge(Object owner, DiagramSettings settings) {
+        super(owner, settings);
+        
+        addPathItem(getNameFig(),
+                new PathItemPlacement(this, getNameFig(), 50, 10));
+        getFig().setLineColor(LINE_COLOR);
+        setDestArrowHead(endArrow);
+    }
+}

Modified: 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java?view=diff&pathrev=18529&r1=18528&r2=18529
==============================================================================
--- 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
 (original)
+++ 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
 2010-07-18 06:50:09-0700
@@ -1,4 +1,4 @@
-/* $Id: UMLActivityDiagram.java  bobtarling $
+/* $Id: $
  *****************************************************************************
  * Copyright (c) 2010 Contributors - see below
  * All rights reserved. This program and the accompanying materials
@@ -28,11 +28,13 @@
 import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.static_structure.ui.FigComment;
+import org.argouml.uml.diagram.ui.ActionSetMode;
 import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.argouml.uml.diagram.ui.RadioAction;
 import org.argouml.uml.diagram.ui.UMLDiagram;
 import org.tigris.gef.base.LayerPerspective;
 import org.tigris.gef.base.LayerPerspectiveMutable;
+import org.tigris.gef.base.ModeCreatePolyEdge;
 import org.tigris.gef.graph.MutableGraphModel;
 import org.tigris.gef.presentation.FigNode;
 
@@ -79,11 +81,12 @@
 
     @Override
     protected Object[] getUmlActions() {
-        Object[] actions =
-        {
-            createAction(Model.getMetaTypes().getCallBehaviorAction(), 
"button.new-callbehavioraction"),
-            createAction(Model.getMetaTypes().getCreateObjectAction(), 
"button.new-createobjectaction"),
-            createAction(Model.getMetaTypes().getDestroyObjectAction(), 
"button.new-destroyobjectaction"),
+        Object[] actions = {
+            getCreateEdgeAction(Model.getMetaTypes().getControlFlow(), 
"button.new-controlflow"),
+            getCreateEdgeAction(Model.getMetaTypes().getObjectFlow(), 
"button.new-objectflow"),
+            getCreateNodeAction(Model.getMetaTypes().getCallBehaviorAction(), 
"button.new-callbehavioraction"),
+            getCreateNodeAction(Model.getMetaTypes().getCreateObjectAction(), 
"button.new-createobjectaction"),
+            getCreateNodeAction(Model.getMetaTypes().getDestroyObjectAction(), 
"button.new-destroyobjectaction"),
         };
         return actions;
     }
@@ -91,11 +94,20 @@
     /**
      * @return Returns a diagram tool creation action.
      */
-    private Action createAction(Object metaType, String label) {
+    private Action getCreateNodeAction(Object metaType, String label) {
         return new RadioAction(
                 new CmdCreateNode(metaType, label));
     }
     
+    protected Action getCreateEdgeAction(Object metaType, String label) {
+        return new RadioAction(
+                new ActionSetMode(
+                        ModeCreatePolyEdge.class,
+                        "edgeClass",
+                        metaType,
+                        label));
+    }    
+    
     @Override
     public String getLabelName() {
         return Translator.localize("label.activity-diagram");
@@ -109,7 +121,9 @@
     
     @Override
     public boolean doesAccept(Object objectToAccept) {
-        if (Model.getFacade().isAComment(objectToAccept) || 
Model.getFacade().isAAction(objectToAccept)) {
+        if (Model.getFacade().isAComment(objectToAccept)
+                || Model.getFacade().isAActivityEdge(objectToAccept) 
+                || Model.getFacade().isAAction(objectToAccept) ) {
             return true;
         }
         return false;

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java?view=diff&pathrev=18529&r1=18528&r2=18529
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
        (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
        2010-07-18 06:50:09-0700
@@ -1,5 +1,5 @@
-// $Id$
-/*******************************************************************************
+/* $Id$
+ 
*******************************************************************************
  * Copyright (c) 2007,2010 Tom Morris and other contributors
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -9,7 +9,7 @@
  * Contributors:
  *    Tom Morris - initial framework
  *    Bogdan Pistol - initial implementation
- *    thn
+ *    Thomas Neustupny
  *    Bob Tarling
  *****************************************************************************/
 
@@ -32,18 +32,23 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.Action;
+import org.eclipse.uml2.uml.ActivityNode;
 import org.eclipse.uml2.uml.Actor;
 import org.eclipse.uml2.uml.AggregationKind;
 import org.eclipse.uml2.uml.Association;
 import org.eclipse.uml2.uml.AssociationClass;
 import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.ControlFlow;
+import org.eclipse.uml2.uml.ControlNode;
 import org.eclipse.uml2.uml.DataType;
 import org.eclipse.uml2.uml.Dependency;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.ElementImport;
 import org.eclipse.uml2.uml.Enumeration;
 import org.eclipse.uml2.uml.EnumerationLiteral;
+import org.eclipse.uml2.uml.ExecutableNode;
 import org.eclipse.uml2.uml.Extend;
 import org.eclipse.uml2.uml.ExtensionPoint;
 import org.eclipse.uml2.uml.Generalization;
@@ -51,6 +56,8 @@
 import org.eclipse.uml2.uml.Interface;
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Node;
+import org.eclipse.uml2.uml.ObjectFlow;
+import org.eclipse.uml2.uml.ObjectNode;
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.Package;
 import org.eclipse.uml2.uml.PackageImport;
@@ -151,6 +158,10 @@
         {Transition.class,       State.class, },
         {AssociationClass.class, Type.class, }, 
         {Property.class, Classifier.class, Association.class, },
+        {ControlFlow.class, ControlNode.class, },
+        {ControlFlow.class, ExecutableNode.class, },
+        {ControlFlow.class, ControlNode.class, ExecutableNode.class, },
+        {ObjectFlow.class, ObjectNode.class, },
 //        {Message.class, ClassifierRole.class },
     };
 
@@ -230,6 +241,22 @@
         } else if (elementType == metaTypes.getInclude()) {
             connection = modelImpl.getUseCasesFactory().buildInclude(
                     fromElement, toElement);
+        } else if (elementType == metaTypes.getControlFlow()) {
+            ActivityNode fromActivity = (ActivityNode) fromElement;
+            ActivityNode toActivity = (ActivityNode) fromElement;
+            ControlFlow cf = UMLFactory.eINSTANCE.createControlFlow();
+            cf.setActivity(fromActivity.getActivity());
+            cf.setSource(fromActivity);
+            cf.setTarget(toActivity);
+            connection = cf;
+        } else if (elementType == metaTypes.getObjectFlow()) {
+            ObjectNode fromObject = (ObjectNode) fromElement;
+            ObjectNode toObject = (ObjectNode) fromElement;
+            ControlFlow of = UMLFactory.eINSTANCE.createControlFlow();
+            of.setActivity(fromObject.getActivity());
+            of.setSource(fromObject);
+            of.setTarget(toObject);
+            connection = of;
         } else if (elementType == metaTypes.getTransition()) {
             connection = modelImpl.getStateMachinesFactory().buildTransition(
                     fromElement, toElement);

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlHelperEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlHelperEUMLImpl.java?view=diff&pathrev=18529&r1=18528&r2=18529
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlHelperEUMLImpl.java
 (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlHelperEUMLImpl.java
 2010-07-18 06:50:09-0700
@@ -20,6 +20,7 @@
 import org.argouml.model.Model;
 import org.argouml.model.UmlHelper;
 import org.eclipse.uml2.uml.Action;
+import org.eclipse.uml2.uml.ActivityEdge;
 import org.eclipse.uml2.uml.Behavior;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.Enumeration;
@@ -78,6 +79,8 @@
             return modelImpl.getCoreHelper().getSource(relationship);
         } else if (relationship instanceof Transition) {
             return modelImpl.getStateMachinesHelper().getSource(relationship);
+        } else if (relationship instanceof ActivityEdge) {
+            return ((ActivityEdge) relationship).getSource();
         } else if (relationship instanceof Property) {
             // TODO: We expect an association end here - check more carefully? 
- tfm
             return modelImpl.getCoreHelper().getSource(relationship);
@@ -88,17 +91,19 @@
     /*
      * @see org.argouml.model.UmlHelper#getDestination(java.lang.Object)
      */
-    public Object getDestination(Object relationShip) {
-        if (relationShip instanceof Relationship) {
+    public Object getDestination(Object relationship) {
+        if (relationship instanceof Relationship) {
             // handles all children of relationship including extend and
             // include which are not members of core
-            return modelImpl.getCoreHelper().getDestination(relationShip);
-        } else if (relationShip instanceof Transition) {
+            return modelImpl.getCoreHelper().getDestination(relationship);
+        } else if (relationship instanceof ActivityEdge) {
+            return ((ActivityEdge) relationship).getTarget();
+        } else if (relationship instanceof Transition) {
             return modelImpl.getStateMachinesHelper().
-                    getDestination(relationShip);
-        } else if (relationShip instanceof Property) {
+                    getDestination(relationship);
+        } else if (relationship instanceof Property) {
             // TODO: We expect an association end here - check more carefully? 
- tfm
-            return modelImpl.getCoreHelper().getDestination(relationShip);
+            return modelImpl.getCoreHelper().getDestination(relationship);
         }
         throw new IllegalArgumentException();
     }

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

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to