SlideShare a Scribd company logo
Setting Up the
    Development Workbench
•   Copy both to your local disk:

    •   the right archive for your platform

    •   the folder material

•   Hand the USB stick to the attendee next to you.

•   Unzip the archive and start the included Eclipse with a
    fresh workspace.

•   NOTE: On Windows systems, make sure you pick a short
    directory name and everything gets extracted without
    errors.
meets
    Developing an editor
for the e4 workbench model
Eclipse meets e4
Moritz Eysholdt                   Jan Köhnlein



                  Heiko Behrens
Moritz Eysholdt                   Jan Köhnlein



                  Heiko Behrens
Moritz Eysholdt                   Jan Köhnlein



                  Heiko Behrens
Eclipse meets e4
Eclipse meets e4
• Simplify programming
• Simplify programming
• Declarative styling / UI markup
• Simplify programming
• Declarative styling / UI markup
• Uniform, pervasive platform
• Simplify programming
• Declarative styling / UI markup
• Uniform, pervasive platform
• Diversity of contributors
• Simplify programming
• Declarative styling / UI markup
• Uniform, pervasive platform
• Diversity of contributors
• Backward compatibility
Eclipse meets e4
Eclipse meets e4
Run the Demo
• Import the Contacts Demo application as a
  project
• Try to run the Contacts Demo product
  (fails, but creates a run config)
• Run again by means of the run configuration
Workbench Modeling Tools
Workbench Modeling Tools




 e4 Visual Designer
Workbench Modeling Tools




 e4 Visual Designer   Generic Ecore
Eclipse meets e4
Eclipse meets e4
G
 ra
      m
       m
           ar
Reference




                    ar
 Model




                 m
                m
            ra
            G
Reference




                     ar
 Model




                   m
                 m
              ra
             G
            Generator
Reference




                                  ar
   Model




                                m
                              m
                           ra
                          G
                         Generator



               Runtime
  Superclass




  Subclass     Class




ecore meta model       LL(*) Parser    editor
Runtime
  Superclass




  Subclass     Class




ecore meta model       LL(*) Parser   editor
Runtime
  Superclass




  Subclass     Class




ecore meta model       LL(*) Parser   editor




                                       Model
                                       Model
                                        Model
Runtime
  Superclass




  Subclass     Class




ecore meta model       LL(*) Parser   editor




                                       Model
                                       Model
                                        Model
Runtime
  Superclass




  Subclass     Class




ecore meta model       LL(*) Parser   editor




                              AST
                                       Model
                                       Model
                                        Model
Runtime
  Superclass




  Subclass     Class




ecore meta model       LL(*) Parser   editor




                              AST
                                       Model
                                       Model
                                        Model
Runtime
   Superclass




   Subclass     Class




ecore meta model        LL(*) Parser   editor




Interpreter                    AST
                                        Model
                                        Model
     Code                                Model
   Generator
Runtime
   Superclass




   Subclass     Class




ecore meta model        LL(*) Parser   editor




Interpreter                    AST
                                        Model
                                        Model
     Code                                Model
   Generator
Xtext meets e4
UI Workbench Model
Eclipse meets e4
Application
  Window
   ToolBar
      Parts

     Menu


  Handlers

Keybindings

Commands
Application
  Window
   ToolBar
      Parts

     Menu


  Handlers

Keybindings

Commands
Application
  Window
   ToolBar
      Parts

     Menu


  Handlers

Keybindings

Commands
Application
  Window
   ToolBar
      Parts

     Menu


  Handlers

Keybindings

Commands
Application
  Window
   ToolBar
      Parts

     Menu


  Handlers

Keybindings

Commands
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"/>
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"/>
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"/>
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
            command="contacts.darkTheme"/>
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
<commands xmi:id="contacts.exit" id="contacts.exit"
          commandName="Exit" description=""/>
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
          commandName="Dark Theme"/>
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
          commandName="Bright Theme" description=""/>
<commands xmi:id="contacts.save" id="contacts.save"
          commandName="Save" description=""/>
<commands xmi:id="contacts.delete" id="contacts.delete"
          commandName="Delete" description=""/>
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"/>
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"/>
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"/>
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
            command="contacts.darkTheme"/>
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                                                     Remove
<commands xmi:id="contacts.exit" id="contacts.exit"
          commandName="Exit" description=""/>                      XML brackets
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
          commandName="Dark Theme"/>
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
          commandName="Bright Theme" description=""/>
<commands xmi:id="contacts.save" id="contacts.save"
          commandName="Save" description=""/>
<commands xmi:id="contacts.delete" id="contacts.delete"
          commandName="Delete" description=""/>
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"
          command="contacts.exit"/>
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"
          command="contacts.save"/>
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"
          command="contacts.delete"/>
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
 bindings
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands
          commandName="Exit" description=""/>
                             description=""
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands
          commandName="Dark Theme"/>
                            Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands
          commandName="Bright Theme" description=""/>
                                      description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands
          commandName="Save" description=""/>
                             description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands
          commandName="Delete" description=""/>
                               description=""
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"
          command="contacts.exit"/>
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"
          command="contacts.save"/>
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"
          command="contacts.delete"/>
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings

                                                                         Remove
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
 bindings
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands
          commandName="Exit" description=""/>
                             description=""                              UUIDs
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands
          commandName="Dark Theme"/>
                            Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands
          commandName="Bright Theme" description=""/>
                                      description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands
          commandName="Save" description=""/>
                             description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands
          commandName="Delete" description=""/>
                               description=""
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"
          command="contacts.exit"/>
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"
          command="contacts.save"/>
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"
          command="contacts.delete"/>
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
          command="contacts.darkTheme"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
 bindings
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands
          commandName="Exit" description=""/>
                             description=""
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands
          commandName="Dark Theme"/>
                            Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands
          commandName="Bright Theme" description=""/>
                                      description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands
          commandName="Save" description=""/>
                             description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands
          commandName="Delete" description=""/>
                               description=""
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"
          command="contacts.exit"/>
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"
          command="contacts.save"/>
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"
          command="contacts.delete"/>
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
          command="contacts.darkTheme"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings

                                                                    Remove
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
 bindings
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands
          commandName="Exit" description=""/>
                             description=""                    reference markup
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands
          commandName="Dark Theme"/>
                            Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands
          commandName="Bright Theme" description=""/>
                                      description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands
          commandName="Save" description=""/>
                             description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands
          commandName="Delete" description=""/>
                               description=""
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"
          command="contacts.exit"/>
                   contacts.exit
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"
          command="contacts.save"/>
                   contacts.save
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"
          command="contacts.delete"/>
                   contacts.delete
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
          command="contacts.darkTheme"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
                   contacts.darkTheme
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
                   contacts.brightTheme
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings                                               "CTRL+D"
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
                                                 contacts.darkTheme
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings                                               "CTRL+L"
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
                                                 contacts.brightTheme
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings                                               "CTRL+S"
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
                                                 contacts.save
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings                                               "Delete"
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
                                                 contacts.delete
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
 bindings                                               "CTRL+5
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
                                                 contacts.exit
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands                             contacts.exit
          commandName="Exit" description=""/>
                      "Exit" description=""
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands                                  contacts.darkTheme
          commandName="Dark Theme"/>
                      "Dark Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands                                    contacts.brightTheme
          commandName="Bright Theme" description=""/>
                      "Bright         description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands                             contacts.save
          commandName="Save" description=""/>
                      "Save" description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands                               contacts.delete
          commandName="Delete" description=""/>
                      "Delete" description=""
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
          command="contacts.exit"
          command="contacts.exit"/>
                   contacts.exit
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
          command="contacts.save"
          command="contacts.save"/>
                   contacts.save
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
          command="contacts.delete"
          command="contacts.delete"/>
                   contacts.delete
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
          command="contacts.darkTheme"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
                   contacts.darkTheme
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
                   contacts.brightTheme
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings                                               "CTRL+D"
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
                                                 contacts.darkTheme
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings                                               "CTRL+L"
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
                                                 contacts.brightTheme
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings                                               "CTRL+S"
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
                                                 contacts.save
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings                                               "Delete"

 bindings
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
                                                 contacts.delete
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
                                                        "CTRL+5
                                                                      Simplify
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
                                                 contacts.exit
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands                             contacts.exit
          commandName="Exit" description=""/>
                      "Exit" description=""
                                                                  Java references
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands                                  contacts.darkTheme
          commandName="Dark Theme"/>
                      "Dark Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands                                    contacts.brightTheme
          commandName="Bright Theme" description=""/>
                      "Bright         description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands                             contacts.save
          commandName="Save" description=""/>
                      "Save" description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands                               contacts.delete
          commandName="Delete" description=""/>
                      "Delete" description=""
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
                                                               org.eclipse...ExitHandler
          command="contacts.exit"
          command="contacts.exit"/>
                   contacts.exit
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
                                                               org.eclipse...SaveHandler
          command="contacts.save"
          command="contacts.save"/>
                   contacts.save
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
                                                               org.eclipse...DeleteContactHandler
          command="contacts.delete"
          command="contacts.delete"/>
                   contacts.delete
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
                                                               org.eclipse...DarkThemeHandler
          command="contacts.darkTheme"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
                   contacts.darkTheme
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
                                                               org.eclipse...BrightThemeHandler
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
                   contacts.brightTheme
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings                                               "CTRL+D"
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
                                                 contacts.darkTheme
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings                                               "CTRL+L"
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
                                                 contacts.brightTheme
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings                                               "CTRL+S"
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
                                                 contacts.save
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings                                               "Delete"
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
                                                 contacts.delete
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
 bindings                                               "CTRL+5
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
                                                 contacts.exit
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands                             contacts.exit
          commandName="Exit" description=""/>
                      "Exit" description=""
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands                                  contacts.darkTheme
          commandName="Dark Theme"/>
                      "Dark Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands                                    contacts.brightTheme
          commandName="Bright Theme" description=""/>
                      "Bright         description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands                             contacts.save
          commandName="Save" description=""/>
                      "Save" description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands                               contacts.delete
          commandName="Delete" description=""/>
                      "Delete" description=""
<handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler"
                                                               org.eclipse...ExitHandler
          command="contacts.exit"
          command="contacts.exit"/>
                   contacts.exit
<handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler"
                                                               org.eclipse...SaveHandler
          command="contacts.save"
          command="contacts.save"/>
                   contacts.save
<handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler"
                                                               org.eclipse...DeleteContactHandler
          command="contacts.delete"
          command="contacts.delete"/>
                   contacts.delete
<handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler"
                                                               org.eclipse...DarkThemeHandler
          command="contacts.darkTheme"
            command="contacts.darkTheme"
            command="contacts.darkTheme"/>
                   contacts.darkTheme
<handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g"
 handlers
          URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler"
                                                               org.eclipse...BrightThemeHandler
          command="contacts.brightTheme"
          command="contacts.brightTheme"/>
                   contacts.brightTheme
<bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D"
 bindings                                               "CTRL+D"
          id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/>
                                        command="contacts.darkTheme"
                                                 contacts.darkTheme
<bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L"
 bindings                                               "CTRL+L"
          id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/>
                                        command="contacts.brightTheme"
                                                 contacts.brightTheme
<bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S"
 bindings                                               "CTRL+S"
          id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/>
                                        command="contacts.save"
                                                 contacts.save
<bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete"
 bindings                                               "Delete"

 bindings
          id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/>
                                        command="contacts.delete"
                                                 contacts.delete
<bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X"
                                                        "CTRL+5
                                                                          Make it
          id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/>
                                        command="contacts.exit"
                                                 contacts.exit
<commands xmi:id="contacts.exit" id="contacts.exit"
 commands                             contacts.exit
          commandName="Exit" description=""/>
                      "Exit" description=""
                                                                        a language
<commands xmi:id="contacts.darkTheme" id="contacts.darkTheme"
 commands                                  contacts.darkTheme
          commandName="Dark Theme"/>
                      "Dark Theme"
<commands xmi:id="contacts.brightTheme" id="contacts.brightTheme"
 commands                                    contacts.brightTheme
          commandName="Bright Theme" description=""/>
                      "Bright         description=""
<commands xmi:id="contacts.save" id="contacts.save"
 commands                             contacts.save
          commandName="Save" description=""/>
                      "Save" description=""
<commands xmi:id="contacts.delete" id="contacts.delete"
 commands                               contacts.delete
          commandName="Delete" description=""/>
                      "Delete" description=""
handler   org.eclipse.e4.demo.contacts.handlers.ExitHandler
    for   contacts.exit
handler   org.eclipse.e4.demo.contacts.handlers.SaveHandler
    for   contacts.save
handler   org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler
    for   contacts.darkTheme
handler   org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler
    for   contacts.brightTheme
handler   org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler
    for   contacts.delete

bind   "CTRL+D" to contacts.darkTheme
bind   "CTRL+L" to contacts.brightTheme
bind   "CTRL+S" to contacts.save
bind   "CTRL+5 X" to contacts.exit
bind   "Delete" to contacts.delete

command   contacts.exit "Exit"
command   contacts.darkTheme "Dark Theme"
command   contacts.brightTheme "Bright Theme"
command   contacts.save "Save"
command   contacts.delete "Delete"
handler   org.eclipse.e4.demo.contacts.handlers.ExitHandler
    for   contacts.exit
handler   org.eclipse.e4.demo.contacts.handlers.SaveHandler
    for   contacts.save
handler   org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler
    for   contacts.darkTheme
handler   org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler
    for   contacts.brightTheme
handler   org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler
    for   contacts.delete

bind   "CTRL+D" to contacts.darkTheme
bind   "CTRL+L" to contacts.brightTheme
bind   "CTRL+S" to contacts.save
bind   "CTRL+5 X" to contacts.exit
bind   "Delete" to contacts.delete                            Add
command   contacts.exit "Exit"                             namespace
command   contacts.darkTheme "Dark Theme"
command   contacts.brightTheme "Bright Theme"
command   contacts.save "Save"
command   contacts.delete "Delete"
application contacts
handler org.eclipse.e4.demo.contacts.handlers.ExitHandler
handler contacts.exit
    for org.eclipse.e4.demo.contacts.handlers.ExitHandler
handler org.eclipse.e4.demo.contacts.handlers.SaveHandler
    for          exit
handler contacts.save
    for org.eclipse.e4.demo.contacts.handlers.SaveHandler
handler org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler
    for          save
handler contacts.darkTheme
    for org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler
handler org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler
    for          darkTheme
handler contacts.brightTheme
    for org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler
handler org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler
    for          brightTheme
handler contacts.delete
    for org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler
    for          delete
bind "CTRL+D" to contacts.darkTheme
bind "CTRL+L" to contacts.brightTheme
     "CTRL+D"              darkTheme
bind "CTRL+S" to contacts.save
     "CTRL+L"              brightTheme
bind "CTRL+5 X" to contacts.ex
     "CTRL+S" to           save
bind "CTRL+5 X" to           exit
bind "Delete" to
it                         delete

command   contacts.exit "Exit"
                   exit
command   contacts.darkTheme "Dark Theme"
                   darkTheme
command   contacts.brightTheme "Bright Theme"
                   brightTheme
command   contacts.save "Save"
                   save
command   contacts.delete "Delete"
                   delete
Exercise:
   A Grammar for Commands
application contacts

handler   org.eclipse.e4.demo.contacts.handlers.ExitHandler for exit
handler   org.eclipse.e4.demo.contacts.handlers.SaveHandler for save
handler   org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler for darkTheme
handler   org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler for brightTheme
handler   org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler for delete

bind   "CTRL+D" to darkTheme
bind   "CTRL+L" to brightTheme
bind   "CTRL+S" to save
bind   "CTRL+5 X" to exit
bind   "Delete" to delete

