| [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('\\.', '_')/]->[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('\\.', '_')/]->[shared.place->asSequence()->first().name.replaceAll('\\.', '_')/]</string> |
| [else] |
| <string id="[id+i/]">[shared.eContainer().oclAsType(NamedElement).name.replaceAll('\\.', '_')/]->[shared.name.replaceAll('\\.', '_')/]</string> |
| [/if] |
| [else] |
| <string id="[id+i/]">[shared.eContainer().oclAsType(NamedElement).name.replaceAll('\\.', '_')/]->[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] |