blob: d7575aad55d935294cbc563656ec8ff56c028c37 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2017 CEA LIST and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation
*****************************************************************************/
import org.eclipse.papyrus.interoperability.sysml14.sysml.blackboxes.VersioningHelper;
import org.eclipse.papyrus.interoperability.sysml14.sysml.SysMLDiagramsConstants;
modeltype ecore "strict" uses 'http://www.eclipse.org/emf/2002/Ecore';
modeltype UML "strict" uses 'http://www.eclipse.org/uml2/5.0.0/UML';
modeltype notation "strict" uses 'http://www.eclipse.org/gmf/runtime/1.0.2/notation';
modeltype viewpoint "strict" uses 'http://www.eclipse.org/papyrus/infra/viewpoints/configuration';
modeltype style "strict" uses 'http://www.eclipse.org/papyrus/infra/viewpoints/policy/style';
/**
* This file provides useful method for SysML diagrams.
*/
library SysMLDiagramsUtils;
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsClass(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::Class)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := CLASS_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(CLASS_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(CLASS_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(CLASS_ATTRIBUTE_COMPARTMENT_SYSML14);
children += createDefaultBasicCompartement(CLASS_OPERATION_COMPARTMENT_SYSML14);
children += createDefaultBasicCompartement(CLASS_NESTEDCLASSIFIER_COMPARTMENT_SYSML14);
} else {
type := CLASS_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(CLASS_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(CLASS_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(CLASS_ATTRIBUTE_COMPARTMENT_CN_SYSML14);
children += createDefaultBasicCompartement(CLASS_OPERATION_COMPARTMENT_CN_SYSML14);
children += createDefaultBasicCompartement(CLASS_NESTEDCLASSIFIER_COMPARTMENT_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsComponent(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::Component)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := COMPONENT_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(COMPONENT_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(COMPONENT_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(COMPONENT_ATTRIBUTE_COMPARTMENT_SYSML14);
children += createDefaultBasicCompartement(COMPONENT_OPERATION_COMPARTMENT_SYSML14);
children += createDefaultBasicCompartement(COMPONENT_NESTEDCLASSIFIER_COMPARTMENT_SYSML14);
} else {
type := COMPONENT_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(COMPONENT_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(COMPONENT_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(COMPONENT_ATTRIBUTE_COMPARTMENT_CN_SYSML14);
children += createDefaultBasicCompartement(COMPONENT_OPERATION_COMPARTMENT_CN_SYSML14);
children += createDefaultBasicCompartement(COMPONENT_NESTEDCLASSIFIER_COMPARTMENT_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsDataType(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::DataType)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := DATATYPE_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(DATATYPE_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(DATATYPE_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(DATATYPE_ATTRIBUTE_COMPARTMENT_SYSML14);
children += createDefaultBasicCompartement(DATATYPE_OPERATION_COMPARTMENT_SYSML14);
} else {
type := DATATYPE_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(DATATYPE_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(DATATYPE_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(DATATYPE_ATTRIBUTE_COMPARTMENT_CN_SYSML14);
children += createDefaultBasicCompartement(DATATYPE_OPERATION_COMPARTMENT_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsDurationObservation(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::DurationObservation)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := DURATIONOBSERVATION_SHAPE_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_FLOATING_LABEL_DECORATIONNODE_SYSML14);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
} else {
type := DURATIONOBSERVATION_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_CN_SYSML14);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsEnumeration(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::Enumeration)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := ENUMERATION_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(ENUMERATION_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(ENUMERATION_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(ENUMERATION_LITERAL_COMPARTMENT_SYSML14);
} else {
type := ENUMERATION_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(ENUMERATION_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(ENUMERATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(ENUMERATION_LITERAL_COMPARTMENT_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsInformationItem(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::InformationItem)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := INFORMATIONITEM_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INFORMATIONITEM_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(INFORMATIONITEM_FLOATING_LABEL_DECORATIONNODE_SYSML14);
} else {
type := INFORMATIONITEM_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INFORMATIONITEM_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(INFORMATIONITEM_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsInterface(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::Interface)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := INTERFACE_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INTERFACE_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(INTERFACE_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(INTERFACE_ATTRIBUTE_COMPARTMENT_SYSML14);
children += createDefaultBasicCompartement(INTERFACE_OPERATION_COMPARTMENT_SYSML14);
children += createDefaultBasicCompartement(INTERFACE_NESTEDCLASSIFIER_COMPARTMENT_SYSML14);
} else {
type := INTERFACE_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INTERFACE_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(INTERFACE_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(INTERFACE_ATTRIBUTE_COMPARTMENT_CN_SYSML14);
children += createDefaultBasicCompartement(INTERFACE_OPERATION_COMPARTMENT_CN_SYSML14);
children += createDefaultBasicCompartement(INTERFACE_NESTEDCLASSIFIER_COMPARTMENT_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsInstanceSpecification(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::InstanceSpecification)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := INSTANCESPECIFICATION_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INSTANCESPECIFICATION_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(INSTANCESPECIFICATION_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(INSTANCESPECIFICATION_SLOP_COMPARTMENT_SYSML14);
} else {
type := INSTANCESPECIFICATION_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INSTANCESPECIFICATION_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(INSTANCESPECIFICATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(INSTANCESPECIFICATION_SLOP_COMPARTMENT_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsPrimitiveType(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::PrimitiveType)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := PRIMITIVETYPE_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(PRIMITIVETYPE_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(PRIMITIVETYPE_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(PRIMITIVETYPE_ATTRIBUTE_COMPARTMENT_SYSML14);
} else {
type := PRIMITIVETYPE_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(PRIMITIVETYPE_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(PRIMITIVETYPE_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(PRIMITIVETYPE_ATTRIBUTE_COMPARTMENT_CN_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsSignal(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::Signal)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := SIGNAL_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(SIGNAL_NAME_LABEL_DECORATIONNODE_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(SIGNAL_FLOATING_LABEL_DECORATIONNODE_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(SIGNAL_ATTRIBUTE_COMPARTMENT_SYSML14);
} else {
type := SIGNAL_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(SIGNAL_NAME_LABEL_DECORATIONNODE_CN_SYSML14);
children += createDefaultFloatingNameLabelDecorationNode(SIGNAL_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(SIGNAL_ATTRIBUTE_COMPARTMENT_SYSML14);
};
}
mapping notation::Shape::fromSysML11NamedElementDefaultShapeAsTimeObservation(parent:notation::View) : notation::Shape when {self.oclIsTypeOf(notation::Shape) and self.type = NAMEDELEMENT_DEFAULTSHAPE and self.element.oclIsKindOf(UML::TimeObservation)} {
init {
result := self;
result.children := object OrderedSet(notation::Node){};
}
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := TIMEOBSERVATION_SHAPE_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_FLOATING_LABEL_DECORATIONNODE_SYSML14);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
} else {
type := TIMEOBSERVATION_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_CN_SYSML14);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
};
}
mapping notation::Edge::fromSysML11RealizationEdgeAsInterfaceRealization() : notation::Edge when {self.oclIsTypeOf(notation::Connector) and self.type = REALIZATION_EDGE_SYSML14 and self.element.oclIsTypeOf(UML::InterfaceRealization)} {
init {
result := self;
}
type := INTERFACEREALIZATION_EDGE_SYSML14;
var existingChildren:OrderedSet(notation::Node) := self.children;
children := object OrderedSet(notation::Node){};
existingChildren->forEach(existingChild){
if (existingChild.type = REALIZATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := INTERFACEREALIZATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
} elif (existingChild.type = REALIZATION_NAME_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := INTERFACEREALIZATION_NAME_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
}
};
}
mapping notation::Edge::fromSysML11RealizationEdgeAsRealization() : notation::Edge when {self.oclIsTypeOf(notation::Connector) and self.type = REALIZATION_EDGE_SYSML14 and self.element.oclIsKindOf(UML::Realization)} {
init {
result := self;
}
type := DEPENDENCY_EDGE_SYSML14;
var existingChildren:OrderedSet(notation::Node) := self.children;
children := object OrderedSet(notation::Node){};
existingChildren->forEach(existingChild){
if (existingChild.type = REALIZATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := DEPENDENCY_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
} elif (existingChild.type = REALIZATION_NAME_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := DEPENDENCY_NAME_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
}
};
}
mapping notation::Edge::fromSysML11RealizationEdgeAsSubstitution() : notation::Edge when {self.oclIsTypeOf(notation::Connector) and self.type = REALIZATION_EDGE_SYSML14 and self.element.oclIsTypeOf(UML::Substitution)} {
init {
result := self;
}
type := SUBSTITUTION_EDGE_SYSML14;
var existingChildren:OrderedSet(notation::Node) := self.children;
children := object OrderedSet(notation::Node){};
existingChildren->forEach(existingChild){
if (existingChild.type = REALIZATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := SUBSTITUTION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
} elif (existingChild.type = REALIZATION_NAME_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := SUBSTITUTION_NAME_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
}
};
}
mapping notation::Edge::fromSysML11DependencyEdgeAsUsage() : notation::Edge when {self.oclIsTypeOf(notation::Connector) and self.type = DEPENDENCY_EDGE_SYSML14 and self.element.oclIsKindOf(UML::Usage)} {
init {
result := self;
}
type := USAGE_EDGE_SYSML14;
var existingChildren:OrderedSet(notation::Node) := self.children;
children := object OrderedSet(notation::Node){};
existingChildren->forEach(existingChild){
if (existingChild.type = DEPENDENCY_NAME_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := USAGE_NAME_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
} elif (existingChild.type = DEPENDENCY_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14) {
existingChild.type := USAGE_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14;
children += existingChild;
}
};
}
/**
* This allows to modify if existing the 'diagram_compatibility_version' value style, or create it if not existing
**/
helper setOrCreateCompatibilityVersion(inout diagram:notation::Diagram){
// Search the compatibility version, if not exist, create it
var compatibilityVersionStyle:notation::StringValueStyle := diagram.styles->selectByType(notation::StringValueStyle)->any(curr | curr.name=DIAGRAM_COMPATIBILITY_VERSION);
if (compatibilityVersionStyle.oclIsUndefined()) {
// add style compatibility version style
compatibilityVersionStyle := object notation::StringValueStyle {
name := DIAGRAM_COMPATIBILITY_VERSION;
};
diagram.styles+= compatibilityVersionStyle;
};
compatibilityVersionStyle.stringValue := "1.2.0";
}
/**
* This allows to modify the papyrus view style to add the needed configuration
**/
helper addPapyrusViewStyleConfiguration(inout diagram:notation::Diagram, in model:UML::Model, in config:viewpoint::PapyrusDiagram){
// Search the papyrus view style, if not exist, create it
var requirementPapyrusViewStyle:style::PapyrusViewStyle := diagram.styles->selectByType(style::PapyrusViewStyle)->any(true);
if (requirementPapyrusViewStyle.oclIsUndefined()) {
// add the papyrus view style
requirementPapyrusViewStyle := object style::PapyrusViewStyle{
owner := model.oclAsType(ecore::EObject);
};
diagram.styles += requirementPapyrusViewStyle;
};
requirementPapyrusViewStyle._configuration := config;
}
/**
* This allows to manage the show title EAnnotation as compartment attribute.
**/
helper manageShowTitleEAnnotationAsCompartmentAttribute(inout createdCompartment:notation::Compartment, existingChild:notation::Node) : OrderedSet(ecore::EAnnotation){
var res:OrderedSet(ecore::EAnnotation);
// The initial value in Sysml1.1 is set to true
createdCompartment.showTitle := true;
existingChild.eAnnotations->forEach(eAnnotation){
if (eAnnotation.source = PAPYRUS_CSS_FORCE_VALUE) {
var createdEAnnotation:ecore::EAnnotation := eAnnotation;
createdEAnnotation.eAnnotations := object OrderedSet(ecore::EAnnotation){};
var foundOtherNeededDetail:Boolean := false;
eAnnotation.details->forEach(detail){
if (detail.key = SHOW_TITLE) {
createdCompartment.showTitle := fromStringToBoolean(detail.value);
} else {
createdEAnnotation.details += detail;
foundOtherNeededDetail := true;
};
};
if (foundOtherNeededDetail) {
res += createdEAnnotation;
};
} else {
res += eAnnotation;
};
};
return res;
}
helper fromStringToBoolean(value:String) : Boolean {
if (value = "true") {
return true;
} else {
return false;
}
}
/**
* This allows to create the class floating name label decoration node
**/
helper createDefaultNameLabelDecorationNode(typeToCreate:String) : notation::DecorationNode {
return object notation::DecorationNode{
type := typeToCreate;
};
}
helper createDefaultNameLabelDecorationNode(typeToCreate:String, visibleValue:String) : notation::DecorationNode {
var createdDecorationNode:notation::DecorationNode := createDefaultCompartement(typeToCreate);
setPapyrusCSSForceValueVisible(createdDecorationNode, visibleValue);
return createdDecorationNode;
}
/**
* This allows to create the class floating name label decoration node
**/
helper createDefaultFloatingNameLabelDecorationNode(typeToCreate:String) : notation::DecorationNode {
return object notation::DecorationNode{
type := typeToCreate;
layoutConstraint := object notation::Location{
y := 5;
};
};
}
helper createDefaultFloatingNameLabelDecorationNode(typeToCreate:String, visibleValue:String) : notation::DecorationNode {
var createdDecorationNode:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(typeToCreate);
setPapyrusCSSForceValueVisible(createdDecorationNode, visibleValue);
return createdDecorationNode;
}
helper createDefaultCompartement(typeToCreate:String) : notation::Compartment {
return object notation::Compartment{
type := typeToCreate;
}
}
helper createDefaultCompartement(typeToCreate:String, visibleValue:String) : notation::Compartment {
var createdCompartment:notation::Compartment := createDefaultCompartement(typeToCreate);
setPapyrusCSSForceValueVisible(createdCompartment, visibleValue);
return createdCompartment;
}
helper createDefaultBasicCompartement(typeToCreate:String) : notation::BasicCompartment {
return object notation::BasicCompartment{
type := typeToCreate;
styles += object notation::TitleStyle{};
styles += object notation::SortingStyle{};
styles += object notation::FilteringStyle{};
layoutConstraint := object notation::Bounds{};
}
}
helper createDefaultBasicCompartement(typeToCreate:String, visibleValue:String) : notation::BasicCompartment {
var createdCompartment:notation::BasicCompartment := createDefaultBasicCompartement(typeToCreate);
setPapyrusCSSForceValueVisible(createdCompartment, visibleValue);
return createdCompartment;
}
helper createTitleBasicCompartement(typeToCreate:String) : notation::BasicCompartment {
return object notation::BasicCompartment{
type := typeToCreate;
styles += object notation::TitleStyle{};
};
}
helper createTitleBasicCompartement(typeToCreate:String, visibleValue:String) : notation::BasicCompartment {
var createdCompartment:notation::BasicCompartment := createTitleBasicCompartement(typeToCreate);
setPapyrusCSSForceValueVisible(createdCompartment, visibleValue);
return createdCompartment;
}
/**
* This allows to add the papyrus force value visible to true.
**/
helper setPapyrusCSSForceValueVisible(inout compartment:notation::Node, visibleValue:String) {
var existPapyrusCSSForceValue:Boolean := false;
compartment.eAnnotations->forEach(eAnnotation){
if (eAnnotation.source = PAPYRUS_CSS_FORCE_VALUE) {
var createdEAnnotation:ecore::EAnnotation := object ecore::EAnnotation{};
var existVisible:Boolean := false;
eAnnotation.details->forEach(detail){
// If the Visible papyrus CSS force value is existing, don't replace it'
if (detail.key = VISIBLE) {
existVisible := true;
};
};
if (not existVisible) {
eAnnotation.details += object ecore::EStringToStringMapEntry{
key := VISIBLE;
value := visibleValue;
};
};
existPapyrusCSSForceValue := true;
};
};
if (not existPapyrusCSSForceValue) {
compartment.eAnnotations += object ecore::EAnnotation{
source := PAPYRUS_CSS_FORCE_VALUE;
details += object ecore::EStringToStringMapEntry{
key := VISIBLE;
value := visibleValue;
};
};
};
}
/**
* By Default, the show title is set to true in SysML1.1.
* So to manage it in SysML1.4, the showTitle EAnnotation detail must be created if it is not already done.
**/
helper setShowTitle(inout compartment:notation::Node, valueShowTitle:Boolean) {
if (compartment.oclIsKindOf(notation::TitleStyle)) {
var isPapyrusCSSForceValueExist := false;
compartment.eAnnotations->forEach(eAnnotation){
if (eAnnotation.source = PAPYRUS_CSS_FORCE_VALUE) {
var foundShowTitle:Boolean := false;
eAnnotation.details->forEach(detail){
if (detail.key = SHOW_TITLE) {
foundShowTitle := true;
compartment.oclAsType(notation::TitleStyle).showTitle := fromStringToBoolean(detail.value);
};
};
if (not foundShowTitle) {
compartment.oclAsType(notation::TitleStyle).showTitle := valueShowTitle;
};
isPapyrusCSSForceValueExist := true;
};
};
if (not isPapyrusCSSForceValueExist) {
compartment.oclAsType(notation::TitleStyle).showTitle := valueShowTitle;
};
};
}
helper createModelShape(parent:notation::View, modelElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := modelElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
var packageElementCompartment:notation::BasicCompartment;
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := MODEL_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(MODEL_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
packageElementCompartment := createDefaultBasicCompartement(MODEL_PACKAGEDELEMENT_COMPARTMENT_SYSML14, TRUE);
} else {
type := MODEL_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(MODEL_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
packageElementCompartment := createDefaultBasicCompartement(MODEL_PACKAGEDELEMENT_COMPARTMENT_CN_SYSML14, TRUE);
};
packageElementCompartment.styles += object notation::TitleStyle{};
packageElementCompartment.layoutConstraint := object notation::Bounds{};
children += packageElementCompartment;
}
}
helper createClassShape(parent:notation::View, classElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := classElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := CLASS_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(CLASS_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(CLASS_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultBasicCompartement(CLASS_ATTRIBUTE_COMPARTMENT_SYSML14, TRUE);
children += createDefaultBasicCompartement(CLASS_OPERATION_COMPARTMENT_SYSML14, TRUE);
children += createDefaultBasicCompartement(CLASS_NESTEDCLASSIFIER_COMPARTMENT_SYSML14, TRUE);
} else {
type := CLASS_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(CLASS_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(CLASS_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(CLASS_ATTRIBUTE_COMPARTMENT_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(CLASS_OPERATION_COMPARTMENT_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(CLASS_NESTEDCLASSIFIER_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createConstraintShape(parent:notation::View, classElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := classElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := CONSTRAINTPACKAGEELEMENT_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(CONSTRAINT_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultNameLabelDecorationNode(CONSTRAINT_BODY_LABEL_DECORATIONNODE_SYSML14, TRUE);
} else {
type := CONSTRAINTPACKAGEELEMENT_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(CONSTRAINT_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultNameLabelDecorationNode(CONSTRAINT_BODY_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
};
}
}
helper createCommentShape(parent:notation::View, classElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := classElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := COMMENT_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(COMMENT_BODY_LABEL_DECORATIONNODE_SYSML14, TRUE);
} else {
type := COMMENT_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(COMMENT_BODY_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
};
}
}
helper createComponentShape(parent:notation::View, classElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := classElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := COMPONENT_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(COMPONENT_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(COMPONENT_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(COMPONENT_ATTRIBUTE_COMPARTMENT_SYSML14, TRUE);
children += createDefaultBasicCompartement(COMPONENT_OPERATION_COMPARTMENT_SYSML14, TRUE);
children += createDefaultBasicCompartement(COMPONENT_NESTEDCLASSIFIER_COMPARTMENT_SYSML14, TRUE);
} else {
type := COMPONENT_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(COMPONENT_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(COMPONENT_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(COMPONENT_ATTRIBUTE_COMPARTMENT_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(COMPONENT_OPERATION_COMPARTMENT_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(COMPONENT_NESTEDCLASSIFIER_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createDataTypeShape(parent:notation::View, dataType:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := dataType;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := DATATYPE_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(DATATYPE_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(DATATYPE_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultBasicCompartement(DATATYPE_ATTRIBUTE_COMPARTMENT_SYSML14, TRUE);
children += createDefaultBasicCompartement(DATATYPE_OPERATION_COMPARTMENT_SYSML14, TRUE);
} else {
type := DATATYPE_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(DATATYPE_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(DATATYPE_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(DATATYPE_ATTRIBUTE_COMPARTMENT_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(DATATYPE_OPERATION_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createDurationObservationShape(parent:notation::View, dataType:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := dataType;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
if (not isCN) {
type := DURATIONOBSERVATION_SHAPE_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14, TRUE);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
} else {
type := DURATIONOBSERVATION_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(DURATIONOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
};
}
}
helper createEnumerationShape(parent:notation::View, instanceSpecification:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := instanceSpecification;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := ENUMERATION_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(ENUMERATION_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(ENUMERATION_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(ENUMERATION_LITERAL_COMPARTMENT_SYSML14, TRUE);
} else {
type := ENUMERATION_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(ENUMERATION_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(ENUMERATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(ENUMERATION_LITERAL_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createInformationItemShape(parent:notation::View, instanceSpecification:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := instanceSpecification;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := INFORMATIONITEM_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INFORMATIONITEM_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(INFORMATIONITEM_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
} else {
type := INFORMATIONITEM_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(INFORMATIONITEM_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(INFORMATIONITEM_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
};
}
}
helper createInterfaceShape(parent:notation::View, interfaceElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := interfaceElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := INTERFACE_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(INTERFACE_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(INTERFACE_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultBasicCompartement(INTERFACE_ATTRIBUTE_COMPARTMENT_SYSML14, TRUE);
children += createDefaultBasicCompartement(INTERFACE_OPERATION_COMPARTMENT_SYSML14, TRUE);
children += createDefaultBasicCompartement(INTERFACE_NESTEDCLASSIFIER_COMPARTMENT_SYSML14, TRUE);
} else {
type := INTERFACE_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(INTERFACE_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(INTERFACE_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(INTERFACE_ATTRIBUTE_COMPARTMENT_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(INTERFACE_OPERATION_COMPARTMENT_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(INTERFACE_NESTEDCLASSIFIER_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createInstanceSpecificationShape(parent:notation::View, instanceSpecification:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := instanceSpecification;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := INSTANCESPECIFICATION_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(INSTANCESPECIFICATION_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(INSTANCESPECIFICATION_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultBasicCompartement(INSTANCESPECIFICATION_SLOP_COMPARTMENT_SYSML14, TRUE);
} else {
type := INSTANCESPECIFICATION_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(INSTANCESPECIFICATION_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(INSTANCESPECIFICATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultBasicCompartement(INSTANCESPECIFICATION_SLOP_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createPackageShape(parent:notation::View, packageElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := packageElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := PACKAGE_SHAPE_SYSML14;
children += createDefaultNameLabelDecorationNode(PACKAGE_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createTitleBasicCompartement(PACKAGE_PACKAGEDELEMENT_COMPARTMENT_SYSML14, TRUE);
} else {
type := PACKAGE_SHAPE_CN_SYSML14;
children += createDefaultNameLabelDecorationNode(PACKAGE_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createTitleBasicCompartement(PACKAGE_PACKAGEDELEMENT_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createPrimitiveTypeShape(parent:notation::View, packageElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := packageElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := PRIMITIVETYPE_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(PRIMITIVETYPE_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(PRIMITIVETYPE_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(PRIMITIVETYPE_ATTRIBUTE_COMPARTMENT_SYSML14, TRUE);
} else {
type := PRIMITIVETYPE_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(PRIMITIVETYPE_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(PRIMITIVETYPE_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(PRIMITIVETYPE_ATTRIBUTE_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createSignalShape(parent:notation::View, packageElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := packageElement;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
type := SIGNAL_SHAPE_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(SIGNAL_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(SIGNAL_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(SIGNAL_ATTRIBUTE_COMPARTMENT_SYSML14, TRUE);
} else {
type := SIGNAL_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
children += createDefaultNameLabelDecorationNode(SIGNAL_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
children += createDefaultFloatingNameLabelDecorationNode(SIGNAL_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
// Create and set the default BasicCompartments
children += createDefaultBasicCompartement(SIGNAL_ATTRIBUTE_COMPARTMENT_CN_SYSML14, TRUE);
};
}
}
helper createTimeObservationShape(parent:notation::View, dataType:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := dataType;
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
if (not isCN) {
type := TIMEOBSERVATION_SHAPE_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14, TRUE);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
} else {
type := TIMEOBSERVATION_SHAPE_CN_SYSML14;
// Create and set the default DecorationNodes
var floatingNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
floatingNameLabel.layoutConstraint.oclAsType(notation::Location).y := 3;
children += floatingNameLabel;
var stereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(TIMEOBSERVATION_STEREOTYPE_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).x := 25;
stereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -10;
children += stereotypeLabel;
};
}
}
helper createNamedElementDefaultShape(namedElement:ecore::EObject) : notation::Shape {
return object notation::Shape {
element := namedElement;
type := NAMEDELEMENT_DEFAULTSHAPE;
children += createDefaultNameLabelDecorationNode(NAMEDELEMENT_NAME_LABEL_DECORATIONNODE_SYSML14);
}
}
// this allows to create the default association decoration nodes
helper createDefaultInformationFlowDecorationNodes(inout connector:notation::Connector) {
connector.type := INFORMATIONFLOW_EDGE_SYSML14;
var informationFlowConveyedLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(INFORMATIONFLOW_CONVEYED_LABEL_DECORATIONNODE_SYSML14, TRUE);
informationFlowConveyedLabel.layoutConstraint.oclAsType(notation::Location).y := 30;
connector.children += informationFlowConveyedLabel;
var informationFlowStereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(INFORMATIONFLOW_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14, TRUE);
informationFlowStereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := 15;
connector.children += informationFlowStereotypeLabel;
var informationFlowNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(INFORMATIONFLOW_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
informationFlowNameLabel.layoutConstraint.oclAsType(notation::Location).y := 40;
connector.children += informationFlowNameLabel;
connector.styles += object notation::FontStyle{};
}
// this allows to create the default association decoration nodes
helper createDefaultAssociationDecorationNodes(inout connector:notation::Connector) {
connector.type := ASSOCIATION_EDGE_SYSML14;
var associationStereotypeLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATION_STEREOTYPE_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationStereotypeLabel.layoutConstraint.oclAsType(notation::Location).y := -20;
connector.children += associationStereotypeLabel;
var associationNameLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATION_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationNameLabel.layoutConstraint.oclAsType(notation::Location).y := 20;
connector.children += associationNameLabel;
var sourceRoleLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATION_SOURCEROLE_LABEL_DECORATIONNODE_SYSML14, TRUE);
sourceRoleLabel.layoutConstraint.oclAsType(notation::Location).y := 20;
connector.children += sourceRoleLabel;
var targetRoleLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATION_TARGETROLE_LABEL_DECORATIONNODE_SYSML14, TRUE);
targetRoleLabel.layoutConstraint.oclAsType(notation::Location).y := -20;
connector.children += targetRoleLabel;
var associationSourceMultiplicityLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATION_SOURCEMULTIPLICITY_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationSourceMultiplicityLabel.layoutConstraint.oclAsType(notation::Location).y := 20;
connector.children += associationSourceMultiplicityLabel;
var associationTargetMultiplicityLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATION_TARGETMULTIPLICITY_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationTargetMultiplicityLabel.layoutConstraint.oclAsType(notation::Location).y := -20;
connector.children += associationTargetMultiplicityLabel;
connector.styles += object notation::FontStyle{};
}
// this allows to create the default association class decoration nodes
helper createDefaultAssociationClassDecorationNodes(inout connector:notation::Connector) {
connector.type := ASSOCIATIONCLASS_EDGE_SYSML14;
var associationClassSourceRoleLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATIONCLASS_SOURCEROLE_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationClassSourceRoleLabel.layoutConstraint.oclAsType(notation::Location).y := -20;
connector.children += associationClassSourceRoleLabel;
var associationClassTargetRoleLabel:notation::DecorationNode := createDefaultFloatingNameLabelDecorationNode(ASSOCIATIONCLASS_TARGETROLE_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationClassTargetRoleLabel.layoutConstraint.oclAsType(notation::Location).y := 20;
connector.children += associationClassTargetRoleLabel;
connector.styles += object notation::FontStyle{};
}
helper modifyAssociationClassShape(inout associationClassShape:notation::Shape, parent:notation::View) {
var isCN:Boolean := not parent.oclIsTypeOf(notation::Diagram);
// If the shape is not in the diagram, this is a Child node
if (not isCN) {
associationClassShape.type := ASSOCIATIONCLASS_SHAPE_SYSML14;
associationClassShape.children += createDefaultNameLabelDecorationNode(ASSOCIATIONCLASS_NAME_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationClassShape.children += createDefaultFloatingNameLabelDecorationNode(ASSOCIATIONCLASS_FLOATING_LABEL_DECORATIONNODE_SYSML14, TRUE);
associationClassShape.children += createDefaultBasicCompartement(ASSOCIATIONCLASS_ATTRIBUTE_COMPARTMENT_SYSML14, TRUE);
associationClassShape.children += createDefaultBasicCompartement(ASSOCIATIONCLASS_OPERATION_COMPARTMENT_SYSML14, TRUE);
associationClassShape.children += createDefaultBasicCompartement(ASSOCIATIONCLASS_NESTEDCLASSIFIER_COMPARTMENT_SYSML14, TRUE);
} else {
associationClassShape.type := ASSOCIATIONCLASS_SHAPE_CN_SYSML14;
associationClassShape.children += createDefaultNameLabelDecorationNode(ASSOCIATIONCLASS_NAME_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
associationClassShape.children += createDefaultFloatingNameLabelDecorationNode(ASSOCIATIONCLASS_FLOATING_LABEL_DECORATIONNODE_CN_SYSML14, TRUE);
associationClassShape.children += createDefaultBasicCompartement(ASSOCIATIONCLASS_ATTRIBUTE_COMPARTMENT_CN_SYSML14, TRUE);
associationClassShape.children += createDefaultBasicCompartement(ASSOCIATIONCLASS_OPERATION_COMPARTMENT_CN_SYSML14, TRUE);
associationClassShape.children += createDefaultBasicCompartement(ASSOCIATIONCLASS_NESTEDCLASSIFIER_COMPARTMENT_CN_SYSML14, TRUE);
};
}