Skip to content

Commit

Permalink
[538] Add actions in PartUsage and PartDefinition
Browse files Browse the repository at this point in the history
Bug: eclipse-syson#538
Signed-off-by: Gwendal Daniel <gwendal.daniel@obeosoft.com>
  • Loading branch information
gdaniel committed Jul 15, 2024
1 parent 5f2049f commit 38be023
Show file tree
Hide file tree
Showing 13 changed files with 137 additions and 32 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ The tool now works correctly on packages, and doesn't render sibling elements wh
- https://github.com/eclipse-syson/syson/issues/540[#540] [syson] Allow the creation of sub-Packages in the model explorer
- https://github.com/eclipse-syson/syson/issues/542[#542] [tests] Enable Action's sub-node creation tests for free form items
These tests were de-activated because of an issue in https://github.com/eclipse-syson/syson/issues/542[Sirius Web].
- https://github.com/eclipse-syson/syson/issues/538[#538] [general-view] Add actions in PartUsage and PartDefinition

=== New features

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,9 @@ private Collection<String> collectAQLExpressionsInNodeDescription(NodeDescriptio
Optional.ofNullable(nodeDescription.getIsHiddenByDefaultExpression())
.map(expressions::add);

Optional.ofNullable(nodeDescription.getPreconditionExpression())
.map(expressions::add);


List<Tool> nodeTools = Optional.ofNullable(nodeDescription.getPalette()).stream()
.flatMap(palette -> EMFUtils.allContainedObjectOfType(palette, Tool.class))
Expand Down Expand Up @@ -180,6 +183,9 @@ private Collection<String> collectAQLExpressionsInEdgeDescription(EdgeDescriptio
Optional.ofNullable(edgeDescription.getTargetNodesExpression())
.map(expressions::add);

Optional.ofNullable(edgeDescription.getPreconditionExpression())
.map(expressions::add);

List<Tool> edgeTools = Optional.ofNullable(edgeDescription.getPalette()).stream()
.flatMap(palette -> EMFUtils.allContainedObjectOfType(palette, Tool.class))
.toList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ private static Stream<Arguments> itemDefinitionChildNodeParameters() {
private static Stream<Arguments> itemUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getPortUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPort(), 3))
.map(TestNameGenerator::namedArguments);
}
Expand All @@ -197,8 +197,8 @@ private static Stream<Arguments> packageChildNodeParameters() {
Arguments.of(SysmlPackage.eINSTANCE.getItemDefinition(), ownedMember, 2),
// A package doesn't have a compartment: it is handled as a custom node
Arguments.of(SysmlPackage.eINSTANCE.getPackage(), ownedMember, 0),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), ownedMember, 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartDefinition(), ownedMember, 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), ownedMember, 5),
Arguments.of(SysmlPackage.eINSTANCE.getPartDefinition(), ownedMember, 5),
Arguments.of(SysmlPackage.eINSTANCE.getAllocationUsage(), ownedMember, 2),
Arguments.of(SysmlPackage.eINSTANCE.getAllocationDefinition(), ownedMember, 2),
Arguments.of(SysmlPackage.eINSTANCE.getInterfaceUsage(), ownedMember, 3),
Expand Down Expand Up @@ -234,7 +234,7 @@ private static Stream<Arguments> partDefinitionChildNodeParameters() {
private static Stream<Arguments> partDefinitionSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 3))
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 5))
.map(TestNameGenerator::namedArguments);
}

Expand All @@ -249,14 +249,14 @@ private static Stream<Arguments> partUsageChildNodeParameters() {
private static Stream<Arguments> partUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedUsage(), 3))
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedUsage(), 5))
.map(TestNameGenerator::namedArguments);
}

private static Stream<Arguments> allocationUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedUsage(), 3))
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedUsage(), 5))
.map(TestNameGenerator::namedArguments);
}

Expand All @@ -270,7 +270,7 @@ private static Stream<Arguments> allocationUsageChildNodeParameters() {
private static Stream<Arguments> allocationDefinitionSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 3))
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 5))
.map(TestNameGenerator::namedArguments);
}

