Skip to content

Commit

Permalink
Fix ObeoNetwork#46 add a type to actors in use case diagram
Browse files Browse the repository at this point in the history
make a difference between human actor and non human actor
- remove existing tool for actor creation
- create a tool for human actor abble to create new actor or convert
existing actor to "human"
- create a tool for non human actor abble to create new actor or convert
  existing actor to "non human"
  • Loading branch information
fbats committed May 18, 2015
1 parent fdc9380 commit 34b64f9
Show file tree
Hide file tree
Showing 12 changed files with 571 additions and 292 deletions.
66 changes: 51 additions & 15 deletions plugins/org.obeonetwork.dsl.uml2.design/description/uml2.odesign
Expand Up @@ -849,10 +849,19 @@
<layout xsi:type="description_1:CompositeLayout" direction="LeftToRight"/>
<defaultLayer name="Use Case" reusedMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@defaultLayer/@nodeMappings[name='Empty%20Diagram']">
<nodeMappings name="UCD_Actor" deletionDescription="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='DEL_DeleteFromModel']" labelDirectEdit="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='directEdit']/@ownedTools[name='NamedElementServiceDirectEdit']" createElements="false" semanticElements="service:getSemanticElements" doubleClickDescription="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='properties']/@ownedTools[name='Open%20properties%20wizard']" documentation="Mapping to create actors" domainClass="uml.Actor" dropDescriptions="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='Drop%20From%20Diagram'] //@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='Drop%20From%20TreeView']">
<style xsi:type="style:WorkspaceImageDescription" labelSize="9" showIcon="false" resizeKind="NSEW" workspacePath="/org.obeonetwork.dsl.uml2.design/images/actor.svg">
<borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
<labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
</style>
<conditionnalStyles predicateExpression="service:isHumanActor">
<style xsi:type="style:WorkspaceImageDescription" labelSize="9" showIcon="false" resizeKind="NSEW" workspacePath="/org.obeonetwork.dsl.uml2.design/images/actor.svg">
<borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
<labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
</style>
</conditionnalStyles>
<conditionnalStyles predicateExpression="service:isNotHumanActor">
<style xsi:type="style:SquareDescription" labelSize="9" showIcon="false" resizeKind="NSEW" width="3" height="5">
<borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
<labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
<color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
</style>
</conditionnalStyles>
</nodeMappings>
<nodeMappings name="UCD_UseCase" detailDescriptions="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='navigations']/@subSections[name='Activity%20diagram']/@ownedTools[name='Create%20activity%20diagram'] //@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='navigations']/@subSections[name='State%20Machine%20diagram']/@ownedTools[name='Create%20statemachine%20diagram']" navigationDescriptions="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='navigations']/@subSections[name='Activity%20diagram']/@ownedTools[name='Open%20activity%20diagram%20from%20classifier'] //@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='navigations']/@subSections[name='State%20Machine%20diagram']/@ownedTools[name='Open%20statemachine%20diagram']" deletionDescription="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='DEL_DeleteFromModel']" labelDirectEdit="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='directEdit']/@ownedTools[name='NamedElementServiceDirectEdit']" createElements="false" semanticElements="service:getSemanticElements" documentation="Mapping to create Use Cases" domainClass="uml.UseCase" dropDescriptions="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='Drop%20From%20Diagram'] //@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='Drop%20From%20TreeView']">
<style xsi:type="style:WorkspaceImageDescription" labelSize="9" showIcon="false" sizeComputationExpression="14" labelPosition="node" resizeKind="NSEW" workspacePath="/org.obeonetwork.dsl.uml2.design/images/use_case.svg">
Expand Down Expand Up @@ -947,17 +956,6 @@
</ownedTools>
</toolSections>
<toolSections name="Use Case" reusedTools="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='popup%20menu']/@ownedTools[name='EAnnotation']">
<ownedTools xsi:type="tool_1:NodeCreationDescription" documentation="Create an actor" name="Actor" nodeMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Use%20Case%20Diagram']/@defaultLayer/@nodeMappings[name='UCD_Actor']">
<variable name="container"/>
<viewVariable name="containerView"/>
<initialOperation>
<firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:container">
<subModelOperations xsi:type="tool:CreateInstance" typeName="uml.Actor" referenceName="packagedElement">
<subModelOperations xsi:type="tool:SetValue" featureName="name" valueExpression="service:computeDefaultName"/>
</subModelOperations>
</firstModelOperations>
</initialOperation>
</ownedTools>
<ownedTools xsi:type="tool_1:NodeCreationDescription" documentation="Create a new Use Case" name="Use Case" nodeMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Use%20Case%20Diagram']/@defaultLayer/@nodeMappings[name='UCD_UseCase']">
<variable name="container"/>
<viewVariable name="containerView"/>
Expand Down Expand Up @@ -1156,6 +1154,43 @@
</ownedTools>
</subSections>
</toolSections>
<toolSections name="Actors">
<ownedTools xsi:type="tool_1:NodeCreationDescription" documentation="Create a human actor or convert a non human actor to human actor." name="Actor" nodeMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Use%20Case%20Diagram']/@defaultLayer/@nodeMappings[name='UCD_Actor']" extraMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Use%20Case%20Diagram']/@defaultLayer/@nodeMappings[name='UCD_Actor']">
<variable name="container"/>
<viewVariable name="containerView"/>
<initialOperation>
<firstModelOperations xsi:type="tool:ChangeContext" browseExpression="container">
<subModelOperations xsi:type="tool:If" conditionExpression="service:isNotAnActor">
<subModelOperations xsi:type="tool:CreateInstance" typeName="uml.Actor" referenceName="packagedElement">
<subModelOperations xsi:type="tool:SetValue" featureName="name" valueExpression="service:computeDefaultName"/>
<subModelOperations xsi:type="tool:ChangeContext" browseExpression="instance">
<subModelOperations xsi:type="tool:ChangeContext" browseExpression="service:addActorHumanKeyword"/>
</subModelOperations>
</subModelOperations>
</subModelOperations>
<subModelOperations xsi:type="tool:If" conditionExpression="service:isActor">
<subModelOperations xsi:type="tool:ChangeContext" browseExpression="service:addActorHumanKeyword"/>
</subModelOperations>
</firstModelOperations>
</initialOperation>
</ownedTools>
<ownedTools xsi:type="tool_1:NodeCreationDescription" documentation="Create a non human actor or convert a human actor to non human actor." name="Non Human Actor" nodeMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Use%20Case%20Diagram']/@defaultLayer/@nodeMappings[name='UCD_Actor']" extraMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Use%20Case%20Diagram']/@defaultLayer/@nodeMappings[name='UCD_Actor']">
<variable name="container"/>
<viewVariable name="containerView"/>
<initialOperation>
<firstModelOperations xsi:type="tool:ChangeContext" browseExpression="container">
<subModelOperations xsi:type="tool:If" conditionExpression="service:isActor">
<subModelOperations xsi:type="tool:ChangeContext" browseExpression="service:removeActorHumanKeyword"/>
</subModelOperations>
<subModelOperations xsi:type="tool:If" conditionExpression="service:isNotAnActor">
<subModelOperations xsi:type="tool:CreateInstance" typeName="uml.Actor" referenceName="packagedElement">
<subModelOperations xsi:type="tool:SetValue" featureName="name" valueExpression="service:computeDefaultName"/>
</subModelOperations>
</subModelOperations>
</firstModelOperations>
</initialOperation>
</ownedTools>
</toolSections>
<toolSections name="Subjects">
<ownedTools xsi:type="tool_1:ContainerCreationDescription" documentation="Create a new Subject" name="Component" containerMappings="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Use%20Case%20Diagram']/@defaultLayer/@containerMappings[name='UCD_Subject']" iconPath="/org.eclipse.uml2.uml.edit/icons/full/obj16/Component.gif">
<variable name="container"/>
Expand Down Expand Up @@ -1241,6 +1276,7 @@
<ownedJavaExtensions qualifiedClassName="org.obeonetwork.dsl.uml2.design.api.services.ReusedDescriptionServices"/>
<ownedJavaExtensions qualifiedClassName="org.obeonetwork.dsl.uml2.design.api.services.PackageHierarchyServices"/>
<ownedJavaExtensions qualifiedClassName="org.obeonetwork.dsl.uml2.design.api.services.UseCaseDiagramServices"/>
<ownedJavaExtensions qualifiedClassName="org.obeonetwork.dsl.uml2.design.api.services.ActorServices"/>
</ownedViewpoints>
<ownedViewpoints endUserDocumentation="To work on the fine grained structure and the behaviours of the application." name="Design" modelFileExtension="uml">
<ownedRepresentations xsi:type="description_1:DiagramDescription" dropDescriptions="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='Drop%20From%20Diagram'] //@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='Drop%20From%20TreeView']" documentation="Representation to edit class diagrams" name="Class Diagram" titleExpression="[self.oclAsType(uml::NamedElement).name +' Class Diagram'/]" pasteDescriptions="//@ownedViewpoints[name='Capture']/@ownedRepresentations[name='Reused%20Description']/@toolSection/@subSections[name='existingElements']/@ownedTools[name='Paste']" domainClass="uml.Package" preconditionExpression="" enablePopupBars="true">
Expand Down
@@ -0,0 +1,117 @@
/*******************************************************************************
* Copyright (c) 2014 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.obeonetwork.dsl.uml2.design.api.services;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.uml2.uml.Actor;

/**
* Manage the actor mapping according to human or not.
*
* @author Frederic Bats <a href="mailto:frederic.bats@obeo.fr">frederic.bats@obeo.fr</a>
*/
public class ActorServices {
/**
* Human Actor.
*/
public static final String HUMAN = "Human"; //$NON-NLS-1$

/**
* Set as a Human.
*
* @param actor
* Actor to set
*/
public void addActorHumanKeyword(Actor actor) {
addActorKeyword(actor, ActorServices.HUMAN);
}
/**
* Add an actor keyword.
*
* @param actor
* Actor
* @param type
* Keyword
*/
private void addActorKeyword(Actor actor, String type) {
clearActorKeywords(actor);
actor.addKeyword(type);
}

private void clearActorKeywords(Actor actor) {
actor.removeKeyword(HUMAN);
}

private boolean hasKeyword(EObject actor, String keyword) {
if (actor instanceof Actor) {
return ((Actor)actor).getKeywords().contains(keyword);
}
return false;
}

/**
* Check if an object is an Actor.
*
* @param actor
* actor
* @return True if element is a human
*/
public boolean isActor(EObject actor) {

return actor instanceof Actor;
}

/**
* Check if an actor is a human.
*
* @param actor
* actor
* @return True if element is a human
*/
public boolean isHumanActor(EObject actor) {
return hasKeyword(actor, HUMAN);
}

/**
* Check if an object is not an Actor.
*
* @param actor
* actor
* @return True if element is a human
*/
public boolean isNotAnActor(EObject actor) {

return !isActor(actor);
}

/**
* Check if an actor is not a human.
*
* @param actor
* actor
* @return True if element is a human
*/
public boolean isNotHumanActor(EObject actor) {
return !isHumanActor(actor);
}

/**
* Set as a non Human.
*
* @param actor
* Actor to set
*/
public void removeActorHumanKeyword(Actor actor) {
if (isHumanActor(actor)){
clearActorKeywords(actor);
}
}
}
Expand Up @@ -5,12 +5,13 @@ Element-Type: testsuite
Element-Version: 2.0
Id: _rRa48OKrEeStQIBK62bviw
Runtime-Version: 1.5.5.201503020312
Save-Time: 4/17/15 3:50 PM
Save-Time: 5/18/15 5:33 PM

