diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index e58016af0..c735bab26 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -35,6 +35,9 @@ As a result, the following GraphQL mutations have been removed `exposeRequiremen === Improvements +- https://github.com/eclipse-syson/syson/issues/1583[#1583] [diagrams] Improve support for `Stakeholder`. +On `Requirement` or `Concern` (either definition or usage) graphical nodes it is now possible to create new _stakeholders_ (which must reference existing `PartUsage`). +Stakeholders are by default represented with a dedicated graphical node connected to the parent graphical node, or can appear inside the `stakeholders` list compartment. === New features diff --git a/backend/application/pom.xml b/backend/application/pom.xml index 7d3283b3b..a46c871f5 100644 --- a/backend/application/pom.xml +++ b/backend/application/pom.xml @@ -17,7 +17,7 @@ org.eclipse.syson syson-application-parent - 2026.3.1 + 2026.3.2 syson-application-parent SysON Application Parent diff --git a/backend/application/syson-application-configuration/pom.xml b/backend/application/syson-application-configuration/pom.xml index e3c8ca4e3..53eb98322 100644 --- a/backend/application/syson-application-configuration/pom.xml +++ b/backend/application/syson-application-configuration/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-application-configuration - 2026.3.1 + 2026.3.2 syson-application-configuration SysON Application Configuration @@ -69,42 +69,42 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-form-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel-edit - 2026.3.1 + 2026.3.2 @@ -120,7 +120,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/backend/application/syson-application/pom.xml b/backend/application/syson-application/pom.xml index 52b576d6c..085d7ed68 100644 --- a/backend/application/syson-application/pom.xml +++ b/backend/application/syson-application/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-application - 2026.3.1 + 2026.3.2 syson-application SysON Application @@ -82,62 +82,62 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-frontend - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-application-configuration - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-rest-api-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-common-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-standard-diagrams-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-table-requirements-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-tree-explorer-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-import - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-export - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-validation - 2026.3.1 + 2026.3.2 @@ -199,7 +199,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java index 2cabb21c7..ad18ace3f 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java @@ -1107,7 +1107,8 @@ private void createNewStakeholderIn(EClass eClassWithStakeholderParameter, Strin Consumer diagramCheck = assertRefreshedDiagramThat(newDiagram -> { var initialDiagram = diagram.get(); new CheckDiagramElementCount(this.diagramComparator) - .hasNewNodeCount(1) + .hasNewNodeCount(9) + .hasNewEdgeCount(1) .check(initialDiagram, newDiagram); new CheckNodeInCompartment(diagramDescriptionIdProvider, this.diagramComparator) .withTargetObjectId(targetObjectId) diff --git a/backend/application/syson-frontend/pom.xml b/backend/application/syson-frontend/pom.xml index 2bebcbb06..540ee1043 100644 --- a/backend/application/syson-frontend/pom.xml +++ b/backend/application/syson-frontend/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-frontend - 2026.3.1 + 2026.3.2 syson-frontend SysON Frontend diff --git a/backend/application/syson-sysml-export/pom.xml b/backend/application/syson-sysml-export/pom.xml index 5e3723dd3..de08725de 100644 --- a/backend/application/syson-sysml-export/pom.xml +++ b/backend/application/syson-sysml-export/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-sysml-export - 2026.3.1 + 2026.3.2 syson-sysml-export SysON SysML Export @@ -69,7 +69,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 @@ -85,14 +85,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/application/syson-sysml-import/pom.xml b/backend/application/syson-sysml-import/pom.xml index e205b24c0..bea2f387d 100644 --- a/backend/application/syson-sysml-import/pom.xml +++ b/backend/application/syson-sysml-import/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-sysml-import - 2026.3.1 + 2026.3.2 syson-sysml-import SysON SysML Import @@ -65,12 +65,12 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 @@ -86,14 +86,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-application-configuration - 2026.3.1 + 2026.3.2 test diff --git a/backend/application/syson-sysml-validation/pom.xml b/backend/application/syson-sysml-validation/pom.xml index c8d9fcbf4..965a5fd3c 100644 --- a/backend/application/syson-sysml-validation/pom.xml +++ b/backend/application/syson-sysml-validation/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-sysml-validation - 2026.3.1 + 2026.3.2 syson-validation SysON SysMLv2 validation rules for Validation view @@ -69,17 +69,17 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 @@ -95,7 +95,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/backend/metamodel/pom.xml b/backend/metamodel/pom.xml index 37a8b8f0f..acc7d4b81 100644 --- a/backend/metamodel/pom.xml +++ b/backend/metamodel/pom.xml @@ -17,7 +17,7 @@ org.eclipse.syson syson-metamodel-parent - 2026.3.1 + 2026.3.2 syson-metamodel-parent SysON Metamodel Parent diff --git a/backend/metamodel/syson-siriusweb-customnodes-metamodel-edit/pom.xml b/backend/metamodel/syson-siriusweb-customnodes-metamodel-edit/pom.xml index 8bd21297d..218ef8b10 100644 --- a/backend/metamodel/syson-siriusweb-customnodes-metamodel-edit/pom.xml +++ b/backend/metamodel/syson-siriusweb-customnodes-metamodel-edit/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-siriusweb-customnodes-metamodel-edit - 2026.3.1 + 2026.3.2 syson-siriusweb-customnodes-metamodel-edit SysON SysMLv2 Custom Nodes Metamodel - Edit Support @@ -70,7 +70,7 @@ org.eclipse.syson syson-siriusweb-customnodes-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.sirius diff --git a/backend/metamodel/syson-siriusweb-customnodes-metamodel/pom.xml b/backend/metamodel/syson-siriusweb-customnodes-metamodel/pom.xml index 905692d21..8dbbc4e21 100644 --- a/backend/metamodel/syson-siriusweb-customnodes-metamodel/pom.xml +++ b/backend/metamodel/syson-siriusweb-customnodes-metamodel/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-siriusweb-customnodes-metamodel - 2026.3.1 + 2026.3.2 syson-siriusweb-customnodes-metamodel SysON SysMLv2 Custom Nodes Metamodel for Sirius Web diff --git a/backend/metamodel/syson-sysml-metamodel-edit/pom.xml b/backend/metamodel/syson-sysml-metamodel-edit/pom.xml index 401a9609d..92f091f44 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/pom.xml +++ b/backend/metamodel/syson-sysml-metamodel-edit/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-sysml-metamodel-edit - 2026.3.1 + 2026.3.2 syson-sysml-metamodel-edit SysON SysMLv2 Metamodel - Edit Support @@ -65,7 +65,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/Actor.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/Actor.svg index ff2a5e25c..f4d7db258 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/Actor.svg +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/Actor.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinition.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinition.svg index 167177c78..ecfb5506b 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinition.svg +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinition.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinitionIn.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinitionIn.svg index 2665ee054..06de29872 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinitionIn.svg +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemDefinitionIn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsage.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsage.svg index 1001815b8..20d2ec19a 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsage.svg +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsage.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsageIn.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsageIn.svg index 6743ace70..f552c5b9a 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsageIn.svg +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/ItemUsageIn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortDefinitionInout.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortDefinitionInout.svg index 6fe9f08c7..6ed692c1b 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortDefinitionInout.svg +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortDefinitionInout.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortUsageInout.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortUsageInout.svg index 6512fca59..0b09d18c7 100644 --- a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortUsageInout.svg +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/PortUsageInout.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/Stakeholder.svg b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/Stakeholder.svg new file mode 100644 index 000000000..dd4be30ad --- /dev/null +++ b/backend/metamodel/syson-sysml-metamodel-edit/src/main/resources/icons/full/obj16/Stakeholder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend/metamodel/syson-sysml-metamodel/pom.xml b/backend/metamodel/syson-sysml-metamodel/pom.xml index 95b67231a..f4a26874c 100644 --- a/backend/metamodel/syson-sysml-metamodel/pom.xml +++ b/backend/metamodel/syson-sysml-metamodel/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 syson-sysml-metamodel SysON SysMLv2 Metamodel diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StakeholderMembershipImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StakeholderMembershipImpl.java index 116b19948..9b4764065 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StakeholderMembershipImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StakeholderMembershipImpl.java @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2023, 2025 Obeo. +* Copyright (c) 2023, 2026 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -66,13 +66,14 @@ public PartUsage getOwnedStakeholderParameter() { /** * * - * @generated + * @generated NOT */ public PartUsage basicGetOwnedStakeholderParameter() { - // TODO: implement this method to return the 'Owned Stakeholder Parameter' reference - // -> do not perform proxy resolution - // Ensure that you remove @generated or mark it @generated NOT - return null; + return this.getOwnedRelatedElement().stream() + .filter(PartUsage.class::isInstance) + .map(PartUsage.class::cast) + .findFirst() + .orElse(null); } /** diff --git a/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/RequirementDefinitionImplTest.java b/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/RequirementDefinitionImplTest.java index cac2e010e..1df7f94cb 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/RequirementDefinitionImplTest.java +++ b/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/RequirementDefinitionImplTest.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.syson.sysml.impl; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; @@ -61,16 +62,35 @@ public static void setUpRequirementDefinition() { @Test public void testGetActorParameter() { + // Check that we can find the actors from the Requirement final List actorParameterValue = REQUIREMENT_DEFINITION.getActorParameter(); Assertions.assertNotNull(actorParameterValue); Assertions.assertIterableEquals(ACTOR_PART_USAGES, actorParameterValue); + + // Also check that we can get them directly from the ActorMembership themselves + List actors = REQUIREMENT_DEFINITION.getOwnedMembership().stream() + .filter(ActorMembership.class::isInstance) + .map(ActorMembership.class::cast) + .map(ActorMembership::getOwnedActorParameter) + .toList(); + Assertions.assertIterableEquals(ACTOR_PART_USAGES, actors); } @Test public void testGetStakeholderParameter() { + // Check that we can find the stakeholders from the Requirement final List stakeholderParameterValue = REQUIREMENT_DEFINITION.getStakeholderParameter(); Assertions.assertNotNull(stakeholderParameterValue); Assertions.assertIterableEquals(STAKEHOLDER_PART_USAGES, stakeholderParameterValue); + + // Also check that we can get them directly from the StakeholderMembership themselves + List stakeholders = REQUIREMENT_DEFINITION.getOwnedMembership().stream() + .filter(StakeholderMembership.class::isInstance) + .map(StakeholderMembership.class::cast) + .map(StakeholderMembership::getOwnedStakeholderParameter) + .toList(); + Assertions.assertIterableEquals(STAKEHOLDER_PART_USAGES, stakeholders); + assertThat(stakeholders).hasSameElementsAs(STAKEHOLDER_PART_USAGES); } @Test diff --git a/backend/releng/pom.xml b/backend/releng/pom.xml index c141fd234..d39dc13f2 100644 --- a/backend/releng/pom.xml +++ b/backend/releng/pom.xml @@ -17,7 +17,7 @@ org.eclipse.syson syson-releng-parent - 2026.3.1 + 2026.3.2 syson-releng-parent SysON Releng Parent diff --git a/backend/releng/syson-test-coverage/pom.xml b/backend/releng/syson-test-coverage/pom.xml index 7ea8a9106..e83d10d6c 100644 --- a/backend/releng/syson-test-coverage/pom.xml +++ b/backend/releng/syson-test-coverage/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-test-coverage - 2026.3.1 + 2026.3.2 syson-test-coverage-aggregation SysON Test Coverage Aggregation @@ -43,122 +43,122 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-direct-edit-grammar - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-form-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-representation-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-table-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-tree-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-metamodel-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-rest-api-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-import - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-export - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-validation - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-common-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-common-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-standard-diagrams-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-table-requirements-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-tree-explorer-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-application-configuration - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-application - 2026.3.1 + 2026.3.2 diff --git a/backend/services/pom.xml b/backend/services/pom.xml index 6163aaf7a..d54910d68 100644 --- a/backend/services/pom.xml +++ b/backend/services/pom.xml @@ -17,7 +17,7 @@ org.eclipse.syson syson-services-parent - 2026.3.1 + 2026.3.2 syson-services-parent SysON Services Parent diff --git a/backend/services/syson-diagram-services/pom.xml b/backend/services/syson-diagram-services/pom.xml index f1d261512..cc46b01ef 100644 --- a/backend/services/syson-diagram-services/pom.xml +++ b/backend/services/syson-diagram-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-diagram-services - 2026.3.1 + 2026.3.2 syson-diagram-services SysON Diagram Services @@ -65,17 +65,17 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 @@ -91,14 +91,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryElementService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryElementService.java index 673af00d7..e988925fc 100644 --- a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryElementService.java +++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryElementService.java @@ -305,6 +305,11 @@ public Optional getNodeDescriptionId(Element element, Diagram diagram, I .filter(nodeDesc -> nodeDesc.getName().equals("GV Node " + SysmlPackage.eINSTANCE.getPackage().getName())) .map(nodeDesc -> this.diagramIdProvider.getId(nodeDesc)) .findFirst(); + } else if (this.metamodelQueryElementService.isStakeholder(element)) { + nodeDescriptionId = EMFUtils.allContainedObjectOfType(optViewDD.get(), org.eclipse.sirius.components.view.diagram.NodeDescription.class) + .filter(nodeDesc -> nodeDesc.getName().equals("GV Node Stakeholder")) + .map(nodeDesc -> this.diagramIdProvider.getId(nodeDesc)) + .findFirst(); } else { nodeDescriptionId = EMFUtils.allContainedObjectOfType(optViewDD.get(), org.eclipse.sirius.components.view.diagram.NodeDescription.class) .filter(nodeDesc -> nodeDesc.getName().equals("GV Node " + element.eClass().getName())) diff --git a/backend/services/syson-direct-edit-grammar/pom.xml b/backend/services/syson-direct-edit-grammar/pom.xml index 424257d42..b05eec3e0 100644 --- a/backend/services/syson-direct-edit-grammar/pom.xml +++ b/backend/services/syson-direct-edit-grammar/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-direct-edit-grammar - 2026.3.1 + 2026.3.2 syson-direct-edit-grammar SysON Direct Edit Grammar diff --git a/backend/services/syson-form-services/pom.xml b/backend/services/syson-form-services/pom.xml index 97ed223c0..2b96a8d00 100644 --- a/backend/services/syson-form-services/pom.xml +++ b/backend/services/syson-form-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-form-services - 2026.3.1 + 2026.3.2 syson-form-services SysON Form Services @@ -60,7 +60,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 @@ -76,14 +76,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/services/syson-model-services/pom.xml b/backend/services/syson-model-services/pom.xml index c4dd61745..e8ef2462c 100644 --- a/backend/services/syson-model-services/pom.xml +++ b/backend/services/syson-model-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 syson-model-services SysON Model Services @@ -65,17 +65,17 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-metamodel-services - 2026.3.1 + 2026.3.2 @@ -91,14 +91,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelQueryAQLService.java b/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelQueryAQLService.java index dc847ecc7..6bff05564 100644 --- a/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelQueryAQLService.java +++ b/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelQueryAQLService.java @@ -41,6 +41,13 @@ public boolean isActor(Element element) { return this.metamodelQueryElementService.isActor(element); } + /** + * {@link MetamodelQueryElementService#isStakeholder(Element)}. + */ + public boolean isStakeholder(Element element) { + return this.metamodelQueryElementService.isStakeholder(element); + } + /** * {@link MetamodelQueryElementService#isSubject(Element)}. */ diff --git a/backend/services/syson-representation-services/pom.xml b/backend/services/syson-representation-services/pom.xml index da26b1cd1..3ccdea6ed 100644 --- a/backend/services/syson-representation-services/pom.xml +++ b/backend/services/syson-representation-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-representation-services - 2026.3.1 + 2026.3.2 syson-representation-services SysON Representation Services @@ -60,7 +60,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 @@ -76,14 +76,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/services/syson-services/pom.xml b/backend/services/syson-services/pom.xml index f031e4905..5eb246c15 100644 --- a/backend/services/syson-services/pom.xml +++ b/backend/services/syson-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 syson-services SysON Services @@ -81,12 +81,12 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-direct-edit-grammar - 2026.3.1 + 2026.3.2 @@ -102,21 +102,21 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test org.eclipse.syson syson-sysml-metamodel-services - 2026.3.1 + 2026.3.2 diff --git a/backend/services/syson-sysml-metamodel-services/pom.xml b/backend/services/syson-sysml-metamodel-services/pom.xml index 64c789b81..313a6829e 100644 --- a/backend/services/syson-sysml-metamodel-services/pom.xml +++ b/backend/services/syson-sysml-metamodel-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-sysml-metamodel-services - 2026.3.1 + 2026.3.2 syson-sysml-metamodel-services SysON SysML Metamodel Services @@ -55,7 +55,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 @@ -71,14 +71,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/services/syson-sysml-metamodel-services/src/main/java/org/eclipse/syson/sysml/metamodel/services/MetamodelQueryElementService.java b/backend/services/syson-sysml-metamodel-services/src/main/java/org/eclipse/syson/sysml/metamodel/services/MetamodelQueryElementService.java index 1c006a342..60ee50ff3 100644 --- a/backend/services/syson-sysml-metamodel-services/src/main/java/org/eclipse/syson/sysml/metamodel/services/MetamodelQueryElementService.java +++ b/backend/services/syson-sysml-metamodel-services/src/main/java/org/eclipse/syson/sysml/metamodel/services/MetamodelQueryElementService.java @@ -26,6 +26,7 @@ import org.eclipse.syson.sysml.FeatureValue; import org.eclipse.syson.sysml.PartUsage; import org.eclipse.syson.sysml.ReferenceUsage; +import org.eclipse.syson.sysml.StakeholderMembership; import org.eclipse.syson.sysml.SubjectMembership; /** @@ -63,6 +64,20 @@ public boolean isSubject(Element element) { return element instanceof ReferenceUsage && element.getOwningMembership() instanceof SubjectMembership; } + /** + * Return {@code true} if the provided {@code element} is a stakeholder, {@code false} otherwise. + *

+ * A stakeholder is a kind of parameter stored in an {@link StakeholderMembership}. + *

+ * + * @param element + * the element to check + * @return {@code true} if the provided {@code element} is an stakeholder, {@code false} otherwise + */ + public boolean isStakeholder(Element element) { + return element instanceof PartUsage && element.getOwningMembership() instanceof StakeholderMembership; + } + /** * Get the source of a {@link Connector}. * diff --git a/backend/services/syson-sysml-rest-api-services/pom.xml b/backend/services/syson-sysml-rest-api-services/pom.xml index 7c0967b5b..c9fff03e9 100644 --- a/backend/services/syson-sysml-rest-api-services/pom.xml +++ b/backend/services/syson-sysml-rest-api-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-sysml-rest-api-services - 2026.3.1 + 2026.3.2 syson-sysml-rest-api-services SysON SysML REST API Services @@ -64,12 +64,12 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 @@ -85,7 +85,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/backend/services/syson-table-services/pom.xml b/backend/services/syson-table-services/pom.xml index e8820d446..a927d40a4 100644 --- a/backend/services/syson-table-services/pom.xml +++ b/backend/services/syson-table-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-table-services - 2026.3.1 + 2026.3.2 syson-table-services SysON Table Services @@ -60,7 +60,7 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 @@ -76,14 +76,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/services/syson-tree-services/pom.xml b/backend/services/syson-tree-services/pom.xml index de22344f5..2187bfe11 100644 --- a/backend/services/syson-tree-services/pom.xml +++ b/backend/services/syson-tree-services/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-tree-services - 2026.3.1 + 2026.3.2 syson-tree-services SysON Tree Services @@ -60,17 +60,17 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-application-configuration - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 @@ -86,14 +86,14 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 test-jar test diff --git a/backend/tests/pom.xml b/backend/tests/pom.xml index beb8863d0..5dd2543bf 100644 --- a/backend/tests/pom.xml +++ b/backend/tests/pom.xml @@ -17,7 +17,7 @@ org.eclipse.syson syson-tests-parent - 2026.3.1 + 2026.3.2 syson-tests-parent SysON Tests Parent diff --git a/backend/tests/syson-tests/pom.xml b/backend/tests/syson-tests/pom.xml index f737588ff..48fdc2823 100644 --- a/backend/tests/syson-tests/pom.xml +++ b/backend/tests/syson-tests/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 syson-tests SysON Tests diff --git a/backend/views/pom.xml b/backend/views/pom.xml index d5e848256..18409ef45 100644 --- a/backend/views/pom.xml +++ b/backend/views/pom.xml @@ -17,7 +17,7 @@ org.eclipse.syson syson-views-parent - 2026.3.1 + 2026.3.2 syson-views-parent SysON Views Parent diff --git a/backend/views/syson-common-view/pom.xml b/backend/views/syson-common-view/pom.xml index 86ea2aeab..7c5b68319 100644 --- a/backend/views/syson-common-view/pom.xml +++ b/backend/views/syson-common-view/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-common-view - 2026.3.1 + 2026.3.2 syson-common-view SysON Sirius Web common elements for SysMLv2 views @@ -73,22 +73,22 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 @@ -104,7 +104,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/backend/views/syson-diagram-common-view/pom.xml b/backend/views/syson-diagram-common-view/pom.xml index 2dcd876fe..e519ec70b 100644 --- a/backend/views/syson-diagram-common-view/pom.xml +++ b/backend/views/syson-diagram-common-view/pom.xml @@ -24,7 +24,7 @@ org.eclipse.syson syson-diagram-common-view - 2026.3.1 + 2026.3.2 syson-diagram-common-view SysON Sirius Web common elements for SysMLv2 diagrams @@ -74,32 +74,32 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-services - 2026.3.1 + 2026.3.2 @@ -115,7 +115,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractUsageNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractUsageNodeDescriptionProvider.java index d4805f153..7eccf4b4b 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractUsageNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractUsageNodeDescriptionProvider.java @@ -48,6 +48,7 @@ import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService; import org.eclipse.syson.services.DeleteService; import org.eclipse.syson.services.UtilService; +import org.eclipse.syson.util.AQLConstants; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; import org.eclipse.syson.util.SysMLMetamodelHelper; @@ -168,6 +169,7 @@ public NodeDescription create() { .collapsible(true) .defaultHeightExpression(defaultSizeExpression.defaultHeightExpression()) .defaultWidthExpression(defaultSizeExpression.defaultWidthExpression()) + .isHiddenByDefaultExpression(this.getHiddenByDefaultExpression()) .domainType(domainType) .insideLabel(this.createInsideLabelDescription()) .outsideLabels(this.createOutsideLabelDescriptions().toArray(OutsideLabelDescription[]::new)) @@ -202,6 +204,10 @@ public void link(DiagramDescription diagramDescription, IViewDiagramElementFinde }); } + protected String getHiddenByDefaultExpression() { + return AQLConstants.AQL_FALSE; + } + protected InsideLabelDescription createInsideLabelDescription() { return this.diagramBuilderHelper.newInsideLabelDescription() .labelExpression(ServiceMethod.of0(DiagramQueryAQLService::getContainerLabel).aqlSelf()) diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewNodeService.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewNodeService.java index 3b42a4833..5c510d387 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewNodeService.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewNodeService.java @@ -419,6 +419,30 @@ public List getExposedActors(Element element, EClass domainType, List .toList(); } + /** + * Get all Stakeholder ({@link PartUsage}) in {@link ViewUsage}'s exposed elements. + * + * @param element + * the {@link Element} for which we want the Stakeholders. + * @param domainType + * the domain type to the elements to retrieve + * @param ancestors + * the given ancestors (semantic elements of the graphical nodes that are the ancestors) of the Node on + * which this service has been called. + * @param editingContext + * the given {@link IEditingContext} in which this service has been called. + * @param diagramContext + * the given {@link DiagramContext} in which this service has been called. + * @return the list of Actor {@link PartUsage}s in {@link ViewUsage}'s exposed elements. + */ + public List getExposedStakeholders(Element element, EClass domainType, List ancestors, IEditingContext editingContext, DiagramContext diagramContext) { + return this.getExposedElements(element, domainType, ancestors, editingContext, diagramContext).stream() + .filter(PartUsage.class::isInstance) + .map(PartUsage.class::cast) + .filter(this.metamodelQueryElementService::isStakeholder) + .toList(); + } + /** * Get all Subjects ({@link ReferenceUsage}) in {@link ViewUsage}'s exposed elements. * diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java index ce5fc697a..46e12fc6a 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java @@ -58,6 +58,7 @@ import org.eclipse.syson.sysml.PartUsage; import org.eclipse.syson.sysml.RequirementDefinition; import org.eclipse.syson.sysml.RequirementUsage; +import org.eclipse.syson.sysml.StakeholderMembership; import org.eclipse.syson.sysml.StateDefinition; import org.eclipse.syson.sysml.StateUsage; import org.eclipse.syson.sysml.SubjectMembership; @@ -236,6 +237,38 @@ public Element reconnectSourceNestedActorEdge(Element self, Element newSource, E return otherEnd; } + /** + * Reconnects the source of a nested stakeholder edge. + *

+ * The source of this edge is a Requirement, and can only be reconnected to Requirements. + *

+ * + * @param self + * the current Requirement + * @param newSource + * the new Requirement + * @param otherEnd + * the Stakeholder connected to the Requirement + * @return the Stakeholder + */ + public Element reconnectSourceNestedStakeholderEdge(Element self, Element newSource, Element otherEnd) { + if (newSource instanceof RequirementUsage || newSource instanceof RequirementDefinition) { + if (otherEnd.getOwningMembership() instanceof StakeholderMembership stakeholderMembership) { + newSource.getOwnedRelationship().add(stakeholderMembership); + } else { + // This is an error, a Stakeholder should always be contained in a StakeholderMembership. + String errorMessage = "Cannot reconnect the Stakeholder, it is not owned by a " + StakeholderMembership.class.getSimpleName(); + this.logger.error(errorMessage); + this.feedbackMessageService.addFeedbackMessage(new Message(errorMessage, MessageLevel.ERROR)); + } + } else { + String errorMessage = "Cannot reconnect a Stakeholder to a non-Requirement element"; + this.logger.warn(errorMessage); + this.feedbackMessageService.addFeedbackMessage(new Message(errorMessage, MessageLevel.WARNING)); + } + return otherEnd; + } + /** * Reconnects the source of a nested subject edge. *

diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java index e96504c5f..e4f887f34 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java @@ -59,7 +59,7 @@ protected String getNodeToolName() { @Override protected String getNodeToolIconURLsExpression() { - return "/icons/full/obj16/StakeholderMembership.svg"; + return "/icons/full/obj16/Stakeholder.svg"; } @Override diff --git a/backend/views/syson-diagram-tests/pom.xml b/backend/views/syson-diagram-tests/pom.xml index f0e1822cf..7a3a0161d 100644 --- a/backend/views/syson-diagram-tests/pom.xml +++ b/backend/views/syson-diagram-tests/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-diagram-tests - 2026.3.1 + 2026.3.2 syson-diagram-tests SysON Diagram Tests @@ -97,17 +97,17 @@ org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-common-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.testcontainers diff --git a/backend/views/syson-standard-diagrams-view/pom.xml b/backend/views/syson-standard-diagrams-view/pom.xml index b04dc3e50..c4f06b70c 100644 --- a/backend/views/syson-standard-diagrams-view/pom.xml +++ b/backend/views/syson-standard-diagrams-view/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-standard-diagrams-view - 2026.3.1 + 2026.3.2 syson-standard-diagrams-view SysON Sirius Web diagram description of the SysMLv2 Standard Diagrams Views @@ -93,47 +93,47 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-siriusweb-customnodes-metamodel-edit - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-representation-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-common-view - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-diagram-common-view - 2026.3.1 + 2026.3.2 @@ -149,13 +149,13 @@ org.eclipse.syson syson-diagram-tests - 2026.3.1 + 2026.3.2 test org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java index 558f420c9..d22934ea1 100644 --- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java @@ -78,6 +78,7 @@ import org.eclipse.syson.standard.diagrams.view.edges.IncludeUseCaseDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.edges.InterfaceUsageEdgeDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.edges.NestedActorEdgeDescriptionProvider; +import org.eclipse.syson.standard.diagrams.view.edges.NestedStakeholderEdgeDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.edges.NestedSubjectEdgeDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.edges.RedefinitionEdgeDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.edges.ReferenceSubsettingEdgeDescriptionProvider; @@ -123,6 +124,7 @@ import org.eclipse.syson.standard.diagrams.view.nodes.RequirementUsageStakeholdersCompartmentNodeDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.nodes.RequirementUsageSubjectCompartmentNodeDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.nodes.SDVNodeDescriptionProviderSwitch; +import org.eclipse.syson.standard.diagrams.view.nodes.StakeholderNodeDescriptionProvider; import org.eclipse.syson.standard.diagrams.view.nodes.SubjectNodeDescriptionProvider; import org.eclipse.syson.sysml.FeatureDirectionKind; import org.eclipse.syson.sysml.SysmlPackage; @@ -732,28 +734,36 @@ private List> createCompartmentsForActorPa private List> createCompartmentsForStakeholderParameter(IColorProvider colorProvider) { final List> compartmentNodeDescriptionProviders = new ArrayList<>(); + // RequirementDefinition: stakeholder compartment & items + compartmentNodeDescriptionProviders.add(new RequirementDefinitionStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), + SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); + compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), + SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); + // RequirementUsage: stakeholder compartment & items + compartmentNodeDescriptionProviders.add(new RequirementUsageStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), + SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); + compartmentNodeDescriptionProviders + .add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), + colorProvider, this.getDescriptionNameGenerator())); + + // ConcernDefinition: stakeholder compartment & items compartmentNodeDescriptionProviders.add(new RequirementDefinitionStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); + + // ConcernUsage: stakeholder compartment & items compartmentNodeDescriptionProviders.add(new RequirementUsageStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); - compartmentNodeDescriptionProviders.add(new RequirementUsageStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), - SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); - compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), + + // SatisfyRequirementUsage: stakeholder compartment & items + compartmentNodeDescriptionProviders.add(new RequirementUsageStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); - compartmentNodeDescriptionProviders.add(new RequirementDefinitionStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), - SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); - compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), - SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); - compartmentNodeDescriptionProviders.add(new RequirementUsageStakeholdersCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), + compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); - compartmentNodeDescriptionProviders - .add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), - colorProvider, this.getDescriptionNameGenerator())); return compartmentNodeDescriptionProviders; } @@ -768,6 +778,7 @@ private List> createAllCustomNodeDescripti customNodeDescriptionProviders.add(new MergeActionNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator())); customNodeDescriptionProviders.add(new DecisionActionNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator())); customNodeDescriptionProviders.add(new ActorNodeDescriptionProvider(colorProvider)); + customNodeDescriptionProviders.add(new StakeholderNodeDescriptionProvider(colorProvider)); customNodeDescriptionProviders.add(new SubjectNodeDescriptionProvider(colorProvider)); customNodeDescriptionProviders.add(new ImportedPackageNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator())); @@ -901,19 +912,26 @@ private List> createAllUsageCompositeEdgeD new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_ActorParameter(), colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add( - new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, + new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_ActorParameter(), colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add( - new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_ActorParameter(), colorProvider, + new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_ActorParameter(), colorProvider, this.getDescriptionNameGenerator())); + usageCompositeEdgeDescriptionProviders.add( - new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, + new NestedStakeholderEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add( - new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_ActorParameter(), colorProvider, + new NestedStakeholderEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, + this.getDescriptionNameGenerator())); + usageCompositeEdgeDescriptionProviders.add( + new NestedStakeholderEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, + this.getDescriptionNameGenerator())); + usageCompositeEdgeDescriptionProviders.add( + new NestedStakeholderEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add( - new NestedActorEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_StakeholderParameter(), colorProvider, + new NestedStakeholderEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_StakeholderParameter(), colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add( diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/edges/NestedStakeholderEdgeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/edges/NestedStakeholderEdgeDescriptionProvider.java new file mode 100644 index 000000000..95fd83773 --- /dev/null +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/edges/NestedStakeholderEdgeDescriptionProvider.java @@ -0,0 +1,128 @@ +/******************************************************************************* + * Copyright (c) 2026 Obeo. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.syson.standard.diagrams.view.edges; + +import java.util.ArrayList; +import java.util.Objects; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder; +import org.eclipse.sirius.components.view.builder.generated.view.ChangeContextBuilder; +import org.eclipse.sirius.components.view.builder.providers.IColorProvider; +import org.eclipse.sirius.components.view.diagram.ArrowStyle; +import org.eclipse.sirius.components.view.diagram.DiagramDescription; +import org.eclipse.sirius.components.view.diagram.EdgeDescription; +import org.eclipse.sirius.components.view.diagram.EdgeStyle; +import org.eclipse.sirius.components.view.diagram.LineStyle; +import org.eclipse.sirius.components.view.diagram.NodeDescription; +import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy; +import org.eclipse.syson.diagram.common.view.edges.AbstractEdgeDescriptionProvider; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; +import org.eclipse.syson.standard.diagrams.view.nodes.StakeholderNodeDescriptionProvider; +import org.eclipse.syson.util.AQLConstants; +import org.eclipse.syson.util.IDescriptionNameGenerator; +import org.eclipse.syson.util.ServiceMethod; +import org.eclipse.syson.util.SysMLMetamodelHelper; +import org.eclipse.syson.util.ViewConstants; + +/** + * Used to create the edge description between elements and their nested stakeholders in General View. + * + * @author pcdavid + */ +public class NestedStakeholderEdgeDescriptionProvider extends AbstractEdgeDescriptionProvider { + + private final IDescriptionNameGenerator nameGenerator; + + private final EClass eClass; + + private final EReference eReference; + + private final String edgeName; + + public NestedStakeholderEdgeDescriptionProvider(EClass eClass, EReference eReference, IColorProvider colorProvider, IDescriptionNameGenerator nameGenerator) { + super(colorProvider); + this.nameGenerator = Objects.requireNonNull(nameGenerator); + this.eClass = Objects.requireNonNull(eClass); + this.eReference = Objects.requireNonNull(eReference); + this.edgeName = this.nameGenerator.getEdgeName("Nested Stakeholder " + this.eClass.getName()); + } + + @Override + public EdgeDescription create() { + String domainType = SysMLMetamodelHelper.buildQualifiedName(this.eClass); + return this.diagramBuilderHelper.newEdgeDescription() + .domainType(domainType) + .isDomainBasedEdge(false) + .name(this.edgeName) + .centerLabelExpression("") + .sourceExpression(AQLConstants.AQL_SELF) + .style(this.createEdgeStyle()) + .synchronizationPolicy(SynchronizationPolicy.SYNCHRONIZED) + .targetExpression(AQLConstants.AQL_SELF + "." + this.eReference.getName()) + .build(); + } + + @Override + public void link(DiagramDescription diagramDescription, IViewDiagramElementFinder cache) { + var optEdgeDescription = cache.getEdgeDescription(this.edgeName); + var optStakeholderNodeDescription = cache.getNodeDescription(StakeholderNodeDescriptionProvider.NAME); + var sourceNodes = new ArrayList(); + + if (optEdgeDescription.isPresent() && optStakeholderNodeDescription.isPresent()) { + cache.getNodeDescription(this.nameGenerator.getNodeName(this.eClass)).ifPresent(sourceNodes::add); + + EdgeDescription edgeDescription = optEdgeDescription.get(); + diagramDescription.getEdgeDescriptions().add(edgeDescription); + edgeDescription.getSourceDescriptions().addAll(sourceNodes); + edgeDescription.getTargetDescriptions().add(optStakeholderNodeDescription.get()); + + edgeDescription.setPalette(this.createEdgePalette(cache)); + } + } + + private EdgeStyle createEdgeStyle() { + return this.diagramBuilderHelper.newEdgeStyle() + .borderSize(0) + .color(this.colorProvider.getColor(ViewConstants.DEFAULT_EDGE_COLOR)) + .edgeWidth(1) + .lineStyle(LineStyle.SOLID) + .sourceArrowStyle(ArrowStyle.NONE) + .targetArrowStyle(ArrowStyle.NONE) + .build(); + } + + @Override + protected boolean isDeletable() { + // This edge cannot be deleted. This would mean that the existing stakeholder is not contained in an + // Requirement anymore, and should likely be represented as a regular part, which is not possible out of + // the box. + return false; + } + + @Override + protected ChangeContextBuilder getSourceReconnectToolBody() { + return this.viewBuilderHelper.newChangeContext() + .expression(ServiceMethod.of2(ViewToolService::reconnectSourceNestedStakeholderEdge).aql(AQLConstants.EDGE_SEMANTIC_ELEMENT, AQLConstants.SEMANTIC_RECONNECTION_TARGET, + AQLConstants.SEMANTIC_OTHER_END)); + } + + @Override + protected ChangeContextBuilder getTargetReconnectToolBody() { + // It is not possible to reconnect the target (actor) of this edge. This would mean that the existing actor is + // not contained in a UseCase/Requirement anymore. + return this.viewBuilderHelper.newChangeContext(); + } + +} diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/StakeholderNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/StakeholderNodeDescriptionProvider.java new file mode 100644 index 000000000..93b052a57 --- /dev/null +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/StakeholderNodeDescriptionProvider.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2026 Obeo. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.syson.standard.diagrams.view.nodes; + +import org.eclipse.sirius.components.collaborative.diagrams.DiagramContext; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.view.builder.providers.IColorProvider; +import org.eclipse.syson.diagram.common.view.services.ViewNodeService; +import org.eclipse.syson.model.services.aql.ModelQueryAQLService; +import org.eclipse.syson.standard.diagrams.view.SDVDescriptionNameGenerator; +import org.eclipse.syson.sysml.PartUsage; +import org.eclipse.syson.sysml.SysmlPackage; +import org.eclipse.syson.util.ServiceMethod; + +/** + * Node description provider for stakeholder {@link PartUsage} in the General View diagram. + * + * @author pcdavid + */ +public class StakeholderNodeDescriptionProvider extends UsageNodeDescriptionProvider { + + public static final String NAME = SDVDescriptionNameGenerator.PREFIX + " Node Stakeholder"; + + public StakeholderNodeDescriptionProvider(IColorProvider colorProvider) { + super(SysmlPackage.eINSTANCE.getPartUsage(), colorProvider); + } + + @Override + protected String createPreconditionExpression() { + return ServiceMethod.of0(ModelQueryAQLService::isStakeholder).aqlSelf(); + } + + @Override + protected String getNodeDescriptionName() { + return NAME; + } + + @Override + protected String getSemanticCandidatesExpression(String domainType) { + return ServiceMethod.of4(ViewNodeService::getExposedStakeholders).aqlSelf(domainType, org.eclipse.sirius.components.diagrams.description.NodeDescription.ANCESTORS, + IEditingContext.EDITING_CONTEXT, + DiagramContext.DIAGRAM_CONTEXT); + } +} diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java index 45c5a8627..68a1aaf03 100644 --- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java @@ -60,11 +60,12 @@ protected String getSemanticCandidatesExpression(String domainType) { @Override protected String createPreconditionExpression() { // Actors are handled with a different NodeDescription: ActorNodeDescriptionProvider. - // Subjects are handled with a different NodeDescription: SubjectDescriptionProvider. + // Subjects are handled with a different NodeDescription: SubjectNodeDescriptionProvider. + // Stakeholder are handled with a different NodeDescription: StakeholderNodeDescriptionProvider. // We can't represent actors with conditional styles because they require to remove inside labels and add // outside labels, and set the keepAspectRatio property, which are all defined in the NodeDescription and not in // the style. - return AQLConstants.AQL + "not self.isActor() and not self.isSubject()"; + return AQLConstants.AQL + "not self.isActor() and not self.isSubject() and not self.isStakeholder()"; } @Override diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/nodeactions/managevisibility/ManageVisibilityNodeActionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/nodeactions/managevisibility/ManageVisibilityNodeActionProvider.java index e454f2fdb..dcf6b6b83 100644 --- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/nodeactions/managevisibility/ManageVisibilityNodeActionProvider.java +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/nodeactions/managevisibility/ManageVisibilityNodeActionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2025 Obeo. + * Copyright (c) 2025, 2026 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -94,8 +94,7 @@ private boolean isNodeDescriptionSimpleNode(org.eclipse.sirius.components.view.R if (optionalViewNodeDescription.isPresent()) { var viewNodeName = optionalViewNodeDescription.get().getName(); - var generatedNodeName = new SDVDescriptionNameGenerator().getNodeName(eClass); - return Objects.equals(viewNodeName, generatedNodeName); + return viewNodeName.startsWith(SDVDescriptionNameGenerator.PREFIX + " Node "); } return false; } diff --git a/backend/views/syson-table-requirements-view/pom.xml b/backend/views/syson-table-requirements-view/pom.xml index 976223eb2..fe32f10de 100644 --- a/backend/views/syson-table-requirements-view/pom.xml +++ b/backend/views/syson-table-requirements-view/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-table-requirements-view - 2026.3.1 + 2026.3.2 syson-table-requirements-view SysON Table Requirements View @@ -73,27 +73,27 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-table-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-common-view - 2026.3.1 + 2026.3.2 @@ -109,7 +109,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/backend/views/syson-tree-explorer-view/pom.xml b/backend/views/syson-tree-explorer-view/pom.xml index 9e1cc530e..55973a02a 100644 --- a/backend/views/syson-tree-explorer-view/pom.xml +++ b/backend/views/syson-tree-explorer-view/pom.xml @@ -23,7 +23,7 @@ org.eclipse.syson syson-tree-explorer-view - 2026.3.1 + 2026.3.2 syson-tree-explorer-view SysON Sirius Web tree description of the explorer view @@ -68,22 +68,22 @@ org.eclipse.syson syson-sysml-metamodel - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-model-services - 2026.3.1 + 2026.3.2 org.eclipse.syson syson-tree-services - 2026.3.1 + 2026.3.2 @@ -99,7 +99,7 @@ org.eclipse.syson syson-tests - 2026.3.1 + 2026.3.2 test diff --git a/doc/content/modules/user-manual/assets/images/release-notes-stakeholder-menu.png b/doc/content/modules/user-manual/assets/images/release-notes-stakeholder-menu.png new file mode 100644 index 000000000..c5be7cb0b Binary files /dev/null and b/doc/content/modules/user-manual/assets/images/release-notes-stakeholder-menu.png differ diff --git a/doc/content/modules/user-manual/assets/images/release-notes-stakeholder-node.png b/doc/content/modules/user-manual/assets/images/release-notes-stakeholder-node.png new file mode 100644 index 000000000..e5346bbbd Binary files /dev/null and b/doc/content/modules/user-manual/assets/images/release-notes-stakeholder-node.png differ diff --git a/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc b/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc index b6d556387..35170b468 100644 --- a/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc +++ b/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc @@ -24,6 +24,13 @@ ** Add tools to create timeslices and snapshots, available on `OccurrenceUsage`, `ItemUsage`, and `PartUsage` graphical nodes. These tools leverage a selection dialog to either create a specific timeslice/snapshot graphical node or, if no selection is made, default to a timeslice/snapshot `OccurrenceUsage` graphical node. +** Improved support for `Stakeholder`. +On `Requirement` or `Concern` (either definition or usage) graphical nodes it is now possible to create new _stakeholders_ (which must reference existing `PartUsage`). +Stakeholders are by default represented with a dedicated graphical node connected to the parent graphical node, or can appear inside the `stakeholders` list compartment. + +image::release-notes-stakeholder-menu.png[Tool to create a new Stakeholder] + +image::release-notes-stakeholder-node.png[Default representation of Stakeholder connected to its corresponding `RequirementDefinition`] == Technical details diff --git a/frontend/syson-components/package.json b/frontend/syson-components/package.json index 19eda437b..69983591e 100644 --- a/frontend/syson-components/package.json +++ b/frontend/syson-components/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-syson/syson-components", - "version": "2026.3.1", + "version": "2026.3.2", "author": "Eclipse SysON", "license": "EPL-2.0", "repository": { diff --git a/frontend/syson/package.json b/frontend/syson/package.json index 909828093..1be331245 100644 --- a/frontend/syson/package.json +++ b/frontend/syson/package.json @@ -1,7 +1,7 @@ { "name": "@eclipse-syson/syson", "author": "Eclipse SysON", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "repository": { "type": "git", @@ -34,7 +34,7 @@ "@eclipse-sirius/sirius-components-widget-reference": "2026.3.2", "@eclipse-sirius/sirius-components-widget-table": "2026.3.2", "@eclipse-sirius/sirius-web-application": "2026.3.2", - "@eclipse-syson/syson-components": "2026.3.1", + "@eclipse-syson/syson-components": "2026.3.2", "@lexical/code": "0.42.0", "@lexical/react": "0.42.0", "@mui/icons-material": "7.0.2", diff --git a/integration-tests-cypress/package-lock.json b/integration-tests-cypress/package-lock.json index d2194e908..8e5243e70 100644 --- a/integration-tests-cypress/package-lock.json +++ b/integration-tests-cypress/package-lock.json @@ -1,12 +1,12 @@ { "name": "syson-integration-tests-cypress", - "version": "2026.3.1", + "version": "2026.3.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "syson-integration-tests-cypress", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "dependencies": { "prettier": "2.7.1" diff --git a/integration-tests-cypress/package.json b/integration-tests-cypress/package.json index 78a9b8d83..8b5450ce7 100644 --- a/integration-tests-cypress/package.json +++ b/integration-tests-cypress/package.json @@ -1,6 +1,6 @@ { "name": "syson-integration-tests-cypress", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "private": true, "devDependencies": { diff --git a/integration-tests-playwright/package-lock.json b/integration-tests-playwright/package-lock.json index 5c65a2dd4..6e2cd7aad 100644 --- a/integration-tests-playwright/package-lock.json +++ b/integration-tests-playwright/package-lock.json @@ -1,12 +1,12 @@ { "name": "syson-integration-tests-playwright", - "version": "2026.3.1", + "version": "2026.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "syson-integration-tests-playwright", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "dependencies": { "prettier": "2.7.1" diff --git a/integration-tests-playwright/package.json b/integration-tests-playwright/package.json index f4b26cab5..93dd441dc 100644 --- a/integration-tests-playwright/package.json +++ b/integration-tests-playwright/package.json @@ -1,6 +1,6 @@ { "name": "syson-integration-tests-playwright", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "private": true, "devDependencies": { diff --git a/package-lock.json b/package-lock.json index 20d530f2c..6daa71eaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@eclipse-syson/syson-parent", - "version": "2026.3.1", + "version": "2026.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@eclipse-syson/syson-parent", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "workspaces": [ "./frontend/*" @@ -21,7 +21,7 @@ }, "frontend/syson": { "name": "@eclipse-syson/syson", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "dependencies": { "@apollo/client": "3.10.4", @@ -46,7 +46,7 @@ "@eclipse-sirius/sirius-components-widget-reference": "2026.3.2", "@eclipse-sirius/sirius-components-widget-table": "2026.3.2", "@eclipse-sirius/sirius-web-application": "2026.3.2", - "@eclipse-syson/syson-components": "2026.3.1", + "@eclipse-syson/syson-components": "2026.3.2", "@lexical/code": "0.42.0", "@lexical/react": "0.42.0", "@mui/icons-material": "7.0.2", @@ -105,7 +105,7 @@ }, "frontend/syson-components": { "name": "@eclipse-syson/syson-components", - "version": "2026.3.1", + "version": "2026.3.2", "license": "EPL-2.0", "devDependencies": { "@apollo/client": "3.10.4", diff --git a/package.json b/package.json index 0a3a3ae0c..00cb58025 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-syson/syson-parent", - "version": "2026.3.1", + "version": "2026.3.2", "author": "Eclipse SysON", "license": "EPL-2.0", "repository": { diff --git a/pom.xml b/pom.xml index 7aa6a3b84..45100d16d 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ org.eclipse.syson syson - 2026.3.1 + 2026.3.2 syson SysON diff --git a/scripts/check-labels.js b/scripts/check-labels.js index 808b028ae..a413cf790 100644 --- a/scripts/check-labels.js +++ b/scripts/check-labels.js @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Obeo. + * Copyright (c) 2023, 2026 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -12,23 +12,24 @@ *******************************************************************************/ const event = process.env.GITHUB_EVENT; const body = JSON.parse(event); +const labels = body.pull_request.labels; -const hasOnePriorityLabel = - body.pull_request.labels.filter((label) => label.name.startsWith('priority:')) - .length === 1; -const hasOneReviewLabel = - body.pull_request.labels.filter((label) => - label.name.startsWith('pr: to review') - ).length === 1; - -if (!hasOnePriorityLabel || !hasOneReviewLabel) { - console.log( - 'The pull request is either lacking the priority or the pr label' - ); - process.exit(1); -} else if (body.pull_request.labels.length > 2) { - console.log( - 'The pull request contains useless labels, please use priority and pr labels for pull requests' +const errors = []; +if (labels.filter((label) => label.name.startsWith("priority:")).length !== 1) { + errors.push("The pull request must have exactly one 'priority:' label"); +} +if ( + labels.filter((label) => label.name.startsWith("pr: to review")).length !== 1 +) { + errors.push("The pull request must have exactly one 'pr: to review' label"); +} +if (labels.length > 2) { + errors.push( + "The pull request contains useless labels, please use only priority and pr labels for pull requests", ); +} + +if (errors.length > 0) { + errors.map((message) => console.log(message)); process.exit(1); }