Expand All @@ -283,7 +283,7 @@ private static Stream<Arguments> allocationDefinitionChildNodeParameters() {
private static Stream<Arguments> interfaceUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedUsage(), 3))
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedUsage(), 5))
.map(TestNameGenerator::namedArguments);
}

Expand All @@ -307,7 +307,7 @@ private static Stream<Arguments> interfaceDefinitionChildNodeParameters() {
private static Stream<Arguments> portUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getPortUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPort(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3))
.map(TestNameGenerator::namedArguments);
}
Expand All @@ -322,7 +322,7 @@ private static Stream<Arguments> portUsageChildNodeParameters() {

private static Stream<Arguments> portDefinitionSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedItem(), 3))
.map(TestNameGenerator::namedArguments);
}
Expand All @@ -345,7 +345,7 @@ private static Stream<Arguments> acceptActionUsagePayloadParameters() {

private static Stream<Arguments> actionUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getAttributeUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPortUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPort(), 3))
.map(TestNameGenerator::namedArguments);
Expand Down Expand Up @@ -389,7 +389,7 @@ private static Stream<Arguments> constraintUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getAttributeUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getPortUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPort(), 3))
.map(TestNameGenerator::namedArguments);
}
Expand All @@ -403,7 +403,7 @@ private static Stream<Arguments> constraintUsageChildNodeParameters() {

private static Stream<Arguments> constraintDefinitionSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedUsage(), 3))
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedUsage(), 5))
.map(TestNameGenerator::namedArguments);
}

