In SystemWeaver, sequence diagrams are configured using the configurable graph config item. With a valid sequence diagram configuration in place, users can visualize and edit object interactions arranged in the sequence. This article describes the Sequence Diagram model, and provides a configuration example.
Prerequisites
- Familiarity with SystemWeaver concepts such as Items, Parts and Attributes
- Knowledge of XML
- Configuring Graphs
- Assignment of the SW Architect role in the server
- An installation of the SystemWeaver Explorer client (swExplorer)
- Configurable Graph meta data is installed
Example Required Meta Model
The below illustration shows the basic meta model supporting the Sequence Diagram graph.
Item Types
Icon | Name | SID |
---|---|---|
Abstract Diagram | SI0415 | |
Abstract Sequence Diagram | SI0343 | |
Abstract Connection Point | SI0349 | |
Abstract Open Connection Point(s) | SI0350 | |
Gate | SI0347 | |
Lifeline | SI0342 | |
Sequence Diagram | SI0351 | |
Endpoint | SI0346 | |
Abstract Fragment | SI0352 | |
Fragment | SI0344 | |
Frame | SI0345 | |
Message | SI0345 |
Part Types
Icon | Name | SID |
---|---|---|
Sequence Diagram(s) | SP0568 | |
Diagram Object(s) | SP0485 | |
Message(s) | SP0486 | |
Fragment(s) | SP0487 | |
From | SP0483 | |
To | SP0484 | |
Frame(s) | SP0489 | |
Referenced Sequence Diagram | SP0488 |
Attribute Types
Name | SID | Type | Dimension | Values | Related Item Type |
Time Unit | SA0092 | Enumeration | Single | s, ms, us | SI0351 |
Fragment Type | SA0804 | Enumeration | Single | Alternative, If, Loop, Negation, Paralell, Region | SI0344 |
Kind | SA0807 | Enumeration | Single | Call, Signal | SI0348 |
Return message | SA0089 | Boolean | Single | SI0348 | |
Synch | SA0806 | Enumeration | Single | Synchronous, Asynchronous | SI0348 |
Configuring the View
A sequence diagram is defined using a configurable graph. The graph is a Config item and is created using the config item Sandbox mode as described in Creating Config Item Views. By default, the Sandbox will include a few basic elements of a configuration to get you started, as shown below.
Tip: A quick way to create a new sequence diagram is to copy a similar one that is already defined as described in Creating a New Config Item by Copying an Existing. |
Explanation of the Configuration Elements
A Sequence Diagram is configured within a <Graph> and all Graph options apply. For the configuration elements specific to Sequence Diagram, see the Script Language Reference Manual in the application Help.
Example Sequence Diagram
Example Data
Example Configuration
<Graph> <Mappings> <MappingItem id="1" leftCaption="Send Message ? " rightCaption="Receive Message ? " distinctMappingPerPair="true" multipleDistinctMappingPerPair="true"> <PathFromMainToMappingContainer select="."/> <MappingItem itemType="SI0348" partType="SP0486"/> <LeftMapping itemType="SI0350" partType="SP0483"/> <RightMapping itemType="SI0349" partType="SP0484"/> </MappingItem> </Mappings> <NodeStyles> <NodeStyle name="LifeLine" fillColor="#ffffff" fillColor2="#ffffff"> <Shape> <Rectangle/> <!--Rectangle width="120" height="80"/--> </Shape> </NodeStyle> <NodeStyle name="Boundary" fillColor="#ffffff" fillColor2="#ffffff"> <Shape> <Boundary/> <!--Boundary width="100" height="100"/--> </Shape> </NodeStyle> <NodeStyle name="Control" fillColor="#ffffff" fillColor2="#ffffff"> <Shape> <Control/> <!--Control width="100" height="100"/--> </Shape> </NodeStyle> <NodeStyle name="Entity" fillColor="#ffffff" fillColor2="#ffffff"> <Shape> <Entity/> <!--Entity width="100" height="100"/--> </Shape> </NodeStyle> <NodeStyle name="Actor" fillColor="#ffffff" fillColor2="#ffffff"> <Shape> <Actor/> <!--Actor width="50" height="100"/--> </Shape> </NodeStyle> <NodeStyle name="Gate" fillColor="#ffff00" fillColor2="#ffffff"> <Shape> <Rectangle width="40" height="40"/> </Shape> </NodeStyle> <NodeStyle name="EndPoint" fillColor="#000000" fillColor2="#000000"> <Shape> <Circle diameter="40"/> </Shape> </NodeStyle> <NodeStyle name="Ref" fillColor="#87cefa" fillColor2="#ffffff"> <Shape> <Package/> </Shape> </NodeStyle> </NodeStyles> <EdgeStyles> <EdgeStyle name="Message" color="#000000" thickness="1" lineType="solid" fromArrowType="none" toArrowType="default"/> <EdgeStyle name="ReturnMessage" color="#000000" thickness="2" lineType="dash" fromArrowType="none" toArrowType="default"/> <EdgeStyle name="LifeLineEdge" color="#000000" thickness="1" lineType="dash"/> </EdgeStyles> <SequenceDiagram> <AddPart owner="." partType="SP0485"/> <AddPart owner="." partType="SP0487"/> <AddPart owner="." partType="SP0488"/> <ForEach select="/part::SP0485.OrderBy(PartNo)"> <Variable name="currentPart" as="Part" select="."/> <DefObj> <Choose> <!--Gate--> <When test="SID='SI0347'"> <Gate> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Gate> </When> <!--EndPoint--> <When test="SID='SI0346'"> <Endpoint> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Endpoint> </When> <!--Actor--> <When test="@SA0803 = 'Actor'"> <Lifeline headStyle="Actor" lineStyle="LifeLineEdge"> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Lifeline> </When> <!--Lifeline --> <When test="@SA0803 = 'Lifeline'"> <Lifeline headStyle="LifeLine" lineStyle="LifeLineEdge"> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Lifeline> </When> <!--Boundary--> <When test="@SA0803 = 'Boundary'"> <Lifeline headStyle="Boundary" lineStyle="LifeLineEdge"> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Lifeline> </When> <!--Control--> <When test="@SA0803 = 'Control'"> <Lifeline headStyle="Control" lineStyle="LifeLineEdge"> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Lifeline> </When> <!--Entity--> <When test="@SA0803 = 'Entity'"> <Lifeline headStyle="Entity" lineStyle="LifeLineEdge"> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Lifeline> </When> <Otherwise> <Lifeline headStyle="LifeLine" lineStyle="LifeLineEdge"> <RemovePart part="$currentPart" caption="Remove #{? /defobj::.Join('')}"/> </Lifeline> </Otherwise> </Choose> </DefObj> </ForEach> <ForEach select="/part::SP0486.OrderBy(PartNo)"> <Variable name="part" select="." as="Part"/> <DefObj> <Message from="/SP0483" to="/SP0484" style="#{? if @SA0089 = true then 'ReturnMessage' else 'Message'}"> <RemovePart part="$part" caption="Remove Message"/> </Message> </DefObj> </ForEach> <ForEach select="/part::SP0487"> <Fragment caption="#{Name} "> <RemovePart part="." caption="Remove Fragment"/> <DefObj> <AddPart owner="." partType="SP0489"/> <RemovePart part="/part::SP0489" caption="Remove (->) #{Name}"/> <ForEach select="/part::SP0489"> <Variable name="frame" select="." as="Part"/> <DefObj> <AddPart owner="." partType="SP0490" caption="Add a message to #{Name}" pathToOwner="[$frame]"/> </DefObj> </ForEach> <ForEach select="/SP0489"> <AddPart owner="." partType="SP0491" caption="Nested Fragment to #{Name}"/> </ForEach> <ForEach select="/PIFFS union /PELSE union /PSDLF union /SP0489 union /PSDNF union /PSDPF union /PSDRFF union /PSDRF"> <Frame caption="#{Name}"> <ForEach select="/part::SP0490"> <MessageRef id="/defobj::"/> </ForEach> </Frame> </ForEach> </DefObj> </Fragment> </ForEach> <ForEach select="/SP0488"> <Endpoint style="Ref"/> </ForEach> </SequenceDiagram> </Graph>