Skip to content

Commit 176974c

Browse files
committed
ST6RI-899 Updated derivation of directedUsage for Definition and Usage.
Made the implementation consistent with each other and implementation of EnumerationDefinition::enumeratedValue.
1 parent 1f2fc32 commit 176974c

3 files changed

Lines changed: 62 additions & 16 deletions

File tree

org.omg.sysml.interactive.tests/src/org/omg/sysml/interactive/tests/DerivedPropertyAndOperationTest.java

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public void testPathOperation() throws Exception {
175175
assertEquals("TopLevel/3/1/1/1", TopLevel_3_1_1.getOwnedRelatedElement().get(0).path());
176176
}
177177

178-
public final String directedUsageTest =
178+
public final String directedUsageTest1 =
179179
"package Test {\n"
180180
+ " item def I {\n"
181181
+ " in x;\n"
@@ -192,9 +192,9 @@ public void testPathOperation() throws Exception {
192192
+ "}";
193193

194194
@Test
195-
public void testDirectedUsage() throws Exception {
195+
public void testDirectedUsage1() throws Exception {
196196
SysMLInteractive instance = getSysMLInteractiveInstance();
197-
SysMLInteractiveResult result = instance.process(directedUsageTest);
197+
SysMLInteractiveResult result = instance.process(directedUsageTest1);
198198
Element root = result.getRootElement();
199199
List<Element> elements = ((Namespace)root).getOwnedMember();
200200
List<Element> ownedMembers = ((Namespace)elements.get(0)).getOwnedMember();
@@ -222,6 +222,53 @@ public void testDirectedUsage() throws Exception {
222222
assertEquals("constraint def (directedUsages.size)", 2, directedUsages.size());
223223
assertEquals("constraint def (directedUsages)", directedFeatures.subList(0, 2), directedUsages);
224224
}
225+
public final String directedUsageTest2 =
226+
"package Test {\n"
227+
+ " item I {\n"
228+
+ " in x;\n"
229+
+ " in y;\n"
230+
+ " }"
231+
+ " action A {\n"
232+
+ " in x;\n"
233+
+ " in y;\n"
234+
+ " }"
235+
+ " constraint C {\n"
236+
+ " in x;\n"
237+
+ " in y;\n"
238+
+ " }"
239+
+ "}";
240+
241+
@Test
242+
public void testDirectedUsage2() throws Exception {
243+
SysMLInteractive instance = getSysMLInteractiveInstance();
244+
SysMLInteractiveResult result = instance.process(directedUsageTest2);
245+
Element root = result.getRootElement();
246+
List<Element> elements = ((Namespace)root).getOwnedMember();
247+
List<Element> ownedMembers = ((Namespace)elements.get(0)).getOwnedMember();
248+
List<Feature> directedFeatures = ((Usage)ownedMembers.get(0)).getDirectedFeature();
249+
List<Usage> directedUsages = ((Usage)ownedMembers.get(0)).getDirectedUsage();
250+
assertEquals("item (directedFeatures.size)", 2, directedFeatures.size());
251+
assertEquals("item (directedUsages.size)", 2, directedUsages.size());
252+
assertEquals("item (directedUsages)", directedFeatures, directedUsages);
253+
254+
// Check that getting directedFeatures and directedUsages work for ActionUsages and
255+
// ConstraintUsages, even though they are kinds of Steps, and Step redefines
256+
// directedFeature as parameter.
257+
258+
directedFeatures = ((Usage)ownedMembers.get(1)).getDirectedFeature();
259+
directedUsages = ((Usage)ownedMembers.get(1)).getDirectedUsage();
260+
assertEquals("action (directedFeatures.size)", 2, directedFeatures.size());
261+
assertEquals("action (directedUsages.size)", 2, directedUsages.size());
262+
assertEquals("action (directedUsages)", directedFeatures, directedUsages);
263+
264+
// The ConstraintUsage "C" has three directedFeatures, including its return parameter,
265+
// but only the first two are Usages.
266+
directedFeatures = ((Usage)ownedMembers.get(2)).getDirectedFeature();
267+
directedUsages = ((Usage)ownedMembers.get(2)).getDirectedUsage();
268+
assertEquals("constraint (directedFeatures.size)", 3, directedFeatures.size());
269+
assertEquals("constraint (directedUsages.size)", 2, directedUsages.size());
270+
assertEquals("constraint (directedUsages)", directedFeatures.subList(0, 2), directedUsages);
271+
}
225272

226273
public final String enumeratedValueTest =
227274
"package Test {\n"

org.omg.sysml/src/org/omg/sysml/delegate/setting/Definition_directedUsage_SettingDelegate.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,22 @@
2424
import org.eclipse.emf.common.util.EList;
2525
import org.eclipse.emf.ecore.EStructuralFeature;
2626
import org.eclipse.emf.ecore.InternalEObject;
27-
import org.eclipse.uml2.common.util.DerivedEObjectEList;
28-
import org.omg.sysml.lang.sysml.ActionDefinition;
29-
import org.omg.sysml.lang.sysml.ConstraintDefinition;
30-
import org.omg.sysml.lang.sysml.SysMLPackage;
3127
import org.omg.sysml.lang.sysml.Usage;
28+
import org.omg.sysml.util.NonNotifyingEObjectEList;
3229

33-
public class Definition_directedUsage_SettingDelegate extends DefaultDerivedPropertySettingDelegate {
30+
public class Definition_directedUsage_SettingDelegate extends Type_directedFeature_SettingDelegate {
3431

3532
public Definition_directedUsage_SettingDelegate(EStructuralFeature eStructuralFeature) {
3633
super(eStructuralFeature);
3734
}
3835

3936
@Override
4037
protected EList<?> basicGet(InternalEObject owner) {
41-
return owner instanceof ActionDefinition?
42-
new DerivedEObjectEList<>(Usage.class, owner, eStructuralFeature.getFeatureID(), new int[] {SysMLPackage.ACTION_DEFINITION__PARAMETER}):
43-
owner instanceof ConstraintDefinition?
44-
new DerivedEObjectEList<>(Usage.class, owner, eStructuralFeature.getFeatureID(), new int[] {SysMLPackage.CONSTRAINT_DEFINITION__PARAMETER}):
45-
super.basicGet(owner);
38+
EList<Usage> directedUsages = new NonNotifyingEObjectEList<>(Usage.class, owner, eStructuralFeature.getFeatureID());
39+
super.basicGet(owner).stream().
40+
filter(Usage.class::isInstance).
41+
map(Usage.class::cast).
42+
forEachOrdered(directedUsages::add);
43+
return directedUsages;
4644
}
4745
}

org.omg.sysml/src/org/omg/sysml/delegate/setting/Usage_directedUsage_SettingDelegate.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.omg.sysml.lang.sysml.Usage;
2929
import org.omg.sysml.util.NonNotifyingEObjectEList;
3030

31-
public class Usage_directedUsage_SettingDelegate extends BasicDerivedListSettingDelegate {
31+
public class Usage_directedUsage_SettingDelegate extends Type_directedFeature_SettingDelegate {
3232

3333
public Usage_directedUsage_SettingDelegate(EStructuralFeature eStructuralFeature) {
3434
super(eStructuralFeature);
@@ -37,8 +37,9 @@ public Usage_directedUsage_SettingDelegate(EStructuralFeature eStructuralFeature
3737
@Override
3838
protected EList<?> basicGet(InternalEObject owner) {
3939
EList<Usage> directedUsages = new NonNotifyingEObjectEList<>(Usage.class, owner, eStructuralFeature.getFeatureID());
40-
((Usage)owner).getUsage().stream().
41-
filter(usage->usage.getDirection() != null).
40+
super.basicGet(owner).stream().
41+
filter(Usage.class::isInstance).
42+
map(Usage.class::cast).
4243
forEachOrdered(directedUsages::add);
4344
return directedUsages;
4445
}

0 commit comments

Comments
 (0)