Author: bobtarling Date: 2011-03-25 12:27:33-0700 New Revision: 19138 Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ActionAddClassifierRole.java trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/SequenceDiagramGraphModel.java trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/UMLSequenceDiagram.java trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CollaborationsFactoryMDRImpl.java trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java trunk/src/argouml-core-model/src/org/argouml/model/CollaborationsFactory.java trunk/src/argouml-core-model/src/org/argouml/model/Facade.java trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java
Log: Allow a lifeline to be placed on a sequence diagram in UML2 Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ActionAddClassifierRole.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ActionAddClassifierRole.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ActionAddClassifierRole.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ActionAddClassifierRole.java 2011-03-25 12:27:33-0700 @@ -75,16 +75,10 @@ Editor ce = Globals.curEditor(); GraphModel gm = ce.getGraphModel(); if (gm instanceof SequenceDiagramGraphModel) { - Object collaboration = - ((SequenceDiagramGraphModel) gm).getCollaboration(); + Object owner = + ((SequenceDiagramGraphModel) gm).getOwner(); node = - Model.getCollaborationsFactory().buildClassifierRole( - collaboration); - /* - Model.getCoreHelper().setNamespace( - node, - Model.getFacade().getNamespace( collaboration)); - */ + Model.getCollaborationsFactory().buildLifeline(owner); } else { throw new IllegalStateException("Graphmodel is not a " + "sequence diagram graph model"); Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/SequenceDiagramGraphModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/SequenceDiagramGraphModel.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/SequenceDiagramGraphModel.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/SequenceDiagramGraphModel.java 2011-03-25 12:27:33-0700 @@ -201,6 +201,20 @@ return interaction; } + /** + * In UML1.4 the sequence diagram is owned by a collaboration. + * In UML2 it is owned by an Interaction (which might itself be owned by a + * collaboration or some other namespace) + * @return the owner of the sequence diagram + */ + public Object getOwner() { + if (Model.getFacade().getUmlVersion().charAt(0) == '1') { + return getCollaboration(); + } else { + return getInteraction(); + } + } + /* * @see org.tigris.gef.graph.MutableGraphModel#canAddNode(java.lang.Object) */ Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/UMLSequenceDiagram.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/UMLSequenceDiagram.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/UMLSequenceDiagram.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/UMLSequenceDiagram.java 2011-03-25 12:27:33-0700 @@ -233,7 +233,9 @@ */ @Override public boolean doesAccept(Object objectToAccept) { - if (Model.getFacade().isAClassifier(objectToAccept)) { + if (Model.getFacade().isALifeline(objectToAccept)) { + return true; + } else if (Model.getFacade().isAClassifier(objectToAccept)) { return true; } else if (Model.getFacade().isAComment(objectToAccept)) { return true; Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java 2011-03-25 12:27:33-0700 @@ -17,6 +17,7 @@ import org.eclipse.uml2.uml.Collaboration; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Interaction; +import org.eclipse.uml2.uml.Lifeline; import org.eclipse.uml2.uml.Message; import org.eclipse.uml2.uml.UMLFactory; @@ -78,10 +79,16 @@ } public Object buildClassifierRole(Object collaboration) { - // TODO: Auto-generated method stub - return null; + throw new IllegalArgumentException( + "No such thing as ClassifierRole in UML2"); //$NON-NLS-1$ } - + + public Object buildLifeline(Object interaction) { + Lifeline lifeline = createLifeline(); + lifeline.setInteraction((Interaction) interaction); + return lifeline; + } + // TODO: All build/create methods need Undo support - tfm public Collaboration buildCollaboration(Object handle) { @@ -92,16 +99,14 @@ public Collaboration buildCollaboration(Object namespace, Object representedElement) { - Collaboration collab = buildCollaboration(namespace); - Classifier cls = (Classifier) representedElement; - - // TODO: Auto-generated method stub - return collab; + throw new IllegalArgumentException("A collaboration is only attached to a namespace in UML2"); } - public Object buildInteraction(Object handle) { - // TODO: Auto-generated method stub - return null; + public Object buildInteraction(Object collaboration) { + Interaction interaction = createInteraction(); + Collaboration collab = (Collaboration) collaboration; + modelImpl.getCoreHelper().addOwnedElement(collab, interaction); + return interaction; } public Message buildMessage(Object acollab, Object arole) { @@ -120,8 +125,7 @@ } public Object createClassifierRole() { - // TODO: Auto-generated method stub - return null; + return UMLFactory.eINSTANCE.createLifeline(); } public Collaboration createCollaboration() { @@ -141,6 +145,10 @@ // TODO: Auto-generated method stub return null; } + + public Lifeline createLifeline() { + return UMLFactory.eINSTANCE.createLifeline(); + } public Message createMessage() { return UMLFactory.eINSTANCE.createMessage(); Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java 2011-03-25 12:27:33-0700 @@ -37,107 +37,10 @@ import org.eclipse.emf.ecore.impl.DynamicEObjectImpl; 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.AcceptEventAction; -import org.eclipse.uml2.uml.Action; -import org.eclipse.uml2.uml.ActivityEdge; -import org.eclipse.uml2.uml.ActivityNode; -import org.eclipse.uml2.uml.ActivityPartition; -import org.eclipse.uml2.uml.Actor; -import org.eclipse.uml2.uml.AggregationKind; -import org.eclipse.uml2.uml.Artifact; -import org.eclipse.uml2.uml.Association; -import org.eclipse.uml2.uml.AssociationClass; -import org.eclipse.uml2.uml.Behavior; -import org.eclipse.uml2.uml.BehavioralFeature; -import org.eclipse.uml2.uml.CallAction; -import org.eclipse.uml2.uml.CallEvent; -import org.eclipse.uml2.uml.ChangeEvent; +import org.eclipse.uml2.uml.*; import org.eclipse.uml2.uml.Class; -import org.eclipse.uml2.uml.Classifier; -import org.eclipse.uml2.uml.Collaboration; -import org.eclipse.uml2.uml.CollaborationUse; -import org.eclipse.uml2.uml.Comment; -import org.eclipse.uml2.uml.Component; -import org.eclipse.uml2.uml.Constraint; -import org.eclipse.uml2.uml.CreateObjectAction; -import org.eclipse.uml2.uml.DataType; -import org.eclipse.uml2.uml.Dependency; -import org.eclipse.uml2.uml.DestroyObjectAction; -import org.eclipse.uml2.uml.DirectedRelationship; -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.Event; -import org.eclipse.uml2.uml.Expression; -import org.eclipse.uml2.uml.Extend; -import org.eclipse.uml2.uml.Extension; -import org.eclipse.uml2.uml.ExtensionPoint; -import org.eclipse.uml2.uml.Feature; -import org.eclipse.uml2.uml.FinalState; -import org.eclipse.uml2.uml.Generalization; -import org.eclipse.uml2.uml.GeneralizationSet; -import org.eclipse.uml2.uml.Include; -import org.eclipse.uml2.uml.InputPin; -import org.eclipse.uml2.uml.InstanceSpecification; -import org.eclipse.uml2.uml.Interface; -import org.eclipse.uml2.uml.LiteralBoolean; -import org.eclipse.uml2.uml.LiteralInteger; -import org.eclipse.uml2.uml.LiteralString; -import org.eclipse.uml2.uml.LiteralUnlimitedNatural; -import org.eclipse.uml2.uml.Message; -import org.eclipse.uml2.uml.Model; -import org.eclipse.uml2.uml.MultiplicityElement; -import org.eclipse.uml2.uml.NamedElement; -import org.eclipse.uml2.uml.Namespace; -import org.eclipse.uml2.uml.Node; -import org.eclipse.uml2.uml.ObjectFlow; -import org.eclipse.uml2.uml.ObjectNode; -import org.eclipse.uml2.uml.OpaqueBehavior; -import org.eclipse.uml2.uml.OpaqueExpression; -import org.eclipse.uml2.uml.Operation; -import org.eclipse.uml2.uml.OutputPin; -import org.eclipse.uml2.uml.PackageImport; -import org.eclipse.uml2.uml.PackageableElement; -import org.eclipse.uml2.uml.Parameter; -import org.eclipse.uml2.uml.ParameterDirectionKind; -import org.eclipse.uml2.uml.PrimitiveType; -import org.eclipse.uml2.uml.Profile; -import org.eclipse.uml2.uml.ProfileApplication; -import org.eclipse.uml2.uml.Property; -import org.eclipse.uml2.uml.Pseudostate; -import org.eclipse.uml2.uml.PseudostateKind; -import org.eclipse.uml2.uml.Reception; -import org.eclipse.uml2.uml.RedefinableElement; -import org.eclipse.uml2.uml.Region; -import org.eclipse.uml2.uml.Relationship; -import org.eclipse.uml2.uml.SendObjectAction; -import org.eclipse.uml2.uml.SendSignalAction; -import org.eclipse.uml2.uml.Signal; -import org.eclipse.uml2.uml.SignalEvent; -import org.eclipse.uml2.uml.State; -import org.eclipse.uml2.uml.StateMachine; -import org.eclipse.uml2.uml.Stereotype; -import org.eclipse.uml2.uml.StructuralFeature; -import org.eclipse.uml2.uml.TemplateBinding; -import org.eclipse.uml2.uml.TemplateParameter; -import org.eclipse.uml2.uml.TemplateParameterSubstitution; -import org.eclipse.uml2.uml.TemplateableElement; -import org.eclipse.uml2.uml.TimeEvent; -import org.eclipse.uml2.uml.Transition; -import org.eclipse.uml2.uml.Trigger; -import org.eclipse.uml2.uml.Type; -import org.eclipse.uml2.uml.TypedElement; -import org.eclipse.uml2.uml.UMLPackage; -import org.eclipse.uml2.uml.Usage; -import org.eclipse.uml2.uml.UseCase; -import org.eclipse.uml2.uml.ValueSpecification; -import org.eclipse.uml2.uml.Vertex; -import org.eclipse.uml2.uml.VisibilityKind; import org.eclipse.uml2.uml.resource.UMLResource; - /** * The implementation of the Facade for EUML2. * @@ -364,8 +267,16 @@ } public Collection getBases(Object handle) { - throw new NotYetImplementedException(); - + if (!(handle instanceof Lifeline)) { + throw new IllegalArgumentException( + "Lifeline expected - got " + handle); //$NON-NLS-1$ + } + Lifeline lifeline = (Lifeline) handle; + List bases = new ArrayList(1); + if (lifeline.getRepresents() != null) { + bases.add(lifeline.getRepresents()); + } + return bases; } public Object getBehavioralFeature(Object handle) { @@ -1882,10 +1793,7 @@ } public boolean isAClassifierRole(Object handle) { - // TODO: In UML 2.0, ClassifierRole, AssociationRole, and - // AssociationEndRole have been replaced by the internal - // structure of the Collaboration - return false; + return handle instanceof Lifeline; } public boolean isACollaboration(Object handle) { @@ -2041,6 +1949,10 @@ return handle instanceof Interface; } + public boolean isALifeline(Object handle) { + return handle instanceof Lifeline; + } + public boolean isALink(Object handle) { // TODO: check semantics here - tfm if (!(handle instanceof InstanceSpecification)) { Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java 2011-03-25 12:27:33-0700 @@ -684,6 +684,10 @@ return null /*InteractionInstanceSet.class*/; } + public Object getLifeline() { + return Lifeline.class; + } + public Object getLinkEnd() { // TODO: Need UML 2.x equivalent return null /*LinkEnd.class*/; 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=19138&r1=19137&r2=19138 ============================================================================== --- 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 2011-03-25 12:27:33-0700 @@ -355,6 +355,8 @@ "Attempt to instantiate abstract type"); //$NON-NLS-1$ } else if (elementType == metaTypes.getClassifierRole()) { o = modelImpl.getCollaborationsFactory().createClassifierRole(); + } else if (elementType == metaTypes.getLifeline()) { + o = modelImpl.getCollaborationsFactory().createLifeline(); } else if (elementType == metaTypes.getComponent()) { o = modelImpl.getCoreFactory().createComponent(); } else if (elementType == metaTypes.getComponentInstance()) { Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CollaborationsFactoryMDRImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CollaborationsFactoryMDRImpl.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CollaborationsFactoryMDRImpl.java (original) +++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CollaborationsFactoryMDRImpl.java 2011-03-25 12:27:33-0700 @@ -111,10 +111,7 @@ public ClassifierRole createClassifierRole() { - ClassifierRole myClassifierRole = - getCollabPkg().getClassifierRole().createClassifierRole(); - super.initialize(myClassifierRole); - return myClassifierRole; + return createLifeline(); } @@ -151,6 +148,13 @@ return obj; } + public ClassifierRole createLifeline() { + ClassifierRole myClassifierRole = + getCollabPkg().getClassifierRole().createClassifierRole(); + super.initialize(myClassifierRole); + return myClassifierRole; + } + public Message createMessage() { Message myMessage = @@ -216,7 +220,15 @@ inter.setName("newInteraction"); return inter; } - + + public ClassifierRole buildLifeline(Object collaboration) { + Collaboration myCollaboration = (Collaboration) collaboration; + ClassifierRole classifierRole = createClassifierRole(); + classifierRole.setNamespace(myCollaboration); + modelImpl.getCoreHelper().setMultiplicity(classifierRole, 1, 1); + return classifierRole; + } + public AssociationEndRole buildAssociationEndRole(Object atype) { ClassifierRole type = (ClassifierRole) atype; @@ -225,8 +237,6 @@ return end; } - - public AssociationRole buildAssociationRole(Object from, Object to) { return buildAssociationRole((ClassifierRole) from, (ClassifierRole) to); } Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java (original) +++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java 2011-03-25 12:27:33-0700 @@ -526,6 +526,10 @@ public boolean isAInterface(Object handle) { return handle instanceof Interface; } + + public boolean isALifeline(Object handle) { + return handle instanceof ClassifierRole; + } public boolean isALink(Object handle) { return handle instanceof Link; Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java (original) +++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java 2011-03-25 12:27:33-0700 @@ -432,6 +432,10 @@ return Interface.class; } + public Object getLifeline() { + return ClassifierRole.class; + } + public Object getLink() { return Link.class; } Modified: trunk/src/argouml-core-model/src/org/argouml/model/CollaborationsFactory.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/CollaborationsFactory.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/CollaborationsFactory.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/CollaborationsFactory.java 2011-03-25 12:27:33-0700 @@ -64,6 +64,13 @@ Object createClassifierRole(); /** + * Create an empty but initialized instance of a UML ClassifierRole. + * + * @return an initialized UML ClassifierRole instance. + */ + Object createLifeline(); + + /** * Create an empty but initialized instance of a UML Collaboration. * * @return an initialized UML Collaboration instance. @@ -198,6 +205,15 @@ * @return the newly created association role (an Object) */ Object buildAssociationRole(Object link); + + /** + * Creates a lifeline and adds it to the given interaction. + * + * @param interaction the given interaction + * @return the created lifeline + */ + Object buildLifeline(Object interaction); + /** * Builds a message within some collaboration or interaction. Modified: trunk/src/argouml-core-model/src/org/argouml/model/Facade.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/Facade.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/Facade.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/Facade.java 2011-03-25 12:27:33-0700 @@ -674,6 +674,15 @@ boolean isAInterface(Object handle); /** + * Recognizer for Lifeline. + * + * @param handle candidate + * @return true if handle is a Lifeline + */ + boolean isALifeline(Object handle); + + + /** * Recognizer for Link. * * @param handle candidate Modified: trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java?view=diff&pathrev=19138&r1=19137&r2=19138 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java 2011-03-25 12:27:33-0700 @@ -352,6 +352,11 @@ Object getInterface(); /** + * @return Returns the Lifeline. + */ + Object getLifeline(); + + /** * @return Returns the Link. */ Object getLink(); ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2714215 To unsubscribe from this discussion, e-mail: [[email protected]].
