Skip to content

Commit 11aa409

Browse files
committed
[1263] Improve BindingConnectorAsUsage to be able to create FeatureChain
Bug: #1263 Signed-off-by: Arthur Daussy <arthur.daussy@obeo.fr>
1 parent 39c803a commit 11aa409

19 files changed

Lines changed: 1486 additions & 162 deletions

File tree

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ The import now correctly creates a `MultiplicityRange` containing `LiteralIntege
8383
- https://github.com/eclipse-syson/syson/issues/1318[#1318] [details] Fix an issue that prevents adding a new value to a multi-valued reference in the reference widget.
8484
- https://github.com/eclipse-syson/syson/issues/1331[#1331] [general-view] Fix an issue that prevents dropping a `Definition` element from the _Explorer view_ on a _General View_.
8585
- https://github.com/eclipse-syson/syson/issues/1321[#1321] [general-view] Prevent `TransitionUsage` graphical edges source/target reconnection to another `TransitionUsage`.
86+
- https://github.com/eclipse-syson/syson/issues/1263[#1236] [general-view] Improve BindingConnectorAsUsage to be able to create FeatureChain if necessary.
8687

8788
=== Improvements
8889

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVBindingConnectorAsUsage.java

Lines changed: 455 additions & 0 deletions
Large diffs are not rendered by default.

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVEdgePortUsageTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public void givenSysMLProjectWithPortsWhenBindingConnectorAsUsageEdgeToolCreatio
196196

197197
this.diagramCheckerService.checkDiagram(diagramChecker, this.diagram, this.verifier);
198198

199-
ISemanticChecker semanticChecker = this.semanticCheckerService.getElementInParentSemanticChecker("Package 1", SysmlPackage.eINSTANCE.getNamespace_OwnedMember(),
199+
ISemanticChecker semanticChecker = this.semanticCheckerService.getElementInParentSemanticChecker("part1", SysmlPackage.eINSTANCE.getType_Feature(),
200200
SysmlPackage.eINSTANCE.getBindingConnectorAsUsage());
201201

202202
this.semanticCheckerService.checkEditingContext(semanticChecker, this.verifier);

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVFlowConnectionTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ public void checkItemUsageBindingConnectorAsUsage() {
213213
this.semanticCheckerService.checkElement(this.verifier, BindingConnectorAsUsage.class, () -> newBinding[0], binding -> {
214214
assertThat(this.identityService.getId(binding.getSourceFeature()))
215215
.isEqualTo(GeneralViewFlowConnectionItemUsagesProjectData.SemanticIds.ACTION_USAGE_2_OUT_ITEM_ID);
216-
assertThat(this.identityService.getId(binding.getTargetFeature().get(0)))
216+
assertThat(this.identityService.getId(binding.getTargetFeature().get(0).getFeatureTarget()))
217217
.isEqualTo(GeneralViewFlowConnectionItemUsagesProjectData.SemanticIds.ACTION_USAGE_3_IN_ITEM_ID);
218218
});
219219
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2025 Obeo.
3+
* This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v2.0
5+
* which accompanies this distribution, and is available at
6+
* https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* Obeo - initial API and implementation
12+
*******************************************************************************/
13+
package org.eclipse.syson.application.data;
14+
15+
/**
16+
* Project Data ids for project "GeneralView-BindingConnectorProject".
17+
*
18+
* @author Arthur Daussy
19+
*/
20+
public class GeneralViewBindingConnectorProjectData {
21+
22+
public static final String SCRIPT_PATH = "/scripts/database-content/GeneralView-BindingConnectorProject.sql";
23+
24+
public static final String EDITING_CONTEXT_ID = "d9f1cd0e-2ca2-4e69-8a91-87a80a455e04";
25+
26+
/**
27+
* Semantic ids.
28+
*
29+
* @author Arthur Daussy
30+
*/
31+
public static final class SemanticIds {
32+
33+
public static final String PACKAGE_1_ID = "4968c2dd-be63-495d-a19d-e4e3b5272724";
34+
35+
public static final String GENERAL_VIEW_ID = "efcc9cdb-5dc0-48fc-807a-ca020be54a0b";
36+
37+
public static final String A0_ID = "7e9a5607-31d3-46cf-b709-1443f71c38bd";
38+
39+
public static final String I0_ID = "e89ec9aa-8192-4aff-9f63-2f37b71b7250";
40+
41+
public static final String REFERENCE2_ID = "47f82ce8-7771-41d8-a215-5ca7bfc7ba09";
42+
43+
public static final String A1_ID = "202f7d9c-9f2f-4f97-a63f-fe05454d64de";
44+
45+
public static final String I1_ID = "dec9add2-c1c4-47bf-8e34-0f1354cee650";
46+
47+
public static final String I2_ID = "4942323d-3861-4e3a-9135-b06d6ccd6c20";
48+
49+
public static final String A11_ID = "2b6e065b-6d23-4d0f-8d8b-1fdfb0def024";
50+
51+
public static final String I11_ID = "c881eaab-b12d-4b90-bb58-39aad9fd6767";
52+
53+
public static final String I11TEST_ID = "f119ba39-42e1-4b21-a04e-3e4944082b59";
54+
55+
public static final String P0_ID = "865f3559-99ce-4132-88b3-3acda5a5d86b";
56+
57+
}
58+
59+
/**
60+
* Graphical ids.
61+
*
62+
* @author Arthur Daussy
63+
*/
64+
public static final class GraphicalIds {
65+
66+
public static final String DIAGRAM_ID = "219f9e4c-900d-4258-b2fc-a69c94f3f666";
67+
68+
public static final String I0_ID = "c0a61f94-7762-357b-a245-2d00916f612e";
69+
70+
public static final String I1_ID = "07b3e9f5-55b1-3b81-97b9-e04214393b4b";
71+
72+
public static final String I11 = "e43e174a-8163-3ac8-b3f5-ebe6856d9ed2";
73+
74+
public static final String I11TEST = "99a13645-74bd-3ca4-97fd-59d8340f7bfd";
75+
76+
public static final String I11_ID = "e43e174a-8163-3ac8-b3f5-ebe6856d9ed2";
77+
78+
public static final String I11TEST_ID = "99a13645-74bd-3ca4-97fd-59d8340f7bfd";
79+
80+
public static final String BINDING_EDGE_ID = "38487ae1-e4ee-32e6-892b-d43929582aa0";
81+
82+
public static final String I2_ID = "a8aa241b-5fff-3fd3-963d-60f3c5b01858";
83+
84+
}
85+
}

backend/application/syson-application/src/test/java/org/eclipse/syson/application/imports/ImportSysMLModelTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.eclipse.syson.services.UtilService;
4141
import org.eclipse.syson.sysml.ActionUsage;
4242
import org.eclipse.syson.sysml.AttributeUsage;
43+
import org.eclipse.syson.sysml.BindingConnectorAsUsage;
4344
import org.eclipse.syson.sysml.ConjugatedPortDefinition;
4445
import org.eclipse.syson.sysml.DecisionNode;
4546
import org.eclipse.syson.sysml.Expression;
@@ -137,6 +138,40 @@ public void tearDown() {
137138
TestTransaction.start();
138139
}
139140

141+
@Test
142+
@DisplayName("Given a model using a BindingConnectorAsUsage with feature chain, when importing the model, then model is correctly imported")
143+
public void checkBindingConnectorWithFeatureChaine() throws IOException {
144+
var input = """
145+
package pk1 {
146+
action a1 {
147+
in item i1;
148+
149+
action a11 {
150+
in item i11;
151+
}
152+
action a21 {
153+
in item i21;
154+
}
155+
bind i1 = a21.i21;
156+
binding b2 bind a11.i11 = a21.i21;
157+
}
158+
}""";
159+
this.checker.checkImportedModel(resource -> {
160+
List<BindingConnectorAsUsage> bindings = EMFUtils.allContainedObjectOfType(resource, BindingConnectorAsUsage.class)
161+
.toList();
162+
assertThat(bindings).hasSize(2);
163+
164+
BindingConnectorAsUsage b1 = bindings.get(0);
165+
assertThat(b1.getSourceFeature().getFeatureTarget().getName()).isEqualTo("i1");
166+
assertThat(b1.getTargetFeature().get(0).getFeatureTarget().getName()).isEqualTo("i21");
167+
168+
BindingConnectorAsUsage b2 = bindings.get(1);
169+
assertThat(b2.getName()).isEqualTo("b2");
170+
assertThat(b2.getSourceFeature().getFeatureTarget().getName()).isEqualTo("i11");
171+
assertThat(b2.getTargetFeature().get(0).getFeatureTarget().getName()).isEqualTo("i21");
172+
173+
}).check(input);
174+
}
140175
@Test
141176
@DisplayName("Given a model with a TextualRepresentation with a multiline body, when importing the model, then the boly is imported without /* and */")
142177
public void checkTextualRepresentationFeatures() throws IOException {

0 commit comments

Comments
 (0)