------=_testcase-items-62c497da-4241-31f4-811a-6b453a3ecff8
Content-Type: text/testcase
Entry-Name: testcase-items

_n0tgUP1sEeSktdNXV03Jzw // kind: 'test' name: 'CreateNewNonHumanActorWithPaletteToolInUseCaseDiagram' path: '../UseCaseDiagram/CreateNewNonHumanActorWithPaletteToolInUseCaseDiagram.test'
_zRI8oNPFEeSQYq5tjqphxg // kind: 'test' name: 'DeleteIncludeFromModelInUseCaseDiagram' path: '../UseCaseDiagram/DeleteIncludeFromModelInUseCaseDiagram.test'
_UNKcUNPHEeSQYq5tjqphxg // kind: 'test' name: 'DeleteExtendFromModelInUseCaseDiagram' path: '../UseCaseDiagram/DeleteExtendFromModelInUseCaseDiagram.test'
_Hl-YgNOqEeSYFrQZGshlCQ // kind: 'test' name: 'CreateNewDataTypeWithPaletteToolInUseCaseDiagram' path: '../UseCaseDiagram/CreateNewDataTypeWithPaletteToolInUseCaseDiagram.test'
Expand Down
Expand Up @@ -7,7 +7,7 @@ Element-Version: 3.0
External-Reference:
Id: _ZFOi0NOYEeSYFrQZGshlCQ
Runtime-Version: 1.5.5.201503020312
Save-Time: 4/14/15 3:43 PM
Save-Time: 5/18/15 4:55 PM
Testcase-Type: ecl
Verifications: _fKRHENObEeSYFrQZGshlCQ