Expand All @@ -417,7 +417,7 @@ private static Stream<Arguments> constraintDefinitionChildNodeParameters() {
private static Stream<Arguments> requirementUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getPortUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPort(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getUsage_NestedRequirement(), 5))
.map(TestNameGenerator::namedArguments);
Expand All @@ -441,7 +441,7 @@ private static Stream<Arguments> useCaseUsageSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getAttributeUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getItemUsage(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getPortUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPort(), 3))
.map(TestNameGenerator::namedArguments);
}
Expand All @@ -467,7 +467,7 @@ private static Stream<Arguments> occurrenceUsageChildNodeParameters() {

private static Stream<Arguments> occurrenceDefinitionSiblingNodeParameters() {
return Stream.of(
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 3))
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), 5))
.map(TestNameGenerator::namedArguments);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ private static Stream<Arguments> topNodeParameters() {
Arguments.of(SysmlPackage.eINSTANCE.getItemDefinition(), 2),
// A package doesn't have a compartment: it is handled as a custom node
Arguments.of(SysmlPackage.eINSTANCE.getPackage(), 0),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartDefinition(), 3),
Arguments.of(SysmlPackage.eINSTANCE.getPartUsage(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getPartDefinition(), 5),
Arguments.of(SysmlPackage.eINSTANCE.getAllocationUsage(), 2),
Arguments.of(SysmlPackage.eINSTANCE.getAllocationDefinition(), 2),
Arguments.of(SysmlPackage.eINSTANCE.getInterfaceUsage(), 3),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ public EdgeDescription create() {
.style(this.createEdgeStyle())
.synchronizationPolicy(SynchronizationPolicy.SYNCHRONIZED)
.targetNodesExpression(AQLConstants.AQL_SELF + "." + this.eReference.getName())
.preconditionExpression(AQLConstants.AQL + "not " + org.eclipse.sirius.components.diagrams.description.EdgeDescription.GRAPHICAL_EDGE_SOURCE + ".isAncestorOf("
+ org.eclipse.sirius.components.diagrams.description.EdgeDescription.GRAPHICAL_EDGE_TARGET + "," + "cache" + ")")
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ public EdgeDescription create() {
.style(this.createEdgeStyle())
.synchronizationPolicy(SynchronizationPolicy.SYNCHRONIZED)
.targetNodesExpression(AQLConstants.AQL_SELF + "." + this.eReference.getName())
.preconditionExpression(AQLConstants.AQL + "not " + org.eclipse.sirius.components.diagrams.description.EdgeDescription.GRAPHICAL_EDGE_SOURCE + ".isAncestorOf("
+ org.eclipse.sirius.components.diagrams.description.EdgeDescription.GRAPHICAL_EDGE_TARGET + "," + "cache"
+ ")")
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,7 @@ private Package getClosestContainingPackageFrom(Element element) {

public Element createAcceptAction(Element ownerElement) {
Feature acceptSubActionsStdAction = this.utilService.findByName(ownerElement, "Actions::Action::acceptSubactions");
if (ownerElement instanceof ActionUsage || ownerElement instanceof ActionDefinition && acceptSubActionsStdAction != null) {
if (this.isPart(ownerElement) || this.isAction(ownerElement) && acceptSubActionsStdAction != null) {
var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
var acceptAction = SysmlFactory.eINSTANCE.createAcceptActionUsage();
this.elementInitializerSwitch.doSwitch(acceptAction);
Expand Down Expand Up @@ -770,7 +770,7 @@ public Element removeStartAction(Node selectedNode, IEditingContext editingConte
*/
public Element createJoinAction(Element ownerElement) {
Feature joinsStdAction = this.utilService.findByName(ownerElement, "Actions::Action::joins");
if (ownerElement instanceof ActionUsage || ownerElement instanceof ActionDefinition && joinsStdAction != null) {
if (this.isPart(ownerElement) || this.isAction(ownerElement) && joinsStdAction != null) {
var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
var join = SysmlFactory.eINSTANCE.createJoinNode();
this.elementInitializerSwitch.doSwitch(join);
Expand All @@ -795,7 +795,7 @@ public Element createJoinAction(Element ownerElement) {
*/
public Element createForkAction(Element ownerElement) {
Feature forksStdAction = this.utilService.findByName(ownerElement, "Actions::Action::forks");
if (ownerElement instanceof ActionUsage || ownerElement instanceof ActionDefinition && forksStdAction != null) {
if (this.isPart(ownerElement) || this.isAction(ownerElement) && forksStdAction != null) {
var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
var fork = SysmlFactory.eINSTANCE.createForkNode();
this.elementInitializerSwitch.doSwitch(fork);
Expand All @@ -820,7 +820,7 @@ public Element createForkAction(Element ownerElement) {
*/
public Element createMergeAction(Element ownerElement) {
Feature mergesStdAction = this.utilService.findByName(ownerElement, "Actions::Action::merges");
if (ownerElement instanceof ActionUsage || ownerElement instanceof ActionDefinition && mergesStdAction != null) {
if (this.isPart(ownerElement) || this.isAction(ownerElement) && mergesStdAction != null) {
var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
var merge = SysmlFactory.eINSTANCE.createMergeNode();
this.elementInitializerSwitch.doSwitch(merge);
Expand All @@ -845,7 +845,7 @@ public Element createMergeAction(Element ownerElement) {
*/
public Element createDecisionAction(Element ownerElement) {
Feature decisionsStdAction = this.utilService.findByName(ownerElement, "Actions::Action::decisions");
if (ownerElement instanceof ActionUsage || ownerElement instanceof ActionDefinition && decisionsStdAction != null) {
if (this.isPart(ownerElement) || this.isAction(ownerElement) && decisionsStdAction != null) {
var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
var decision = SysmlFactory.eINSTANCE.createDecisionNode();
this.elementInitializerSwitch.doSwitch(decision);
Expand Down Expand Up @@ -945,4 +945,12 @@ public Element createPerformAction(Element ownerElement) {
ownerElement.getOwnedRelationship().add(featureMember);
return perform;
}

private boolean isPart(Element element) {
return element instanceof PartUsage || element instanceof PartDefinition;
}

private boolean isAction(Element element) {
return element instanceof ActionUsage || element instanceof ActionDefinition;
}
}
Loading

0 comments on commit 38be023

Please sign in to comment.