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]].