command   exit "Exit"
command   darkTheme "Dark Theme"
command   brightTheme "Bright Theme"
command   save "Save"
command   delete "Delete"
<mainMenu xmi:id="_SeXUDu8EEd6FC9cDb6iV7g" id="_SeXUDu8EEd6FC9cDb6iV7g">
   <children xsi:type="application:MenuItem"
             xmi:id="_SeXUD-8EEd6FC9cDb6iV7g" id="_SeXUD-8EEd6FC9cDb6iV7g"
             label="File">
      <children xsi:type="application:HandledMenuItem"
                xmi:id="_SeXUEO8EEd6FC9cDb6iV7g" id="_SeXUEO8EEd6FC9cDb6iV7g"
                label="Save"
                iconURI="platform:/plugin/org.eclipse.e4.demo.contacts/icons/silk/disk.png"
                command="contacts.save"/>
      <children xsi:type="application:HandledMenuItem"
                xmi:id="_SeXUEe8EEd6FC9cDb6iV7g" id="_SeXUEe8EEd6FC9cDb6iV7g"
                label="Delete"
                iconURI="platform:/plugin/org.eclipse.e4.demo.contacts/icons/silk/user_delete.png"
                command="contacts.delete"/>
      <children xsi:type="application:DirectMenuItem"
                xmi:id="_SeXUEu8EEd6FC9cDb6iV7g" id="_SeXUEu8EEd6FC9cDb6iV7g"
                URI="platform:/plugin/org.eclipse.e4.demo.contactsorg.eclipse.e4.demo.contacts.h...
                label="Direct Exit"/>
      <children xsi:type="application:HandledMenuItem"
                xmi:id="_SeXUE-8EEd6FC9cDb6iV7g" id="_SeXUE-8EEd6FC9cDb6iV7g"
                label="Exit"
                command="contacts.exit"/>
   </children>
   <children xsi:type="application:MenuItem"
             xmi:id="_SeXUFO8EEd6FC9cDb6iV7g" id="_SeXUFO8EEd6FC9cDb6iV7g"
             label="Theme">
      <children xsi:type="application:HandledMenuItem"
                xmi:id="_SeXUFe8EEd6FC9cDb6iV7g" id="_SeXUFe8EEd6FC9cDb6iV7g"
                label="Dark Theme"
                command="contacts.darkTheme"/>
      <children xsi:type="application:HandledMenuItem"
                xmi:id="_SeXUFu8EEd6FC9cDb6iV7g" id="_SeXUFu8EEd6FC9cDb6iV7g"
                label="Bright Theme"
                command="contacts.brightTheme"/>
   </children>
</mainMenu>
Menu {
	 "File" {
	 	 "Save" contacts.save icon="icons/silk/disk.png"
	 	 "Delete" contacts.delete icon="icons/silk/user_delete.png"
	 	 "Direct Exit" handler=org.eclipse.e4.demo.contacts.handlers.ExitHandler
	 	 "Exit" contacts.exit
	 }
	 "Theme" {
	 	 "Dark Theme" contacts.darkTheme
	 	 "Bright Theme" contacts.brightTheme
	 }
}
Exercise:
     Adding the menu section
application contacts

Menu {
	 "File" {
	 	 "Save" contacts.save icon="icons/silk/disk.png"
	 	 "Delete" contacts.delete icon="icons/ silk/user_delete.png"
	 	 "Direct Exit" handler=org.eclipse.e4.demo.contacts.handlers.ExitHandler
	 	 "Exit" contacts.exit
	 }
	 "Theme" {
	 	 "Dark Theme" contacts.darkTheme
	 	 "Bright Theme" contacts.brightTheme
	 }
}

command exit "Exit"
...
Names and Scopes
Cross References
...
<children xsi:type="application:PerspectiveStack"
           xmi:id="_NGiG4DGjEd-zge_czUaGVQ"


                                                               UUIDs
           id="_NGiG4DGjEd-zge_czUaGVQ"
           selectedElement="_NGjVADGjEd-zge_czUaGVQ">
    <children xsi:type="application:Perspective"
              xmi:id="_NGjVADGjEd-zge_czUaGVQ"
              id="_NGjVADGjEd-zge_czUaGVQ">
