Skip to content

Commit 373cd4d

Browse files
authored
Merge pull request #712 from Systems-Modeling/ST6RI-896
ST6RI-896 getDirectedUsage broken on an ActionDefinition or Constraint Definition
2 parents 790cd24 + 934442c commit 373cd4d

2 files changed

Lines changed: 96 additions & 0 deletions

File tree

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.omg.sysml.lang.sysml.Definition;
3838
import org.omg.sysml.lang.sysml.Element;
3939
import org.omg.sysml.lang.sysml.Expression;
40+
import org.omg.sysml.lang.sysml.Feature;
4041
import org.omg.sysml.lang.sysml.ItemUsage;
4142
import org.omg.sysml.lang.sysml.Namespace;
4243
import org.omg.sysml.lang.sysml.Relationship;
@@ -172,4 +173,52 @@ public void testPathOperation() throws Exception {
172173
assertEquals("TopLevel/3/1/1/1", TopLevel_3_1_1.getOwnedRelatedElement().get(0).path());
173174
}
174175

176+
public final String directedUsageTest =
177+
"package Test {\n"
178+
+ " item def I {\n"
179+
+ " in x;\n"
180+
+ " in y;\n"
181+
+ " }"
182+
+ " action def A {\n"
183+
+ " in x;\n"
184+
+ " in y;\n"
185+
+ " }"
186+
+ " constraint def C {\n"
187+
+ " in x;\n"
188+
+ " in y;\n"
189+
+ " }"
190+
+ "}";
191+
192+
@Test
193+
public void testDirectedUsage() throws Exception {
194+
SysMLInteractive instance = getSysMLInteractiveInstance();
195+
SysMLInteractiveResult result = instance.process(directedUsageTest);
196+
Element root = result.getRootElement();
197+
List<Element> elements = ((Namespace)root).getOwnedMember();
198+
List<Element> ownedMembers = ((Namespace)elements.get(0)).getOwnedMember();
199+
List<Feature> directedFeatures = ((Definition)ownedMembers.get(0)).getDirectedFeature();
200+
List<Usage> directedUsages = ((Definition)ownedMembers.get(0)).getDirectedUsage();
201+
assertEquals("item def (directedFeatures.size)", 2, directedFeatures.size());
202+
assertEquals("item def (directedUsages.size)", 2, directedUsages.size());
203+
assertEquals("item def (directedUsages)", directedFeatures, directedUsages);
204+
205+
// Check that getting directedFeatures and directedUsages work for ActionDefinitions and
206+
// ConstraintDefinitions, even though they are kinds of Behaviors, and Behavior redefines
207+
// directedFeature as parameter.
208+
209+
directedFeatures = ((Definition)ownedMembers.get(1)).getDirectedFeature();
210+
directedUsages = ((Definition)ownedMembers.get(1)).getDirectedUsage();
211+
assertEquals("action def (directedFeatures.size)", 2, directedFeatures.size());
212+
assertEquals("action def (directedUsages.size)", 2, directedUsages.size());
213+
assertEquals("action def (directedUsages)", directedFeatures, directedUsages);
214+
215+
// The ConstraintDefinition "C" has three directedFeatures, including its return parameter,
216+
// but only the first two are Usages.
217+
directedFeatures = ((Definition)ownedMembers.get(2)).getDirectedFeature();
218+
directedUsages = ((Definition)ownedMembers.get(2)).getDirectedUsage();
219+
assertEquals("constraint def (directedFeatures.size)", 3, directedFeatures.size());
220+
assertEquals("constraint def (directedUsages.size)", 2, directedUsages.size());
221+
assertEquals("constraint def (directedUsages)", directedFeatures.subList(0, 2), directedUsages);
222+
}
223+
175224
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*******************************************************************************
2+
* SysML 2 Pilot Implementation
3+
* Copyright (c) 2025 Model Driven Solutions, Inc.
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU Lesser General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU Lesser General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU Lesser General Public License
16+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*
18+
* @license LGPL-3.0-or-later <http://spdx.org/licenses/LGPL-3.0-or-later>
19+
*
20+
*******************************************************************************/
21+
22+
package org.omg.sysml.delegate.setting;
23+
24+
import org.eclipse.emf.common.util.EList;
25+
import org.eclipse.emf.ecore.EStructuralFeature;
26+
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;
31+
import org.omg.sysml.lang.sysml.Usage;
32+
33+
public class Definition_directedUsage_SettingDelegate extends DefaultDerivedPropertySettingDelegate {
34+
35+
public Definition_directedUsage_SettingDelegate(EStructuralFeature eStructuralFeature) {
36+
super(eStructuralFeature);
37+
}
38+
39+
@Override
40+
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);
46+
}
47+
}

0 commit comments

Comments
 (0)