More Related Content
Similar to Combining Text and Graphics in Eclipse-based Modeling Tools (20)
More from Dr. Jan Köhnlein (20)
Combining Text and Graphics in Eclipse-based Modeling Tools
- 4. GMF
Graphical
Xtext
Textual
- 5. GMF
Graphical
Just two different views
on the same thing
Xtext
Textual
- 8. Xtext
Textual Model
Serializer
Parser
Node Model
Ecore Model
Instance
- 9. Xtext
XtextResource
Textual Model
Serializer
Parser
Node Model
Ecore Model
Instance
- 10. Xtext
XtextResource
Textual Model
Serializer
Parser
Node Model
Ecore Model
Instance
getContents()
- 11. Xtext load(), save()
XtextResource
Textual Model
Serializer
Parser
Node Model
Ecore Model
Instance
getContents()
- 12. Xtext load(), save()
XtextResource
Textual Model
Serializer
Parser
Node Model
Ecore Model
Instance FragmentProvider
getContents() getURIFragment()
getEObject()
- 14. diagram
change
ResourceSet
XtextResource DiagramResource
- 21. Fi e l
od a
M xtu
le l
Te
ResourceSet ResourceSet
XtextResource XtextResource DiagramResource
- 22. Fi e l
od a
M xtu
le l
Te
ResourceSet ResourceSet
XtextResource XtextResource DiagramResource
- 23. Fi e l
od a
M xtu
le l
Te
ResourceSet ResourceSet
XtextResource XtextResource DiagramResource
- 24. Fi e l
od a
M xtu
le l
Te
ResourceSet ResourceSet
XtextResource save() XtextResource DiagramResource
- 25. Fi e l
od a
M xtu
le l
Te
ResourceSet ResourceSet
XtextResource reload() XtextResource DiagramResource
- 26. Fi e l
od a
M xtu
le l
Te
ResourceSet ResourceSet
XtextResource reload() XtextResource DiagramResource
- 27. Fi e l
od a
M xtu
le l
Te
ResourceSet ResourceSet
XtextResource XtextResource DiagramResource
- 66. grammar org.xtext.cg2009.Entities
with org.eclipse.xtext.common.Terminals
generate entities "http://www.xtext.org/cg2009/Entities"
Model :
{Model} (entities += Entity)*;
Entity returns Entity:
'entity' (name=ID)? ('extends' superType=[Entity])? '{'
(properties+=Property)*
'}';
Property:
SimpleProperty | ReferenceProperty;
SimpleProperty:
'property' (name=ID)? ':' type=('String'|'Number'|'Bool');
ReferenceProperty :
(name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
- 67. grammar org.xtext.cg2009.Entities
with org.eclipse.xtext.common.Terminals
Avoid empty
generate entities "http://www.xtext.org/cg2009/Entities"
models
Model :
{Model} (entities += Entity)*;
Entity returns Entity:
'entity' (name=ID)? ('extends' superType=[Entity])? '{'
(properties+=Property)*
'}';
Property:
SimpleProperty | ReferenceProperty;
SimpleProperty:
'property' (name=ID)? ':' type=('String'|'Number'|'Bool');
ReferenceProperty :
(name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
- 68. grammar org.xtext.cg2009.Entities
with org.eclipse.xtext.common.Terminals
Avoid empty
generate entities "http://www.xtext.org/cg2009/Entities"
models
Model :
{Model} (entities += Entity)*;
Entity returns Entity:
'entity' (name=ID)? ('extends' superType=[Entity])? '{'
(properties+=Property)*
'}';
Property:
Cover mandatory
SimpleProperty | ReferenceProperty;
properties in
SimpleProperty:
validation
'property' (name=ID)? ':' type=('String'|'Number'|'Bool');
ReferenceProperty :
(name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
- 69. grammar org.xtext.cg2009.Entities
with org.eclipse.xtext.common.Terminals
Avoid empty
generate entities "http://www.xtext.org/cg2009/Entities"
Carefully select
models
Model : containment or cross
{Model} (entities += Entity)*; references
Entity returns Entity:
'entity' (name=ID)? ('extends' superType=[Entity])? '{'
(properties+=Property)*
'}';
Property:
Cover mandatory
SimpleProperty | ReferenceProperty;
properties in
SimpleProperty:
validation
'property' (name=ID)? ':' type=('String'|'Number'|'Bool');
ReferenceProperty :
(name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
- 71. Xtext
Implement a
Formatter
- 72. Xtext
Implement a
Formatter
Implement a
FragmentProvider
- 73. Xtext
Implement a
Formatter
Implement a
FragmentProvider
Implement a
JavaValidator
- 76. GMF
Initialize
mandatory
properties
Avoid Phantom
Nodes
- 78. Glue Code
• Prevent conflicting modifications
• Navigate
• diagram ➜ text
• text ➜ diagram
(needs index)
• Popup editor
• Shipped as an Xtext example
- 79. Thanks for your
attention!
More information at
www.itemis.de
www.xtext.org
koehnlein.blogspot.com