...




                                            PerspectiveStack :myDslPerspectiveStack
                                                selectedElement=myDslPerspective {

                      Names                 ...

                                                  Perspective :myDslPerspective
                                            ...
Qualified Names
 application contacts
1 command save "Save"




       Default
QualifiedNameProvider
Qualified Names
 application contacts
1 command save "Save"



             qualifiedName(   1   )

       Default
QualifiedNameProvider
Qualified Names
 application contacts
1 command save "Save"   EAttribute „name“

             qualifiedName(   1   )

       Default
QualifiedNameProvider
Qualified Names
 application contacts
1 command save "Save"   EAttribute „name“

             qualifiedName(   1   )

       Default
QualifiedNameProvider
Qualified Names
 application contacts
1 command save "Save"



             qualifiedName(   1   )

       Default                       save
QualifiedNameProvider
Qualified Names
 application contacts   EAttribute „name“
1 command save "Save"



             qualifiedName(   1   )

       Default                       save
QualifiedNameProvider
Qualified Names
 application contacts   EAttribute „name“
1 command save "Save"



             qualifiedName(   1   )

       Default                       save
QualifiedNameProvider
Qualified Names
 application contacts
1 command save "Save"



             qualifiedName(   1   )

       Default               contacts. save
QualifiedNameProvider
Objects can have multiple
different names depending
      on the context
application contacts 1
2 command save "Save"
                                   Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit
application contacts 1
2 command save "Save"
                                   Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit
application contacts 1
2 command save "Save"
                                   Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope
    name       EObject
  „contacts“     1
    „save“       2
    „exit“       3
application contacts 1
2 command save "Save"
                                   Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope
    name       EObject
  „contacts“     1
    „save“       2
    „exit“       3
application contacts 1
2 command save "Save"
                                   Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope
    name       EObject
  „contacts“     1
    „save“       2
    „exit“       3
application contacts 1
2 command save "Save"
                                   Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope
    name       EObject
  „contacts“     1
    „save“       2
    „exit“       3
application contacts 1
2 command save "Save"
                                   Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope
    name       EObject
  „contacts“     1
    „save“       2
    „exit“       3
application contacts 1
2 command save "Save"
                                        Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope
    name       EObject
  „contacts“     1         outerScope
    „save“       2
    „exit“       3
application contacts 1
2 command save "Save"
                                                Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope                             File Scope
    name       EObject                      name          EObject
  „contacts“     1         outerScope     „contacts“        1
    „save“       2                      „contacts.save“     2
    „exit“       3                      „contacts.exit“     3
application contacts 1
2 command save "Save"
                                                Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope                             File Scope
    name       EObject                      name          EObject
  „contacts“     1         outerScope     „contacts“        1
    „save“       2                      „contacts.save“     2
    „exit“       3                      „contacts.exit“     3
application contacts 1
2 command save "Save"
                                                Scopes
  command exit "Exit" 3
  bind "CTRL+S" to save
  bind "CTRL+X" to contacts.exit




 Application Scope                             File Scope
    name       EObject                      name          EObject
  „contacts“     1         outerScope     „contacts“        1
    „save“       2                      „contacts.save“     2
    „exit“       3                      „contacts.exit“     3
Eclipse meets e4
...
GlobalScope
                   name   EObject
      outerScope
...                       all visible
                   FQNs
                          elements
GlobalScope
                      name   EObject
         outerScope
   ...                       all visible
                      FQNs
                             elements




DefaultGlobalScopeProvider
GlobalScope
                      name   EObject
         outerScope
   ...                       all visible
                      FQNs
                             elements




DefaultGlobalScopeProvider
 • all in workspace
GlobalScope
                       name       EObject
         outerScope
   ...                            all visible
                       FQNs
                                  elements




DefaultGlobalScopeProvider
 • all in workspace
 • backed by an Eclipse builder
GlobalScope
                       name       EObject
         outerScope
   ...                            all visible
                       FQNs
                                  elements




DefaultGlobalScopeProvider
 • all in workspace
 • backed by an Eclipse builder
ResourceSetGlobalScopeProvider
GlobalScope
                        name      EObject
         outerScope
   ...                            all visible
                        FQNs
                                  elements




DefaultGlobalScopeProvider
 • all in workspace
 • backed by an Eclipse builder
ResourceSetGlobalScopeProvider
 • all in ResourceSet
Namespace Imports
           Global
    name           EObject
„java.util.List“     1
„java.util.Set“      2
„java.util.Map“      3
Namespace Imports
           Global
    name           EObject
„java.util.List“     1
„java.util.Set“      2
„java.util.Map“      3



                         Import:
    Grammar              	 'import' importedNamespace=ImportFQN;
Namespace Imports
           Global
    name           EObject
„java.util.List“     1
„java.util.Set“      2
„java.util.Map“      3



                         Import:
    Grammar              	 'import' importedNamespace=ImportFQN;


           Model         import java.util.*
Namespace Imports
           Global                        ImportNamespaceAware
    name           EObject                      name      EObject
„java.util.List“     1                         „List“       1
                               outerScope
„java.util.Set“      2                          „Set“       2
„java.util.Map“      3                         „Map“        3



                         Import:
    Grammar              	 'import' importedNamespace=ImportFQN;


           Model         import java.util.*
Exercise: Java Types
application contacts

import org.eclipse.e4.demo.contacts.handlers.*;

command contacts.exit "Exit"
handler ExitHandler for contacts.exit
bind "CTRL+5 X" to contacts.exit

command contacts.darkTheme "Dark Theme"
  handledBy DarkThemeHandler
  key "CTRL+D"
command contacts.brightTheme "Bright Theme"
  handledBy BrightThemeHandler
  key "CTRL+L"
command contacts.save "Save"
  handledBy SaveHandler
  key "CTRL+S"
command contacts.delete "Delete"
  handledBy DeleteContactHandler
  key "Delete"
Dependency Injection
Dependency Injection

• Based on Google Guice
Dependency Injection

• Based on Google Guice
• Pervasively used in Xtext
Dependency Injection

• Based on Google Guice
• Pervasively used in Xtext
• Invisible for clients (ex. Annotations)
Dependency Injection

• Based on Google Guice
• Pervasively used in Xtext
• Invisible for clients (ex. Annotations)
• Language specific and global injectors
Dependency Injection

• Based on Google Guice
• Pervasively used in Xtext
• Invisible for clients (ex. Annotations)
• Language specific and global injectors
• Makes overriding defaults easy
DI: Client Side
@Inject
private ISomeService myService;




         @Inject
         public MyClass(Provider<ISomeOtherService> provider) {
         	 ISomeOtherService firstInstance = provider.get();
         	 ISomeOtherService secondInstance = provider.get();
         }



                           @Inject@ContentProposalLabelProvider
                           private ILabelProvider labelProvider;
DI: Configuration
@ImplementedBy(MyServiceImpl.class)
public class IServiceInterface {
  ...




       public class MyDeclarativeModule extends AbstractModule {
          public Class<? extends IQualifiedNameProvider>
             bindIQualifiedNameProvider() {
                return MyQualifiedNameProvider.class;
          }
          ...




                  @Singleton
                  public class MySingletonService extends AbstractSomeService {
                    ...
DI: Language Modules
      MyLanguage                                 MyLanguage
     RuntimeModule
 bindIServiceInterface()    Manual                UiModule
                                            bindIServiceInterface()
 ...                                        ...


  MyLanguageAbstract                         MyLanguageAbstract
     RuntimeModule
 bindIServiceInterface()   Generated              UiModule
                                            bindIServiceInterface()
 ...                                        ...


        Default                                    Default
     RuntimeModule
 bindIServiceInterface()    Defaults              UiModule
                                            bindIServiceInterface()
 ...                                        ...




                           AbstractModule
DI: Equinox
<plugin>
  <extension point="org.eclipse.ui.editors">
     <editor class=
  "mydsl.MyDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
         contributorClass=
           "org.eclipse.ui.editors.text.TextEditorActionContributor"
         default="true"
         extensions="mydsl"
         id="mydsl.MyDsl"
         name="MyDsl Editor">
     </editor>
  </extension>
...
Exercise:Validation
Annotations
@Fix(DomainmodelJavaValidator.INVALID_TYPE_NAME)
public void fixTypeName(final Issue issue,
                        IssueResolutionAcceptor acceptor) {
    acceptor.accept(issue, "Capitalize name", ...

                                                                    Naming
                                                                  Conventions
                                          public class MyScopeProvider
                                            extends AbstractDeclarativeScopeProvider {
                                          	
                                            public IScope scope_Handler_command(
                                                 final Handler h, EReference rRef) {
Polymorphic                                  ...

 Dispatch
public class MyLabelProvider


                                              Declarative
  extends DefaultLabelProvider {
    public String image(Command c) {
	 	 return “cmd.png“;
    }



	
     public String image(Handler c) {
    	 ...                                        APIs
Eclipse meets e4
More features !
Outlook

• Improve Xtext support for
 • Ecore generics
• Partial textual models
 • EP org.eclipse.e4.workbench.model
Questions?

   find out more at
 http://www.xtext.org
 http://eclipse.org/e4

More Related Content

ODP
Scala Reflection & Runtime MetaProgramming
PDF
Java, what's next?
PPTX
Advance JS and oop
PDF
Introduction to Swift 2
PDF
Working with Cocoa and Objective-C
PPTX
TypeScript
PPTX
All You Need to Know About Type Script
PDF
JavaScript Programming
Scala Reflection & Runtime MetaProgramming
Java, what's next?
Advance JS and oop
Introduction to Swift 2
Working with Cocoa and Objective-C
TypeScript
All You Need to Know About Type Script
JavaScript Programming

What's hot (20)

PPTX
Type script - advanced usage and practices
KEY
Código Saudável => Programador Feliz - Rs on Rails 2010
PPTX
TypeScript: Basic Features and Compilation Guide
PDF
iOS overview
PPT
Javascript
PDF
Introduction to Swift
PDF
iOS Programming Intro
PPTX
An Overview of Project Jigsaw
PDF
Louis Loizides iOS Programming Introduction
PDF
TypeScript: coding JavaScript without the pain
PDF
O que há de novo no Rails 3 - Ruby on Rails no Mundo Real - 23may2010
PDF
Thor - RSLA - 13oct2009
PDF
Scala reflection
PPTX
Introduction to JavaScript Basics.
PPT
Unit 7 Java
PDF
C# for beginners
DOC
EMF Tips n Tricks
PDF
Mastering your Eclipse IDE - Java tooling, Tips & Tricks - EclipseCon Europe ...
PDF
Mastering your Eclipse IDE - Java tooling, Tips & Tricks!
PPTX
Building maintainable javascript applications
Type script - advanced usage and practices
Código Saudável => Programador Feliz - Rs on Rails 2010
TypeScript: Basic Features and Compilation Guide
iOS overview
Javascript
Introduction to Swift
iOS Programming Intro
An Overview of Project Jigsaw
Louis Loizides iOS Programming Introduction
TypeScript: coding JavaScript without the pain
O que há de novo no Rails 3 - Ruby on Rails no Mundo Real - 23may2010
Thor - RSLA - 13oct2009
Scala reflection
Introduction to JavaScript Basics.
Unit 7 Java
C# for beginners
EMF Tips n Tricks
Mastering your Eclipse IDE - Java tooling, Tips & Tricks - EclipseCon Europe ...
Mastering your Eclipse IDE - Java tooling, Tips & Tricks!
Building maintainable javascript applications
Ad

Similar to Eclipse meets e4 (20)

PDF
Xtext Webinar
PDF
Xtext Webinar
PDF
Overcoming The Impedance Mismatch Between Source Code And Architecture
KEY
Codegeneration Goodies
PDF
oAW Presentation
KEY
Domain Specific Languages With Eclipse Modeling
PPTX
Eclipse For Dummies
KEY
Domänenspezifische Sprachen mit Xtext
PDF
Building DSLs with Xtext - Eclipse Modeling Day 2009
PPT
CG2010 Tailored Code Generators
KEY
Combining Text and Graphics in Eclipse-based Modeling Tools
ODP
Iterative and-agile-codegen
PDF
You need to extend your models? EMF Facet vs. EMF Profiles
PDF
EMF Facet vs. EMF Profiles - EclipseCon North America 2012, Modeling Symposium
ODP
Transforming a 15 year old model-driven application from C++ to Java
PDF
Modelling and code generation in .NET at Icinetic
PDF
Modelling and code generation in .NET at Icinetic
PDF
Model driven software engineering in practice book - Chapter 9 - Model to tex...
PDF
Jazoon 2010 - Building DSLs with Eclipse
PDF
Building DSLs With Eclipse
Xtext Webinar
Xtext Webinar
Overcoming The Impedance Mismatch Between Source Code And Architecture
Codegeneration Goodies
oAW Presentation
Domain Specific Languages With Eclipse Modeling
Eclipse For Dummies
Domänenspezifische Sprachen mit Xtext
Building DSLs with Xtext - Eclipse Modeling Day 2009
CG2010 Tailored Code Generators
Combining Text and Graphics in Eclipse-based Modeling Tools
Iterative and-agile-codegen
You need to extend your models? EMF Facet vs. EMF Profiles
EMF Facet vs. EMF Profiles - EclipseCon North America 2012, Modeling Symposium
Transforming a 15 year old model-driven application from C++ to Java
Modelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at Icinetic
Model driven software engineering in practice book - Chapter 9 - Model to tex...
Jazoon 2010 - Building DSLs with Eclipse
Building DSLs With Eclipse
Ad

More from Dr. Jan Köhnlein (20)

PDF
The Eclipse Layout Kernel sirius con 2017
PDF
A New Approach Towards Web-based IDEs
PDF
Responsiveness
PDF
Getting rid of backtracking
PDF
Graphical Views For Xtext With FXDiagram
PDF
PDF
Diagrams, Xtext and UX
PDF
PDF
Xtext, diagrams and ux
PDF
Diagram Editors - The FXed Generation
PDF
Code Generation With Xtend
PDF
Graphical Views For Xtext
PDF
The Xtext Grammar Language
PDF
Eclipse Diagram Editors - An Endangered Species
PDF
Java DSLs with Xtext
PDF
DSLs for Java Developers
PDF
A fresh look at graphical editing
PDF
A fresh look at graphical editing
KEY
A fresh look at graphical editing
KEY
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
The Eclipse Layout Kernel sirius con 2017
A New Approach Towards Web-based IDEs
Responsiveness
Getting rid of backtracking
Graphical Views For Xtext With FXDiagram
Diagrams, Xtext and UX
Xtext, diagrams and ux
Diagram Editors - The FXed Generation
Code Generation With Xtend
Graphical Views For Xtext
The Xtext Grammar Language
Eclipse Diagram Editors - An Endangered Species
Java DSLs with Xtext
DSLs for Java Developers
A fresh look at graphical editing
A fresh look at graphical editing
A fresh look at graphical editing
Pragmatic DSL Design with Xtext, Xbase and Xtend 2

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
WOOl fibre morphology and structure.pdf for textiles
PDF
Enhancing emotion recognition model for a student engagement use case through...
PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PDF
A novel scalable deep ensemble learning framework for big data classification...
PDF
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PPT
Module 1.ppt Iot fundamentals and Architecture
PPTX
Tartificialntelligence_presentation.pptx
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
Developing a website for English-speaking practice to English as a foreign la...
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PPTX
cloud_computing_Infrastucture_as_cloud_p
PPTX
OMC Textile Division Presentation 2021.pptx
PPTX
O2C Customer Invoices to Receipt V15A.pptx
PDF
Hybrid model detection and classification of lung cancer
PDF
August Patch Tuesday
NewMind AI Weekly Chronicles - August'25-Week II
DP Operators-handbook-extract for the Mautical Institute
WOOl fibre morphology and structure.pdf for textiles
Enhancing emotion recognition model for a student engagement use case through...
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
A novel scalable deep ensemble learning framework for big data classification...
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Group 1 Presentation -Planning and Decision Making .pptx
Programs and apps: productivity, graphics, security and other tools
Module 1.ppt Iot fundamentals and Architecture
Tartificialntelligence_presentation.pptx
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
Developing a website for English-speaking practice to English as a foreign la...
Final SEM Unit 1 for mit wpu at pune .pptx
cloud_computing_Infrastucture_as_cloud_p
OMC Textile Division Presentation 2021.pptx
O2C Customer Invoices to Receipt V15A.pptx
Hybrid model detection and classification of lung cancer
August Patch Tuesday

Eclipse meets e4

  • 1. Setting Up the Development Workbench • Copy both to your local disk: • the right archive for your platform • the folder material • Hand the USB stick to the attendee next to you. • Unzip the archive and start the included Eclipse with a fresh workspace. • NOTE: On Windows systems, make sure you pick a short directory name and everything gets extracted without errors.
  • 2. meets Developing an editor for the e4 workbench model
  • 4. Moritz Eysholdt Jan Köhnlein Heiko Behrens
  • 5. Moritz Eysholdt Jan Köhnlein Heiko Behrens
  • 6. Moritz Eysholdt Jan Köhnlein Heiko Behrens
  • 10. • Simplify programming • Declarative styling / UI markup
  • 11. • Simplify programming • Declarative styling / UI markup • Uniform, pervasive platform
  • 12. • Simplify programming • Declarative styling / UI markup • Uniform, pervasive platform • Diversity of contributors
  • 13. • Simplify programming • Declarative styling / UI markup • Uniform, pervasive platform • Diversity of contributors • Backward compatibility
  • 16. Run the Demo • Import the Contacts Demo application as a project • Try to run the Contacts Demo product (fails, but creates a run config) • Run again by means of the run configuration
  • 18. Workbench Modeling Tools e4 Visual Designer
  • 19. Workbench Modeling Tools e4 Visual Designer Generic Ecore
  • 22. G ra m m ar
  • 23. Reference ar Model m m ra G
  • 24. Reference ar Model m m ra G Generator
  • 25. Reference ar Model m m ra G Generator Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor
  • 26. Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor
  • 27. Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor Model Model Model
  • 28. Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor Model Model Model
  • 29. Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor AST Model Model Model
  • 30. Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor AST Model Model Model
  • 31. Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor Interpreter AST Model Model Code Model Generator
  • 32. Runtime Superclass Subclass Class ecore meta model LL(*) Parser editor Interpreter AST Model Model Code Model Generator
  • 36. Application Window ToolBar Parts Menu Handlers Keybindings Commands
  • 37. Application Window ToolBar Parts Menu Handlers Keybindings Commands
  • 38. Application Window ToolBar Parts Menu Handlers Keybindings Commands
  • 39. Application Window ToolBar Parts Menu Handlers Keybindings Commands
  • 40. Application Window ToolBar Parts Menu Handlers Keybindings Commands
  • 41. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit"/> <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save"/> <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete"/> <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme"/> <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> <commands xmi:id="contacts.exit" id="contacts.exit" commandName="Exit" description=""/> <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commandName="Dark Theme"/> <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commandName="Bright Theme" description=""/> <commands xmi:id="contacts.save" id="contacts.save" commandName="Save" description=""/> <commands xmi:id="contacts.delete" id="contacts.delete" commandName="Delete" description=""/>
  • 42. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit"/> <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save"/> <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete"/> <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme"/> <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> Remove <commands xmi:id="contacts.exit" id="contacts.exit" commandName="Exit" description=""/> XML brackets <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commandName="Dark Theme"/> <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commandName="Bright Theme" description=""/> <commands xmi:id="contacts.save" id="contacts.save" commandName="Save" description=""/> <commands xmi:id="contacts.delete" id="contacts.delete" commandName="Delete" description=""/>
  • 43. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit" command="contacts.exit"/> <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save" command="contacts.save"/> <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete" command="contacts.delete"/> <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme" command="contacts.darkTheme"/> <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" bindings id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" <commands xmi:id="contacts.exit" id="contacts.exit" commands commandName="Exit" description=""/> description="" <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands commandName="Dark Theme"/> Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands commandName="Bright Theme" description=""/> description="" <commands xmi:id="contacts.save" id="contacts.save" commands commandName="Save" description=""/> description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands commandName="Delete" description=""/> description=""
  • 44. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit" command="contacts.exit"/> <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save" command="contacts.save"/> <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete" command="contacts.delete"/> <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme" command="contacts.darkTheme"/> <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings Remove id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" bindings id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" <commands xmi:id="contacts.exit" id="contacts.exit" commands commandName="Exit" description=""/> description="" UUIDs <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands commandName="Dark Theme"/> Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands commandName="Bright Theme" description=""/> description="" <commands xmi:id="contacts.save" id="contacts.save" commands commandName="Save" description=""/> description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands commandName="Delete" description=""/> description=""
  • 45. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit" command="contacts.exit"/> <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save" command="contacts.save"/> <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete" command="contacts.delete"/> <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme" command="contacts.darkTheme" command="contacts.darkTheme"/> <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" bindings id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" <commands xmi:id="contacts.exit" id="contacts.exit" commands commandName="Exit" description=""/> description="" <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands commandName="Dark Theme"/> Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands commandName="Bright Theme" description=""/> description="" <commands xmi:id="contacts.save" id="contacts.save" commands commandName="Save" description=""/> description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands commandName="Delete" description=""/> description=""
  • 46. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit" command="contacts.exit"/> <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save" command="contacts.save"/> <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete" command="contacts.delete"/> <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme" command="contacts.darkTheme" command="contacts.darkTheme"/> <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme" command="contacts.brightTheme"/> <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings Remove id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" bindings id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" <commands xmi:id="contacts.exit" id="contacts.exit" commands commandName="Exit" description=""/> description="" reference markup <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands commandName="Dark Theme"/> Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands commandName="Bright Theme" description=""/> description="" <commands xmi:id="contacts.save" id="contacts.save" commands commandName="Save" description=""/> description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands commandName="Delete" description=""/> description=""
  • 47. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit" command="contacts.exit"/> contacts.exit <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save" command="contacts.save"/> contacts.save <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete" command="contacts.delete"/> contacts.delete <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme" command="contacts.darkTheme" command="contacts.darkTheme"/> contacts.darkTheme <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme" command="contacts.brightTheme"/> contacts.brightTheme <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings "CTRL+D" id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" contacts.darkTheme <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings "CTRL+L" id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" contacts.brightTheme <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings "CTRL+S" id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" contacts.save <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings "Delete" id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" contacts.delete <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" bindings "CTRL+5 id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" contacts.exit <commands xmi:id="contacts.exit" id="contacts.exit" commands contacts.exit commandName="Exit" description=""/> "Exit" description="" <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands contacts.darkTheme commandName="Dark Theme"/> "Dark Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands contacts.brightTheme commandName="Bright Theme" description=""/> "Bright description="" <commands xmi:id="contacts.save" id="contacts.save" commands contacts.save commandName="Save" description=""/> "Save" description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands contacts.delete commandName="Delete" description=""/> "Delete" description=""
  • 48. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" command="contacts.exit" command="contacts.exit"/> contacts.exit <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" command="contacts.save" command="contacts.save"/> contacts.save <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" command="contacts.delete" command="contacts.delete"/> contacts.delete <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" command="contacts.darkTheme" command="contacts.darkTheme" command="contacts.darkTheme"/> contacts.darkTheme <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" command="contacts.brightTheme" command="contacts.brightTheme"/> contacts.brightTheme <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings "CTRL+D" id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" contacts.darkTheme <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings "CTRL+L" id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" contacts.brightTheme <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings "CTRL+S" id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" contacts.save <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings "Delete" bindings id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" contacts.delete <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" "CTRL+5 Simplify id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" contacts.exit <commands xmi:id="contacts.exit" id="contacts.exit" commands contacts.exit commandName="Exit" description=""/> "Exit" description="" Java references <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands contacts.darkTheme commandName="Dark Theme"/> "Dark Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands contacts.brightTheme commandName="Bright Theme" description=""/> "Bright description="" <commands xmi:id="contacts.save" id="contacts.save" commands contacts.save commandName="Save" description=""/> "Save" description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands contacts.delete commandName="Delete" description=""/> "Delete" description=""
  • 49. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" org.eclipse...ExitHandler command="contacts.exit" command="contacts.exit"/> contacts.exit <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" org.eclipse...SaveHandler command="contacts.save" command="contacts.save"/> contacts.save <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" org.eclipse...DeleteContactHandler command="contacts.delete" command="contacts.delete"/> contacts.delete <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" org.eclipse...DarkThemeHandler command="contacts.darkTheme" command="contacts.darkTheme" command="contacts.darkTheme"/> contacts.darkTheme <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" org.eclipse...BrightThemeHandler command="contacts.brightTheme" command="contacts.brightTheme"/> contacts.brightTheme <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings "CTRL+D" id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" contacts.darkTheme <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings "CTRL+L" id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" contacts.brightTheme <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings "CTRL+S" id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" contacts.save <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings "Delete" id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" contacts.delete <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" bindings "CTRL+5 id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" contacts.exit <commands xmi:id="contacts.exit" id="contacts.exit" commands contacts.exit commandName="Exit" description=""/> "Exit" description="" <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands contacts.darkTheme commandName="Dark Theme"/> "Dark Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands contacts.brightTheme commandName="Bright Theme" description=""/> "Bright description="" <commands xmi:id="contacts.save" id="contacts.save" commands contacts.save commandName="Save" description=""/> "Save" description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands contacts.delete commandName="Delete" description=""/> "Delete" description=""
  • 50. <handlers xmi:id="_SeXUF-8EEd6FC9cDb6iV7g" id="_SeXUF-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...ExitHandler" org.eclipse...ExitHandler command="contacts.exit" command="contacts.exit"/> contacts.exit <handlers xmi:id="_SeXUGO8EEd6FC9cDb6iV7g" id="_SeXUGO8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...SaveHandler" org.eclipse...SaveHandler command="contacts.save" command="contacts.save"/> contacts.save <handlers xmi:id="_SeXUGe8EEd6FC9cDb6iV7g" id="_SeXUGe8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DeleteContactHandler" org.eclipse...DeleteContactHandler command="contacts.delete" command="contacts.delete"/> contacts.delete <handlers xmi:id="_SeXUGu8EEd6FC9cDb6iV7g" id="_SeXUGu8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...DarkThemeHandler" org.eclipse...DarkThemeHandler command="contacts.darkTheme" command="contacts.darkTheme" command="contacts.darkTheme"/> contacts.darkTheme <handlers xmi:id="_SeXUG-8EEd6FC9cDb6iV7g" id="_SeXUG-8EEd6FC9cDb6iV7g" handlers URI="platform:/plugin/org.eclipse.e4.demo.contacts/org.eclipse...BrightThemeHandler" org.eclipse...BrightThemeHandler command="contacts.brightTheme" command="contacts.brightTheme"/> contacts.brightTheme <bindings xmi:id="_SeXUHO8EEd6FC9cDb6iV7g" keySequence="CTRL+D" bindings "CTRL+D" id="_SeXUHO8EEd6FC9cDb6iV7g" command="contacts.darkTheme"/> command="contacts.darkTheme" contacts.darkTheme <bindings xmi:id="_SeXUHe8EEd6FC9cDb6iV7g" keySequence="CTRL+L" bindings "CTRL+L" id="_SeXUHe8EEd6FC9cDb6iV7g" command="contacts.brightTheme"/> command="contacts.brightTheme" contacts.brightTheme <bindings xmi:id="_SeXUHu8EEd6FC9cDb6iV7g" keySequence="CTRL+S" bindings "CTRL+S" id="_SeXUHu8EEd6FC9cDb6iV7g" command="contacts.save"/> command="contacts.save" contacts.save <bindings xmi:id="_SeXUH-8EEd6FC9cDb6iV7g" keySequence="Delete" bindings "Delete" bindings id="_SeXUH-8EEd6FC9cDb6iV7g" command="contacts.delete"/> command="contacts.delete" contacts.delete <bindings xmi:id="_SeXUIO8EEd6FC9cDb6iV7g" keySequence="CTRL+5 X" "CTRL+5 Make it id="_SeXUIO8EEd6FC9cDb6iV7g" command="contacts.exit"/> command="contacts.exit" contacts.exit <commands xmi:id="contacts.exit" id="contacts.exit" commands contacts.exit commandName="Exit" description=""/> "Exit" description="" a language <commands xmi:id="contacts.darkTheme" id="contacts.darkTheme" commands contacts.darkTheme commandName="Dark Theme"/> "Dark Theme" <commands xmi:id="contacts.brightTheme" id="contacts.brightTheme" commands contacts.brightTheme commandName="Bright Theme" description=""/> "Bright description="" <commands xmi:id="contacts.save" id="contacts.save" commands contacts.save commandName="Save" description=""/> "Save" description="" <commands xmi:id="contacts.delete" id="contacts.delete" commands contacts.delete commandName="Delete" description=""/> "Delete" description=""
  • 51. handler org.eclipse.e4.demo.contacts.handlers.ExitHandler for contacts.exit handler org.eclipse.e4.demo.contacts.handlers.SaveHandler for contacts.save handler org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler for contacts.darkTheme handler org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler for contacts.brightTheme handler org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler for contacts.delete bind "CTRL+D" to contacts.darkTheme bind "CTRL+L" to contacts.brightTheme bind "CTRL+S" to contacts.save bind "CTRL+5 X" to contacts.exit bind "Delete" to contacts.delete command contacts.exit "Exit" command contacts.darkTheme "Dark Theme" command contacts.brightTheme "Bright Theme" command contacts.save "Save" command contacts.delete "Delete"
  • 52. handler org.eclipse.e4.demo.contacts.handlers.ExitHandler for contacts.exit handler org.eclipse.e4.demo.contacts.handlers.SaveHandler for contacts.save handler org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler for contacts.darkTheme handler org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler for contacts.brightTheme handler org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler for contacts.delete bind "CTRL+D" to contacts.darkTheme bind "CTRL+L" to contacts.brightTheme bind "CTRL+S" to contacts.save bind "CTRL+5 X" to contacts.exit bind "Delete" to contacts.delete Add command contacts.exit "Exit" namespace command contacts.darkTheme "Dark Theme" command contacts.brightTheme "Bright Theme" command contacts.save "Save" command contacts.delete "Delete"
  • 53. application contacts handler org.eclipse.e4.demo.contacts.handlers.ExitHandler handler contacts.exit for org.eclipse.e4.demo.contacts.handlers.ExitHandler handler org.eclipse.e4.demo.contacts.handlers.SaveHandler for exit handler contacts.save for org.eclipse.e4.demo.contacts.handlers.SaveHandler handler org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler for save handler contacts.darkTheme for org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler handler org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler for darkTheme handler contacts.brightTheme for org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler handler org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler for brightTheme handler contacts.delete for org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler for delete bind "CTRL+D" to contacts.darkTheme bind "CTRL+L" to contacts.brightTheme "CTRL+D" darkTheme bind "CTRL+S" to contacts.save "CTRL+L" brightTheme bind "CTRL+5 X" to contacts.ex "CTRL+S" to save bind "CTRL+5 X" to exit bind "Delete" to it delete command contacts.exit "Exit" exit command contacts.darkTheme "Dark Theme" darkTheme command contacts.brightTheme "Bright Theme" brightTheme command contacts.save "Save" save command contacts.delete "Delete" delete
  • 54. Exercise: A Grammar for Commands application contacts handler org.eclipse.e4.demo.contacts.handlers.ExitHandler for exit handler org.eclipse.e4.demo.contacts.handlers.SaveHandler for save handler org.eclipse.e4.demo.contacts.handlers.DarkThemeHandler for darkTheme handler org.eclipse.e4.demo.contacts.handlers.BrightThemeHandler for brightTheme handler org.eclipse.e4.demo.contacts.handlers.DeleteContactHandler for delete bind "CTRL+D" to darkTheme bind "CTRL+L" to brightTheme bind "CTRL+S" to save bind "CTRL+5 X" to exit bind "Delete" to delete command exit "Exit" command darkTheme "Dark Theme" command brightTheme "Bright Theme" command save "Save" command delete "Delete"
  • 55. <mainMenu xmi:id="_SeXUDu8EEd6FC9cDb6iV7g" id="_SeXUDu8EEd6FC9cDb6iV7g"> <children xsi:type="application:MenuItem" xmi:id="_SeXUD-8EEd6FC9cDb6iV7g" id="_SeXUD-8EEd6FC9cDb6iV7g" label="File"> <children xsi:type="application:HandledMenuItem" xmi:id="_SeXUEO8EEd6FC9cDb6iV7g" id="_SeXUEO8EEd6FC9cDb6iV7g" label="Save" iconURI="platform:/plugin/org.eclipse.e4.demo.contacts/icons/silk/disk.png" command="contacts.save"/> <children xsi:type="application:HandledMenuItem" xmi:id="_SeXUEe8EEd6FC9cDb6iV7g" id="_SeXUEe8EEd6FC9cDb6iV7g" label="Delete" iconURI="platform:/plugin/org.eclipse.e4.demo.contacts/icons/silk/user_delete.png" command="contacts.delete"/> <children xsi:type="application:DirectMenuItem" xmi:id="_SeXUEu8EEd6FC9cDb6iV7g" id="_SeXUEu8EEd6FC9cDb6iV7g" URI="platform:/plugin/org.eclipse.e4.demo.contactsorg.eclipse.e4.demo.contacts.h... label="Direct Exit"/> <children xsi:type="application:HandledMenuItem" xmi:id="_SeXUE-8EEd6FC9cDb6iV7g" id="_SeXUE-8EEd6FC9cDb6iV7g" label="Exit" command="contacts.exit"/> </children> <children xsi:type="application:MenuItem" xmi:id="_SeXUFO8EEd6FC9cDb6iV7g" id="_SeXUFO8EEd6FC9cDb6iV7g" label="Theme"> <children xsi:type="application:HandledMenuItem" xmi:id="_SeXUFe8EEd6FC9cDb6iV7g" id="_SeXUFe8EEd6FC9cDb6iV7g" label="Dark Theme" command="contacts.darkTheme"/> <children xsi:type="application:HandledMenuItem" xmi:id="_SeXUFu8EEd6FC9cDb6iV7g" id="_SeXUFu8EEd6FC9cDb6iV7g" label="Bright Theme" command="contacts.brightTheme"/> </children> </mainMenu>
  • 56. Menu { "File" { "Save" contacts.save icon="icons/silk/disk.png" "Delete" contacts.delete icon="icons/silk/user_delete.png" "Direct Exit" handler=org.eclipse.e4.demo.contacts.handlers.ExitHandler "Exit" contacts.exit } "Theme" { "Dark Theme" contacts.darkTheme "Bright Theme" contacts.brightTheme } }
  • 57. Exercise: Adding the menu section application contacts Menu { "File" { "Save" contacts.save icon="icons/silk/disk.png" "Delete" contacts.delete icon="icons/ silk/user_delete.png" "Direct Exit" handler=org.eclipse.e4.demo.contacts.handlers.ExitHandler "Exit" contacts.exit } "Theme" { "Dark Theme" contacts.darkTheme "Bright Theme" contacts.brightTheme } } command exit "Exit" ...
  • 59. Cross References ... <children xsi:type="application:PerspectiveStack" xmi:id="_NGiG4DGjEd-zge_czUaGVQ" UUIDs id="_NGiG4DGjEd-zge_czUaGVQ" selectedElement="_NGjVADGjEd-zge_czUaGVQ"> <children xsi:type="application:Perspective" xmi:id="_NGjVADGjEd-zge_czUaGVQ" id="_NGjVADGjEd-zge_czUaGVQ"> ... PerspectiveStack :myDslPerspectiveStack selectedElement=myDslPerspective { Names ... Perspective :myDslPerspective ...
  • 60. Qualified Names application contacts 1 command save "Save" Default QualifiedNameProvider
  • 61. Qualified Names application contacts 1 command save "Save" qualifiedName( 1 ) Default QualifiedNameProvider
  • 62. Qualified Names application contacts 1 command save "Save" EAttribute „name“ qualifiedName( 1 ) Default QualifiedNameProvider
  • 63. Qualified Names application contacts 1 command save "Save" EAttribute „name“ qualifiedName( 1 ) Default QualifiedNameProvider
  • 64. Qualified Names application contacts 1 command save "Save" qualifiedName( 1 ) Default save QualifiedNameProvider
  • 65. Qualified Names application contacts EAttribute „name“ 1 command save "Save" qualifiedName( 1 ) Default save QualifiedNameProvider
  • 66. Qualified Names application contacts EAttribute „name“ 1 command save "Save" qualifiedName( 1 ) Default save QualifiedNameProvider
  • 67. Qualified Names application contacts 1 command save "Save" qualifiedName( 1 ) Default contacts. save QualifiedNameProvider
  • 68. Objects can have multiple different names depending on the context
  • 69. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit
  • 70. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit
  • 71. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope name EObject „contacts“ 1 „save“ 2 „exit“ 3
  • 72. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope name EObject „contacts“ 1 „save“ 2 „exit“ 3
  • 73. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope name EObject „contacts“ 1 „save“ 2 „exit“ 3
  • 74. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope name EObject „contacts“ 1 „save“ 2 „exit“ 3
  • 75. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope name EObject „contacts“ 1 „save“ 2 „exit“ 3
  • 76. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope name EObject „contacts“ 1 outerScope „save“ 2 „exit“ 3
  • 77. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope File Scope name EObject name EObject „contacts“ 1 outerScope „contacts“ 1 „save“ 2 „contacts.save“ 2 „exit“ 3 „contacts.exit“ 3
  • 78. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope File Scope name EObject name EObject „contacts“ 1 outerScope „contacts“ 1 „save“ 2 „contacts.save“ 2 „exit“ 3 „contacts.exit“ 3
  • 79. application contacts 1 2 command save "Save" Scopes command exit "Exit" 3 bind "CTRL+S" to save bind "CTRL+X" to contacts.exit Application Scope File Scope name EObject name EObject „contacts“ 1 outerScope „contacts“ 1 „save“ 2 „contacts.save“ 2 „exit“ 3 „contacts.exit“ 3
  • 81. ...
  • 82. GlobalScope name EObject outerScope ... all visible FQNs elements
  • 83. GlobalScope name EObject outerScope ... all visible FQNs elements DefaultGlobalScopeProvider
  • 84. GlobalScope name EObject outerScope ... all visible FQNs elements DefaultGlobalScopeProvider • all in workspace
  • 85. GlobalScope name EObject outerScope ... all visible FQNs elements DefaultGlobalScopeProvider • all in workspace • backed by an Eclipse builder
  • 86. GlobalScope name EObject outerScope ... all visible FQNs elements DefaultGlobalScopeProvider • all in workspace • backed by an Eclipse builder ResourceSetGlobalScopeProvider
  • 87. GlobalScope name EObject outerScope ... all visible FQNs elements DefaultGlobalScopeProvider • all in workspace • backed by an Eclipse builder ResourceSetGlobalScopeProvider • all in ResourceSet
  • 88. Namespace Imports Global name EObject „java.util.List“ 1 „java.util.Set“ 2 „java.util.Map“ 3
  • 89. Namespace Imports Global name EObject „java.util.List“ 1 „java.util.Set“ 2 „java.util.Map“ 3 Import: Grammar 'import' importedNamespace=ImportFQN;
  • 90. Namespace Imports Global name EObject „java.util.List“ 1 „java.util.Set“ 2 „java.util.Map“ 3 Import: Grammar 'import' importedNamespace=ImportFQN; Model import java.util.*
  • 91. Namespace Imports Global ImportNamespaceAware name EObject name EObject „java.util.List“ 1 „List“ 1 outerScope „java.util.Set“ 2 „Set“ 2 „java.util.Map“ 3 „Map“ 3 Import: Grammar 'import' importedNamespace=ImportFQN; Model import java.util.*
  • 92. Exercise: Java Types application contacts import org.eclipse.e4.demo.contacts.handlers.*; command contacts.exit "Exit" handler ExitHandler for contacts.exit bind "CTRL+5 X" to contacts.exit command contacts.darkTheme "Dark Theme" handledBy DarkThemeHandler key "CTRL+D" command contacts.brightTheme "Bright Theme" handledBy BrightThemeHandler key "CTRL+L" command contacts.save "Save" handledBy SaveHandler key "CTRL+S" command contacts.delete "Delete" handledBy DeleteContactHandler key "Delete"
  • 95. Dependency Injection • Based on Google Guice • Pervasively used in Xtext
  • 96. Dependency Injection • Based on Google Guice • Pervasively used in Xtext • Invisible for clients (ex. Annotations)
  • 97. Dependency Injection • Based on Google Guice • Pervasively used in Xtext • Invisible for clients (ex. Annotations) • Language specific and global injectors
  • 98. Dependency Injection • Based on Google Guice • Pervasively used in Xtext • Invisible for clients (ex. Annotations) • Language specific and global injectors • Makes overriding defaults easy
  • 99. DI: Client Side @Inject private ISomeService myService; @Inject public MyClass(Provider<ISomeOtherService> provider) { ISomeOtherService firstInstance = provider.get(); ISomeOtherService secondInstance = provider.get(); } @Inject@ContentProposalLabelProvider private ILabelProvider labelProvider;
  • 100. DI: Configuration @ImplementedBy(MyServiceImpl.class) public class IServiceInterface { ... public class MyDeclarativeModule extends AbstractModule { public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() { return MyQualifiedNameProvider.class; } ... @Singleton public class MySingletonService extends AbstractSomeService { ...
  • 101. DI: Language Modules MyLanguage MyLanguage RuntimeModule bindIServiceInterface() Manual UiModule bindIServiceInterface() ... ... MyLanguageAbstract MyLanguageAbstract RuntimeModule bindIServiceInterface() Generated UiModule bindIServiceInterface() ... ... Default Default RuntimeModule bindIServiceInterface() Defaults UiModule bindIServiceInterface() ... ... AbstractModule
  • 102. DI: Equinox <plugin> <extension point="org.eclipse.ui.editors"> <editor class= "mydsl.MyDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor" contributorClass= "org.eclipse.ui.editors.text.TextEditorActionContributor" default="true" extensions="mydsl" id="mydsl.MyDsl" name="MyDsl Editor"> </editor> </extension> ...
  • 104. Annotations @Fix(DomainmodelJavaValidator.INVALID_TYPE_NAME) public void fixTypeName(final Issue issue, IssueResolutionAcceptor acceptor) { acceptor.accept(issue, "Capitalize name", ... Naming Conventions public class MyScopeProvider extends AbstractDeclarativeScopeProvider { public IScope scope_Handler_command( final Handler h, EReference rRef) { Polymorphic ... Dispatch public class MyLabelProvider Declarative extends DefaultLabelProvider { public String image(Command c) { return “cmd.png“; } public String image(Handler c) { ... APIs
  • 107. Outlook • Improve Xtext support for • Ecore generics • Partial textual models • EP org.eclipse.e4.workbench.model
  • 108. Questions? find out more at http://www.xtext.org http://eclipse.org/e4

Editor's Notes

  • #24: Die DSL f&amp;#xFC;r DSLs, Eclipse-basiert Define textual DSLs easily, Ready-to-use tool-chain, Easy but flexible customizing and tweaking, Durable foundation with Java Eclipse EMF, Strong community