blob: 44fc87350b8d8e48ea2d3015fbc47383c7d6f5a6 [file] [log] [blame]
[comment
/*********************************************************************
* Copyright (c) 2019 Intecs Solutions SpA
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Intecs Solutions - Initial API and implementation
*
**********************************************************************/
/]
[comment encoding = UTF-8 /]
[module composedComponentTemplate_sanmodel('http://www.polarsys.org/chess/SAN')/]
[import org::polarsys::chess::mobius::templates::projectFileTemplate_sanmodel /]
[template public composedComponentTemplate_sanmodel(sanModel : SANModel, componentQN : String){
BlockQN : String = 'SysML::Blocks::Block';
}]
[comment @main /]
[let rootJoin : Join = sanModel.node.oclAsType(SAN::Join)]
[let componentName : String = rootJoin.name]
[file (componentName.concat('.cmp'), false, 'UTF-8')]
[let globalvars : Set(String) = getEmptyStringSet()]
[let x : Integer = 75]
[let y : Integer = 50]
<?xml version="1.0" encoding="ISO-8859-1"?>
<class id="Mobius.ComposedModels.RepJoin.RepJoinInterface">
<int id="ClassVersion">1</int>
<class id="Mobius.BaseClasses.BaseInterfaceClass">
<int id="ClassVersion">3</int>
<string id="ModelName">[componentName/]</string>
<class id="Mobius.BaseClasses.BaseInfoClass">
<int id="ClassVersion">2</int>
</class>
<class id="Mobius.BaseClasses.BaseEditorClass">
<int id="ClassVersion">3</int>
<boolean id="HasPanel">true</boolean>
<class id="Mobius.BaseClasses.BasePanelClass">
<int id="ClassVersion">2</int>
<point id="Size of Panel">
<int id="x">500</int>
<int id="y">400</int>
</point>
<double id="ZoomFactor">1.0</double>
<boolean id="ShowGridEnabled">true</boolean>
<int id="ShowGridStep">10</int>
<boolean id="SnapGridEnabled">true</boolean>
<int id="SnapGridStep">10</int>
[for (node : Node | sanModel.getAllNodes())]
[comment join node /]
[if (node.oclIsKindOf(Join))]
<class id="Mobius.ComposedModels.Common.JoinPanelObject">
<int id="ClassVersion">3</int>
<class id="Mobius.BaseClasses.BaseVertexClass">
<int id="ClassVersion">3</int>
<class id="Mobius.BaseClasses.BasePanelObjectClass">
<int id="ClassVersion">5</int>
<string id="Name">[node.name.replaceAll('\\.', '_')/]</string>
<boolean id="ContainsLabel">true</boolean>
<boolean id="IsLabelShown">true</boolean>
</class>
<point id="CenterPoint">
<int id="x">[node.x/]</int>
<int id="y">[node.y/]</int>
</point>
</class>
[if node.oclAsType(Join).stateVariables->isEmpty()]
<int id="SharingInfoSize">0</int>
[else]
<int id="SharingInfoSize">[node.oclAsType(Join).stateVariables->size()/]</int>
[/if]
[for (state : SharedState | node.oclAsType(Join).stateVariables)]
<string id="NewSharedObjName">[state.name.replaceAll('\\.', '_')/]</string>
<string id="Function"></string>
<int id="FunctionIndex">-1</int>
<boolean id="actionFlag">false</boolean>
[let id : Integer = state.place->size()]
<vector id="FullAccessPathStrings">
[for (place :Place | state.place)]
<string id="[i/]">[place.eContainer().oclAsType(NamedElement).name.replaceAll('\\.', '_')/]-&gt;[place.name.replaceAll('\\.', '_')/]</string>
[/for]
[for (shared : SharedState | state.sharedStates)]
[comment check if the owner of the referred shared state is a Rep/]
[if (shared.eContainer().oclIsKindOf(Rep))]
[if (not shared.place->isEmpty())]
<string id="[id+i/]">[shared.eContainer().oclAsType(NamedElement).name.replaceAll('\\.', '_')/]-&gt;[shared.place->asSequence()->first().name.replaceAll('\\.', '_')/]</string>
[else]
<string id="[id+i/]">[shared.eContainer().oclAsType(NamedElement).name.replaceAll('\\.', '_')/]-&gt;[shared.name.replaceAll('\\.', '_')/]</string>
[/if]
[else]
<string id="[id+i/]">[shared.eContainer().oclAsType(NamedElement).name.replaceAll('\\.', '_')/]-&gt;[shared.name.replaceAll('\\.', '_')/]</string>
[/if]
[/for]
</vector>
[/let]
[/for]
</class>
[comment submodels /]
[/if]
[if (node.oclIsKindOf(AtomicNode))]
<class id="Mobius.ComposedModels.Common.AtomicPanelObject">
<int id="ClassVersion">3</int>
<class id="Mobius.BaseClasses.BaseVertexClass">
<int id="ClassVersion">3</int>
<class id="Mobius.BaseClasses.BasePanelObjectClass">
<int id="ClassVersion">5</int>
<string id="Name">[node.name.replaceAll('\\.', '_')/]</string>
<boolean id="ContainsLabel">true</boolean>
<boolean id="IsLabelShown">true</boolean>
</class>
<point id="CenterPoint">
<int id="x">[node.x/]</int>
<int id="y">[node.y/]</int>
</point>
</class>
<string id="Model Name">[node.oclAsType(AtomicNode).model.replaceAll('\\.', '_')/]</string>
</class>
[/if]
[comment rep(s), if any/]
[if(node.oclIsKindOf(Rep))]
<class id="Mobius.ComposedModels.RepJoin.RepPanelObject">
<int id="ClassVersion">1</int>
<class id="Mobius.BaseClasses.BaseVertexClass">
<int id="ClassVersion">3</int>
<class id="Mobius.BaseClasses.BasePanelObjectClass">
<int id="ClassVersion">5</int>
<string id="Name">[node.name.replaceAll('\\.', '_')/]</string>
<boolean id="ContainsLabel">true</boolean>
<boolean id="IsLabelShown">true</boolean>
</class>
<point id="CenterPoint">
<int id="x">[node.x/]</int>
<int id="y">[node.y/]</int>
</point>
</class>
[if node.oclAsType(Rep).numbOfReps='-1']
<string id="RepCount">Num[node.name.replaceAll('\\.', '_')/]</string>
[else]
<string id="RepCount">[node.oclAsType(Rep).numbOfReps/]</string>
[/if]
[if node.oclAsType(Rep).stateVariables->size() = 0]
<int id="SharingInfoSize">0</int>
[else]
<int id="SharingInfoSize">[node.oclAsType(Rep).stateVariables->size()/]</int>
[/if]
[for (state : SharedState | node.oclAsType(Rep).stateVariables)]
[comment assumption: for Rep, shared state can refere a single place or a single shared state/]
[if (not state.place->isEmpty())]
<string id="RepSharingInfoElement">[state.place->asSequence()->first().name.replaceAll('\\.', '_')/]</string>
[/if]
[if (not state.sharedStates->isEmpty())]
<string id="RepSharingInfoElement">[state.sharedStates->asSequence()->first().name.replaceAll('\\.', '_')/]</string>
[/if]
[/for]
</class>
[/if]
[for (var : GlobalVariable | node.globalVariable)]
[addToGlobalVars(var.name.replaceAll('\\.', '_'), globalvars)/]
[/for]
[/for]
[comment links /]
[for (node : Node | sanModel.getAllNodes())]
[if(node.oclIsKindOf(Rep))]
[comment link join to rep /]
[let child : Node = node.oclAsType(Rep).child->first()]
<class id="Mobius.BaseClasses.BaseEdgeClass">
<int id="ClassVersion">3</int>
<int id="LineType">0</int>
<string id="StartVertex">[node.name.replaceAll('\\.', '_')/]</string>
<string id="FinishVertex">[child.name.replaceAll('\\.', '_')/]</string>
<boolean id="Arrows">false</boolean>
<vector id="PointList">
<point id="0">
<int id="x">[node.x/]</int>
<int id="y">[node.y/]</int>
</point>
<point id="1">
<int id="x">[child.x/]</int>
<int id="y">[child.y/]</int>
</point>
</vector>
</class>
[/let]
[/if]
[if(node.oclIsKindOf(Join))]
[for (child : Node | node.oclAsType(Join).child)]
<class id="Mobius.BaseClasses.BaseEdgeClass">
<int id="ClassVersion">3</int>
<int id="LineType">0</int>
<string id="StartVertex">[node.name.replaceAll('\\.', '_')/]</string>
<string id="FinishVertex">[child.name.replaceAll('\\.', '_')/]</string>
<boolean id="Arrows">false</boolean>
<vector id="PointList">
<point id="0">
<int id="x">[node.x/]</int>
<int id="y">[node.y/]</int>
</point>
<point id="1">
<int id="x">[child.x/]</int>
<int id="y">[child.y/]</int>
</point>
</vector>
</class>
[/for]
[/if]
[/for]
</class>
<vector id="LocalGlobalNamesList">
[for (globalvar : String | globalvars)]
<string id="[i/]">[globalvar/]</string>
[/for]
[for (globVar : SAN::GlobalVariable | node.globalVariable)]
<string id="[i/]">[globVar.name.replaceAll('\\.', '_')/]</string>
[/for]
</vector>
<vector id="LocalGlobalTypesList">
[for (globalvar : String | globalvars)]
<string id="[i/]">double</string>
[/for]
[for (globVar : SAN::GlobalVariable | node.globalVariable)]
<string id="[i/]">[globVar.type/]</string>
[/for]
</vector>
<boolean id="DisplayToolTips">true</boolean>
</class>
<boolean id="Valid">true</boolean>
</class>
</class>
[/let]
[/let]
[/let]
[/file]
[/let]
[/let]
[/template]