Upload
others
View
15
Download
1
Embed Size (px)
Citation preview
Textual AND graphical modeling: Xtext editors within Sirius Diagrams
Niko Stotz, [email protected]
EclipseCon Europe, 2018-10-24
Goals
Xtext within Sirius Diagram
Xtext within Properties View
Configured in regular Odesign Model
Without Changes to Xtext
Demo
Config
Xtext Language Injectorpublic class ClassesLanguageInjector implementsIXtextLanguageInjector {
@Override
public Injector getInjector() {
return ClassesActivator.getInstance()
.getInjector(
ClassesActivator.COM_EXAMPLE_CLASSES
);
}
}
Language Injector Extension Point
Odesign Tool / Widget
Odesign Details
Features
Example Model as Textconstant MAX_ROOMS = 23
constant MAX_PEOPLE = 42
class House {
+ inhabitants: string[1..MAX_PEOPLE]
}
[[[
rooms are important
]]]
association rooms House --> Room [1..MAX_ROOMS]
[[[
A Room is not available!
Please try at another place.
]]]
class Room {
[[[
size doesn't really matter
]]]
# size: integer[2..2]
}
Example Model as Tree
Xtext Editing Model String Property
Text from Model Property
A Room is not available!
Please try at another place.
Document Completed from Config
dummy
Show Only Relevant Part to User
dummy
A Room is not available!
Please try at another place.
Xtext Editing Model Itself
Pre-selecting Feature Text
Editing Only Subset of Features
Editing Only Subset of Features
Editing Only Subset of Features
Editing Only Subset of Features
Editing Only Subset of Features
Editing Only Subset of Features
Editing Only Subset of Features
Different Grammar to Cut Middle Features
association rooms House --> Room [1..MAX_ROOMS]
Gotchas
•Editing identifying property
•Working with erroneous models
•Heuristics to find terminals adjacent to features
•Size of Xtext edit box
Extensive Documentation
• https://altran-mde.github.io/xtext-sirius-
integration.io/userguide/index.html
https://altran-mde.github.io/xtext-sirius-integration.io/userguide/index.html
Source Code & Samples on GitHub
• https://github.com/altran-
mde/xtext-sirius-integration
https://github.com/altran-mde/xtext-sirius-integration
Future: Contribute to Sirius?
Lifecycle of Ecore Model
File on
Disk
Text including
Whitespaces,
Comments
Ecore ModelSirius
DiagramLoad Parse
render
update
Lifecycle of Ecore Model
File on
Disk
Text including
Whitespaces,
Comments
Ecore ModelSirius
Diagram
Dirty
Ecore Model
Dirty Sirius
Diagram
Changed Text
including
Whitespaces,
Comments
Changed
File on
Disk
Load Parse
render
update
Graphical User Edit
render
updateSerializeSave
Lifecycle of Textual User Edit
File on DiskText including
Whitespaces,
Comments
Ecore Model Sirius Diagram
Dirty
Ecore Model
Dirty Sirius
Diagram
Changed Text
including
Whitespaces,
Comments
Changed File
on Disk
Load Parse
render
update
Graphical User Edit
render
updateSerializeSave
Clone
Lifecycle of Textual User Edit
File on DiskText including
Whitespaces,
Comments
Ecore Model Sirius Diagram
Dirty
Ecore Model
Dirty Sirius
Diagram
Changed Text
including
Whitespaces,
Comments
Changed File
on Disk
Load Parse
render
update
Graphical User Edit
render
updateSerializeSave
Textual
User Edit
Dirty Ecore
Model
Clone
Clone
Lifecycle of Textual User Edit
File on DiskText including
Whitespaces,
Comments
Ecore Model Sirius Diagram
Dirty
Ecore Model
Dirty Sirius
Diagram
Changed Text
including
Whitespaces,
Comments
Changed File
on Disk
Load Parse
render
update
Graphical User Edit
render
updateSerializeSave
Textual
User Edit
Dirty TextXtext editor with
Text PartDisplay Part
to User
Dirty Ecore
Model
Clone
Serial
ize
Clone
Lifecycle of Textual User Edit
File on DiskText including
Whitespaces,
Comments
Ecore Model Sirius Diagram
Dirty
Ecore Model
Dirty Sirius
Diagram
Changed Text
including
Whitespaces,
Comments
Changed File
on Disk
Load Parse
render
update
Graphical User Edit
render
updateSerializeSave
Textual
User Edit
Dirty TextXtext editor with
Text PartDisplay Part
to User
User Edits
Text
Xtext editor with
changed Text Part
Get complete
Text Changed Text
Dirty Ecore
Model
Clone
Serial
ize
Clone
Lifecycle of Textual User Edit
File on DiskText including
Whitespaces,
Comments
Ecore Model Sirius Diagram
Dirty
Ecore Model
Dirty Sirius
Diagram
Changed Text
including
Whitespaces,
Comments
Changed File
on Disk
Load Parse
render
update
Graphical User Edit
render
updateSerializeSave
Textual
User Edit
Dirty TextXtext editor with
Text PartDisplay Part
to User
User Edits
Text
Xtext editor with
changed Text Part
Get complete
Text Changed TextParse
Changed
Ecore Model
Clone
Changed
EObjects
Extract
Dirty Ecore
Model
Clone
Serial
ize
Clone
Lifecycle of Textual User Edit
File on DiskText including
Whitespaces,
Comments
Ecore Model Sirius Diagram
Dirty
Ecore Model
Dirty Sirius
Diagram
Changed Text
including
Whitespaces,
Comments
Changed File
on Disk
Load Parse
render
update
Graphical User Edit
render
updateSerializeSave
Textual
User Edit
Dirty TextXtext editor with
Text PartDisplay Part
to User
User Edits
Text
Xtext editor with
changed Text Part
Get complete
Text Changed TextParse
Changed
Ecore Model
Clone
Changed
EObjects
Extract
Dirty Ecore
Model
Clone
Serial
ize
Clone Replace
Original
EObjects
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Cloned Model
Textual
User Edit
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Cloned Model
Textual
User Edit
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
events
event1 [e .. pi]
constants
e 271
pi 314
Changed EObjects
User Edits
Text
events
event1 [e .. pi]constants
e 271
pi 314
Changed Model
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Cloned Model
Textual
User Edit
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
events
event1 [e .. pi]
constants
e 271
pi 314
Changed EObjects
User Edits
Text
events
event1 [e .. pi]constants
e 271
pi 314
Changed Model
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Cloned Model
Textual
User Edit
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
events
event1 [e .. pi]
constants
e 271
pi 314
Changed EObjects
User Edits
Text
events
event1 [e .. pi]constants
e 271
pi 314
Changed Model
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Cloned Model
Textual
User Edit
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
events
event1 [e .. pi]
constants
e 271
pi 314
Changed EObjects
User Edits
Text
Proxify
events
event1 [e .. pi]
constants
e 271
pi 314
Proxified
events
event1 [e .. pi]constants
e 271
pi 314
Changed Model
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Cloned Model
Textual
User Edit
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
events
event1 [e .. pi]
constants
e 271
pi 314
Changed EObjects
User Edits
Text
Proxify
events
event1 [e .. pi]
constants
e 271
pi 314
Proxified
events
event1 [e .. pi]
constants
e 271
pi 314
Updated ModelReplace
Original &
Resolve
Proxies
events
event1 [e .. pi]constants
e 271
pi 314
Changed Model
References from Edited Model Part
events
event1 [10 .. pi]
constants
e 271
pi 314
Cloned Model
Textual
User Edit
events
event1 [10 .. pi]
constants
e 271
pi 314
Original Model
events
event1 [e .. pi]
constants
e 271
pi 314
Changed EObjects
User Edits
Text
Proxify
events
event1 [e .. pi]
constants
e 271
pi 314
Proxified
events
event1 [e .. pi]
constants
e 271
pi 314
Updated ModelReplace
Original &
Resolve
Proxies
identical
events
event1 [e .. pi]constants
e 271
pi 314
Changed Model