Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,18 @@
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;
import org.omg.sysml.lang.sysml.TransitionUsage;
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;

Expand Down Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"}
}
Expand All @@ -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"}
}
Expand All @@ -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"; } }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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"}
}
}
Expand Down
5 changes: 5 additions & 0 deletions org.omg.sysml/src/org/omg/sysml/adapter/ItemUsageAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,23 @@ public void postProcess() {
// Implicit Generalization

/**
* @satisfies checkFeatureObjectSpecialization
* @satisfies checkFeatureSubobjectSpecialization
* @satisfies checkFeatureDataValueSpecialization
* @satisfies checkOccurrenceUsageSnapshotSpecialization
* @satisfies checkOccurrenceUsageSuboccurrenceSpecialization
* @satisfies checkOccurrenceUsageTimeSliceSpecialization
*/
@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();
Expand Down
8 changes: 8 additions & 0 deletions org.omg.sysml/src/org/omg/sysml/adapter/PortUsageAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ public PortUsage getTarget() {

// Implicit Generalization

@Override
public void addDefaultGeneralType() {
super.addDefaultGeneralType();
if (isStructureOwnedComposite()) {
addDefaultGeneralType("subobject");
}
}

/**
* @satisfies checkPortUsageOwnedPortSpecialization
* @satisfies checkPortUsageSubportSpecialization
Expand Down