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 @@ -31,6 +31,7 @@
This fix ensure that imported models containing, for example, a top-level `LibraryPackage` and a top-level `Comment` is correctly displayed under the _User libraries_ directory.
- https://github.com/eclipse-syson/syson/issues/1751[#1751] [diagrams] Make `Interconnection` compartment growable.
- https://github.com/eclipse-syson/syson/issues/1763[#1763] [diagrams] Fix an issue where, in the diagrams, the creation of an `Element` inside a `sub-Package` created two graphical nodes instead of one.
- https://github.com/eclipse-syson/syson/issues/1788[#1788] [services] New `Expose` elements now have `visibility` set to _protected_ and have `isImportAll` set to _true_, as required by the SysMLv2 specification, chapter `8.3.26.2 Expose`.

=== Improvements

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,8 @@ public Element viewNodeAs(Element element, String newViewDefinition, IEditingCon
var newViewUsage = SysmlFactory.eINSTANCE.createViewUsage();
var newViewUsageMembership = this.metamodelMutationElementService.createMembership(viewUsageContainer);
newViewUsageMembership.getOwnedRelatedElement().add(newViewUsage);
new ElementInitializerSwitch().doSwitch(newViewUsage);
var elementInitializerSwitch = new ElementInitializerSwitch();
elementInitializerSwitch.doSwitch(newViewUsage);
this.modelMutationElementService.setAsView(newViewUsage, newViewDefinition);

// 2 - move the element and its children from the existingViewUsage to new newViewUsage
Expand All @@ -139,12 +140,14 @@ public Element viewNodeAs(Element element, String newViewDefinition, IEditingCon
var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
membershipExpose.setImportedMembership(newViewUsage.getOwningMembership());
existingViewUsage.getOwnedRelationship().add(membershipExpose);
elementInitializerSwitch.doSwitch(membershipExpose);
}
// 4 - expose the element and its sub elements previously exposed in the existingViewUsage in the
// newViewUsage
var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
membershipExpose.setImportedMembership(element.getOwningMembership());
newViewUsage.getOwnedRelationship().add(membershipExpose);
elementInitializerSwitch.doSwitch(membershipExpose);

return newViewUsage;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.eclipse.sirius.components.diagrams.events.HideDiagramElementEvent;
import org.eclipse.syson.model.services.ModelQueryElementService;
import org.eclipse.syson.services.DeleteService;
import org.eclipse.syson.services.ElementInitializerSwitch;
import org.eclipse.syson.services.NodeDescriptionService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.services.api.SiriusWebCoreServices;
Expand Down Expand Up @@ -132,6 +133,7 @@ public Element expose(Element element, IEditingContext editingContext, DiagramCo
var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
membershipExpose.setImportedMembership(element.getOwningMembership());
viewUsage.getOwnedRelationship().add(membershipExpose);
new ElementInitializerSwitch().doSwitch(membershipExpose);
// if it is the General View, we want to hide tree elements if a compartment containing the same
// element is displayed or it is displayed as border node
if (selectedNode != null && ViewDefinitionKind.isGeneralView(this.utilService.getViewDefinitionKind(element, List.of(), editingContext))) {
Expand Down Expand Up @@ -180,6 +182,7 @@ public Element addToExposedElements(Element element, boolean recursive, IEditing
var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
membershipExpose.setImportedMembership(childElement.getOwningMembership());
viewUsage.getOwnedRelationship().add(membershipExpose);
new ElementInitializerSwitch().doSwitch(membershipExpose);
if (recursive) {
membershipExpose.setIsRecursive(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.eclipse.syson.sysml.Documentation;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.EnumerationDefinition;
import org.eclipse.syson.sysml.Expose;
import org.eclipse.syson.sysml.FeatureDirectionKind;
import org.eclipse.syson.sysml.FeatureTyping;
import org.eclipse.syson.sysml.FlowUsage;
Expand Down Expand Up @@ -56,6 +57,7 @@
import org.eclipse.syson.sysml.UseCaseUsage;
import org.eclipse.syson.sysml.ViewDefinition;
import org.eclipse.syson.sysml.ViewUsage;
import org.eclipse.syson.sysml.VisibilityKind;
import org.eclipse.syson.sysml.util.ElementUtil;
import org.eclipse.syson.sysml.util.SysmlSwitch;
import org.eclipse.syson.util.StandardDiagramsConstants;
Expand Down Expand Up @@ -156,6 +158,13 @@ public Element caseFlowUsage(FlowUsage object) {
return object;
}

@Override
public Element caseExpose(Expose object) {
object.setVisibility(VisibilityKind.PROTECTED);
object.setIsImportAll(true);
return object;
}

@Override
public Element casePackage(Package object) {
var existingElements = this.existingElementsCount(object);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.sysml.ViewDefinition;
import org.eclipse.syson.sysml.ViewUsage;
import org.eclipse.syson.sysml.VisibilityKind;
import org.eclipse.syson.sysml.util.ElementUtil;
import org.eclipse.syson.util.StandardDiagramsConstants;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -98,6 +99,22 @@ public void testEnumerationDefinitionDefaultName() {
assertThat(initializedED2.getDeclaredName()).isEqualTo("EnumerationDefinition2");
}

@DisplayName("GIVEN an Expose, WHEN it is initialized, THEN it's visibility is protected and isImportAll is true")
@Test
public void testExposeVisibility() {
var root = SysmlFactory.eINSTANCE.createPackage();
this.resource.getContents().add(root);
root.setDeclaredName(ROOT);
var vu1 = SysmlFactory.eINSTANCE.createViewUsage();
this.addInParent(vu1, root);
var e1 = SysmlFactory.eINSTANCE.createMembershipExpose();
this.addInParent(e1, root);
this.elementInitializerSwitch.doSwitch(e1);
assertThat(e1.getVisibility()).isEqualTo(VisibilityKind.PROTECTED);
assertThat(e1.isIsImportAll()).isTrue();

}

@DisplayName("GIVEN a Package, WHEN it is initialized, THEN it's name contains the count of the same kind of elements")
@Test
public void testPackageDefaultName() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,11 +130,13 @@ private boolean createRequirement(IEditingContext editingContext, ViewUsage view
if (optMembershipEClass.isPresent()) {
var newMembership = SysmlFactory.eINSTANCE.create(optMembershipEClass.get());
if (newMembership instanceof Membership membership) {
var elementInitializerSwitch = new ElementInitializerSwitch();
owningNamespace.getOwnedRelationship().add(membership);
membership.getOwnedRelatedElement().add(newRequirementUsage);
new ElementInitializerSwitch().caseRequirementUsage(newRequirementUsage);
elementInitializerSwitch.doSwitch(newRequirementUsage);
var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
viewUsage.getOwnedRelationship().add(membershipExpose);
elementInitializerSwitch.doSwitch(membership);
membershipExpose.setImportedMembership(membership);
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.eclipse.sirius.components.representations.Message;
import org.eclipse.sirius.components.representations.MessageLevel;
import org.eclipse.sirius.components.tables.Table;
import org.eclipse.syson.services.ElementInitializerSwitch;
import org.eclipse.syson.sysml.RequirementUsage;
import org.eclipse.syson.sysml.SysmlFactory;
import org.eclipse.syson.sysml.ViewUsage;
Expand Down Expand Up @@ -123,6 +124,7 @@ private void exposeRequirements(IEditingContext editingContext, ViewUsage viewUs
if (!viewUsage.getExposedElement().contains(req)) {
var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
viewUsage.getOwnedRelationship().add(membershipExpose);
new ElementInitializerSwitch().doSwitch(membershipExpose);
membershipExpose.setImportedMembership(req.getOwningMembership());
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ requirement def R1 {
- Fix an issue that displayed imported libraries at the root of the project if they contained `LibraryPackage` elements and non-`Namespace` elements.
These models are now correctly displayed under the _User libraries_ directory.
- Fix an issue where, in the diagrams, the creation of an `Element` inside a `sub-Package` created two graphical nodes instead of one.
- New `Expose` elements now have `visibility` set to _protected_ and have `isImportAll` set to _true_, as required by the SysMLv2 specification.

== Improvements

Expand Down
Loading