Changes for page SCCharts Development
Last modified by Richard Kreissig on 2023/09/14 10:04
Summary
-
Page properties (3 modified, 0 added, 0 removed)
-
Attachments (0 modified, 0 added, 13 removed)
- ABODoubleStates.png
- InstallEcoreViz.png
- InstallKLighDFeatures.png
- KLighDSaveAsImage.png
- KielerSCTEditor.png
- KielerSCTEditorOwnTransformation.png
- KielerSCTEditorOwnTransformationOlolo.png
- RunConfiguration.png
- abo_norm_HandleA.png
- abo_scg_HandleA.png
- sccharts-scg.png
- sccharts_metamodel.png
- sccharts_metamodel_treeEditor.png
-
Objects (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Parent
-
... ... @@ -1,1 +1,0 @@ 1 -KIELER and SCCharts - Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. cds1 +XWiki.ssm - Content
-
... ... @@ -1,16 +1,10 @@ 1 1 {{layout}} 2 2 {{layout-section ac:type="single"}} 3 3 {{layout-cell}} 4 - This is a light-weight tutorial for developing transformations/additions for SCCharts in KIELER. It will use Eclipse, EMF, and Xtend and therefore, finishing the corresponding tutorials could prove useful. However, they are not a strict requirement for this tutorial.4 +is is a light-weight tutorial for developing transformations/additions for SCCharts in KIELER. It will use Eclipse, EMF, and Xtend and therefore, finishing the corresponding tutorials could prove useful. However, they are not a strict requirement for this tutorial. 5 5 6 -{{warning title="Outdated!"}} 7 -The KiCo part "Model-to-Model Transformations with KiCo" is outdated. We will update this tutorials in the near future. 8 -{{/warning}} 9 9 10 -\\ 11 11 12 - 13 - 14 14 {{toc/}} 15 15 16 16 = Preliminaries = ... ... @@ -25,7 +25,7 @@ 25 25 26 26 {{layout-section ac:type="three_equal"}} 27 27 {{layout-cell}} 28 - \\22 + 29 29 30 30 Additionally, install the** EcoreViz** from the **Ecore Model Visualization** category from the **OpenKieler** update site: [[http:~~/~~/rtsys.informatik.uni-kiel.de/~~~~kieler/updatesite/nightly-openkieler/>>url:http://rtsys.informatik.uni-kiel.de/~~kieler/updatesite/nightly-openkieler/||rel="nofollow" shape="rect"]]. For this, choose //Install New Software...// in the //Help// tab. 31 31 ... ... @@ -38,15 +38,15 @@ 38 38 {{/layout-cell}} 39 39 40 40 {{layout-cell}} 41 - \\35 + 42 42 43 43 [[image:attach:InstallEcoreViz.png]] 44 44 45 - \\39 + 46 46 {{/layout-cell}} 47 47 48 48 {{layout-cell}} 49 - \\43 + 50 50 51 51 [[image:attach:InstallKLighDFeatures.png]] 52 52 {{/layout-cell}} ... ... @@ -71,11 +71,11 @@ 71 71 When developing within the KIELER semantics team, you will most likely be confronted with Xtext and [[doc:KIELER.Lightweight Diagrams (KLighD)]]. The following tutorials may be helpful but not required for this tutorial. 72 72 73 73 1. [[doc:Xtext 2 - Creating a Grammar from Scratch]] 74 -1. [[doc: TUT.Tutorials.Diagrams andLayout.Lightweight Diagrams (KLighD).WebHome]]68 +1. [[doc:Lightweight Diagrams (KLighD)]] 75 75 76 76 == Finding Documentation == 77 77 78 -You can find additional documentation to the aforementioned topics in the corresponding tutorials. If you get stuck with a particular topic, please consult that tutorial. For SCCharts, you should read the SCCharts confluence page in our wiki: [[doc:KIELER.SCCharts (pre 1\.0)]]72 +You can find additional documentation to the aforementioned topics in the corresponding tutorials. If you get stuck with a particular topic, please consult that tutorial. For SCCharts, you should read the SCCharts confluence page in our wiki: [[doc:KIELER.SCCharts]] 79 79 80 80 As usual, documentation often gets obsolete or wrong if not maintained regularly, so please, if you find missing, misleading, or outdated information, please let us know. 81 81 ... ... @@ -82,15 +82,15 @@ 82 82 Additionally, the following list will give a short overview over the most important publications: 83 83 84 84 * (% style="color: rgb(0,0,0);" %)**Main paper:** 85 -Reinhard von Hanxleden and Björn Duderstadt and Christian Motika and Steven Smyth and Michael Mendler and Joaquín Aguado and Stephen Mercer and Owen O’Brien. SCCharts: Sequentially Constructive Statecharts for Safety-Critical Applications. In (% class="cmti-10" %)Proc. ACM SIGPLAN Conference on Programming Language Design(%%) (% class="cmti-10" %)and Implementation (PLDI’14)(%%), Edinburgh, UK, June 2014. ACM. [[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/pldi14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[talk>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/talks/pldi14-talk.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenDM+14||shape="rect"]] 79 +Reinhard von Hanxleden and Björn Duderstadt and Christian Motika and Steven Smyth and Michael Mendler and Joaquín Aguado and Stephen Mercer and Owen O’Brien. SCCharts: Sequentially Constructive Statecharts for Safety-Critical Applications. In (% class="cmti-10" %)Proc. ACM SIGPLAN Conference on Programming Language Design(%%) (% class="cmti-10" %)and Implementation (PLDI’14)(%%), Edinburgh, UK, June 2014. ACM. (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/pldi14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[talk>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/talks/pldi14-talk.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenDM+14||shape="rect"]] 86 86 * **SLIC Compilation:** 87 -(% style="color: rgb(0,0,0);" %)Christian Motika and Steven Smyth and Reinhard von Hanxleden. Compiling SCCharts—A Case-Study on Interactive Model-Based Compilation. In (% class="cmti-10" %)Proceedings of(%%) (% class="cmti-10" %)the 6th International Symposium on Leveraging Applications of Formal(%%) (% class="cmti-10" %)Methods, Verification and Validation (ISoLA 2014)(%%), volume 8802 of (% class="cmti-10" %)LNCS(%%), page 443–462, Corfu, Greece, October 2014. The [[original publication>>url:http://dx.doi.org/10.1007/978-3-662-45234-9||shape="rect"]](% style="color: rgb(0,0,0);" %) is available at (%%)[[http:~~/~~/link.springer.com>>url:http://link.springer.com/||shape="rect"]](% style="color: rgb(0,0,0);" %). (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/isola14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=MotikaSvH14||shape="rect"]] 81 +(% style="color: rgb(0,0,0);" %)Christian Motika and Steven Smyth and Reinhard von Hanxleden. Compiling SCCharts—A Case-Study on Interactive Model-Based Compilation. In (% class="cmti-10" %)Proceedings of(%%) (% class="cmti-10" %)the 6th International Symposium on Leveraging Applications of Formal(%%) (% class="cmti-10" %)Methods, Verification and Validation (ISoLA 2014)(%%), volume 8802 of (% class="cmti-10" %)LNCS(%%), page 443–462, Corfu, Greece, October 2014. The (%%)[[original publication>>url:http://dx.doi.org/10.1007/978-3-662-45234-9||shape="rect"]](% style="color: rgb(0,0,0);" %) is available at (%%)[[http:~~/~~/link.springer.com>>url:http://link.springer.com/||shape="rect"]](% style="color: rgb(0,0,0);" %). (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/isola14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=MotikaSvH14||shape="rect"]] 88 88 * **Theoretical Foundations:** 89 -(% style="color: rgb(0,0,0);" %)Reinhard von Hanxleden and Michael Mendler and Joaquín Aguado and Björn Duderstadt and Insa Fuhrmann and Christian Motika and Stephen Mercer and Owen O’Brien and Partha Roop. Sequentially Constructive Concurrency—A Conservative Extension of the Synchronous Model of Computation. (% class="cmti-10" %)ACM Transactions on Embedded Computing(%%) (% class="cmti-10" %)Systems, Special Issue on Applications of Concurrency to System Design(%%), 13(4s):144:1–144:26, July 2014. [[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/tecs14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenMA+14||shape="rect"]] 83 +(% style="color: rgb(0,0,0);" %)Reinhard von Hanxleden and Michael Mendler and Joaquín Aguado and Björn Duderstadt and Insa Fuhrmann and Christian Motika and Stephen Mercer and Owen O’Brien and Partha Roop. Sequentially Constructive Concurrency—A Conservative Extension of the Synchronous Model of Computation. (% class="cmti-10" %)ACM Transactions on Embedded Computing(%%) (% class="cmti-10" %)Systems, Special Issue on Applications of Concurrency to System Design(%%), 13(4s):144:1–144:26, July 2014. (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/tecs14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenMA+14||shape="rect"]] 90 90 * **Overview and High-Level Transformations in Detail:** 91 91 (% style="color: rgb(0,0,0);" %)Reinhard von Hanxleden and Björn Duderstadt and Christian Motika and Steven Smyth and Michael Mendler and Joaquín Aguado and Stephen Mercer and Owen O’Brien. SCCharts: Sequentially Constructive Statecharts for Safety-Critical Applications. Technical Report 1311, Christian-Albrechts-Universität zu Kiel, Department of Computer Science, December 2013. ISSN 2192-6247. (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/report-1311.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenDM+13b||shape="rect"]] 92 92 93 - \\87 + 94 94 {{/layout-cell}} 95 95 {{/layout-section}} 96 96 ... ... @@ -108,7 +108,8 @@ 108 108 109 109 ==== Model Task ==== 110 110 111 -* ((( 105 +{{task-list}} 106 +{{task id="1" status="complete"}} 112 112 (% style="line-height: 1.42857;" %)Answer the following questions 113 113 114 114 1. How do you describe a superstate in the model? ... ... @@ -117,17 +117,22 @@ 117 117 1. What is a valued object? 118 118 1. How do you get the type of an interface variable? 119 119 1. What other metamodels are needed for the SCCharts metamodel and write down which one is needed for what? 120 -))) 121 -* Write down (on paper, text editor, etc) how the following SCChart models look like 122 -*1. Open the wiki page that explains the [[doc:KIELER.Textual SCCharts Language SCT]]. 123 -*1. Search the //SCChart, Initial State, State, Transition and Immediate Transition //example and ... 124 -*11. write down (on paper or text editor, etc) how the model of that SCChart looks like. 125 -*11. The user now marks C as final. What has to be changed in the model? What semantic problem do you see? 126 -*1. Now, navigate to the //Super State: Strong Abort Transition //example. Write down (on paper) how the model of that SCCharts looks like. 127 -*1. And finally a more sophisticated model: Write down the model of ABO (from [[doc:KIELER.Examples]]). 115 +{{/task}} 128 128 129 -\\ 117 +{{task id="2" status="incomplete"}} 118 +Write down (on paper, text editor, etc) how the following SCChart models look like 130 130 120 +1. Open the wiki page that explains the [[doc:KIELER.Textual SCCharts Language SCT]]. 121 +1. Search the //SCChart, Initial State, State, Transition and Immediate Transition //example and ... 122 +11. write down (on paper or text editor, etc) how the model of that SCChart looks like. 123 +11. The user now marks C as final. What has to be changed in the model? What semantic problem do you see? 124 +1. Now, navigate to the //Super State: Strong Abort Transition //example. Write down (on paper) how the model of that SCCharts looks like. 125 +1. And finally a more sophisticated model: Write down the model of ABO (from [[doc:KIELER.Examples]]). 126 +{{/task}} 127 +{{/task-list}} 128 + 129 + 130 + 131 131 {{info title="KLighD Screenshots"}} 132 132 By the way: You can //right-click// on the Diagram View surface and select //Save as image...// to create a screenshot! 133 133 {{/info}} ... ... @@ -150,10 +150,10 @@ 150 150 151 151 We need a project for testing. Do the following: 152 152 153 - *If you used the standard KIELER Oomph installation setup, create a new Working Set named Tutorial in the Package Explorer. Then...154 - *Create a new empty //Plug-In Project//.155 - *Add the project that contains the sccharts metamodel as a dependency of your new project through the //Plugin Manifest Editor//.156 - *Create a simple Java class that implements a main method. Hint: In a new Java class, simply type main and hit Ctrl+Space. Eclipse content assist will create the method for you.153 +1. If you used the standard KIELER Oomph installation setup, create a new Working Set named Tutorial in the Package Explorer. Then... 154 +1. Create a new empty //Plug-In Project//. 155 +1. Add the project that contains the sccharts metamodel as a dependency of your new project through the //Plugin Manifest Editor//. 156 +1. Create a simple Java class that implements a main method. Hint: In a new Java class, simply type main and hit Ctrl+Space. Eclipse content assist will create the method for you. 157 157 158 158 == Creating a Model == 159 159 ... ... @@ -199,7 +199,7 @@ 199 199 200 200 EMF uses the [[Eclipse Resource concept>>url:http://help.eclipse.org/juno/topic/org.eclipse.platform.doc.isv/guide/resInt.htm?cp=2_0_10||rel="nofollow" shape="rect" class="external-link"]] to save models to files and load models from files. It can use different //Resource Factories// that determine how exactly models are serialized. We will use the [[XMIResourceFactoryImpl>>url:http://download.eclipse.org/modeling/emf/emf/javadoc/2.8.0/org/eclipse/emf/ecore/xmi/impl/XMIResourceFactoryImpl.html||rel="nofollow" shape="rect" class="external-link"]] to save our models to XML files: 201 201 202 - *(((202 +1. ((( 203 203 Add a dependency to the {{code language="none"}}com.google.inject, org.eclipse.core.resources, {{/code}}and{{code language="none"}} de.cau.cs.kieler.sccharts.text{{/code}} plug-ins. 204 204 205 205 {{info title="Additional Dependencies"}} ... ... @@ -206,7 +206,7 @@ 206 206 Don't worry. You will be experienced enough to add mandatory dependencies quickly in the future. However, for now just add the dependencies to proceed with the tutorial. 207 207 {{/info}} 208 208 ))) 209 - *(((209 +1. ((( 210 210 Use something like the following code to save the model from above: 211 211 212 212 {{code language="java"}} ... ... @@ -223,7 +223,7 @@ 223 223 // Create a resource for this file. 224 224 Resource resource = resourceSet.createResource(fileURI); 225 225 226 -// Add the model objects to the contents. Usually, this is the root node of the model.226 +// Add the model objects to the contents. 227 227 resource.getContents().add(myModel); 228 228 229 229 // Save the contents of the resource to the file system. ... ... @@ -248,10 +248,13 @@ 248 248 249 249 You are now equipped with the fundamentals you need to create models programmatically. Let's try it: 250 250 251 -* (% style="line-height: 1.42857;" %)The code fragments listed above do not suffice to create a grammatically correct model. Try to generate a model that corresponds with the serialized model listed on the right side. 252 -*1. (% style="line-height: 1.42857;" %)Run the {{code language="none"}}main(){{/code}} method by right-clicking its class and selecting //Run as// -> //Java Application//. Note that this runs your {{code language="none"}}main(){{/code}} method as a simple Java program, not a complete Eclipse application. EMF models can be used in any simple Java context, not just in Eclipse applications. 253 -*1. Execute the main method. 254 -*1. ((( 251 +{{task-list}} 252 +{{task id="3" status="incomplete"}} 253 +(% style="line-height: 1.42857;" %)The code fragments listed above do not suffice to create a grammatically correct model. Try to generate a model that corresponds with the serialized model listed on the right side. 254 + 255 +1. (% style="line-height: 1.42857;" %)Run the {{code language="none"}}main(){{/code}} method by right-clicking its class and selecting //Run as// -> //Java Application//. Note that this runs your {{code language="none"}}main(){{/code}} method as a simple Java program, not a complete Eclipse application. EMF models can be used in any simple Java context, not just in Eclipse applications. 256 +1. Execute the main method. 257 +1. ((( 255 255 (% style="line-height: 1.42857;" %)Inspect your SCT file. (Press F5 to refresh your file view.) 256 256 257 257 {{note title="Kext Warning"}} ... ... @@ -258,15 +258,30 @@ 258 258 It is possible that kext generates a Null Pointer Exception when you save your model this way. This is a known issue. We're working on it. Just ignore it for now. 259 259 {{/note}} 260 260 ))) 261 -* Now, create a new Java class and proceed as before to generate a model of ABO in the {{code language="none"}}main(){{/code}} method. 262 -* (% style="line-height: 1.42857;" %)Start your SCChart Editor Eclipse instance and load your SCT file. KLighD should now be able to visualize your ABO correctly.(%%)\\ 263 -*1. For this, open tab //Run// and select// Run Configurations...// 264 -*1. Create a new //Eclipse Application// and name it appropriately. 265 -*1. As product select {{code language="none"}}de.cau.cs.kieler.core.product.product{{/code}}. 266 -*1. Click //Run// (or //Debug// if you opened// Debug Configuration...//) 267 -*1. Create a new project and add you generated model. 264 +{{/task}} 268 268 269 -\\ 266 +{{task id="4" status="incomplete"}} 267 +Now, create a new Java class and proceed as before to generate a model of ABO in the 268 + 269 +{{code language="none"}} 270 +main() 271 +{{/code}} 272 + 273 + method. 274 +{{/task}} 275 + 276 +{{task id="5" status="incomplete"}} 277 +(% style="line-height: 1.42857;" %)Start your SCChart Editor Eclipse instance and load your SCT file. KLighD should now be able to visualize your ABO correctly.(%%)\\ 278 + 279 +1. For this, open tab //Run// and select// Run Configurations...// 280 +1. Create a new //Eclipse Application// and name it appropriately. 281 +1. As product select {{code language="none"}}de.cau.cs.kieler.core.product.product{{/code}}. 282 +1. Click //Run// (or //Debug// if you opened// Debug Configuration...//) 283 +1. Create a new project and add you generated model. 284 +{{/task}} 285 +{{/task-list}} 286 + 287 + 270 270 {{/layout-cell}} 271 271 272 272 {{layout-cell}} ... ... @@ -301,13 +301,16 @@ 301 301 {{layout-cell}} 302 302 ==== Transformation Creation Task ==== 303 303 304 -* Create your first transformation... 305 -*1. Create a new project within your tutorial working set as before. 306 -*1. Add plugin dependencies to {{code language="none"}}de.cau.cs.kieler.kico{{/code}} and {{code language="none"}}de.cau.cs.kieler.sccharts{{/code}}. 307 -*1. Create a new //Xtend class// in you package and name it "DoubleStates" and use {{code language="none"}}AbstractProductionTransformation{{/code}} as superclass. 308 -*1. Here, you can automatically add the missing Xtend files by using the quickfix //Add Xtend lib to class path. //Alternatively you can simply add {{code language="none"}}com.google.guava{{/code}}, {{code language="none"}}org.eclipse.xtext.xbase.lib{{/code}}, {{code language="none"}}org.eclipse.xtend.lib{{/code}}, and {{code language="none"}}org.eclipse.xtend.lib.macro{{/code}} to you plugin dependencies. 309 -*1. Click on //Add unimplemented methods//. 310 -*1. ((( 322 +{{task-list}} 323 +{{task id="6" status="incomplete"}} 324 +Create your first transformation... 325 + 326 +1. Create a new project within your tutorial working set as before. 327 +1. Add plugin dependencies to {{code language="none"}}de.cau.cs.kieler.kico{{/code}} and {{code language="none"}}de.cau.cs.kieler.sccharts{{/code}}. 328 +1. Create a new //Xtend class// in you package and name it "DoubleStates" and use {{code language="none"}}AbstractProductionTransformation{{/code}} as superclass. 329 +1. Here, you can automatically add the missing Xtend files by using the quickfix //Add Xtend lib to class path. //Alternatively you can simply add {{code language="none"}}com.google.guava{{/code}}, {{code language="none"}}org.eclipse.xtext.xbase.lib{{/code}}, {{code language="none"}}org.eclipse.xtend.lib{{/code}}, and {{code language="none"}}org.eclipse.xtend.lib.macro{{/code}} to you plugin dependencies. 330 +1. Click on //Add unimplemented methods//. 331 +1. ((( 311 311 Now, you should have a class similar to the following one. 312 312 313 313 {{code language="java"}} ... ... @@ -336,35 +336,52 @@ 336 336 * You may be tempted to add a few global variables that hold things like a global input variable or a pointer to the current state. While you could to that, {{code language="none"}}def create {{/code}}methods might offer a better alternative... 337 337 {{/info}} 338 338 ))) 339 -* ((( 360 +{{/task}} 361 + 362 +{{task id="7" status="incomplete"}} 340 340 As you can see, it is mandatory to add an id for the transformation and another id of the feature that this transformation produces. Name your transformation **tutorial.doubleStates **and the id of feature you want to produce is **sccharts.doubleStates**. 341 341 342 342 {{info title="Programming Guidelines"}} 343 343 You should really think about some constants here. You can also look at the sccharts transformation and features constants in the sccharts plugin. 344 344 {{/info}} 345 -))) 368 +{{/task}} 369 +{{/task-list}} 346 346 {{/layout-cell}} 347 347 348 348 {{layout-cell}} 349 - \\373 + 350 350 {{/layout-cell}} 351 351 {{/layout-section}} 352 352 353 353 {{layout-section ac:type="two_right_sidebar"}} 354 354 {{layout-cell}} 355 -* KiCo must know about the new feature and also about your new transformation. 356 -*1. Add a new Xtend class with Feature as superclass. Add all unimplemented methods. Also set** sccharts.doubleStates** as Id. 357 -*1. Go to the Extension tab inside your plugin configuration. 358 -*11. Add a new Extension Point de.cau.cs.kieler.kico.feature. Create a new featureClass and point it to your new feature class. 359 -*11. Also add a new Extension Point de.cau.cs.kieler.kico.transformation. Create a new productionTransformationClass and point it to your transformation class. 360 -*11. Finally, you have to link your transformation to the SCT Editor. Add the Extension point de.cau.cs.kieler.kico.ui.transformation. Create an editor link and fill in the following values: 361 -*111. editor: {{code language="none"}}de.cau.cs.kieler.sccharts.text.sct.Sct{{/code}} 362 -*111. features: sccharts.doubleStates 363 -*111. label: Tutorial Compilation 364 -*111. priority: 101 365 -*111. preferred: (leave it blank) 366 -*1. {{note title="Plugin Tasks"}}In general it is bad to mix non-ui plugins/tasks with ui plugin/tasks because (in the context of KiCo) even if you're not working with an active UI your transformations should work (e.g. a command line compiler). To keep this tutorial simple, you can add this dependency to your plugin nevertheless. However, you shouldn't do this in real products. Always keep the UI separated.{{/note}}If you start your KIELER instance now, you should get a new compilation chain which has only one transformation: yours, which doesn't do anything. 367 -* If you want to rename your feature in the Compiler Selection (without changing its Id), override the {{code language="none"}}getName{{/code}} method and return a new name. Rename your feature appropriately. 379 +{{task-list}} 380 +{{task id="8" status="incomplete"}} 381 +KiCo must know about the new feature and also about your new transformation. 382 + 383 +1. Add a new Xtend class with Feature as superclass. Add all unimplemented methods. Also set** sccharts.doubleStates** as Id. 384 +1. Go to the Extension tab inside your plugin configuration. 385 +11. Add a new Extension Point de.cau.cs.kieler.kico.feature. Create a new featureClass and point it to your new feature class. 386 +11. Also add a new Extension Point de.cau.cs.kieler.kico.transformation. Create a new productionTransformationClass and point it to your transformation class. 387 +11. Finally, you have to link your transformation to the SCT Editor. Add the Extension point de.cau.cs.kieler.kico.ui.transformation. Create an editor link and fill in the following values: 388 +111. editor: {{code language="none"}}de.cau.cs.kieler.sccharts.text.sct.Sct{{/code}} 389 +111. features: sccharts.doubleStates 390 +111. label: Tutorial Compilation 391 +111. priority: 101 392 +111. preferred: (leave it blank) 393 +1. {{note title="Plugin Tasks"}}In general it is bad to mix non-ui plugins/tasks with ui plugin/tasks because (in the context of KiCo) even if you're not working with an active UI your transformations should work (e.g. a command line compiler). To keep this tutorial simple, you can add this dependency to your plugin nevertheless. However, you shouldn't do this in real products. Always keep the UI separated.{{/note}}If you start your KIELER instance now, you should get a new compilation chain which has only one transformation: yours, which doesn't do anything. 394 +{{/task}} 395 + 396 +{{task id="9" status="incomplete"}} 397 +If you want to rename your feature in the Compiler Selection (without changing its Id), override the 398 + 399 +{{code language="none"}} 400 +getName 401 +{{/code}} 402 + 403 + method and return a new name. Rename your feature appropriately. 404 +{{/task}} 405 +{{/task-list}} 368 368 {{/layout-cell}} 369 369 370 370 {{layout-cell}} ... ... @@ -374,9 +374,12 @@ 374 374 375 375 {{layout-section ac:type="two_right_sidebar"}} 376 376 {{layout-cell}} 377 -* Now, fill your transformation with life: 378 -*1. Inside your transformation class, add a new method with the following signature: {{code language="none"}}def State transform(State rootState, KielerCompilerContext context){{/code}}. This transformation will be executed if the feature is selected in the Compiler Selection. 379 -*1. ((( 415 +{{task-list}} 416 +{{task id="10" status="incomplete"}} 417 +Now, fill your transformation with life: 418 + 419 +1. Inside your transformation class, add a new method with the following signature: {{code language="none"}}def State transform(State rootState, KielerCompilerContext context){{/code}}. This transformation will be executed if the feature is selected in the Compiler Selection. 420 +1. ((( 380 380 Add thew following body to the function and try to understand the Xtend code. Import unknown class via code assist. 381 381 382 382 {{code language="java" title="transform"}} ... ... @@ -392,9 +392,14 @@ 392 392 } 393 393 {{/code}} 394 394 ))) 395 -*1. When selecting your transformation, the SCChart gets transformed and looks like the version on the right. 396 -* Extend the transformation so that the transition is split up in two and connected via a transient state meaning that the original transformation should point to the new state and a new immediate transformation then points to the original target state. Try it out. 397 -* ((( 436 +1. When selecting your transformation, the SCChart gets transformed and looks like the version on the right. 437 +{{/task}} 438 + 439 +{{task id="11" status="incomplete"}} 440 +Extend the transformation so that the transition is split up in two and connected via a transient state meaning that the original transformation should point to the new state and a new immediate transformation then points to the original target state. Try it out. 441 +{{/task}} 442 + 443 +{{task id="12" status="incomplete"}} 398 398 Xtend supports extensions that can be used to extend the function set of you classes (i.e. models). Add {{code language="none"}}com.google.inject{{/code}} to the dependencies of your plugin. Now, add the following code fragment to the beginning of your class. 399 399 400 400 {{code language="java" title="Code injection"}} ... ... @@ -407,7 +407,8 @@ 407 407 {{note title="Extensions Naming Scheme"}} 408 408 Extensions are also just classes. You can add your own to improve the structure of your own projects. In KIELER all extensions end with "Extensions"; except SCChartsExtension for legacy reasons. This will be renamed in after the next snapshot to SCChartsExtensions. So, if you're going to add new extensions to the project, please name them accordingly. 409 409 {{/note}} 410 -))) 456 +{{/task}} 457 +{{/task-list}} 411 411 {{/layout-cell}} 412 412 413 413 {{layout-cell}} ... ... @@ -417,7 +417,11 @@ 417 417 418 418 {{layout-section ac:type="two_right_sidebar"}} 419 419 {{layout-cell}} 420 -* Extend your transformation so that it is applied on all states (except the root state). Try your new transformation with ABO. The result should look like the example on the right. 467 +{{task-list}} 468 +{{task id="13" status="incomplete"}} 469 +Extend your transformation so that it is applied on all states (except the root state). Try your new transformation with ABO. The result should look like the example on the right. 470 +{{/task}} 471 +{{/task-list}} 421 421 422 422 == The existing Compilation Chain == 423 423 ... ... @@ -427,17 +427,17 @@ 427 427 428 428 //We will add more content to this subsection in the future...// 429 429 430 - \\481 + 431 431 {{/layout-cell}} 432 432 433 433 {{layout-cell}} 434 434 [[image:attach:ABODoubleStates.png]] 435 435 436 - \\487 + 437 437 438 - \\489 + 439 439 440 - \\491 + 441 441 {{/layout-cell}} 442 442 {{/layout-section}} 443 443 ... ... @@ -449,10 +449,7 @@ 449 449 450 450 Now, you're going to transform the normalized form of HandleA from ABO to an SCG. The Sequentially Constructive Graph is a control-flow graph which can be seen as another representation of the same program. The SCG of the normalized version of ABO's HandleA is depicted on the right. 451 451 452 -(% class="wrapped" %) 453 453 |((( 454 -(% class="content-wrapper" %) 455 -((( 456 456 {{code}} 457 457 scchart ABO_norm_HandleA { 458 458 input output bool A; ... ... @@ -475,19 +475,12 @@ 475 475 --> _Pause immediate; 476 476 } 477 477 {{/code}} 478 -))) 479 479 )))|((( 480 -(% class="content-wrapper" %) 481 -((( 482 482 [[image:attach:abo_norm_HandleA.png]] 483 -))) 484 484 )))|(% colspan="1" %)(% colspan="1" %) 485 485 ((( 486 -(% class="content-wrapper" %) 487 -((( 488 488 [[image:attach:abo_scg_HandleA.png]] 489 489 ))) 490 -))) 491 491 {{/layout-cell}} 492 492 {{/layout-section}} 493 493 ... ... @@ -509,23 +509,43 @@ 509 509 510 510 Write a transformation that transforms your normalized version of ABO's HandleA into its corresponding SCG. 511 511 512 -* Proceed as before. Create a new plugin (or copy your last one) Make sure, you also add de.cau.cs.kieler.scg to your dependencies. 513 -* Write a transformation that is able to transform {{code language="none"}}ABO_norm_HandleA{{/code}} into its corresponding SCG. 514 -* **Verify your generated SCG**. If you added your transformation correctly, the SCG should be displayed automatically as soon as selected. If your SCG looks like the SCG depicted earlier, then everything is fine. 515 -* Check your SCG semantically. Is there anything you could improve/optimize? 516 -*1. Write a second transformation (just as before) and add it to the transformation chain right after the transformation you already added. 517 -*1. Optimize the given SCG and compare the result with the previous one. 518 -*1. Make sure that the two SCGs are still semantically identical. 553 +{{task-list}} 554 +{{task id="14" status="incomplete"}} 555 +Proceed as before. Create a new plugin (or copy your last one) Make sure, you also add de.cau.cs.kieler.scg to your dependencies. 556 +{{/task}} 519 519 520 -\\ 558 +{{task id="15" status="incomplete"}} 559 +Write a transformation that is able to transform 521 521 561 +{{code language="none"}} 562 +ABO_norm_HandleA 563 +{{/code}} 564 + 565 + into its corresponding SCG. 566 +{{/task}} 567 + 568 +{{task id="16" status="incomplete"}} 569 +**Verify your generated SCG**. If you added your transformation correctly, the SCG should be displayed automatically as soon as selected. If your SCG looks like the SCG depicted earlier, then everything is fine. 570 +{{/task}} 571 + 572 +{{task id="17" status="incomplete"}} 573 +Check your SCG semantically. Is there anything you could improve/optimize? 574 + 575 +1. Write a second transformation (just as before) and add it to the transformation chain right after the transformation you already added. 576 +1. Optimize the given SCG and compare the result with the previous one. 577 +1. Make sure that the two SCGs are still semantically identical. 578 +{{/task}} 579 +{{/task-list}} 580 + 581 + 582 + 522 522 Congratulations! You finished the SCCharts Development Tutorial. Ask your supervisor for further instructions! 523 523 524 - \\585 + 525 525 {{/layout-cell}} 526 526 527 527 {{layout-cell}} 528 - \\589 + 529 529 {{/layout-cell}} 530 530 {{/layout-section}} 531 531 {{/layout}}
- ABODoubleStates.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -38.4 KB - Content
- InstallEcoreViz.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -42.2 KB - Content
- InstallKLighDFeatures.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -48.9 KB - Content
- KLighDSaveAsImage.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -10.5 KB - Content
- KielerSCTEditor.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -95.0 KB - Content
- KielerSCTEditorOwnTransformation.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -91.1 KB - Content
- KielerSCTEditorOwnTransformationOlolo.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -96.9 KB - Content
- RunConfiguration.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -73.3 KB - Content
- abo_norm_HandleA.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -57.1 KB - Content
- abo_scg_HandleA.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -20.8 KB - Content
- sccharts-scg.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -75.5 KB - Content
- sccharts_metamodel.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -291.3 KB - Content
- sccharts_metamodel_treeEditor.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -40.7 KB - Content
- Confluence.Code.ConfluencePageClass[0]
-
- Id
-
... ... @@ -1,1 +1,1 @@ 1 -16810 1991 +16810384 - URL
-
... ... @@ -1,1 +1,1 @@ 1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/TUT/pages/16810 199/SCCharts Development1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/TUT/pages/16810384/SCCharts Development