diff --git a/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java b/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java index 902200f35..840410790 100644 --- a/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java +++ b/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java @@ -30,6 +30,10 @@ import org.junit.Ignore; import org.junit.Test; import org.omg.sysml.lang.sysml.Element; +import org.omg.sysml.lang.sysml.ItemDefinition; +import org.omg.sysml.lang.sysml.OccurrenceUsage; +import org.omg.sysml.lang.sysml.PortDefinition; +import org.omg.sysml.lang.sysml.PortUsage; import org.omg.sysml.lang.sysml.StateUsage; import org.omg.sysml.lang.sysml.SysMLFactory; import org.omg.sysml.lang.sysml.SysMLPackage; @@ -37,6 +41,7 @@ import org.omg.sysml.lang.sysml.Type; import org.omg.sysml.lang.sysml.util.SysMLLibraryUtil; import org.omg.sysml.util.ElementUtil; +import org.omg.sysml.util.FeatureUtil; import org.omg.sysml.util.NamespaceUtil; import org.omg.sysml.util.TypeUtil; @@ -91,6 +96,93 @@ public void checkTransitionUsageStateSpecialization_StateUsage() { checkTransitionUsageStateSpecialization("StateUsage"); } + @Test + public void checkFeatureObjectSpecialization_OccurrenceUsage() { + //create and add root package + org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage(); + getResource().getContents().add(root); + + //check if library element exists + Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Objects::objects"); + assertTrue(libraryElement instanceof Type); + + //create owning package + org.omg.sysml.lang.sysml.Package owner = SysMLFactory.eINSTANCE.createPackage(); + NamespaceUtil.addOwnedMemberTo(root, owner); + + //create occurrence usage + OccurrenceUsage occurrence = SysMLFactory.eINSTANCE.createOccurrenceUsage(); + occurrence.setIsReference(false); + NamespaceUtil.addOwnedMemberTo(owner, occurrence); + + //create structure type + ItemDefinition type = SysMLFactory.eINSTANCE.createItemDefinition(); + FeatureUtil.addFeatureTypingTo(occurrence).setType(type); + + //run transformation, add implicit elements + ElementUtil.transformAll(root, true); + + assertTrue(String.format("OccurrenceUsage specializes subobjects instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement)); + } + + @Test + public void checkFeatureSubobjectSpecialization_OccurrenceUsage() { + //create and add root package + org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage(); + getResource().getContents().add(root); + + //check if library element exists + Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Objects::Object::subobjects"); + assertTrue(libraryElement instanceof Type); + + //create owning type + Type owner = (Type) SysMLFactory.eINSTANCE.createItemDefinition(); + NamespaceUtil.addOwnedMemberTo(root, owner); + + //create occurrence usage + OccurrenceUsage occurrence = SysMLFactory.eINSTANCE.createOccurrenceUsage(); + occurrence.setIsReference(false); + TypeUtil.addOwnedFeatureTo(owner, occurrence); + + //create structure type + ItemDefinition type = SysMLFactory.eINSTANCE.createItemDefinition(); + FeatureUtil.addFeatureTypingTo(occurrence).setType(type); + + //run transformation, add implicit elements + ElementUtil.transformAll(root, true); + + assertTrue(String.format("OccurrenceUsage specializes subobjects instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement)); + } + + @Test + public void checkFeatureSubobjectSpecialization_PortUsage() { + //create and add root package + org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage(); + getResource().getContents().add(root); + + //check if library element exists + Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Objects::Object::subobjects"); + assertTrue(libraryElement instanceof Type); + + //create owning type + Type owner = (Type) SysMLFactory.eINSTANCE.createPortDefinition(); + NamespaceUtil.addOwnedMemberTo(root, owner); + + //create occurrence usage + PortUsage occurrence = SysMLFactory.eINSTANCE.createPortUsage(); + occurrence.setIsReference(false); + TypeUtil.addOwnedFeatureTo(owner, occurrence); + + //create structure type + PortDefinition type = SysMLFactory.eINSTANCE.createPortDefinition(); + FeatureUtil.addFeatureTypingTo(occurrence).setType(type); + + //run transformation, add implicit elements + ElementUtil.transformAll(root, true); + + assertTrue(String.format("OccurrenceUsage specializes subobjects instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement)); + } + @Test @Ignore("TBD") public void checkUsageVariationUsageSpecialization() { diff --git a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/AnnotationTest.sysml.xt b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/AnnotationTest.sysml.xt index 822dc25a0..408a334d2 100644 --- a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/AnnotationTest.sysml.xt +++ b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/AnnotationTest.sysml.xt @@ -5,14 +5,11 @@ XPECT_SETUP org.omg.sysml.xpect.tests.simpletests.SysMLTests File {from ="/library.kernel/Base.kerml"} File {from ="/library.kernel/Occurrences.kerml"} File {from ="/library.kernel/Objects.kerml"} + File {from ="/library.kernel/Metaobjects.kerml"} File {from ="/library.kernel/Performances.kerml"} - File {from ="/library.kernel/ControlPerformances.kerml"} - File {from ="/library.kernel/TransitionPerformances.kerml"} - File {from ="/library.kernel/Transfers.kerml"} File {from ="/library.kernel/ScalarValues.kerml"} File {from ="/library.systems/Items.sysml"} - File {from ="/library.systems/Parts.sysml"} - File {from ="/library.systems/Ports.sysml"} + File {from ="/library.systems/Metadata.sysml"} File {from ="/library.systems/Actions.sysml"} File {from ="/library.domain/Analysis/AnalysisTooling.sysml"} } @@ -23,14 +20,11 @@ XPECT_SETUP org.omg.sysml.xpect.tests.simpletests.SysMLTests File {from ="/library.kernel/Base.kerml"} File {from ="/library.kernel/Occurrences.kerml"} File {from ="/library.kernel/Objects.kerml"} + File {from ="/library.kernel/Metaobjects.kerml"} File {from ="/library.kernel/Performances.kerml"} - File {from ="/library.kernel/ControlPerformances.kerml"} - File {from ="/library.kernel/TransitionPerformances.kerml"} - File {from ="/library.kernel/Transfers.kerml"} File {from ="/library.kernel/ScalarValues.kerml"} File {from ="/library.systems/Items.sysml"} - File {from ="/library.systems/Parts.sysml"} - File {from ="/library.systems/Ports.sysml"} + File {from ="/library.systems/Metadata.sysml"} File {from ="/library.systems/Actions.sysml"} File {from ="/library.domain/Analysis/AnalysisTooling.sysml"} } @@ -52,8 +46,8 @@ package AnalysisAnnotation { in dt : Real { @ToolVariable { name = "deltaT"; } } in whlpwr : Real { @ToolVariable { name = "power"; } } in Cd : Real { @ToolVariable { name = "C_D"; } } - in Cf: Real { @ToolVariable { name = "C_F"; } } - in tm :Real { @ToolVariable { name = "mass"; } } + in Cf : Real { @ToolVariable { name = "C_F"; } } + in tm : Real { @ToolVariable { name = "mass"; } } in v_in : Real { @ToolVariable { name = "v0"; } } in x_in : Real { @ToolVariable { name = "x0"; } } diff --git a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/ViewRendering_invalid.sysml.xt b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/ViewRendering_invalid.sysml.xt index f40a5d52f..5dfaa2654 100644 --- a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/ViewRendering_invalid.sysml.xt +++ b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/ViewRendering_invalid.sysml.xt @@ -7,8 +7,12 @@ XPECT_SETUP org.omg.sysml.xpect.tests.validation.invalid.SysMLTests File {from ="/library.kernel/Objects.kerml"} File {from ="/library.kernel/Occurrences.kerml"} File {from ="/library.kernel/Performances.kerml"} + File {from ="/library.systems/Items.sysml"} + File {from ="/library.systems/Parts.sysml"} File {from ="/library.systems/Constraints.sysml"} File {from ="/library.systems/Requirements.sysml"} + File {from ="/library.systems/Actions.sysml"} + File {from ="/library.systems/Calculations.sysml"} File {from ="/library.systems/Views.sysml"} } Workspace { @@ -20,8 +24,12 @@ XPECT_SETUP org.omg.sysml.xpect.tests.validation.invalid.SysMLTests File {from ="/library.kernel/Objects.kerml"} File {from ="/library.kernel/Occurrences.kerml"} File {from ="/library.kernel/Performances.kerml"} + File {from ="/library.systems/Items.sysml"} + File {from ="/library.systems/Parts.sysml"} File {from ="/library.systems/Constraints.sysml"} File {from ="/library.systems/Requirements.sysml"} + File {from ="/library.systems/Actions.sysml"} + File {from ="/library.systems/Calculations.sysml"} File {from ="/library.systems/Views.sysml"} } } diff --git a/org.omg.sysml/src/org/omg/sysml/adapter/ItemUsageAdapter.java b/org.omg.sysml/src/org/omg/sysml/adapter/ItemUsageAdapter.java index 58f4e5b51..778b01220 100644 --- a/org.omg.sysml/src/org/omg/sysml/adapter/ItemUsageAdapter.java +++ b/org.omg.sysml/src/org/omg/sysml/adapter/ItemUsageAdapter.java @@ -55,6 +55,11 @@ protected boolean isSuboccurrence() { return super.isSuboccurrence() && !isSubitem(); } + @Override + protected boolean isSubobject() { + return super.isSubobject() && !isSubitem(); + } + public boolean isSubitem() { ItemUsage target = getTarget(); Type owningType = target.getOwningType(); diff --git a/org.omg.sysml/src/org/omg/sysml/adapter/OccurrenceUsageAdapter.java b/org.omg.sysml/src/org/omg/sysml/adapter/OccurrenceUsageAdapter.java index 01912ba44..28c4eca70 100644 --- a/org.omg.sysml/src/org/omg/sysml/adapter/OccurrenceUsageAdapter.java +++ b/org.omg.sysml/src/org/omg/sysml/adapter/OccurrenceUsageAdapter.java @@ -50,6 +50,9 @@ public void postProcess() { // Implicit Generalization /** + * @satisfies checkFeatureObjectSpecialization + * @satisfies checkFeatureSubobjectSpecialization + * @satisfies checkFeatureDataValueSpecialization * @satisfies checkOccurrenceUsageSnapshotSpecialization * @satisfies checkOccurrenceUsageSuboccurrenceSpecialization * @satisfies checkOccurrenceUsageTimeSliceSpecialization @@ -57,7 +60,13 @@ public void postProcess() { @Override public void addDefaultGeneralType() { super.addDefaultGeneralType(); - if (isSuboccurrence()) { + if (hasDataType()) { + addDefaultGeneralType("dataValue"); + } + if (hasStructureType()) { + addDefaultGeneralType(isSubobject()? "subobject": "object"); + } + else if (isSuboccurrence()) { addDefaultGeneralType("suboccurrence"); } PortionKind portionKind = getTarget().getPortionKind(); diff --git a/org.omg.sysml/src/org/omg/sysml/adapter/PortUsageAdapter.java b/org.omg.sysml/src/org/omg/sysml/adapter/PortUsageAdapter.java index 53dcdb61e..cdbd9b1ab 100644 --- a/org.omg.sysml/src/org/omg/sysml/adapter/PortUsageAdapter.java +++ b/org.omg.sysml/src/org/omg/sysml/adapter/PortUsageAdapter.java @@ -39,6 +39,14 @@ public PortUsage getTarget() { // Implicit Generalization + @Override + public void addDefaultGeneralType() { + super.addDefaultGeneralType(); + if (isStructureOwnedComposite()) { + addDefaultGeneralType("subobject"); + } + } + /** * @satisfies checkPortUsageOwnedPortSpecialization * @satisfies checkPortUsageSubportSpecialization