Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ This removes Rollup warnings about missing global names for externalized peer de
- https://github.com/eclipse-syson/syson/issues/2382[#2382] [diagrams] Add support of stakeholder inheritance in _stakeholders_ compartments of `RequirementUsage` and `RequirementDefinition` graphical nodes.
- https://github.com/eclipse-syson/syson/issues/2387[#2387] [diagrams] Add support of objective requirement inheritance in _objective_ compartments of `CaseUsage` and `CaseDefinition` graphical nodes.
- https://github.com/eclipse-syson/syson/issues/2391[#2391] [diagrams] Add support of actor inheritance in _actors_ compartment of `CaseDefinition` and `CaseUsage` graphical nodes.
- https://github.com/eclipse-syson/syson/issues/2389[#2389] [diagrams] Add support of inheritance of subject in _subject_ compartment of `CaseDefinition` and `CaseUsage` (and more) graphical nodes.

== v2026.7.0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1008,6 +1008,42 @@ public void checkActorInheritanceForConcernWithSpecialization(String subclassifi
.run();
}

private static Stream<Arguments> subjectInheritanceParameters() {
return Stream.of(
Arguments.of("New Requirement Definition", "New Subclassification", SysmlPackage.eINSTANCE.getRequirementDefinition(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.REQUIREMENT_DEFINITION_ID),
Arguments.of("New Requirement", "New Redefinition", SysmlPackage.eINSTANCE.getRequirementUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.REQUIREMENT_USAGE_ID),
Arguments.of("New Requirement", "New Subsetting", SysmlPackage.eINSTANCE.getRequirementUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.REQUIREMENT_USAGE_ID),
Arguments.of("New Requirement", "New Reference Subsetting", SysmlPackage.eINSTANCE.getRequirementUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.REQUIREMENT_USAGE_ID),
Arguments.of("New Satisfy Requirement", "New Redefinition", SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.SATISFY_REQUIREMENT_USAGE_ID),
Arguments.of("New Satisfy Requirement", "New Subsetting", SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.SATISFY_REQUIREMENT_USAGE_ID),
Arguments.of("New Satisfy Requirement", "New Reference Subsetting", SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.SATISFY_REQUIREMENT_USAGE_ID),
Arguments.of("New Concern Definition", "New Subclassification", SysmlPackage.eINSTANCE.getConcernDefinition(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CONCERN_DEFINITION_ID),
Arguments.of("New Concern", "New Redefinition", SysmlPackage.eINSTANCE.getConcernUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CONCERN_USAGE_ID),
Arguments.of("New Concern", "New Subsetting", SysmlPackage.eINSTANCE.getConcernUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CONCERN_USAGE_ID),
Arguments.of("New Concern", "New Reference Subsetting", SysmlPackage.eINSTANCE.getConcernUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CONCERN_USAGE_ID),
Arguments.of("New Case Definition", "New Subclassification", SysmlPackage.eINSTANCE.getCaseDefinition(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CASE_DEFINITION_ID),
Arguments.of("New Case", "New Redefinition", SysmlPackage.eINSTANCE.getCaseUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CASE_USAGE_ID),
Arguments.of("New Case", "New Subsetting", SysmlPackage.eINSTANCE.getCaseUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CASE_USAGE_ID),
Arguments.of("New Case", "New Reference Subsetting", SysmlPackage.eINSTANCE.getCaseUsage(), GeneralViewWithTopNodesTestProjectData.GraphicalIds.CASE_USAGE_ID)
);
}

@ParameterizedTest
@MethodSource("subjectInheritanceParameters")
public void checkSubjectInheritanceWithSubclassification(String subclassifier, String specialization, EClass eClass, String baseElementNodeId) {
new ElementSpecializationInheritanceTestRunner()
.baseElementToInheritFromEClass(eClass)
.baseElementToInheritFromNodeId(baseElementNodeId)
.elementToInheritCreationToolName("New Subject")
.withSelectedElementId("")
.elementToInheritExpectedListItemLabelText("ref subject")
.compartmentName("subject")
.elementThatInheritFromBaseElementCreationToolName(subclassifier)
.elementThatInheritFromBaseElementEClass(eClass)
.specializationToolName(specialization)
.run();
}

/**
* This test runner verifies that creating a specializing relationship create inherited elements.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.eclipse.syson.sysml.StakeholderMembership;
import org.eclipse.syson.sysml.StateUsage;
import org.eclipse.syson.sysml.Step;
import org.eclipse.syson.sysml.SubjectMembership;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.sysml.Type;
import org.eclipse.syson.sysml.Usage;
Expand Down Expand Up @@ -156,6 +157,10 @@ public Boolean casePartUsage(PartUsage object) {
// We are dealing with an Actor
// so the part usage is an actor if and only if, it is contained by a ActorMembership
result = object.getOwningMembership() instanceof ActorMembership;
} else if (this.isSubjectReference()) {
// We are dealing with a subject
// so the reference usage is a subject if and only if, it is contained by a SubjectMembership
result = object.getOwningMembership() instanceof SubjectMembership;
} else {
EClassifier eType = this.eReference.getEType();
EClass eClass = object.eClass();
Expand Down Expand Up @@ -218,13 +223,26 @@ public Boolean casePortUsage(PortUsage object) {
*/
@Override
public Boolean caseReferenceUsage(ReferenceUsage object) {
final boolean result;
if (this.shouldConsiderParameter(object)) {
return this.isInheritedParameter(object);
result = this.isInheritedParameter(object);
} else if (this.isSubjectReference()) {
// We are dealing with a subject
// so the reference usage is a subject if and only if, it is contained by a SubjectMembership
result = object.getOwningMembership() instanceof SubjectMembership;
} else {
EClassifier eType = this.eReference.getEType();
EClass eClass = object.eClass();
result = eType.equals(eClass) || (eType instanceof EClass eTypeEClass && eTypeEClass.isSuperTypeOf(eClass));
}
return result;
}

EClassifier eType = this.eReference.getEType();
EClass eClass = object.eClass();
return eType.equals(eClass) || (eType instanceof EClass eTypeEClass && eTypeEClass.isSuperTypeOf(eClass));
private boolean isSubjectReference() {
return this.eReference.equals(SysmlPackage.eINSTANCE.getRequirementUsage_SubjectParameter())
|| this.eReference.equals(SysmlPackage.eINSTANCE.getRequirementDefinition_SubjectParameter())
|| this.eReference.equals(SysmlPackage.eINSTANCE.getCaseDefinition_SubjectParameter())
|| this.eReference.equals(SysmlPackage.eINSTANCE.getCaseUsage_SubjectParameter());
}

@Override
Expand All @@ -234,6 +252,10 @@ public Boolean caseRequirementUsage(RequirementUsage object) {
// We are dealing with an objective
// so the part usage is an objective if and only if, it is contained by an ObjectiveMembership
result = object.getOwningMembership() instanceof ObjectiveMembership;
} else if (this.isSubjectReference()) {
// We are dealing with a subject
// so the reference usage is a subject if and only if, it is contained by a SubjectMembership
result = object.getOwningMembership() instanceof SubjectMembership;
} else {
EClassifier eType = this.eReference.getEType();
EClass eClass = object.eClass();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -889,6 +889,14 @@ private List<IDiagramElementDescriptionProvider<?>> createCompartmentsForSubject
compartmentNodeDescriptionProviders.add(new RequirementUsageSubjectCompartmentNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_SubjectParameter(),
colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getCaseDefinition(), SysmlPackage.eINSTANCE.getCaseDefinition_SubjectParameter(), colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getCaseUsage(), SysmlPackage.eINSTANCE.getCaseUsage_SubjectParameter(), colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_SubjectParameter(), colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getConcernUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_SubjectParameter(), colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementDefinition(), SysmlPackage.eINSTANCE.getRequirementDefinition_SubjectParameter(), colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_SubjectParameter(), colorProvider, this.getDescriptionNameGenerator()));
compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_SubjectParameter(), colorProvider, this.getDescriptionNameGenerator()));


return compartmentNodeDescriptionProviders;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@
** Add support of actor inheritance in _actors_ compartment of `CaseDefinition` and `CaseUsage` graphical nodes.
The actor inheritance in _actors_ compartment is also visible in the following graphical nodes:

*** `RequirementDefinition`
*** `RequireUsage`
*** `ConcernDefinition`
*** `ConcernUsage`
*** `SatisfyRequirementUsage`
** Add support of subject inheritance in _subject_ compartment of `CaseDefinition` and `CaseUsage` graphical nodes.
The subject inheritance in _subject_ compartment is also visible in the following graphical nodes:

*** `RequirementDefinition`
*** `RequireUsage`
*** `ConcernDefinition`
Expand Down
Loading