Skip to content

Commit 4adf2fa

Browse files
authored
Merge pull request #725 from Systems-Modeling/ST6RI-901
ST6RI-901 Missing implicit specializations of objects/subobjects
2 parents 433a859 + 78e9104 commit 4adf2fa

6 files changed

Lines changed: 129 additions & 13 deletions

File tree

org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,18 @@
3030
import org.junit.Ignore;
3131
import org.junit.Test;
3232
import org.omg.sysml.lang.sysml.Element;
33+
import org.omg.sysml.lang.sysml.ItemDefinition;
34+
import org.omg.sysml.lang.sysml.OccurrenceUsage;
35+
import org.omg.sysml.lang.sysml.PortDefinition;
36+
import org.omg.sysml.lang.sysml.PortUsage;
3337
import org.omg.sysml.lang.sysml.StateUsage;
3438
import org.omg.sysml.lang.sysml.SysMLFactory;
3539
import org.omg.sysml.lang.sysml.SysMLPackage;
3640
import org.omg.sysml.lang.sysml.TransitionUsage;
3741
import org.omg.sysml.lang.sysml.Type;
3842
import org.omg.sysml.lang.sysml.util.SysMLLibraryUtil;
3943
import org.omg.sysml.util.ElementUtil;
44+
import org.omg.sysml.util.FeatureUtil;
4045
import org.omg.sysml.util.NamespaceUtil;
4146
import org.omg.sysml.util.TypeUtil;
4247

@@ -91,6 +96,93 @@ public void checkTransitionUsageStateSpecialization_StateUsage() {
9196
checkTransitionUsageStateSpecialization("StateUsage");
9297
}
9398

