| [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 projectFileTemplate('http://www.eclipse.org/uml2/5.0.0/UML')/] |
| |
| |
| [template public projectFileTemplate(model : Model, projectName : String)] |
| |
| [comment @main /] |
| [file (projectName.concat('.prj'), false, 'UTF-8')] |
| <?xml version="1.0" encoding="ASCII"?> |
| <models:Project xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:models="http://www.mobius.illinois.edu/projects" name="[projectName/]" lastSavedVersion="2.5.9.201902201008"> |
| [let atomicBlocks : Sequence(Classifier) = getAtomicBlocks(model)] |
| [for (block : Classifier | atomicBlocks)] |
| <atomic key="[block.name/]"> |
| <value name="[block.name/]" type="SAN Model"/> |
| </atomic> |
| [/for] |
| [/let] |
| [let attackScenarios : Sequence(Interaction) = getAttackScenarios(model)] |
| [for (scenario : Interaction | attackScenarios)] |
| <atomic key="[scenario.name/]"> |
| <value name="[scenario.name/]" type="SAN Model"/> |
| </atomic> |
| [/for] |
| [/let] |
| [let composedBlocks : Sequence(Classifier) = getComposedBlocks(model)] |
| [for (block : Classifier | composedBlocks)] |
| <composed key="[block.name/]"> |
| <value name="[block.name/]" category="Composed" type="Rep/Join Model"/> |
| </composed> |
| [/for] |
| [/let] |
| [comment vulnerable Components/] |
| [let vulnerableComponents : Set(Classifier) = getVulnerableComponents(model)] |
| [for (block : Classifier | vulnerableComponents)] |
| <composed key="Vulnerable[block.name/]"> |
| <value name="Vulnerable[block.name/]" category="Composed" type="Rep/Join Model"/> |
| </composed> |
| [/for] |
| [/let] |
| </models:Project> |
| [/file] |
| [/template] |
| |
| [query public getNameFromQN(qualifiedName : String) : String = qualifiedName.substring(qualifiedName.lastIndex(':')+1)/] |
| |
| [query public getAtomicBlocks(model : Model) : Sequence(Classifier) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getAtomicBlocks()', Sequence{model})/] |
| |
| [query public getComposedBlocks(model : Model) : Sequence(Classifier) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getComposedBlocks()', Sequence{model})/] |
| |
| [query public getAttacks(model : Model) : Sequence(Message) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getAttacks()', Sequence{model})/] |
| |
| [query public getAttackScenarios(model : Model) : Sequence(Interaction) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getAttackScenarios()', Sequence{model})/] |
| |
| [query public getVulnerableComponents(model : Model) : Set(Classifier) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getVulnerableComponents()', Sequence{model})/] |
| |
| [query public getBlockFromQN(blocks : Sequence(Classifier), qualifiedName : String) : Classifier = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getBlockFromQN(java.util.List, java.lang.String)', Sequence{blocks, qualifiedName})/] |
| |
| [query public getEmptyStringSet(traceCtx : OclAny) : Set(String) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getEmptyStringSet()', Sequence{}) /] |
| |
| [query public addToGlobalVars(name : String, globalvars : Set(String)) : OclAny = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'addToGlobalVars(java.lang.String, java.util.Set)', Sequence{name, globalvars}) /] |
| |
| [query public getPlaces(block : Classifier) : Sequence(State) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getPlaces(org.eclipse.uml2.uml.Classifier)', Sequence{block})/] |
| |
| [query public getActivities(block : Classifier) : Sequence(Transition) = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getActivities(org.eclipse.uml2.uml.Classifier)', Sequence{block})/] |
| |
| [query public getActivityName(tr : Transition) : String = tr.source.name + '__' + tr.target.name/] |
| |
| [query public getRate(tr : Transition) : String = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getRate(org.eclipse.uml2.uml.Transition)', Sequence{tr})/] |
| |
| [comment to handle start place of fragments in a sequence diagram /] |
| [query public getStartPlace(ctx : OclAny) : String = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getStartPlace()', Sequence{})/] |
| |
| [query public getStartX(ctx : OclAny) : Integer = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getStartX()', Sequence{})/] |
| |
| [query public getStartY(ctx : OclAny) : Integer = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'getStartY()', Sequence{})/] |
| |
| [query public setStartPlace(startPlace : String) : OclAny = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'setStartPlace(java.lang.String)', Sequence{startPlace})/] |
| |
| [query public setStartX(startX : Integer) : OclAny = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'setStartX(java.lang.Integer)', Sequence{startX})/] |
| |
| [query public setStartY(startY : Integer) : OclAny = |
| invoke('org.polarsys.chess.mobius.utils.TransformationUtil', 'setStartY(java.lang.Integer)', Sequence{startY})/] |