Changes for page Transformation Mapping (KTM)
Last modified by Richard Kreissig on 2023/09/14 11:14
<
>
edited by Alexander Schulz-Rosengarten
on 2014/01/23 11:36
on 2014/01/23 11:36
edited by Alexander Schulz-Rosengarten
on 2014/01/10 11:28
on 2014/01/10 11:28
Change comment:
update according to metamodel changes
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Objects (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -70,36 +70,29 @@ 70 70 71 71 == Example == 72 72 73 -In this example we will perform some transformations on SCCharts. 74 - 75 -The source chart is a ABO, the "Hello World" of SCCharts. 76 - 77 -ABO is already a CoreSCChart, so we will perform normalization and a transformation to SCG. 78 - 79 79 === Creating Mapping during Transformation === 80 80 81 - In ordertonote every singleelementtransformationofa model transformation,weusetheTransformationMapping extension.75 +The following code is a modifcation of the tranformation "Spilt Trigger and Effects" of SCCharts. 82 82 83 -After each creation of new Objects for transformed model the mapping must be updated with it's origin information. 84 - 85 -The codeblock blow show a snipped of SCChartCoreTransformation with additional mapping registration. 86 - 87 - 88 - 89 -{{code title="transformTriggerEffect CodeSnipped" theme="Eclipse" linenumbers="true" language="java" firstline="1" collapse="true"}} 90 -... 91 - @Inject 77 +{{code title="Modified SCChart Transformation" theme="Eclipse" linenumbers="true" language="java" firstline="1" collapse="true"}} 78 +package de.cau.cs.kieler.ktm.test.transformations 79 +import com.google.inject.Inject 80 +import de.cau.cs.kieler.ktm.extensions.TransformationMapping 81 +import de.cau.cs.kieler.sccharts.Region 82 +import de.cau.cs.kieler.sccharts.Transition 83 +import de.cau.cs.kieler.sccharts.extensions.SCChartsExtension 84 +/** 85 + * @author als 86 + */ 87 +class SCChartTestTransformation { 88 + @Inject 92 92 extension TransformationMapping 93 - 94 -... 95 - 90 + @Inject 91 + extension SCChartsExtension 96 96 // NEW - Mapping access delegation 97 97 def extractMapping() { 98 98 extractMappingData; 99 99 } 100 - 101 -... 102 - 103 103 //------------------------------------------------------------------------- 104 104 //-- S P L I T T R A N S I T I O N -- 105 105 //------------------------------------------------------------------------- ... ... @@ -117,124 +117,70 @@ 117 117 for (targetTransition : targetRootRegion.getAllContainedTransitions) { 118 118 targetTransition.transformTriggerEffect(targetRootRegion); 119 119 } 120 - val completeness = checkMappingCompleteness(rootRegion, targetRootRegion); //NEW - DEBUG 121 - targetRootRegion; 113 + //check if mapping is complete (only for test proposes) 114 + val diff = rootRegion.checkMappingCompleteness(targetRootRegion); 115 + if (diff.key.empty && diff.value.empty) { 116 + targetRootRegion; 117 + } else { 118 + null 119 + } 122 122 } 123 123 def void transformTriggerEffect(Transition transition, Region targetRootRegion) { 124 - // Only apply this to transition that have both, a trigger (or isatermination) and one or more effects125 - if (((transition.trigger != null || !transition.immediate || transition.typeTermination) && !transition.effects.nullOrEmpty) ||122 + // Only apply this to transition that have both, a trigger and one or more effects 123 + if (((transition.trigger != null || !transition.immediate) && !transition.effects.nullOrEmpty) || 126 126 transition.effects.size > 1) { 127 127 val targetState = transition.targetState 128 128 val parentRegion = targetState.parentRegion 129 129 val transitionOriginalTarget = transition.targetState 130 130 var Transition lastTransition = transition 131 - val firstEffect = transition.effects.head 132 132 for (effect : transition.effects.immutableCopy) { 133 - // Optimization: Prevent transitions without a trigger 134 - if(transition.immediate && transition.trigger == null && firstEffect == effect) { 135 - // skip 136 - } else { 137 - val effectState = parentRegion.createState(GENERATED_PREFIX + "S") 138 - effectState.mapParents(transition.mappedParents); //NEW - mapping information 139 - effectState.uniqueName 140 - val effectTransition = createImmediateTransition.addEffect(effect) 141 - effectTransition.mapParents(transition.mappedParents); //NEW - mapping information 142 - 143 - effectTransition.setSourceState(effectState) 144 - lastTransition.setTargetState(effectState) 145 - lastTransition = effectTransition 146 - } 130 + val effectState = parentRegion.createState(targetState.id + effect.id) 131 + effectState.mapParents(transition.mappedParents); //NEW - mapping information 132 + effectState.setTypeConnector 133 + val effectTransition = createImmediateTransition.addEffect(effect) 134 + effectTransition.mapParents(transition.mappedParents); //NEW - mapping information 135 + effectTransition.setSourceState(effectState) 136 + lastTransition.setTargetState(effectState) 137 + lastTransition = effectTransition 147 147 } 148 148 lastTransition.setTargetState(transitionOriginalTarget) 149 149 } 150 150 } 142 +} 151 151 {{/code}} 152 152 153 -=== Create TransformationTree === 145 +=== Create TransformationTree with Mapping === 154 154 155 -T he followingcodewill now performeachtransformationstepwiseandupdatesatransformationtree eachstep.147 +To test the transformation and mapping we will transform th following ABO-SCChart. 156 156 157 - 149 +[[image:attach:example_abo.jpeg]] 158 158 151 +The following code snipped performs the transformation on our ABO-example, extracts the mapping and creates a transformation tree. 152 + 159 159 {{code title="Transform and create TranformationTree" theme="Eclipse" linenumbers="true" language="java" firstline="1" collapse="true"}} 160 -aboSplitTE = SCCtransformation.transformTriggerEffect(abo);154 +aboSplitTE = transformation.transformTriggerEffect(abo); 161 161 162 -ModelWrapper aboSplitTEModel = 163 - transformationTree.initializeTransformationTree(SCCtransformation.extractMapping(), "TriggerEffect", abo, "coreSCChart", aboSplitTE, "coreSCChart-splitTriggerEffect"); 156 +Model aboSplitTEModel = transformationTreeExtensions.initializeTransformationTree( 157 + transformation.extractMapping(), 158 + "splitTriggerEffect", 159 + abo, "coreSCChart", 160 + aboSplitTE, "coreSCChart-splitTriggerEffect"); 164 164 165 -aboNormalized = SCCtransformation.transformSurfaceDepth(aboSplitTE); 166 - 167 -ModelWrapper aboNormalizedModel = 168 - transformationTree.addTransformationToTree(SCCtransformation.extractMapping(), aboSplitTEModel, "SurfaceDepth", aboSplitTE, aboNormalized, "normalizedCoreSCChart"); 169 - 170 -aboSCG = SCGtransformation.transformSCG(aboNormalized); 171 - 172 -ModelWrapper aboSCGModel = 173 - transformationTree.addTransformationToTree(SCGtransformation.extractMapping(), aboNormalizedModel, "SCC2SCG", aboNormalized, aboSCG,"SCG"); 174 - 175 -tree = transformationTree.root(aboSCGModel); 162 +tranformationTree = transformationTreeExtensions.root(aboSplitTEModel); 176 176 {{/code}} 177 177 178 - 165 +The result of transformation is the following SCChart. ABO-splitTriggerEffect. 179 179 180 - The resulting TransformationTree has following structureand representing eachstepandmodelof thetransformation.167 +[[image:attach:example_abo_splitTE.jpeg]] 181 181 182 - 169 +Resulting TransformationTree has following structure. 183 183 184 -|=(% colspan="4" style="text-align: center;" %)(% colspan="4" style="text-align: center;" %) 185 -((( 186 186 [[image:attach:example_tree.jpeg]] 187 -))) 188 -|(% colspan="1" style="text-align: center;" %)(% colspan="1" style="text-align: center;" %) 189 -((( 190 -[[image:attach:example_abo.jpeg]] 191 -)))|(% colspan="1" style="text-align: center;" %)(% colspan="1" style="text-align: center;" %) 192 -((( 193 -[[image:attach:example_abo_splitTE.jpeg]] 194 -)))|(% colspan="1" style="text-align: center;" %)(% colspan="1" style="text-align: center;" %) 195 -((( 196 -[[image:attach:example_abo_norm.jpeg]] 197 -)))|(% colspan="1" style="text-align: center;" %)(% colspan="1" style="text-align: center;" %) 198 -((( 199 -[[image:attach:example_abo_scg.jpeg]] 200 -))) 201 201 202 - 173 +Furthermore the TransformationTree now contains the following mapping information. 203 203 204 - FurthermoreTransformationTree now contains mapping information for thewholechain.175 +[[image:attach:example_tree_transformation.jpeg]] 205 205 206 - Now we canusean additionalfeatureofKTM,the resolvingof mappingsbetweenarbitarymodels.177 +Here you can see the effect of the transformation causing the transformation to split up. 207 207 208 -The following code has starts with an instance of the initial ABO SCChart and SCG, along with the TranformationTree above. 209 - 210 - 211 - 212 -{{code title="resolveMapping" theme="Eclipse" linenumbers="true" language="java" firstline="1" collapse="true"}} 213 -@Inject 214 -extension TransformationTreeExtensions 215 - 216 -//Find nodes of model instances in tree 217 -val aboSCCModelWrapper = transformationTree.findModel(aboSCC,"coreSCChart"); 218 -val aboSCGModelWrapper = transformationTree.findModel(aboSCG,"SCG"); 219 - 220 -//resolve 221 -val mapping = resolvemapping(aboSCCModelWrapper, aboSCC, aboSCGModelWrapper, aboSCG); 222 -{{/code}} 223 - 224 - 225 - 226 -The returned mapping is a multi mapping between all object in aboSCC and their resulting objects in aboSCG. 227 - 228 -This mapping can now partially displayed in models or used for various information propagation between elements of the models. 229 - 230 -[[image:attach:example_abo_resolved.jpeg]] 231 - 232 - 233 - 234 -In cippled view blow you can see model object relations more abstract. 235 - 236 - 237 - 238 -[[image:attach:example_abo_resolved_elements.jpeg]] 239 - 240 - 179 +[[image:attach:als-ktm-splitTriggerEffect-detail.jpg]]
- Confluence.Code.ConfluencePageClass[0]
-
- Id
-
... ... @@ -1,1 +1,1 @@ 1 -8651 6171 +8651594 - URL
-
... ... @@ -1,1 +1,1 @@ 1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/8651 617/Transformation Mapping (KTM)1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/8651594/Transformation Mapping (KTM)