Textual Modeling Framework Xtext
-
Upload
sebastian-zarnekow -
Category
Technology
-
view
5.098 -
download
1
description
Transcript of Textual Modeling Framework Xtext
![Page 1: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/1.jpg)
Textual Modeling Framework
Sven Efftinge, Sebastian Zarnekow itemis
Donnerstag, 16. Juli 2009
![Page 2: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/2.jpg)
Domain-Specific Language (DSL)
Donnerstag, 16. Juli 2009
![Page 3: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/3.jpg)
Domain-Specific Language (DSL)
A DSL is a formal, processable language targeting at a specific viewpoint or
aspect of a software system.
Donnerstag, 16. Juli 2009
![Page 4: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/4.jpg)
Domain-Specific Language (DSL)
A DSL is a formal, processable language targeting at a specific viewpoint or
aspect of a software system.
It’s semantics, flexibility and notation is designed in order to support working
with that viewpoint as good as possible.
Donnerstag, 16. Juli 2009
![Page 5: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/5.jpg)
Why DSLs?
Donnerstag, 16. Juli 2009
![Page 6: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/6.jpg)
Why DSLs?• higher abstractions
Donnerstag, 16. Juli 2009
![Page 7: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/7.jpg)
Why DSLs?• higher abstractions • avoid redundancy
Donnerstag, 16. Juli 2009
![Page 8: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/8.jpg)
Why DSLs?• higher abstractions • avoid redundancy• separation of concerns
Donnerstag, 16. Juli 2009
![Page 9: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/9.jpg)
Why DSLs?• higher abstractions • avoid redundancy• separation of concerns• use domain concepts (Ubiquitous Language)
Donnerstag, 16. Juli 2009
![Page 10: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/10.jpg)
The challenge
Donnerstag, 16. Juli 2009
![Page 11: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/11.jpg)
ComplicatedDonnerstag, 16. Juli 2009
![Page 12: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/12.jpg)
Complicated & Expensive ?Donnerstag, 16. Juli 2009
![Page 13: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/13.jpg)
licensed by http://www.wordle.net/
Donnerstag, 16. Juli 2009
![Page 14: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/14.jpg)
How we address this with
Donnerstag, 16. Juli 2009
![Page 15: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/15.jpg)
ConvenienceDonnerstag, 16. Juli 2009
![Page 16: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/16.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 17: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/17.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Grammardefinition
Donnerstag, 16. Juli 2009
![Page 18: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/18.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Grammardefinition
Grammar reuse
Donnerstag, 16. Juli 2009
![Page 19: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/19.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Derivedmetamodel
Donnerstag, 16. Juli 2009
![Page 20: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/20.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Parserrules
Donnerstag, 16. Juli 2009
![Page 21: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/21.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Parserrules
Keywords
Donnerstag, 16. Juli 2009
![Page 22: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/22.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Multivalue assignment
Simple assigment
Boolean assigment
Donnerstag, 16. Juli 2009
![Page 23: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/23.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Cardinality (one or more)
Optional Element
Cardinality (zero or more)
Donnerstag, 16. Juli 2009
![Page 24: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/24.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Alternative
Cardinality (one or more)
Optional Element
Cardinality (zero or more)
Donnerstag, 16. Juli 2009
![Page 25: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/25.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Assignment with rulecall
Donnerstag, 16. Juli 2009
![Page 26: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/26.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Unassigned rulecall
Assignment with rulecall
Donnerstag, 16. Juli 2009
![Page 27: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/27.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Unassigned rulecall
Assignment with rulecall
Containment
Donnerstag, 16. Juli 2009
![Page 28: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/28.jpg)
9
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel "http://www.xtext.org/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Unassigned rulecall
Assignment with rulecall
Cross referenceContainment
Donnerstag, 16. Juli 2009
![Page 29: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/29.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 30: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/30.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 31: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/31.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 32: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/32.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 33: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/33.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 34: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/34.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 35: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/35.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 36: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/36.jpg)
Metamodel Inference
10
grammar org.xtext.workshop.DomainModel with org.eclipse.xtext.common.Terminals
generate domainModel"http://www.xtext.org/workshop/DomainModel"
Model : (types+=Type)+;Type : Class | DataType; DataType : 'datatype' name=ID; Class : (abstract?='abstract')? 'class' name=ID '{' (features+=Feature)* '}'; Feature : 'attr' name=ID ':' type=[DataType];
Donnerstag, 16. Juli 2009
![Page 37: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/37.jpg)
licensed by http://www.wordle.net/
Donnerstag, 16. Juli 2009
![Page 38: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/38.jpg)
licensed by http://www.wordle.net/
Based on the grammar and Ecore models,Xtext provides you with sensible
default implementations.
Donnerstag, 16. Juli 2009
![Page 39: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/39.jpg)
FlexibilityDonnerstag, 16. Juli 2009
![Page 40: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/40.jpg)
licensed by http://www.wordle.net/
Donnerstag, 16. Juli 2009
![Page 41: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/41.jpg)
licensed by http://www.wordle.net/
Dependency management
Donnerstag, 16. Juli 2009
![Page 42: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/42.jpg)
licensed by http://www.wordle.net/
Dependency management
Donnerstag, 16. Juli 2009
![Page 43: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/43.jpg)
licensed by http://www.wordle.net/
Dependency management
Donnerstag, 16. Juli 2009
![Page 44: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/44.jpg)
licensed by http://www.wordle.net/
Dependency management
Donnerstag, 16. Juli 2009
![Page 45: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/45.jpg)
licensed by http://www.wordle.net/
Dependency management
Donnerstag, 16. Juli 2009
![Page 46: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/46.jpg)
licensed by http://www.wordle.net/
MyCustomLabelProvider
Donnerstag, 16. Juli 2009
![Page 47: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/47.jpg)
Dependency Injection with Google fGuice
Donnerstag, 16. Juli 2009
![Page 48: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/48.jpg)
Dependency Injection with Google fGuice
Donnerstag, 16. Juli 2009
![Page 49: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/49.jpg)
Dependency Injection with Google fGuice
‣No dependency to concrete implementation
Donnerstag, 16. Juli 2009
![Page 50: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/50.jpg)
Dependency Injection with Google fGuice
‣No dependency to concrete implementation‣No explicit construction
Donnerstag, 16. Juli 2009
![Page 51: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/51.jpg)
Dependency Injection with Google fGuice
‣No dependency to concrete implementation‣No explicit construction‣Easy testing
Donnerstag, 16. Juli 2009
![Page 52: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/52.jpg)
Dependency Injection with Google fGuice
‣No dependency to concrete implementation‣No explicit construction‣Easy testing‣Easy composition
Donnerstag, 16. Juli 2009
![Page 53: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/53.jpg)
Configuration of Components in Xtext
/** * used to register components to be used within the IDE. */public class DomainmodelUiModule extends GeneratedDomainmodelUiModule { @Override public Class<? extends ILabelProvider> bindILabelProvider() { return MySpecialLabelProvider.class; }}
Donnerstag, 16. Juli 2009
![Page 54: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/54.jpg)
Composable Code Generator
‣ Generator is composed of “fragments”
Donnerstag, 16. Juli 2009
![Page 55: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/55.jpg)
Composable Code Generator
‣ Generator is composed of “fragments”
‣ Fragments can contribute to:
Donnerstag, 16. Juli 2009
![Page 56: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/56.jpg)
Composable Code Generator
‣ Generator is composed of “fragments”
‣ Fragments can contribute to:
‣ Manifest.MF
Donnerstag, 16. Juli 2009
![Page 57: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/57.jpg)
Composable Code Generator
‣ Generator is composed of “fragments”
‣ Fragments can contribute to:
‣ Manifest.MF
‣ plugin.xml
Donnerstag, 16. Juli 2009
![Page 58: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/58.jpg)
Composable Code Generator
‣ Generator is composed of “fragments”
‣ Fragments can contribute to:
‣ Manifest.MF
‣ plugin.xml
‣ Guice modules
Donnerstag, 16. Juli 2009
![Page 59: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/59.jpg)
Composable Code Generator
‣ Generator is composed of “fragments”
‣ Fragments can contribute to:
‣ Manifest.MF
‣ plugin.xml
‣ Guice modules
‣ Add your own fragments
Donnerstag, 16. Juli 2009
![Page 60: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/60.jpg)
UseCase Migrating existing Apps
Donnerstag, 16. Juli 2009
![Page 61: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/61.jpg)
• DB-Application
• Oracle DB
• OracleForms
Starting point
Donnerstag, 16. Juli 2009
![Page 62: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/62.jpg)
• Oracle DB
• Java Rich Client
• JPA
• Spring
• Swing / JGoodies Forms
Target
Donnerstag, 16. Juli 2009
![Page 63: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/63.jpg)
Quantities
Donnerstag, 16. Juli 2009
![Page 64: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/64.jpg)
Quantities• 1700++ Tables
Donnerstag, 16. Juli 2009
![Page 65: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/65.jpg)
Quantities• 1700++ Tables
• 19500++ Columns
Donnerstag, 16. Juli 2009
![Page 66: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/66.jpg)
Quantities• 1700++ Tables
• 19500++ Columns
• 300++ Forms
Donnerstag, 16. Juli 2009
![Page 67: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/67.jpg)
Quantities• 1700++ Tables
• 19500++ Columns
• 300++ Forms
Task
Donnerstag, 16. Juli 2009
![Page 68: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/68.jpg)
Quantities• 1700++ Tables
• 19500++ Columns
• 300++ Forms
Task• Find abstractions
Donnerstag, 16. Juli 2009
![Page 69: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/69.jpg)
Quantities• 1700++ Tables
• 19500++ Columns
• 300++ Forms
Task• Find abstractions
• Simplify code
Donnerstag, 16. Juli 2009
![Page 70: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/70.jpg)
@SuppressWarnings("serial")@Entity@Table(name = "BUCHUNGSKREISE_F")public class BuchungskreiseF extends AbstractEntity implements Serializable {
@SuppressWarnings("unused") @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "bkrIdSeq") @SequenceGenerator(name = "bkrIdSeq", sequenceName = "BKR_SEQ", allocationSize = 1) @Column(name = "BKR_ID", nullable = false) private Long bkrId;
public Long getBkrId() { return bkrId; }
public void setBkrId(final Long bkrId) { this.bkrId = bkrId; }
@Column(name = "KONTO_NR", nullable = false, length = 45) private String kontoNr;
public String getKontoNr() { return kontoNr; }
public void setKontoNr(final String kontoNr) { String oldValue = this.kontoNr; this.kontoNr = kontoNr; firePropertyChangeEvent("kontoNr", oldValue, this.kontoNr); }
@Column(name = "RG_NR_BKR_IDENTIFIKATOR", nullable = false, length = 1) private Long rgNrBkrIdentifikator;
public Long getRgNrBkrIdentifikator() { return rgNrBkrIdentifikator; }
public void setRgNrBkrIdentifikator(final Long rgNrBkrIdentifikator) { Long oldValue = this.rgNrBkrIdentifikator; this.rgNrBkrIdentifikator = rgNrBkrIdentifikator; firePropertyChangeEvent("rgNrBkrIdentifikator", oldValue, this.rgNrBkrIdentifikator); }
@Column(name = "REFERENZCODE_KONTO_NR", nullable = false, length = 45) private String referenzcodeKontoNr;
public String getReferenzcodeKontoNr() { return referenzcodeKontoNr; }
public void setReferenzcodeKontoNr(final String referenzcodeKontoNr) { String oldValue = this.referenzcodeKontoNr; this.referenzcodeKontoNr = referenzcodeKontoNr; firePropertyChangeEvent("referenzcodeKontoNr", oldValue, this.referenzcodeKontoNr); }
@Column(name = "PC_NR_RG", nullable = false, length = 45) private String pcNrRg;
public String getPcNrRg() { return pcNrRg; }
public void setPcNrRg(final String pcNrRg) { String oldValue = this.pcNrRg; this.pcNrRg = pcNrRg; firePropertyChangeEvent("pcNrRg", oldValue, this.pcNrRg); }
@Column(name = "PC_NR_PVA", nullable = false, length = 45) private String pcNrPva;
public String getPcNrPva() { return pcNrPva; }
public void setPcNrPva(final String pcNrPva) { String oldValue = this.pcNrPva; this.pcNrPva = pcNrPva; firePropertyChangeEvent("pcNrPva", oldValue, this.pcNrPva); }
@Column(name = "MWST_NR", nullable = false, length = 10) private Long mwstNr;
public Long getMwstNr() { return mwstNr; }
public void setMwstNr(final Long mwstNr) { Long oldValue = this.mwstNr; this.mwstNr = mwstNr; firePropertyChangeEvent("mwstNr", oldValue, this.mwstNr); }
@Column(name = "J_VERSION", nullable = false, insertable = false, updatable = false, length = 22)@org.hibernate.annotations.Generated(org.hibernate.annotations.GenerationTime.ALWAYS) @Version private Long jVersion;
public Long getJVersion() { return jVersion; }
public void setJVersion(final Long jVersion) { Long oldValue = this.jVersion; this.jVersion = jVersion; firePropertyChangeEvent("jVersion", oldValue, this.jVersion); }
@Column(name = "IBAN", nullable = false, length = 34) private String iban;
public String getIban() { return iban; }
public void setIban(final String iban) { String oldValue = this.iban; this.iban = iban; firePropertyChangeEvent("iban", oldValue, this.iban); }
@Column(name = "BUCHUNGSKREIS_NR", nullable = false, length = 4) private Long buchungskreisNr;
public Long getBuchungskreisNr() { return buchungskreisNr; }
public void setBuchungskreisNr(final Long buchungskreisNr) { Long oldValue = this.buchungskreisNr; this.buchungskreisNr = buchungskreisNr; firePropertyChangeEvent("buchungskreisNr", oldValue, this.buchungskreisNr); }
}
Entity
BuchungskreiseF
Id
Long bkrId
String kontoNr
nullable = false
nullable = false 45
BUCHUNGSKREISE_F
BKR_ID
KONTO_NR
BKR_SEQ
Donnerstag, 16. Juli 2009
![Page 71: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/71.jpg)
@SuppressWarnings("serial")@Entity@Table(name = "BUCHUNGSKREISE_F")public class BuchungskreiseF extends AbstractEntity implements Serializable {
@SuppressWarnings("unused") @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "bkrIdSeq") @SequenceGenerator(name = "bkrIdSeq", sequenceName = "BKR_SEQ", allocationSize = 1) @Column(name = "BKR_ID", nullable = false) private Long bkrId;
public Long getBkrId() { return bkrId; }
public void setBkrId(final Long bkrId) { this.bkrId = bkrId; }
@Column(name = "KONTO_NR", nullable = false, length = 45) private String kontoNr;
public String getKontoNr() { return kontoNr; }
public void setKontoNr(final String kontoNr) { String oldValue = this.kontoNr; this.kontoNr = kontoNr; firePropertyChangeEvent("kontoNr", oldValue, this.kontoNr); }
@Column(name = "RG_NR_BKR_IDENTIFIKATOR", nullable = false, length = 1) private Long rgNrBkrIdentifikator;
public Long getRgNrBkrIdentifikator() { return rgNrBkrIdentifikator; }
public void setRgNrBkrIdentifikator(final Long rgNrBkrIdentifikator) { Long oldValue = this.rgNrBkrIdentifikator; this.rgNrBkrIdentifikator = rgNrBkrIdentifikator; firePropertyChangeEvent("rgNrBkrIdentifikator", oldValue, this.rgNrBkrIdentifikator); }
@Column(name = "REFERENZCODE_KONTO_NR", nullable = false, length = 45) private String referenzcodeKontoNr;
public String getReferenzcodeKontoNr() { return referenzcodeKontoNr; }
public void setReferenzcodeKontoNr(final String referenzcodeKontoNr) { String oldValue = this.referenzcodeKontoNr; this.referenzcodeKontoNr = referenzcodeKontoNr; firePropertyChangeEvent("referenzcodeKontoNr", oldValue, this.referenzcodeKontoNr); }
@Column(name = "PC_NR_RG", nullable = false, length = 45) private String pcNrRg;
public String getPcNrRg() { return pcNrRg; }
public void setPcNrRg(final String pcNrRg) { String oldValue = this.pcNrRg; this.pcNrRg = pcNrRg; firePropertyChangeEvent("pcNrRg", oldValue, this.pcNrRg); }
@Column(name = "PC_NR_PVA", nullable = false, length = 45) private String pcNrPva;
public String getPcNrPva() { return pcNrPva; }
public void setPcNrPva(final String pcNrPva) { String oldValue = this.pcNrPva; this.pcNrPva = pcNrPva; firePropertyChangeEvent("pcNrPva", oldValue, this.pcNrPva); }
@Column(name = "MWST_NR", nullable = false, length = 10) private Long mwstNr;
public Long getMwstNr() { return mwstNr; }
public void setMwstNr(final Long mwstNr) { Long oldValue = this.mwstNr; this.mwstNr = mwstNr; firePropertyChangeEvent("mwstNr", oldValue, this.mwstNr); }
@Column(name = "J_VERSION", nullable = false, insertable = false, updatable = false, length = 22)@org.hibernate.annotations.Generated(org.hibernate.annotations.GenerationTime.ALWAYS) @Version private Long jVersion;
public Long getJVersion() { return jVersion; }
public void setJVersion(final Long jVersion) { Long oldValue = this.jVersion; this.jVersion = jVersion; firePropertyChangeEvent("jVersion", oldValue, this.jVersion); }
@Column(name = "IBAN", nullable = false, length = 34) private String iban;
public String getIban() { return iban; }
public void setIban(final String iban) { String oldValue = this.iban; this.iban = iban; firePropertyChangeEvent("iban", oldValue, this.iban); }
@Column(name = "BUCHUNGSKREIS_NR", nullable = false, length = 4) private Long buchungskreisNr;
public Long getBuchungskreisNr() { return buchungskreisNr; }
public void setBuchungskreisNr(final Long buchungskreisNr) { Long oldValue = this.buchungskreisNr; this.buchungskreisNr = buchungskreisNr; firePropertyChangeEvent("buchungskreisNr", oldValue, this.buchungskreisNr); }
}
Entity
BuchungskreiseF
Id
Long bkrId
String kontoNr
nullable = false
nullable = false 45
BUCHUNGSKREISE_F
BKR_ID
KONTO_NR
BKR_SEQ
Donnerstag, 16. Juli 2009
![Page 72: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/72.jpg)
entity BuchungskreiseF (id=bkrId sequenceName=BKR_SEQ) {
String kontoNr
Long rgNrBkrIdentifikator
String referenzcodeKontoNr
}
(notNull, length=45)
(notNull, length=45)
(notNull, length=1)
External DSL for Entities
Donnerstag, 16. Juli 2009
![Page 73: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/73.jpg)
entity BuchungskreiseF (id=bkrId sequenceName=BKR_SEQ) {
String kontoNr
Long rgNrBkrIdentifikator
String referenzcodeKontoNr
}
External DSL for Entities
Donnerstag, 16. Juli 2009
![Page 74: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/74.jpg)
entity BuchungskreiseF (id=bkrId sequenceName=BKR_SEQ) {
String kontoNr
Long rgNrBkrIdentifikator
String referenzcodeKontoNr
}
BUCHUNGSKREISE_F
RG_NR_BKR_IDENTIFIKATOR
External DSL for Entities
Donnerstag, 16. Juli 2009
![Page 75: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/75.jpg)
ValidationDonnerstag, 16. Juli 2009
![Page 76: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/76.jpg)
Donnerstag, 16. Juli 2009
![Page 77: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/77.jpg)
addValidator(new Validator<Institutionen>() { @Override public ValidationResult validate(final Institutionen institution) { final ValidationResult result = new ValidationResult(); if (institution != null && institution.getEsrNr() != null && !CheckUtils.checkPcKontoNrPruefziffer( Long.parseLong(institution.getEsrNr())) { result.add(new SimpleValidationMessage( getResourceMap().getString("validation.esr.msg"), Severity.ERROR, getModel(Institutionen.DESC.esrNr()))); } return result; } });
Donnerstag, 16. Juli 2009
![Page 78: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/78.jpg)
addValidator(new Validator<Institutionen>() { @Override public ValidationResult validate(final Institutionen institution) { final ValidationResult result = new ValidationResult(); if (institution != null && institution.getEsrNr() != null && !CheckUtils.checkPcKontoNrPruefziffer( Long.parseLong(institution.getEsrNr())) { result.add(new SimpleValidationMessage( getResourceMap().getString("validation.esr.msg"), Severity.ERROR, getModel(Institutionen.DESC.esrNr()))); } return result; } });
Framework-Code
Donnerstag, 16. Juli 2009
![Page 79: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/79.jpg)
addValidator(new Validator<Institutionen>() { @Override public ValidationResult validate(final Institutionen institution) { final ValidationResult result = new ValidationResult(); if (institution != null && institution.getEsrNr() != null && !CheckUtils.checkPcKontoNrPruefziffer( Long.parseLong(institution.getEsrNr())) { result.add(new SimpleValidationMessage( getResourceMap().getString("validation.esr.msg"), Severity.ERROR, getModel(Institutionen.DESC.esrNr()))); } return result; } });
Framework-CodeNullpointer abfragen
Donnerstag, 16. Juli 2009
![Page 80: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/80.jpg)
addValidator(new Validator<Institutionen>() { @Override public ValidationResult validate(final Institutionen institution) { final ValidationResult result = new ValidationResult(); if (institution != null && institution.getEsrNr() != null && !CheckUtils.checkPcKontoNrPruefziffer( Long.parseLong(institution.getEsrNr())) { result.add(new SimpleValidationMessage( getResourceMap().getString("validation.esr.msg"), Severity.ERROR, getModel(Institutionen.DESC.esrNr()))); } return result; } });
Framework-CodeNullpointer abfragenStatic imports
Donnerstag, 16. Juli 2009
![Page 81: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/81.jpg)
addValidator(new Validator<Institutionen>() { @Override public ValidationResult validate(final Institutionen institution) { final ValidationResult result = new ValidationResult(); if (institution != null && institution.getEsrNr() != null && !CheckUtils.checkPcKontoNrPruefziffer( Long.parseLong(institution.getEsrNr())) { result.add(new SimpleValidationMessage( getResourceMap().getString("validation.esr.msg"), Severity.ERROR, getModel(Institutionen.DESC.esrNr()))); } return result; } });
Framework-CodeNullpointer abfragenStatic importsBibliotheks Methoden definieren und benutzen
error("validation.esr.msg", desc.esrNr());
Donnerstag, 16. Juli 2009
![Page 82: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/82.jpg)
@Check void checkEsrMsg() { if (!checkKontoNrPruefziffer(parseLong(_this.getEsrNr()))) error("validation.esr.msg",desc.esrNr()); }
Internal DSL with Java
• JUnit-like• Ignore Nullpointer-Exceptions
Donnerstag, 16. Juli 2009
![Page 83: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/83.jpg)
Future PlansDonnerstag, 16. Juli 2009
![Page 84: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/84.jpg)
Eclipse Helios
Donnerstag, 16. Juli 2009
![Page 85: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/85.jpg)
Eclipse Helios•Model Index
Donnerstag, 16. Juli 2009
![Page 86: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/86.jpg)
Eclipse Helios•Model Index
•Grammar Mixins
Donnerstag, 16. Juli 2009
![Page 87: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/87.jpg)
Eclipse Helios•Model Index
•Grammar Mixins
•Base Language
Donnerstag, 16. Juli 2009
![Page 88: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/88.jpg)
Eclipse Helios•Model Index
•Grammar Mixins
•Base Language
•UI Features
Donnerstag, 16. Juli 2009
![Page 89: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/89.jpg)
Eclipse Helios•Model Index
•Grammar Mixins
•Base Language
•UI Features
•Documentation
Donnerstag, 16. Juli 2009
![Page 90: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/90.jpg)
Donnerstag, 16. Juli 2009
![Page 91: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/91.jpg)
Thank you very much for listening
Visit the project’s web site : www.xtext.org
Copyright 2009 by itemis
Donnerstag, 16. Juli 2009
![Page 92: Textual Modeling Framework Xtext](https://reader038.fdocuments.us/reader038/viewer/2022102716/554a16bfb4c905825d8b4ee5/html5/thumbnails/92.jpg)
Thank you very much for listening
Visit the project’s web site : www.xtext.org
Copyright 2009 by itemis
Xtext Webinar Tomorrow 19:00
http://live.eclipse.org/node/705
Donnerstag, 16. Juli 2009