| [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 |
| **********************************************************************/ |
| /] |
| [comment encoding = UTF-8 /] |
| [module vulnerableComponentsTemplate('http://www.eclipse.org/uml2/5.0.0/UML')] |
| [import org::polarsys::chess::mobius::templates::projectFileTemplate /] |
| |
| [template public vulnerableComponentsTemplate(model : Model, componentQN : String)] |
| [comment @main/] |
| [let componentName : String = getNameFromQN(componentQN)] |
| [file ('Vulnerable'.concat(componentName.concat('.cmp')), false, 'UTF-8')] |
| [let x : Integer = 100] |
| [let y : Integer = 150] |
| <?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">Vulnerable[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> |
| [comment stuff goes here /] |
| [let atomicBlocks : Sequence(Classifier) = getAtomicBlocks(model)] |
| [let block : Classifier = getBlockFromQN(atomicBlocks, componentQN)] |
| [let scenarios : Sequence(String) = getBlockAttackScenarios(block)] |
| <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">Vulnerable[componentName/]</string> |
| <boolean id="ContainsLabel">true</boolean> |
| <boolean id="IsLabelShown">true</boolean> |
| </class> |
| <point id="CenterPoint"> |
| <int id="x">100</int> |
| <int id="y">50</int> |
| </point> |
| </class> |
| [comment shared variables/] |
| [let allBlockAttacks : Sequence(String) = getAllBlockAttacks(block)] |
| <int id="SharingInfoSize">[allBlockAttacks->size()/]</int> |
| [/let] |
| [for(scenarioName : String | scenarios)] |
| [let attacks : Sequence(String) = getBlockAttacks(block, scenarioName)] |
| [for(attackName : String | attacks)] |
| <string id="NewSharedObjName">[attackName/]_success</string> |
| <string id="Function"></string> |
| <int id="FunctionIndex">-1</int> |
| <boolean id="actionFlag">false</boolean> |
| <vector id="FullAccessPathStrings"> |
| <string id="0">[componentName/]->[attackName/]_success</string> |
| <string id="1">[scenarioName/]->[attackName/]_success</string> |
| </vector> |
| [/for] |
| [/let] |
| [/for] |
| </class> |
| [comment the affected component /] |
| <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">[componentName/]</string> |
| <boolean id="ContainsLabel">true</boolean> |
| <boolean id="IsLabelShown">true</boolean> |
| </class> |
| <point id="CenterPoint"> |
| <int id="x">[x/]</int> |
| <int id="y">[y/]</int> |
| </point> |
| </class> |
| <string id="Model Name">[componentName/]</string> |
| </class> |
| <class id="Mobius.BaseClasses.BaseEdgeClass"> |
| <int id="ClassVersion">3</int> |
| <int id="LineType">0</int> |
| <string id="StartVertex">Vulnerable[componentName/]</string> |
| <string id="FinishVertex">[componentName/]</string> |
| <boolean id="Arrows">false</boolean> |
| <vector id="PointList"> |
| <point id="0"> |
| <int id="x">100</int> |
| <int id="y">50</int> |
| </point> |
| <point id="1"> |
| <int id="x">[x/]</int> |
| <int id="y">[y/]</int> |
| </point> |
| </vector> |
| </class> |
| [comment the attack scenarios /] |
| [for(scenarioName : String | scenarios)] |
| <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">[scenarioName/]</string> |
| <boolean id="ContainsLabel">true</boolean> |
| <boolean id="IsLabelShown">true</boolean> |
| </class> |
| <point id="CenterPoint"> |
| <int id="x">[x + i*150/]</int> |
| <int id="y">[y/]</int> |
| </point> |
| </class> |
| <string id="Model Name">[scenarioName/]</string> |
| </class> |
| <class id="Mobius.BaseClasses.BaseEdgeClass"> |
| <int id="ClassVersion">3</int> |
| <int id="LineType">0</int> |
| <string id="StartVertex">Vulnerable[componentName/]</string> |
| <string id="FinishVertex">[scenarioName/]</string> |
| <boolean id="Arrows">false</boolean> |
| <vector id="PointList"> |
| <point id="0"> |
| <int id="x">100</int> |
| <int id="y">50</int> |
| </point> |
| <point id="1"> |
| <int id="x">[x + i*150/]</int> |
| <int id="y">[y/]</int> |
| </point> |
| </vector> |
| </class> |
| [/for] |
| [/let] |
| [/let] |
| [/let] |
| </class> |
| <vector id="LocalGlobalNamesList"> |
| </vector> |
| <vector id="LocalGlobalTypesList"> |
| </vector> |
| <boolean id="DisplayToolTips">true</boolean> |
| </class> |
| <boolean id="Valid">true</boolean> |
| </class> |
| </class> |
| [/let] |
| [/let] |
| [/file] |
| [/let] |
| [/template] |
| |
| [query public getAllBlockAttacks(block : Classifier) : Sequence(String) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getAllBlockAttacks( org.eclipse.uml2.uml.Classifier)', Sequence{block})/] |
| |
| [query public getBlockAttackScenarios(block : Classifier) : Sequence(String) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getBlockAttackScenarios( org.eclipse.uml2.uml.Classifier)', Sequence{block})/] |
| |
| [query public getBlockAttacks(block : Classifier, scenarioName : String) : Sequence(String) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getBlockAttacks( org.eclipse.uml2.uml.Classifier, java.lang.String)', Sequence{block, scenarioName})/] |