SlideShare une entreprise Scribd logo
1  sur  108
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
Moritz Eysholdt                   Jan Köhnlein



                  Heiko Behrens
Moritz Eysholdt                   Jan Köhnlein



                  Heiko Behrens
Moritz Eysholdt                   Jan Köhnlein



                  Heiko Behrens
• 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
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
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
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
...
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
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

Contenu connexe

Tendances

Type script - advanced usage and practices
Type script  - advanced usage and practicesType script  - advanced usage and practices
Type script - advanced usage and practicesIwan van der Kleijn
 
Código Saudável => Programador Feliz - Rs on Rails 2010
Código Saudável => Programador Feliz - Rs on Rails 2010Código Saudável => Programador Feliz - Rs on Rails 2010
Código Saudável => Programador Feliz - Rs on Rails 2010Plataformatec
 
TypeScript: Basic Features and Compilation Guide
TypeScript: Basic Features and Compilation GuideTypeScript: Basic Features and Compilation Guide
TypeScript: Basic Features and Compilation GuideNascenia IT
 
iOS overview
iOS overviewiOS overview
iOS overviewgupta25
 
iOS Programming Intro
iOS Programming IntroiOS Programming Intro
iOS Programming IntroLou Loizides
 
Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLou Loizides
 
TypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painTypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painSander Mak (@Sander_Mak)
 
O que há de novo no Rails 3 - Ruby on Rails no Mundo Real - 23may2010
O que há de novo no Rails 3 - Ruby on Rails no Mundo Real - 23may2010O que há de novo no Rails 3 - Ruby on Rails no Mundo Real - 23may2010
O que há de novo no Rails 3 - Ruby on Rails no Mundo Real - 23may2010Plataformatec
 
Thor - RSLA - 13oct2009
Thor - RSLA - 13oct2009Thor - RSLA - 13oct2009
Thor - RSLA - 13oct2009Plataformatec
 
Mastering your Eclipse IDE - Java tooling, Tips & Tricks - EclipseCon Europe ...
Mastering your Eclipse IDE - Java tooling, Tips & Tricks - EclipseCon Europe ...Mastering your Eclipse IDE - Java tooling, Tips & Tricks - EclipseCon Europe ...
Mastering your Eclipse IDE - Java tooling, Tips & Tricks - EclipseCon Europe ...Noopur Gupta
 
Mastering your Eclipse IDE - Java tooling, Tips & Tricks!
Mastering your Eclipse IDE - Java tooling, Tips & Tricks!Mastering your Eclipse IDE - Java tooling, Tips & Tricks!
Mastering your Eclipse IDE - Java tooling, Tips & Tricks!Noopur Gupta
 
Building maintainable javascript applications
Building maintainable javascript applicationsBuilding maintainable javascript applications
Building maintainable javascript applicationsequisodie
 

Tendances (20)

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

Similaire à Eclipse meets e4

Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to ElixirDiacode
 
Lint, coverage, doc, autocompletion, transpilation, minification... powered b...
Lint, coverage, doc, autocompletion, transpilation, minification... powered b...Lint, coverage, doc, autocompletion, transpilation, minification... powered b...
Lint, coverage, doc, autocompletion, transpilation, minification... powered b...Alexandre Morgaut
 
Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructuredAmi Mahloof
 
Terraform Modules Restructured
Terraform Modules RestructuredTerraform Modules Restructured
Terraform Modules RestructuredDoiT International
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java DevelopersYakov Fain
 
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...AboutYouGmbH
 
JSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklJSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklChristoph Pickl
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Oliver Gierke
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Dmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script TechnologiesDmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script TechnologiesLogeekNightUkraine
 
Echtzeitapplikationen mit Elixir und GraphQL
Echtzeitapplikationen mit Elixir und GraphQLEchtzeitapplikationen mit Elixir und GraphQL
Echtzeitapplikationen mit Elixir und GraphQLMoritz Flucht
 
Some tips to improve developer experience with Symfony
Some tips to improve developer experience with SymfonySome tips to improve developer experience with Symfony
Some tips to improve developer experience with Symfonytyomo4ka
 
Operator SDK for K8s using Go
Operator SDK for K8s using GoOperator SDK for K8s using Go
Operator SDK for K8s using GoCloudOps2005
 
fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...
fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...
fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...Luca Berardinelli
 

Similaire à Eclipse meets e4 (20)

Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
Meta Object Protocols
Meta Object ProtocolsMeta Object Protocols
Meta Object Protocols
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to Elixir
 
