Skip to content
Draft
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 @@ -42,6 +42,7 @@ This fix ensure that imported models containing, for example, a top-level `Libra
- https://github.com/eclipse-syson/syson/issues/1765[#1765] [diagrams] Allow to create a `SatisfyRequirement` on `PartDefinition` or `PartUsage`.
A new compartment named _satisfy requirements_ has also been added to `PartDefinition` and `PartUsage` graphical nodes in diagrams.
- https://github.com/eclipse-syson/syson/issues/1762[#1762] [diagrams] Increase the default size of nodes.
- https://github.com/eclipse-syson/syson/issues/1778[#1778] [diagrams] Add new `ReferenceSubsetting` tool to create `ReferenceSubsetting` relationships between `Usage` elements in diagrams.

=== New features

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ public class SysMLv2PropertiesConfigurer implements IPropertiesDescriptionRegist

private static final String ADVANCED_PROPERTIES = "Advanced Properties";

private static final String REFERENCE_SUBSETTING_PROPERTIES = "Reference Subsetting Properties";

private static final String REDEFINITION_PROPERTIES = "Redefinition Properties";

private static final String SUBCLASSIFICATION_PROPERTIES = "Subclassification Properties";
Expand Down Expand Up @@ -170,6 +172,7 @@ private FormDescription createDetailsViewForElement() {
pageCore.setLabelExpression("Core");
pageCore.getGroups().add(this.createCorePropertiesGroup());
pageCore.getGroups().add(this.createVisibilityPropertyGroup());
pageCore.getGroups().add(this.createExtraReferenceSubsettingPropertiesGroup());
pageCore.getGroups().add(this.createExtraRedefinitionPropertiesGroup());
pageCore.getGroups().add(this.createExtraStatesubactionMembershipKindPropertiesGroup());
pageCore.getGroups().add(this.createExtraSubclassificationPropertiesGroup());
Expand Down Expand Up @@ -267,6 +270,31 @@ private GroupDescription createExtraRedefinitionPropertiesGroup() {
return group;
}

// should handle multiple ReferenceSubsetting
private GroupDescription createExtraReferenceSubsettingPropertiesGroup() {
GroupDescription group = FormFactory.eINSTANCE.createGroupDescription();
group.setDisplayMode(GroupDisplayMode.LIST);
group.setName(REFERENCE_SUBSETTING_PROPERTIES);
group.setLabelExpression("");
group.setSemanticCandidatesExpression("aql:self.ownedRelationship->filter(sysml::ReferenceSubsetting)");

ReferenceWidgetDescription refWidget = ReferenceFactory.eINSTANCE.createReferenceWidgetDescription();
refWidget.setName("ExtraReferenceWidget");
refWidget.setLabelExpression("References");
refWidget.setReferenceNameExpression(SysmlPackage.eINSTANCE.getReferenceSubsetting_ReferencedFeature().getName());
refWidget.setReferenceOwnerExpression(AQLConstants.AQL_SELF);
refWidget.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY);
ChangeContext setRefWidget = ViewFactory.eINSTANCE.createChangeContext();
setRefWidget
.setExpression("aql:self.handleReferenceWidgetNewValue('" + SysmlPackage.eINSTANCE.getReferenceSubsetting_ReferencedFeature().getName() + "', " + ViewFormDescriptionConverter.NEW_VALUE
+ LabelConstants.CLOSE_PARENTHESIS);
refWidget.getBody().add(setRefWidget);

group.getChildren().add(refWidget);

return group;
}

private GroupDescription createExtraStatesubactionMembershipKindPropertiesGroup() {
GroupDescription group = FormFactory.eINSTANCE.createGroupDescription();
group.setDisplayMode(GroupDisplayMode.LIST);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,8 @@ private void handleImplied(Element element, EStructuralFeature eStructuralFeatur
if (element instanceof Relationship relationship) {
if (SysmlPackage.eINSTANCE.getRedefinition_RedefinedFeature().equals(eStructuralFeature)) {
relationship.setIsImplied(false);
} else if (SysmlPackage.eINSTANCE.getReferenceSubsetting_ReferencedFeature().equals(eStructuralFeature)) {
relationship.setIsImplied(false);
} else if (SysmlPackage.eINSTANCE.getSubsetting_SubsettedFeature().equals(eStructuralFeature)) {
relationship.setIsImplied(false);
} else if (SysmlPackage.eINSTANCE.getSubclassification_Superclassifier().equals(eStructuralFeature)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ public List<EClass> caseUsage(Usage object) {
childrenCandidates.add(SysmlPackage.eINSTANCE.getFeatureTyping());
childrenCandidates.add(SysmlPackage.eINSTANCE.getSubsetting());
childrenCandidates.add(SysmlPackage.eINSTANCE.getRedefinition());
childrenCandidates.add(SysmlPackage.eINSTANCE.getReferenceSubsetting());
childrenCandidates.add(SysmlPackage.eINSTANCE.getLiteralBoolean());
childrenCandidates.add(SysmlPackage.eINSTANCE.getLiteralInfinity());
childrenCandidates.add(SysmlPackage.eINSTANCE.getLiteralInteger());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import org.eclipse.syson.sysml.MultiplicityRange;
import org.eclipse.syson.sysml.OwningMembership;
import org.eclipse.syson.sysml.Redefinition;
import org.eclipse.syson.sysml.ReferenceSubsetting;
import org.eclipse.syson.sysml.RequirementConstraintMembership;
import org.eclipse.syson.sysml.StateSubactionMembership;
import org.eclipse.syson.sysml.Subclassification;
Expand Down Expand Up @@ -98,6 +99,28 @@ public String getIdentificationLabel(Element element) {
return label.toString();
}

@Override
public String getReferenceSubsettingLabel(Element element) {
StringBuilder label = new StringBuilder();
var optReferenceSubsetting = element.getOwnedRelationship().stream()
.filter(ReferenceSubsetting.class::isInstance)
.map(ReferenceSubsetting.class::cast)
.findFirst();
if (optReferenceSubsetting.isPresent()) {
ReferenceSubsetting referenceSubsetting = optReferenceSubsetting.get();
if (!referenceSubsetting.isIsImplied()) {
var referencedFeature = referenceSubsetting.getReferencedFeature();
if (referencedFeature != null) {
label.append(LabelConstants.SPACE);
label.append(LabelConstants.REFERENCES);
label.append(LabelConstants.SPACE);
label.append(this.getDeclaredNameLabel(referencedFeature));
}
}
}
return label.toString();
}

@Override
public String getRedefinitionLabel(Element element) {
StringBuilder label = new StringBuilder();
Expand Down Expand Up @@ -146,7 +169,7 @@ public String getSubclassificationLabel(Element element) {
public String getSubsettingLabel(Element element) {
StringBuilder label = new StringBuilder();
var optSubsetting = element.getOwnedRelationship().stream()
.filter(r -> r instanceof Subsetting && !(r instanceof Redefinition))
.filter(r -> r instanceof Subsetting && !(r instanceof Redefinition) && !(r instanceof ReferenceSubsetting))
.map(Subsetting.class::cast)
.findFirst();
if (optSubsetting.isPresent()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,16 @@ public interface IDiagramLabelService {
*/
String getSubsettingLabel(Element element);

/**
* Return the label of the reference subsetting of the given {@link Element}.
*
* @param usage
* the given {@link Element}.
* @return the label of the reference subsetting of the given {@link Element} if there is one, an empty string
* otherwise.
*/
String getReferenceSubsettingLabel(Element element);

/**
* Get the SysML textual representation of the given element.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ public String caseAcceptActionUsage(AcceptActionUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object))
.append(LabelConstants.CR)
Expand Down Expand Up @@ -147,6 +148,7 @@ public String caseActionUsage(ActionUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -180,6 +182,7 @@ public String caseAllocationUsage(AllocationUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -212,6 +215,7 @@ public String caseAttributeUsage(AttributeUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -259,6 +263,7 @@ public String caseCaseUsage(CaseUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -315,6 +320,7 @@ public String caseConcernUsage(ConcernUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -348,6 +354,7 @@ public String caseConstraintUsage(ConstraintUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -437,6 +444,7 @@ public String caseExhibitStateUsage(ExhibitStateUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -470,6 +478,7 @@ public String caseInterfaceUsage(InterfaceUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -519,6 +528,7 @@ public String caseItemUsage(ItemUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -568,6 +578,7 @@ public String caseOccurrenceUsage(OccurrenceUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -612,6 +623,7 @@ public String casePartUsage(PartUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -663,6 +675,7 @@ public String casePortUsage(PortUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand All @@ -687,6 +700,7 @@ public String caseReferenceUsage(ReferenceUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -720,6 +734,7 @@ public String caseRequirementUsage(RequirementUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand All @@ -739,6 +754,7 @@ public String caseSatisfyRequirementUsage(SatisfyRequirementUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -772,6 +788,7 @@ public String caseUseCaseUsage(UseCaseUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down Expand Up @@ -807,6 +824,7 @@ public String caseStateUsage(StateUsage object) {
.append(this.multiplicityRange(object))
.append(this.labelService.getTypingLabel(object))
.append(this.labelService.getRedefinitionLabel(object))
.append(this.labelService.getReferenceSubsettingLabel(object))
.append(this.labelService.getSubsettingLabel(object))
.append(this.labelService.getValueLabel(object));
return label.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
import org.eclipse.syson.sysml.OwningMembership;
import org.eclipse.syson.sysml.ParameterMembership;
import org.eclipse.syson.sysml.Redefinition;
import org.eclipse.syson.sysml.ReferenceSubsetting;
import org.eclipse.syson.sysml.ResultExpressionMembership;
import org.eclipse.syson.sysml.Subclassification;
import org.eclipse.syson.sysml.Subsetting;
Expand Down Expand Up @@ -1151,7 +1152,7 @@ private void handleMissingSubsettingExpression(ParserRuleContext ctx) {
if (this.element instanceof Usage && featureExpressions != null
&& this.isDeleteFeatureExpression(featureExpressions, featureExpressions.subsettingExpression(), LabelConstants.SUBSETTING)) {
var subsetting = this.element.getOwnedRelationship().stream()
.filter(elt -> elt instanceof Subsetting && !(elt instanceof Redefinition))
.filter(r -> r instanceof Subsetting && !(r instanceof Redefinition) && !(r instanceof ReferenceSubsetting))
.map(Subsetting.class::cast)
.findFirst();
if (subsetting.isPresent()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ public Set<EObject> caseReferenceSubsetting(ReferenceSubsetting object) {
}
}
}
if (this.eStructuralFeature.equals(SysmlPackage.eINSTANCE.getReferenceSubsetting_ReferencedFeature())) {
relatedElements.add(object);
}
return relatedElements;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@ public Usage setFeatureTyping(Usage usage, Type type) {
*/
public Usage setSubsetting(Usage subsettingUsage, Feature feature) {
var optSubsetting = subsettingUsage.getOwnedRelationship().stream()
.filter(elt -> elt instanceof Subsetting && !(elt instanceof Redefinition))
.filter(r -> r instanceof Subsetting && !(r instanceof Redefinition) && !(r instanceof ReferenceSubsetting))
.map(Subsetting.class::cast)
.findFirst();
if (optSubsetting.isPresent()) {
Expand Down
Loading
Loading