Expand Down Expand Up @@ -63,10 +63,6 @@ with [get-editor "NewModel Use Case Diagram" | get-diagram -index 1 | get-edit-p
get-property "element.ownedStyle.centered" | equals None | verify-true
get-property "source.element.name" | equals UseCase1 | verify-true
get-property "target.element.name" | equals UseCase2 | verify-true
get-property "getFigure().getEnd().x" | equals 420 | verify-true
get-property "getFigure().getEnd().y" | equals 260 | verify-true
get-property "getFigure().getStart().x" | equals 410 | verify-true
get-property "getFigure().getStart().y" | equals 147 | verify-true
}
get-editor "NewModel Use Case Diagram" | get-diagram -index 1 | get-edit-part -name "NewModel Use Case Diagram"
| get-edit-part -name UseCase2 | get-target-connection 0 | get-edit-part -className ""
Expand Down
Expand Up @@ -7,7 +7,7 @@ Element-Version: 3.0
External-Reference:
Id: _mqBq8NOgEeSYFrQZGshlCQ
Runtime-Version: 1.5.5.201503020312
Save-Time: 4/14/15 5:13 PM
Save-Time: 5/18/15 5:02 PM
Testcase-Type: ecl
Verifications: _175yMNOjEeSYFrQZGshlCQ