Lint, coverage, doc, autocompletion, transpilation, minification... powered b...
Lint, coverage, doc, autocompletion, transpilation, minification... powered b...Lint, coverage, doc, autocompletion, transpilation, minification... powered b...
Lint, coverage, doc, autocompletion, transpilation, minification... powered b...
 
Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructured
 
Terraform Modules Restructured
Terraform Modules RestructuredTerraform Modules Restructured
Terraform Modules Restructured
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java Developers
 
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
 
JSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklJSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph Pickl
 
Eclipse e4
Eclipse e4Eclipse e4
Eclipse e4
 
AkJS Meetup - ES6++
AkJS Meetup -  ES6++AkJS Meetup -  ES6++
AkJS Meetup - ES6++
 
Angular2
Angular2Angular2
Angular2
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Dmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script TechnologiesDmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script Technologies
 
Echtzeitapplikationen mit Elixir und GraphQL
Echtzeitapplikationen mit Elixir und GraphQLEchtzeitapplikationen mit Elixir und GraphQL
Echtzeitapplikationen mit Elixir und GraphQL
 
Some tips to improve developer experience with Symfony
Some tips to improve developer experience with SymfonySome tips to improve developer experience with Symfony
Some tips to improve developer experience with Symfony
 
Operator SDK for K8s using Go
Operator SDK for K8s using GoOperator SDK for K8s using Go
Operator SDK for K8s using Go
 
fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...
fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...
fUML-Driven Design and Performance Analysis of Software Agents for Wireless S...
 

Plus de Dr. Jan Köhnlein

The Eclipse Layout Kernel sirius con 2017
The Eclipse Layout Kernel   sirius con 2017The Eclipse Layout Kernel   sirius con 2017
The Eclipse Layout Kernel sirius con 2017Dr. Jan Köhnlein
 
A New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEsA New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEsDr. Jan Köhnlein
 
Graphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagramGraphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagramDr. Jan Köhnlein
 
Diagram Editors - The FXed Generation
Diagram Editors - The FXed GenerationDiagram Editors - The FXed Generation
Diagram Editors - The FXed GenerationDr. Jan Köhnlein
 
Eclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered SpeciesEclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered SpeciesDr. Jan Köhnlein
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editingDr. Jan Köhnlein
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editingDr. Jan Köhnlein
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editingDr. Jan Köhnlein
 
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Dr. Jan Köhnlein
 

Plus de Dr. Jan Köhnlein (20)

The Eclipse Layout Kernel sirius con 2017
The Eclipse Layout Kernel   sirius con 2017The Eclipse Layout Kernel   sirius con 2017
The Eclipse Layout Kernel sirius con 2017
 
A New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEsA New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEs
 
Responsiveness
ResponsivenessResponsiveness
Responsiveness
 
Getting rid of backtracking
Getting rid of backtrackingGetting rid of backtracking
Getting rid of backtracking
 
Graphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagramGraphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagram
 
XRobots
XRobotsXRobots
XRobots
 
Diagrams, Xtext and UX
Diagrams, Xtext and UXDiagrams, Xtext and UX
Diagrams, Xtext and UX
 
Scoping
ScopingScoping
Scoping
 
Xtext, diagrams and ux
Xtext, diagrams and uxXtext, diagrams and ux
Xtext, diagrams and ux
 
Diagram Editors - The FXed Generation
Diagram Editors - The FXed GenerationDiagram Editors - The FXed Generation
Diagram Editors - The FXed Generation
 
Code Generation With Xtend
Code Generation With XtendCode Generation With Xtend
Code Generation With Xtend
 
Graphical Views For Xtext
Graphical Views For XtextGraphical Views For Xtext
Graphical Views For Xtext
 
The Xtext Grammar Language
The Xtext Grammar LanguageThe Xtext Grammar Language
The Xtext Grammar Language
 
Eclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered SpeciesEclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered Species
 
Java DSLs with Xtext
Java DSLs with XtextJava DSLs with Xtext
Java DSLs with Xtext
 
DSLs for Java Developers
DSLs for Java DevelopersDSLs for Java Developers
DSLs for Java Developers
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
 

Dernier

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 

Dernier (20)

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 

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
  • 3.
  • 4. Moritz Eysholdt Jan Köhnlein Heiko Behrens
  • 5. Moritz Eysholdt Jan Köhnlein Heiko Behrens
  • 6. Moritz Eysholdt Jan Köhnlein Heiko Behrens
  • 7.
  • 8.
  • 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
  • 14.
  • 15.
  • 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
  • 20.
  • 21.
  • 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
  • 35.
  • 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
  • 80.
  • 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
  • 105.
  • 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

Notes de l'éditeur

  1. 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