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 @@ -38,6 +38,7 @@ It has long been unused by Sirius Web itself (since the transition to MUI).
- https://github.com/eclipse-syson/syson/issues/2331[#2331] [diagrams] Fix the broken `New Interface` tool icon.
- https://github.com/eclipse-syson/syson/issues/2320[#2320] [diagrams] Add an explicit warning message when user tries to reconnect one Actor's edge to another Actor.
- https://github.com/eclipse-syson/syson/issues/2329[#2329] [import] Fix importing requirement (and sub-requirement) a text.
- https://github.com/eclipse-syson/syson/issues/2336[#2336] [details] Fix _Edit expression_ modal when the selected element is a `FeatureValue`

=== Improvements

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,51 @@ public void textEditAttributeExpression() {
.verify(Duration.ofSeconds(10));
}

@DisplayName("GIVEN a SysML the FeatueValue of an attribute that has an existing expression, WHEN editing the expression to a new one THEN the attribute's expression is replaced")
@GivenSysONServer({ ExpressionSamplesProjectData.SCRIPT_PATH })
@Test
public void textEditFeatureValueExpression() {
String editingContextId = ExpressionSamplesProjectData.EDITING_CONTEXT_ID;

List<String> defaultFilters = this.explorerDefaultFiltersSearchService.findTreeDefaultFilterIds(editingContextId, this.sysONExplorerTreeDescriptionId);
var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(), defaultFilters);
var explorerInput = new ExplorerEventInput(UUID.randomUUID(), editingContextId, explorerRepresentationId);
var flux = this.explorerEventSubscriptionRunner.run(explorerInput).flux();

var treeId = new AtomicReference<String>();
Consumer<Object> initialTreeContentConsumer = assertRefreshedTreeThat(tree -> {
assertThat(tree).isNotNull();
treeId.set(tree.getId());
});

var existingExpressionId = new AtomicReference<String>();

Runnable checkInitialExpression = this.checkElementHasExpression(editingContextId,
ExpressionSamplesProjectData.SemanticIds.TANK_MAX_VOLUME_ATTRIBUTE_FEATURE_VALUE_ID, FeatureValue.class, existingExpressionId,
"100.0 * minVolume");

Runnable editExpressionOnMaxVolumeAttribute = this.editExpression(editingContextId, existingExpressionId::get, "50 * minVolume");

Consumer<Object> treeRefreshed = assertRefreshedTreeThat(tree -> {
assertThat(tree).isNotNull();
assertThat(tree.getId()).isEqualTo(treeId.get());
});

Runnable checkExpressionUpdated = this.checkElementHasExpression(editingContextId, ExpressionSamplesProjectData.SemanticIds.TANK_MAX_VOLUME_ATTRIBUTE_FEATURE_VALUE_ID,
FeatureValue.class,
existingExpressionId,
"50 * minVolume");

StepVerifier.create(flux)
.consumeNextWith(initialTreeContentConsumer)
.then(checkInitialExpression)
.then(editExpressionOnMaxVolumeAttribute)
.consumeNextWith(treeRefreshed)
.then(checkExpressionUpdated)
.thenCancel()
.verify(Duration.ofSeconds(10));
}

@DisplayName("GIVEN a SysML attribute with a value expression, WHEN editing it with feature value properties THEN the flags are updated together with the expression")
@GivenSysONServer({ ExpressionSamplesProjectData.SCRIPT_PATH })
@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static final class SemanticIds {

public static final String TANK_MAX_VOLUME_ATTRIBUTE_ID = "d9926727-7378-4177-a940-2fb6c1c89dce";

public static final String TANK_MAX_VOLUME_ATTRIBUTE_FEATURE_VALUE_ID = "8f9592ef-9513-4025-ab13-e7d7f822f7d8";

public static final String TANK_MAX_VOLUME_ATTRIBUTE_VALUE_ID = "a9216e54-f44c-4b1f-b262-13650324d325";

public static final String TANK_PRESSURE_LIMIT_CONSTRAINT_ID = "7d42ee06-3c27-4eaa-9438-344fc789906a";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.Expression;
import org.eclipse.syson.sysml.Relationship;
import org.eclipse.syson.sysml.dto.EditExpressionInput;
import org.eclipse.syson.sysml.dto.EditExpressionSuccessPayload;
import org.eclipse.syson.sysml.metamodel.services.MetamodelQueryElementService;
Expand Down Expand Up @@ -87,7 +88,11 @@ public void handle(Sinks.One<IPayload> payloadSink, Sinks.Many<ChangeDescription
var optionalExpression = this.getExpression(emfEditingContext, editExpressionInput.elementId());

if (optionalParent.isPresent() && optionalExpression.isPresent()) {
var result = this.expressionEditor.editExpression(emfEditingContext, optionalParent.get(), optionalExpression.get(), editExpressionInput.newExpressionText(),
var parentElement = optionalParent.get();
if (parentElement instanceof Relationship relationship) {
parentElement = relationship.getOwningRelatedElement();
}
var result = this.expressionEditor.editExpression(emfEditingContext, parentElement, optionalExpression.get(), editExpressionInput.newExpressionText(),
editExpressionInput.properties());
if (result.createdExpression() != null) {
var newExpression = result.createdExpression();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.Optional;
import java.util.function.Predicate;

import org.eclipse.emf.common.util.EList;
import org.eclipse.syson.sysml.ActorMembership;
import org.eclipse.syson.sysml.BooleanExpression;
import org.eclipse.syson.sysml.ConcernUsage;
Expand All @@ -32,6 +33,7 @@
import org.eclipse.syson.sysml.OwningMembership;
import org.eclipse.syson.sysml.PartUsage;
import org.eclipse.syson.sysml.ReferenceUsage;
import org.eclipse.syson.sysml.Relationship;
import org.eclipse.syson.sysml.RequirementConstraintMembership;
import org.eclipse.syson.sysml.ResultExpressionMembership;
import org.eclipse.syson.sysml.StakeholderMembership;
Expand Down Expand Up @@ -183,7 +185,13 @@ public Optional<Expression> findSingleExpressionDefinition(Element element) {
if (this.isExpressionDefinition(element)) {
result = Optional.of((Expression) element);
} else {
var ownedExpressions = element.getOwnedElement().stream().filter(child -> this.isExpressionDefinition(child)).toList();
EList<Element> ownedElements;
if (element instanceof Relationship relationship) {
ownedElements = relationship.getOwnedRelatedElement();
} else {
ownedElements = element.getOwnedElement();
}
var ownedExpressions = ownedElements.stream().filter(child -> this.isExpressionDefinition(child)).toList();
if (ownedExpressions.size() == 1) {
result = Optional.of((Expression) ownedExpressions.get(0));
}
Expand Down
Loading