99+
@Test
100+
public void checkFeatureObjectSpecialization_OccurrenceUsage() {
101+
//create and add root package
102+
org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage();
103+
getResource().getContents().add(root);
104+
105+
//check if library element exists
106+
Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Objects::objects");
107+
assertTrue(libraryElement instanceof Type);
108+
109+
//create owning package
110+
org.omg.sysml.lang.sysml.Package owner = SysMLFactory.eINSTANCE.createPackage();
111+
NamespaceUtil.addOwnedMemberTo(root, owner);
112+
113+
//create occurrence usage
114+
OccurrenceUsage occurrence = SysMLFactory.eINSTANCE.createOccurrenceUsage();
115+
occurrence.setIsReference(false);
116+
NamespaceUtil.addOwnedMemberTo(owner, occurrence);
117+
118+
//create structure type
119+
ItemDefinition type = SysMLFactory.eINSTANCE.createItemDefinition();
120+
FeatureUtil.addFeatureTypingTo(occurrence).setType(type);
121+
122+
//run transformation, add implicit elements
123+
ElementUtil.transformAll(root, true);
124+
125+
assertTrue(String.format("OccurrenceUsage specializes subobjects instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement));
126+
}
127+
128+
@Test
129+
public void checkFeatureSubobjectSpecialization_OccurrenceUsage() {
130+
//create and add root package
131+
org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage();
132+
getResource().getContents().add(root);
133+
134+
//check if library element exists
135+
Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Objects::Object::subobjects");
136+
assertTrue(libraryElement instanceof Type);
137+
138+
//create owning type
139+
Type owner = (Type) SysMLFactory.eINSTANCE.createItemDefinition();
140+
NamespaceUtil.addOwnedMemberTo(root, owner);
141+
142+
//create occurrence usage
143+
OccurrenceUsage occurrence = SysMLFactory.eINSTANCE.createOccurrenceUsage();
144+
occurrence.setIsReference(false);
145+
TypeUtil.addOwnedFeatureTo(owner, occurrence);
146+
147+
//create structure type
148+
ItemDefinition type = SysMLFactory.eINSTANCE.createItemDefinition();
149+
FeatureUtil.addFeatureTypingTo(occurrence).setType(type);
150+
151+
//run transformation, add implicit elements
152+
ElementUtil.transformAll(root, true);
153+
154+
assertTrue(String.format("OccurrenceUsage specializes subobjects instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement));
155+
}
156+
157+
@Test
158+
public void checkFeatureSubobjectSpecialization_PortUsage() {
159+
//create and add root package
160+
org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage();
161+
getResource().getContents().add(root);
162+
163+
//check if library element exists
164+
Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Objects::Object::subobjects");
165+
assertTrue(libraryElement instanceof Type);
166+
167+
//create owning type
168+
Type owner = (Type) SysMLFactory.eINSTANCE.createPortDefinition();
169+
NamespaceUtil.addOwnedMemberTo(root, owner);
170+
171+
//create occurrence usage
172+
PortUsage occurrence = SysMLFactory.eINSTANCE.createPortUsage();
173+
occurrence.setIsReference(false);
174+
TypeUtil.addOwnedFeatureTo(owner, occurrence);
175+
176+
//create structure type
177+
PortDefinition type = SysMLFactory.eINSTANCE.createPortDefinition();
178+
FeatureUtil.addFeatureTypingTo(occurrence).setType(type);
179+
180+
//run transformation, add implicit elements
181+
ElementUtil.transformAll(root, true);
182+
183+
assertTrue(String.format("OccurrenceUsage specializes subobjects instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement));
184+
}
185+
94186
@Test
95187
@Ignore("TBD")
96188
public void checkUsageVariationUsageSpecialization() {

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/AnnotationTest.sysml.xt

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,11 @@ XPECT_SETUP org.omg.sysml.xpect.tests.simpletests.SysMLTests
55
File {from ="/library.kernel/Base.kerml"}
66
File {from ="/library.kernel/Occurrences.kerml"}
77
File {from ="/library.kernel/Objects.kerml"}
8+
File {from ="/library.kernel/Metaobjects.kerml"}
89
File {from ="/library.kernel/Performances.kerml"}
9-
File {from ="/library.kernel/ControlPerformances.kerml"}
10-
File {from ="/library.kernel/TransitionPerformances.kerml"}
11-
File {from ="/library.kernel/Transfers.kerml"}
1210
File {from ="/library.kernel/ScalarValues.kerml"}
1311
File {from ="/library.systems/Items.sysml"}
14-
File {from ="/library.systems/Parts.sysml"}
15-
File {from ="/library.systems/Ports.sysml"}
12+
File {from ="/library.systems/Metadata.sysml"}
1613
File {from ="/library.systems/Actions.sysml"}
1714
File {from ="/library.domain/Analysis/AnalysisTooling.sysml"}
1815
}
@@ -23,14 +20,11 @@ XPECT_SETUP org.omg.sysml.xpect.tests.simpletests.SysMLTests
2320
File {from ="/library.kernel/Base.kerml"}
2421
File {from ="/library.kernel/Occurrences.kerml"}
2522
File {from ="/library.kernel/Objects.kerml"}
23+
File {from ="/library.kernel/Metaobjects.kerml"}
2624
File {from ="/library.kernel/Performances.kerml"}
27-
File {from ="/library.kernel/ControlPerformances.kerml"}
28-
File {from ="/library.kernel/TransitionPerformances.kerml"}
29-
File {from ="/library.kernel/Transfers.kerml"}
3025
File {from ="/library.kernel/ScalarValues.kerml"}
3126
File {from ="/library.systems/Items.sysml"}
32-
File {from ="/library.systems/Parts.sysml"}
33-
File {from ="/library.systems/Ports.sysml"}
27+
File {from ="/library.systems/Metadata.sysml"}
3428
File {from ="/library.systems/Actions.sysml"}
3529
File {from ="/library.domain/Analysis/AnalysisTooling.sysml"}
3630
}
@@ -52,8 +46,8 @@ package AnalysisAnnotation {
5246
in dt : Real { @ToolVariable { name = "deltaT"; } }
5347
in whlpwr : Real { @ToolVariable { name = "power"; } }
5448
in Cd : Real { @ToolVariable { name = "C_D"; } }
55-
in Cf: Real { @ToolVariable { name = "C_F"; } }
56-
in tm :Real { @ToolVariable { name = "mass"; } }
49+
in Cf : Real { @ToolVariable { name = "C_F"; } }
50+
in tm : Real { @ToolVariable { name = "mass"; } }
5751
in v_in : Real { @ToolVariable { name = "v0"; } }
5852
in x_in : Real { @ToolVariable { name = "x0"; } }
5953

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/ViewRendering_invalid.sysml.xt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ XPECT_SETUP org.omg.sysml.xpect.tests.validation.invalid.SysMLTests
77
File {from ="/library.kernel/Objects.kerml"}
88
File {from ="/library.kernel/Occurrences.kerml"}
99
File {from ="/library.kernel/Performances.kerml"}
10+
File {from ="/library.systems/Items.sysml"}
11+
File {from ="/library.systems/Parts.sysml"}
1012
File {from ="/library.systems/Constraints.sysml"}
1113
File {from ="/library.systems/Requirements.sysml"}
14+
File {from ="/library.systems/Actions.sysml"}
15+
File {from ="/library.systems/Calculations.sysml"}
1216
File {from ="/library.systems/Views.sysml"}
1317
}
1418
Workspace {
@@ -20,8 +24,12 @@ XPECT_SETUP org.omg.sysml.xpect.tests.validation.invalid.SysMLTests
2024
File {from ="/library.kernel/Objects.kerml"}
2125
File {from ="/library.kernel/Occurrences.kerml"}
2226
File {from ="/library.kernel/Performances.kerml"}
27+
File {from ="/library.systems/Items.sysml"}
28+
File {from ="/library.systems/Parts.sysml"}
2329
File {from ="/library.systems/Constraints.sysml"}
2430
File {from ="/library.systems/Requirements.sysml"}
31+
File {from ="/library.systems/Actions.sysml"}
32+
File {from ="/library.systems/Calculations.sysml"}
2533
File {from ="/library.systems/Views.sysml"}
2634
}
2735
}

org.omg.sysml/src/org/omg/sysml/adapter/ItemUsageAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ protected boolean isSuboccurrence() {
5555
return super.isSuboccurrence() && !isSubitem();
5656
}
5757

58+
@Override
59+
protected boolean isSubobject() {
60+
return super.isSubobject() && !isSubitem();
61+
}
62+
5863
public boolean isSubitem() {
5964
ItemUsage target = getTarget();
6065
Type owningType = target.getOwningType();

org.omg.sysml/src/org/omg/sysml/adapter/OccurrenceUsageAdapter.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,23 @@ public void postProcess() {
5050
// Implicit Generalization
5151

5252
/**
53+
* @satisfies checkFeatureObjectSpecialization
54+
* @satisfies checkFeatureSubobjectSpecialization
55+
* @satisfies checkFeatureDataValueSpecialization
5356
* @satisfies checkOccurrenceUsageSnapshotSpecialization
5457
* @satisfies checkOccurrenceUsageSuboccurrenceSpecialization
5558
* @satisfies checkOccurrenceUsageTimeSliceSpecialization
5659
*/
5760
@Override
5861
public void addDefaultGeneralType() {
5962
super.addDefaultGeneralType();
60-
if (isSuboccurrence()) {
63+
if (hasDataType()) {
64+
addDefaultGeneralType("dataValue");
65+
}
66+
if (hasStructureType()) {
67+
addDefaultGeneralType(isSubobject()? "subobject": "object");
68+
}
69+
else if (isSuboccurrence()) {
6170
addDefaultGeneralType("suboccurrence");
6271
}
6372
PortionKind portionKind = getTarget().getPortionKind();

org.omg.sysml/src/org/omg/sysml/adapter/PortUsageAdapter.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ public PortUsage getTarget() {
3939

4040
// Implicit Generalization
4141

42+
@Override
43+
public void addDefaultGeneralType() {
44+
super.addDefaultGeneralType();
45+
if (isStructureOwnedComposite()) {
46+
addDefaultGeneralType("subobject");
47+
}
48+
}
49+
4250
/**
4351
* @satisfies checkPortUsageOwnedPortSpecialization
4452
* @satisfies checkPortUsageSubportSpecialization

0 commit comments

Comments
 (0)