Expand Down Expand Up @@ -62,10 +62,6 @@ with [get-editor "NewModel Use Case Diagram" | get-diagram -index 1 | get-edit-p
//get-property "element.ownedStyle.beginLabelStyle" | equals null | verify-true
//get-property "element.ownedStyle.endLabelStyle" | equals null | verify-true
get-property "element.ownedStyle.centered" | equals None | verify-true
get-property "getFigure().getEnd().x" | equals 420 | verify-true
get-property "getFigure().getEnd().y" | equals 147 | verify-true
get-property "getFigure().getStart().x" | equals 445 | verify-true
get-property "getFigure().getStart().y" | equals 260 | verify-true
get-property "getFigure().isVisible()" | equals true | verify-true
}
// check model
Expand Down Expand Up @@ -110,10 +106,6 @@ with [get-editor "NewModel Use Case Diagram" | get-diagram -index 1 | get-edit-p
//get-property "element.ownedStyle.beginLabelStyle" | equals null | verify-true
//get-property "element.ownedStyle.endLabelStyle" | equals null | verify-true
get-property "element.ownedStyle.centered" | equals None | verify-true
get-property "getFigure().getEnd().x" | equals 80 | verify-true
get-property "getFigure().getEnd().y" | equals 152 | verify-true
get-property "getFigure().getStart().x" | equals 80 | verify-true
get-property "getFigure().getStart().y" | equals 280 | verify-true
}
// check model
with [get-editor "NewModel Use Case Diagram" | get-diagram -index 1 | get-edit-part -name "NewModel Use Case Diagram"
Expand Down
Expand Up @@ -7,7 +7,7 @@ Element-Version: 3.0
External-Reference:
Id: _9GMvUNObEeSYFrQZGshlCQ
Runtime-Version: 1.5.5.201503020312
Save-Time: 4/14/15 5:14 PM
Save-Time: 5/18/15 4:58 PM
Testcase-Type: ecl
Verifications: _5ZgJMNOdEeSYFrQZGshlCQ

Expand Down Expand Up @@ -61,10 +61,6 @@ with [get-editor "NewModel Use Case Diagram" | get-diagram -index 1 | get-edit-p
//get-property "element.ownedStyle.beginLabelStyle" | equals null | verify-true
//get-property "element.ownedStyle.endLabelStyle" | equals null | verify-true
get-property "element.ownedStyle.centered" | equals None | verify-true
get-property "getFigure().getEnd().x" | equals 430 | verify-true
get-property "getFigure().getEnd().y" | equals 147 | verify-true
get-property "getFigure().getStart().x" | equals 450 | verify-true
get-property "getFigure().getStart().y" | equals 260 | verify-true
get-property "getFigure().isVisible()" | equals true | verify-true
get-edit-part -className "" | get-property "getFigure().getText()" | equals "« include »" | verify-true
}
Expand Down

0 comments on commit 34b64f9

Please sign in to comment.