SlideShare ist ein Scribd-Unternehmen logo
1 von 155
Migrating a large
modelling environment
  from UML/XML to
     GMF/Xtext



  Codegeneration Conference 2010, Cambridge, UK
Moritz Eysholdt




Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Moritz Eysholdt

• Software Architect and
 Consultant at itemis




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Moritz Eysholdt

• Software Architect and
  Consultant at itemis
• Committer at the Eclipse
  Projects Xtext, Xpand and
  EMF Compare




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Moritz Eysholdt

• Software Architect and
  Consultant at itemis
• Committer at the Eclipse
  Projects Xtext, Xpand and
  EMF Compare
• Speaker at various
  international conferences




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
• Specialized in Model Driven Software Development




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
• Specialized in Model Driven Software Development
• Founded in 2003




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
• Specialized in Model Driven Software Development
• Founded in 2003
• 140 Employes




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
• Specialized in Model Driven Software Development
• Founded in 2003
• 140 Employes
• Branches in Germany, Swiss, France and Canada




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
• Specialized in Model Driven Software Development
• Founded in 2003
• 140 Employes
• Branches in Germany, Swiss, France and Canada
• Strategic Member of the Eclipse Foundation




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
• Specialized in Model Driven Software Development
• Founded in 2003
• 140 Employes
• Branches in Germany, Swiss, France and Canada
• Strategic Member of the Eclipse Foundation




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
• Specialized in Model Driven Software Development
• Founded in 2003
• 140 Employes
• Branches in Germany, Swiss, France and Canada
• Strategic Member of the Eclipse Foundation

• http://twitter.com/itemis




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Johannes Rupprecht




 Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Johannes Rupprecht

• Chief Software Architect of
 VSA group




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Johannes Rupprecht

• Chief Software Architect of
  VSA group
• 2005-2008 IT project
  manager of the biggest VSA
  software project




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Johannes Rupprecht

• Chief Software Architect of
  VSA group
• 2005-2008 IT project
  manager of the biggest VSA
  software project
• 2002-2005 Leading
  architect and one of the
  developers of the VSA
  framework marvin



               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Group




Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Group

• VSA:Verrechnungsstelle der Süddeutschen Apotheken
 (Clearing House of the South German Pharmacies)




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Group

• VSA:Verrechnungsstelle der Süddeutschen Apotheken
  (Clearing House of the South German Pharmacies)
• Company founded in 1983




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Group

• VSA:Verrechnungsstelle der Süddeutschen Apotheken
  (Clearing House of the South German Pharmacies)
• Company founded in 1983
• Owned by 7,000 German pharmacists




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Group

• VSA:Verrechnungsstelle der Süddeutschen Apotheken
  (Clearing House of the South German Pharmacies)
• Company founded in 1983
• Owned by 7,000 German pharmacists
• 1,100 employees




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Group

• VSA:Verrechnungsstelle der Süddeutschen Apotheken
  (Clearing House of the South German Pharmacies)
• Company founded in 1983
• Owned by 7,000 German pharmacists
• 1,100 employees
• Three business units:
 • VSA: Clearing for German pharmacies
 • azh: Clearing and IT for German health care professionals
 • awinta: Pharmacy administration systems


               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Software Development at VSA




     Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Software Development at VSA

• 150 developers in several projects in several locations




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Software Development at VSA

• 150 developers in several projects in several locations
• Internal systems, like the two clearing systems




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Software Development at VSA

• 150 developers in several projects in several locations
• Internal systems, like the two clearing systems
• Online systems for the clearing customers




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Software Development at VSA

• 150 developers in several projects in several locations
• Internal systems, like the two clearing systems
• Online systems for the clearing customers
• Pharmacy administration systems




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Software Development at VSA

• 150 developers in several projects in several locations
• Internal systems, like the two clearing systems
• Online systems for the clearing customers
• Pharmacy administration systems
• Development mostly in Java, but also C#, C++, C,
 Objective-C




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Development
before Eclipse
    based
  modeling
VSA has a
framework called
  marvin. Why?
Framework
 development
started in 2000
#/)/%6,-'20
           !                #&@!!!!!!!!7'G%!                                JK3L%6,-'20
                                                                                      !
                            !!!!!!!!!!!!!!<'()'(!



                                                                                                                         marvin
#/)/%6,-'20!%!                     JK3L%6,-'20%                                                                       !"#$%%!&'()'(!
  *4/+0'( !                          *4/+0'(!
                                                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12!

  3145,'!612.'+0!                                                           ='<<15(.'<'()-.'!
                                                                                                                                        &'<<-12!
                                                                                                                                        &'()-.'!
    71(891:!"2;-2'!
                                                                                ")'20<'()-.'!

                 L-.'2<-2;!&'()-.'!

                                                                   ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB
                                                                                                  !


                 71(891:%OD+,P
                             !                                                                                                          L1.8-2; !
                                                                        612N;5(/0-12<<'()-.'!
                                                                                                                                        &'()-.'!
                 71(891:!&0'+<!



                    *.0-)-0-'<!                                           C<'(!*4D-2-<0(/0-12!

                                                                                   &'.5(-0E!
                                                                                                                                        L-.'2.'!
                                                                                                                                        &'()-.'!
                                  $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<!

                                                    @'(<-<0'2.'!




                                                                      =',/0-12/,!M$!


                                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
#/)/%6,-'20
           !                #&@!!!!!!!!7'G%!                                JK3L%6,-'20
                                                                                      !
                            !!!!!!!!!!!!!!<'()'(!



                                                                                                                         marvin
#/)/%6,-'20!%!                     JK3L%6,-'20%                                                                       !"#$%%!&'()'(!
  *4/+0'( !                          *4/+0'(!
                                                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12!

  3145,'!612.'+0!                                                           ='<<15(.'<'()-.'!
                                                                                                                                        &'<<-12!
                                                                                                                                        &'()-.'!
    71(891:!"2;-2'!
                                                                                ")'20<'()-.'!

                 L-.'2<-2;!&'()-.'!

                                                                   ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB
                                                                                                  !


                 71(891:%OD+,P
                             !                                                                                                          L1.8-2; !
                                                                        612N;5(/0-12<<'()-.'!
                                                                                                                                        &'()-.'!
                 71(891:!&0'+<!


                       No JPA, no
                    *.0-)-0-'<!                                           C<'(!*4D-2-<0(/0-12!

                       Hibernate                                                   &'.5(-0E!
                                                                                                                                        L-.'2.'!
                                                                                                                                        &'()-.'!
                                  $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<!

                                                    @'(<-<0'2.'!




                                                                      =',/0-12/,!M$!


                                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
#/)/%6,-'20
           !                #&@!!!!!!!!7'G%!                                JK3L%6,-'20
                                                                                      !
                            !!!!!!!!!!!!!!<'()'(!
                                                                                           Just EJB 1.3,
                                                                                                   marvin
                                                                                            no Spring
#/)/%6,-'20!%!                     JK3L%6,-'20%                                                                       !"#$%%!&'()'(!
  *4/+0'( !                          *4/+0'(!
                                                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12!

  3145,'!612.'+0!                                                           ='<<15(.'<'()-.'!
                                                                                                                                        &'<<-12!
                                                                                                                                        &'()-.'!
    71(891:!"2;-2'!
                                                                                ")'20<'()-.'!

                 L-.'2<-2;!&'()-.'!

                                                                   ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB
                                                                                                  !


                 71(891:%OD+,P
                             !                                                                                                          L1.8-2; !
                                                                        612N;5(/0-12<<'()-.'!
                                                                                                                                        &'()-.'!
                 71(891:!&0'+<!



                    *.0-)-0-'<!                                           C<'(!*4D-2-<0(/0-12!

                                                                                   &'.5(-0E!
                                                                                                                                        L-.'2.'!
                                                                                                                                        &'()-.'!
                                  $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<!

                                                    @'(<-<0'2.'!




                                                                      =',/0-12/,!M$!


                                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
#/)/%6,-'20
           !                #&@!!!!!!!!7'G%!                                JK3L%6,-'20
                                                                                      !
  Not many web frame-       !!!!!!!!!!!!!!<'()'(!



   works, just Struts                                                                                                    marvin
#/)/%6,-'20!%!                     JK3L%6,-'20%                                                                       !"#$%%!&'()'(!
  *4/+0'( !                          *4/+0'(!
                                                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12!

  3145,'!612.'+0!                                                           ='<<15(.'<'()-.'!
                                                                                                                                        &'<<-12!
                                                                                                                                        &'()-.'!
    71(891:!"2;-2'!
                                                                                ")'20<'()-.'!

                 L-.'2<-2;!&'()-.'!

                                                                   ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB
                                                                                                  !


                 71(891:%OD+,P
                             !                                                                                                          L1.8-2; !
                                                                        612N;5(/0-12<<'()-.'!
                                                                                                                                        &'()-.'!
                 71(891:!&0'+<!



                    *.0-)-0-'<!                                           C<'(!*4D-2-<0(/0-12!

                                                                                   &'.5(-0E!
                                                                                                                                        L-.'2.'!
                                                                                                                                        &'()-.'!
                                  $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<!

                                                    @'(<-<0'2.'!




                                                                      =',/0-12/,!M$!


                                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
#/)/%6,-'20
           !                #&@!!!!!!!!7'G%!                                JK3L%6,-'20
                                                                                      !
                            !!!!!!!!!!!!!!<'()'(!



                                                                                                                         marvin
#/)/%6,-'20!%!                     JK3L%6,-'20%                                                                       !"#$%%!&'()'(!
  *4/+0'( !                          *4/+0'(!
                                                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12!

  3145,'!612.'+0!                                                           ='<<15(.'<'()-.'!

            No Eclipse modeling,
                                                                                                                                        &'<<-12!
                                                                                                                                        &'()-.'!
    71(891:!"2;-2'!
                                                                                ")'20<'()-.'!
             no MDA hype yet!
                 L-.'2<-2;!&'()-.'!

                                                                   ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB
                                                                                                  !


                 71(891:%OD+,P
                             !                                                                                                          L1.8-2; !
                                                                        612N;5(/0-12<<'()-.'!
                                                                                                                                        &'()-.'!
                 71(891:!&0'+<!



                    *.0-)-0-'<!                                           C<'(!*4D-2-<0(/0-12!

                                                                                   &'.5(-0E!
                                                                                                                                        L-.'2.'!
                                                                                                                                        &'()-.'!
                                  $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<!

                                                    @'(<-<0'2.'!




                                                                      =',/0-12/,!M$!


                                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
#/)/%6,-'20
           !                #&@!!!!!!!!7'G%!                                JK3L%6,-'20
                                                                                      !
                            !!!!!!!!!!!!!!<'()'(!



                                                                                                                         marvin
#/)/%6,-'20!%!                     JK3L%6,-'20%                                                                       !"#$%%!&'()'(!
  *4/+0'( !                          *4/+0'(!
                                                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12!

  3145,'!612.'+0!                                                           ='<<15(.'<'()-.'!
                                                                                                                                        &'<<-12!
                                                                                                                                        &'()-.'!
    71(891:!"2;-2'!
                                                                                ")'20<'()-.'!

                 L-.'2<-2;!&'()-.'!

                                                                   ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB
                                                                                                  !


                 71(891:%OD+,P
                             !                                                                                                          L1.8-2; !
                                                                        612N;5(/0-12<<'()-.'!
                                                                                                                                        &'()-.'!
                 71(891:!&0'+<!



                    *.0-)-0-'<!                                           C<'(!*4D-2-<0(/0-12!

                                                                                   &'.5(-0E!
                                                                                                                                        L-.'2.'!
                                                                                                                                        &'()-.'!
                                  $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<!

                                                    @'(<-<0'2.'!




                                                                      =',/0-12/,!M$!


                                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Reimplementation of all systems




       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Reimplementation of all systems

• VSA planned in 2000 and 2002 to start the
 reimplementation of almost all important VSA group
 systems based on Java




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Reimplementation of all systems

• VSA planned in 2000 and 2002 to start the
  reimplementation of almost all important VSA group
  systems based on Java
• Big need of supporting framework




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Reimplementation of all systems

• VSA planned in 2000 and 2002 to start the
  reimplementation of almost all important VSA group
  systems based on Java
• Big need of supporting framework
• Generating seemed to be the right way




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Reimplementation of all systems

• VSA planned in 2000 and 2002 to start the
  reimplementation of almost all important VSA group
  systems based on Java
• Big need of supporting framework
• Generating seemed to be the right way
• Based on XML files




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Reimplementation of all systems

• VSA planned in 2000 and 2002 to start the
  reimplementation of almost all important VSA group
  systems based on Java
• Big need of supporting framework
• Generating seemed to be the right way
• Based on XML files
• Later a UML modeling was set on top of that




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Reimplementation of all systems

• VSA planned in 2000 and 2002 to start the
  reimplementation of almost all important VSA group
  systems based on Java
• Big need of supporting framework
• Generating seemed to be the right way
• Based on XML files
• Later a UML modeling was set on top of that
• MagicDraw was used as UML tool, with VSA plugins for
  generating XMLs from the UML model



               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Systems based on
     marvin
9&:%          <:9%
                           $685)5;6,;%   $685)5;6,;%
                            6,;);)65%      =)6>5%
                /00%#4,%                                 /?@%
                 76485%                                >+8AB+>5%


     /01200%                                                       &&20%
     3*45565%                                                      #45A5%



&'(%#)**)+,%
   -+.%                          !"#$%                              /000%CD-%
                                                                    E)4F84#5%
85&
                  45/&       63#2)273!7&
                               9)3:2&        ';<&
               63#2)273!7&
                                           :$#=>$:2&
                3!7)7)32&

    '-.-//&                                             5';&
    0*12232&                                           (12=2&



'&()**)$!&                                              '///&?@+&
  +$,&                       !"#$%&                     %)1A#1(2&
The new marvin
modeling project
Why a new
modeling for
  marvin?
Problems with the UML Modelling




       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Opening a UML module
 lasted up to one hour




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Opening a UML module
  lasted up to one hour
• Opening a big UML diagram
  lasted up to ten minutes




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Opening a UML module
  lasted up to one hour
• Opening a big UML diagram
  lasted up to ten minutes
• Turnaround times were too
  slow (changing UML
  diagram, generating XML
  files, generating Java files
  and compiling via ANT)



              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Opening a UML module
  lasted up to one hour
• Opening a big UML diagram
  lasted up to ten minutes
• Turnaround times were too
  slow (changing UML
  diagram, generating XML
  files, generating Java files
  and compiling via ANT)
• So we needed much
  coffee…

              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling




       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Modelling was not intuitive, because UML was “abused”
 to model something, that can’t be expressed in UML at
 all




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Modelling was not intuitive, because UML was “abused”
  to model something, that can’t be expressed in UML at
  all
• Modelling was partly cumbersome, because there is no
  assistance in editing the models




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Modelling was not intuitive, because UML was “abused”
  to model something, that can’t be expressed in UML at
  all
• Modelling was partly cumbersome, because there is no
  assistance in editing the models
• Model was partly more complex than the XML file




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Modelling was not intuitive, because UML was “abused”
  to model something, that can’t be expressed in UML at
  all
• Modelling was partly cumbersome, because there is no
  assistance in editing the models
• Model was partly more complex than the XML file
• Workflow diagrams became too big, were confusing




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling




       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Referencing other model elements was done only
 textual, not by model references




              Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Referencing other model elements was done only
  textual, not by model references
• No validation and code completion in the tool




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Referencing other model elements was done only
  textual, not by model references
• No validation and code completion in the tool
• Branching was not possible, only one branch can be
  modeled




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Referencing other model elements was done only
  textual, not by model references
• No validation and code completion in the tool
• Branching was not possible, only one branch can be
  modeled
• Not all functionality of the XML Files could be expressed
  via UML




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Referencing other model elements was done only
  textual, not by model references
• No validation and code completion in the tool
• Branching was not possible, only one branch can be
  modeled
• Not all functionality of the XML Files could be expressed
  via UML
• No two way editing between XML Files and UML Models



               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Problems with the UML Modelling

• Referencing other model elements was done only
  textual, not by model references
• No validation and code completion in the tool
• Branching was not possible, only one branch can be
  modeled
• Not all functionality of the XML Files could be expressed
  via UML
• No two way editing between XML Files and UML Models
• No navigation between code and model


               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Initializing




Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Initializing

• Target was to massively
 improve tool handling and
 performance




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Initializing

• Target was to massively
  improve tool handling and
  performance
• Four different offerers
  made suggestions for
  solution. Three of them
  made the same suggestion:
  Xtext and GMF based on
  Eclipse




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Initializing

• Target was to massively
  improve tool handling and
  performance
• Four different offerers
  made suggestions for
  solution. Three of them
  made the same suggestion:
  Xtext and GMF based on
  Eclipse
• itemis won the race due to
  best competence in Xtext

               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Project Start




Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Project Start

• Fixed price contract
 including VSA developers
 taking part in the project to
 ensure training on the new
 technologies




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Project Start

• Fixed price contract
  including VSA developers
  taking part in the project to
  ensure training on the new
  technologies
• Specification: Document
  and legacy code




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Project Start

• Fixed price contract
  including VSA developers
  taking part in the project to
  ensure training on the new
  technologies
• Specification: Document
  and legacy code
• two developers from items
  and two full time and two
  part time developers from
  VSA

                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Why Eclipse Modeling




  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Why Eclipse Modeling

• Large ecosystem of
 modeling tools and
 frameworks available like in
 no other platform:
 • EMF
 • Xtext
 • GMF




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Why Eclipse Modeling

• Large ecosystem of
 modeling tools and
 frameworks available like in
 no other platform:
 • EMF
 • Xtext
 • GMF
• Possibility of mixing textual
 and graphical modeling



                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Basic Objectives




Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Basic Objectives

• Textual modeling for all languages with Xtext




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Basic Objectives

• Textual modeling for all languages with Xtext
• Graphical modeling with GMF for selected aspects of
 certain languages to getting better overview (no UML!)




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Basic Objectives

• Textual modeling for all languages with Xtext
• Graphical modeling with GMF for selected aspects of
  certain languages to getting better overview (no UML!)
• Integration of the legacy marvin generator as Eclipse
  Builder




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Basic Objectives

• Textual modeling for all languages with Xtext
• Graphical modeling with GMF for selected aspects of
  certain languages to getting better overview (no UML!)
• Integration of the legacy marvin generator as Eclipse
  Builder
• Tooling for automatic 100% migration of existing
  projects, including layout information from MagicDraw;
  ability to migrate one project at a time




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Basic Objectives

• Textual modeling for all languages with Xtext
• Graphical modeling with GMF for selected aspects of
  certain languages to getting better overview (no UML!)
• Integration of the legacy marvin generator as Eclipse
  Builder
• Tooling for automatic 100% migration of existing
  projects, including layout information from MagicDraw;
  ability to migrate one project at a time
• support for mixing migrated and unmigrated projects,
  because projects can't be migrated all at once


               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Two language families,
   five languages
XML                                +                                 UML
workflowdef.xsd datadict.xsd
                               <?xml version="1.0" encoding="ISO-8859-15"?>
                               <dataDictionary
                                   xmlns="http://www.vsa.de/datadict/1.45.2.4">
                                 <domain>
                                   <databaseMapping tableName="VDOMAIN">
                                     <column name="ID">
                                       <IdType/>
                                     </column>          <?xml version="1.0" encoding="ISO-8859-15"?>
                                   </databaseMapping> <dataDictionary
                                   <generator>              xmlns="http://www.vsa.de/datadict/1.45.2.4">
                                     <classes>            <view>
                               ...                          <databaseMapping viewName="V_VATTRIBUTE_JOIN_VIEW"/>
                                                             <generator>
                                                               <classes>
                                                       ...




                              <?xml version="1.0" encoding="ISO-8859-15"?>
                              <workflow
                                  xmlns="http://www.vsa.de/workflow/1.0">
                                <javadoc>comment</javadoc>
                                <synchWorkflow isMasterWorkflow="true" isStartableAsDetailWorkflow="true">
                                  <targetGuis>
                                    <gui name="JAVA"/>
                                  </targetGuis>
                                  <objectModel>
                                    <rootObject class="vsa.marvin.mod.schulung.workflow.impl.CustomerManagementRoot"
                                        name="CustomerManagement">
                                      <javadoc>Rootobject of the workflow</javadoc>
                                      <value attributePath="searchFor" name="searchFor"/>
                                    </rootObject>
                                  </objectModel>
                                  <globalMasks>
                                    <globalActivities>
                                      <activity name="SearchCustomer2">
                                        <javadoc></javadoc>
                                        <synchTransition nextStep="CURRENT_STEP"/>
                                      </activity>
<?xml version="1.0" encoding="ISO-8859-15"?>
<dataDictionary
    xmlns="http://www.vsa.de/datadict/1.45.2.4">
  <domain>
    <databaseMapping tableName="VDOMAIN">
      <column name="ID">
        <IdType/>
      </column>
      <column allowNulls="false" name="VDOMAINATTR">
        <DecimalType precision="10" scale="0"/>
      </column>
    </databaseMapping>
    <generator>
      <classes>
        <superClass name="vsa.marvin.persist.DefaultPersistentObject"/>
        <domainIF internalName="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImplIF"
             name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.VDomainIF"
             baseOnly="true" generateBase="true" generatePublic="true"/>
        <domainImpl name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImpl"
             baseOnly="true" generateBase="true"/>
      </classes>
      <attributes>
        <defineAttributes>
           <attribute name="vdomainattr" type="int">
             <javadoc></javadoc>
             <columnRef columnName="VDOMAINATTR"/>
           </attribute>
        </defineAttributes>
      </attributes>
      <createMethods/>
      <findMethods/>
    </generator>
  </domain>
</dataDictionary>
?xml version="1.0" encoding="ISO-8859-15"?
dataDictionary
                                                     remove XML-noise: </...>
   xmlns="http: www.vsa.de datadict 1.45.2.4"
  domain
    databaseMapping tableName="VDOMAIN"
      column name="ID"
         IdType
       column
      column allowNulls="false" name="VDOMAINATTR"
         DecimalType precision="10" scale="0"
       column
     databaseMapping
    generator
      classes
         superClass name="vsa.marvin.persist.DefaultPersistentObject"
         domainIF internalName="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImplIF"
            name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.VDomainIF"
            baseOnly="true" generateBase="true" generatePublic="true"
         domainImpl name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImpl"
            baseOnly="true" generateBase="true"
       classes
      attributes
         defineAttributes
           attribute name="vdomainattr" type="int"
             javadoc   javadoc
             columnRef columnName="VDOMAINATTR"
            attribute
          defineAttributes
       attributes
      createMethods
      findMethods
     generator
   domain
 dataDictionary
dataDictionary
                                                                  remove metadata
 domain
   databaseMapping tableName="VDOMAIN"
     column name="ID"
        IdType
      column
     column allowNulls="false" name="VDOMAINATTR"
        DecimalType precision="10" scale="0"
      column
    databaseMapping
   generator
     classes
        superClass name="vsa.marvin.persist.DefaultPersistentObject"
        domainIF internalName="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImplIF"
           name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.VDomainIF"
           baseOnly="true" generateBase="true" generatePublic="true"
        domainImpl name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImpl"
           baseOnly="true" generateBase="true"
      classes
     attributes
        defineAttributes
          attribute name="vdomainattr" type="int"
            javadoc   javadoc
            columnRef columnName="VDOMAINATTR"
           attribute
         defineAttributes
      attributes
     createMethods
     findMethods
    generator
  domain
dataDictionary
dataDictionary
                                         remove default/derivable values
 domain
   databaseMapping tableName="VDOMAIN"




     column                    name="VDOMAINATTR"
       DecimalType precision="10" scale="0"
      column
    databaseMapping
   generator
     classes
       superClass name="vsa.marvin.persist.DefaultPersistentObject"




      classes
     attributes
       defineAttributes
          attribute name="vdomainattr" type="int"
            javadoc   javadoc
            columnRef columnName="VDOMAINATTR"
           attribute
         defineAttributes
      attributes
     createMethods
     findMethods
    generator
  domain
dataDictionary
dataDictionary
                                          summarize columns/attributes
 domain
   databaseMapping tableName="VDOMAIN"




    databaseMapping
   generator
     classes
       superClass name="vsa.marvin.persist.DefaultPersistentObject"




      classes
     attributes
       defineAttributes
         attribute name="vdomainattr" type="int"
           javadoc   javadoc

           attribute
         defineAttributes
      attributes
     createMethods
     findMethods
    generator
  domain
dataDictionary
remove more noise
domain
  databaseMapping          "VDOMAIN"




     superClass name="vsa.marvin.persist.DefaultPersistentObject"




       attribute      "vdomainattr" type="int"
design convenient syntax
domain-language-v2.0 package vsa.marvin.mod.persist.examples.reference.views.joins;

import vsa.marvin.persist.DefaultPersistentObject;

domain VDomain {
	   database {
	   	    table VDOMAIN;
	   }

	   classes {
	   	   superClass javaClass DefaultPersistentObject;
	   }

	   attributes {
	   	   private int vdomainattr;
	   }

	   methods {
	   }

}
Let’s build this
language in less than
      a minute
Launch the New Editor
datadict.xsd
workflowdef.xsd    Domain.xtext          View.xtext




                 Workflow.xtext   ObjectModel.xtext Mask.xtext
Models are code!




Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Models are code!

• This is good, because we know how to handle code:
 • Compare, Merge
 • Version Control
 • Copy’n’paste across applications
 • Send artifacts via e-mail or web




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Models are code!

• This is good, because we know how to handle code:
 • Compare, Merge
 • Version Control
 • Copy’n’paste across applications
 • Send artifacts via e-mail or web
• Furthermore, they integrate seamlessly with
 • existing code
 • existing build infrastructures



                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Architecture


            Xtend M2M


<XML/>                                    Xtext
 Model                                    Model



            Xtend M2M

  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Architecture


            Xtend M2M


<XML/>                EMF                 Xtext
                     Model
 Model                                    Model



            Xtend M2M

  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Architecture
  Structure Def:
Ecore derived from
   XML Schema                  Xtend M2M


               <XML/>                    EMF                 Xtext
                                        Model
                Model                                        Model



                               Xtend M2M

                     Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Architecture
  Structure Def:                                                          Structure Def:
Ecore derived from                                                      Ecore derived from
   XML Schema                  Xtend M2M                                 Xtext Grammars




               <XML/>                    EMF                 Xtext
                                        Model
                Model                                        Model



                               Xtend M2M

                     Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Architecture
  Structure Def:                                                          Structure Def:
Ecore derived from                                                      Ecore derived from
   XML Schema                  Xtend M2M                                 Xtext Grammars




               <XML/>                    EMF                 Xtext
                                        Model
                Model                                        Model



    Load/Save:                 Xtend M2M
EMF’s XMLResource

                     Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Architecture
  Structure Def:                                                          Structure Def:
Ecore derived from                                                      Ecore derived from
   XML Schema                  Xtend M2M                                 Xtext Grammars




               <XML/>                    EMF                 Xtext
                                        Model
                Model                                        Model


                                                                          Load/Save:
    Load/Save:                 Xtend M2M                                XtextResource
EMF’s XMLResource                                                (extends EMF’s ResourceImpl)

                     Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Migrate XML Models


                               Xtend M2M
XMLResource.load()                                                      XtextResource.save()



               <XML/>                                        Xtext
                Model                                        Model



                               Xtend M2M

                     Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Integrate Legacy Code Generator


                             Xtend M2M


              <XML/>                                       Xtext
CodeGen        Model                                       Model

                                                                 XtextResource.load()
           XMLResource.
              save()
                             Xtend M2M
{ Java }
                   Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
                    (Roundtrip)

                                 Xtend M2M
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                 Xtend M2M

                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)

                                 Xtend M2M
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                 Xtend M2M

                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)
                                   XML2Xtext
                                 Xtend M2M
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                 Xtend M2M

                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)
                                   XML2Xtext
                                                                          Serialization
                                 Xtend M2M
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                 Xtend M2M

                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)
                                   XML2Xtext
                                                                          Serialization
                                 Xtend M2M                                 Grammar
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                 Xtend M2M

                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)
                                   XML2Xtext
                                                                          Serialization
                                 Xtend M2M                                 Grammar
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext              Scoping
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                 Xtend M2M

                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)
                                   XML2Xtext
                                                                          Serialization
                                 Xtend M2M                                 Grammar
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext              Scoping
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                                                            Lexing/Parsing
                                 Xtend M2M

                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)
                                   XML2Xtext
                                                                          Serialization
                                 Xtend M2M                                 Grammar
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext              Scoping
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                                                            Lexing/Parsing
                                 Xtend M2M
                                                                            ValueConversion
                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Generic Integration Test
       This Tests:
                    (Roundtrip)
                                   XML2Xtext
                                                                          Serialization
                                 Xtend M2M                                 Grammar
XMLResource.load()                                                        XtextResource.save()



Compare        <XML/>                                          Xtext              Scoping
                Model                                          Model

  XMLResource.save()                                                XtextResource.load()

                                                                            Lexing/Parsing
                                 Xtend M2M
                                   Xtext2XML                                ValueConversion
                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
GMF Integration
                                                                                                        (how to persist diagrams)




XMI                                                                                                                                                                                                                       XMI
via EMF’s XMIResource                                                                                                                                                   via EMF’s XMIResource
<?xml version="1.0" encoding="UTF-8"?>                                                                                      <?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation"      xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation"
xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1">                                                                       xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1">
  <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel">                                 <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel">
    <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004">                                            <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004">
      <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/>                                 <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/>
      <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/>                                             <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/>
      <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/>           <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/>
      <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/>                                                    <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/>
      <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/>                                  <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/>
      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/>                             <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/>
    </children>                                                                                                                 </children>
...                                                                                                                         ...




Semantic Model (the actual model)                                                                                           Notation Model (Layout, Formatting, etc.)




                                                                                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
GMF Integration
                                                                                                        (how to persist diagrams)




XMI                                                                                                                                                                                                                       XMI
via EMF’s XMIResource                                                                                                                                                   via EMF’s XMIResource
<?xml version="1.0" encoding="UTF-8"?>                                                                                      <?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation"      xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation"
xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1">                                                                       xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1">
  <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel">                                 <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel">
    <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004">                                            <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004">
      <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/>                                 <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/>
      <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/>                                             <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/>
      <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/>           <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/>
      <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/>                                                    <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/>
      <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/>                                  <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/>
      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/>                             <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/>
    </children>                                                                                                                 </children>
...                                                                                                                         ...




Semantic Model (the actual model)                                                                                           Notation Model (Layout, Formatting, etc.)




                                                                                       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
GMF Integration
                                                          (how to persist diagrams)




Text                                                                                                                                                                                 XMI
via XtextResource                                                                                                                  via EMF’s XMIResource
workflow-language-v2.0 package vsa.marvin.mod.schulung.^workflow;                      <?xml version="1.0" encoding="UTF-8"?>
                                                                                       <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                                                       xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation"
                                                                                       xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1">
/* This workflow creates/removes/updates customer records */                             <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel">
                                                                                           <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004">
workflow CustomerManagement isMasterWorkflow canBeDetailWorkflow {                           <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/>
                                                                                             <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/>
	      firstStep OverviewStep;                                                               <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/>
                                                                                             <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/>
                                                                                             <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/>
                                                                                             <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/>
	     references {                                                                         </children>
                                                                                       ...
	     	      objectModelRef CustomerManagement;
	     	      externalDefinitionsRef Externals as infoheader;
	     	      compWorkflowRef customersales workflow CustomerSales;

                                                                                       Notation Model (Layout, Formatting, etc.)
	     }

	     workflowPart foopart {
	     	      globalActivities {
	     	      	      activity ShowCustomerCount -> ShowCustomerCountMessage;
	     	      }

	     	      guiStep ShowSalesInclude {
	     	      	      javaMask vsa.marvin.mod.schulung.^workflow.ShowSalesIncludeMask;
	     	      	      activity NextMonth -> ShowSalesInclude;


Semantic Model (the actual model)
                                                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
GMF Integration - Consequences




       Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
GMF Integration - Consequences

• No need for the graphical editor to cover complete model
 • Cheaper
 • Only use graphical syntax where it is indeed superior to
   textual syntax




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
GMF Integration - Consequences

• No need for the graphical editor to cover complete model
 • Cheaper
 • Only use graphical syntax where it is indeed superior to
   textual syntax
• If the XMI is lost, only the layout is lost




                 Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Showtime!
Incremental Build
Content Assist,
Cross References,
   Navigation
Validation
Formatting
Outline
Find References
Open Model Elements
Domain Diagram:
A canvas to pin up files
Workflow Diagram:
 nested diagrams
Lessons Learned
Migration




Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Migration

• A 100% migration of the existing models was necessary




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Migration

• A 100% migration of the existing models was necessary
• About 75 CVS Modules to migrate




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Migration

• A 100% migration of the existing models was necessary
• About 75 CVS Modules to migrate
• At early time in project a automated migration test tool
 was implemented
 • Checkout all modules from CVS and build
 • Migrate to new modeling
 • Verify the results by comparing artefacts
 • Logging all errors and relevant differences



                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Migration

• A 100% migration of the existing models was necessary
• About 75 CVS Modules to migrate
• At early time in project a automated migration test tool
 was implemented
 • Checkout all modules from CVS and build
 • Migrate to new modeling
 • Verify the results by comparing artefacts
 • Logging all errors and relevant differences
• All problems in migration were discovered before rollout


                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Migration

• A 100% migration of the existing models was necessary
• About 75 CVS Modules to migrate
• At early time in project a automated migration test tool
 was implemented
 • Checkout all modules from CVS and build
 • Migrate to new modeling
 • Verify the results by comparing artefacts
 • Logging all errors and relevant differences
• All problems in migration were discovered before rollout
• But: Searching for all the errors took much more time
 than predicted
                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Training of the users




  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Training of the users

• Even for very experienced users it is helpful to be trained
 on a complete new way to model and new tools




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Training of the users

• Even for very experienced users it is helpful to be trained
  on a complete new way to model and new tools
• An exercises project was implemented with tutorials
  covering the main features




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Training of the users

• Even for very experienced users it is helpful to be trained
  on a complete new way to model and new tools
• An exercises project was implemented with tutorials
  covering the main features
• All VSA developers (even our Rumanian ones) took part
  in a 4-6 hour training




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Training of the users

• Even for very experienced users it is helpful to be trained
  on a complete new way to model and new tools
• An exercises project was implemented with tutorials
  covering the main features
• All VSA developers (even our Rumanian ones) took part
  in a 4-6 hour training
• Result:Very few handling problems, low support effort of
  the VSA modeling developers




                Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Distributed project




 Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Distributed project

• Project was distributed over four locations




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Distributed project

• Project was distributed over four locations
• Shared infrastructure from the very beginning
 • Subversion
 • Bug tracking system
 • Wiki




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Distributed project

• Project was distributed over four locations
• Shared infrastructure from the very beginning
 • Subversion
 • Bug tracking system
 • Wiki
• Weekly telephone conference to check status and
 discuss problems




               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Distributed project

• Project was distributed over four locations
• Shared infrastructure from the very beginning
 • Subversion
 • Bug tracking system
 • Wiki
• Weekly telephone conference to check status and
  discuss problems
• Later in the project communication rules to ensure
  efficient working



               Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
How to minimize complexity




     Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
How to minimize complexity

• Use stable versions of the
 frameworks




                 Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
How to minimize complexity

• Use stable versions of the
    frameworks
•   Use GMF only if necessary




                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
How to minimize complexity

• Use stable versions of the
    frameworks
•   Use GMF only if necessary
•   Migrate existing models only
    if necessary, because you are
    not free in defining the
    language and migration has to
    be tested very intensive




                  Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
How to minimize complexity

• Use stable versions of the
    frameworks
•   Use GMF only if necessary
•   Migrate existing models only
    if necessary, because you are
    not free in defining the
    language and migration has to
    be tested very intensive
•   Work test-driven with
    continous integration (that is
    a really big problem when
    developing plugins for eclipse)

                   Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
Questions?
Discussion

Weitere ähnliche Inhalte

Mehr von meysholdt

Turning Ideas Into Code Faster
Turning Ideas Into Code FasterTurning Ideas Into Code Faster
Turning Ideas Into Code Fastermeysholdt
 
Executable specifications for xtext
Executable specifications for xtextExecutable specifications for xtext
Executable specifications for xtextmeysholdt
 
Xbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for JavaXbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for Javameysholdt
 
Test-Driven Development of Xtext DSLs
Test-Driven Development  of Xtext DSLsTest-Driven Development  of Xtext DSLs
Test-Driven Development of Xtext DSLsmeysholdt
 
Codegeneration Goodies
Codegeneration GoodiesCodegeneration Goodies
Codegeneration Goodiesmeysholdt
 
Converging Textual and Graphical Editors
Converging Textual  and Graphical EditorsConverging Textual  and Graphical Editors
Converging Textual and Graphical Editorsmeysholdt
 

Mehr von meysholdt (6)

Turning Ideas Into Code Faster
Turning Ideas Into Code FasterTurning Ideas Into Code Faster
Turning Ideas Into Code Faster
 
Executable specifications for xtext
Executable specifications for xtextExecutable specifications for xtext
Executable specifications for xtext
 
Xbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for JavaXbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for Java
 
Test-Driven Development of Xtext DSLs
Test-Driven Development  of Xtext DSLsTest-Driven Development  of Xtext DSLs
Test-Driven Development of Xtext DSLs
 
Codegeneration Goodies
Codegeneration GoodiesCodegeneration Goodies
Codegeneration Goodies
 
Converging Textual and Graphical Editors
Converging Textual  and Graphical EditorsConverging Textual  and Graphical Editors
Converging Textual and Graphical Editors
 

Kürzlich hochgeladen

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
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
 
"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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 

Kürzlich hochgeladen (20)

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
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
 
"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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 

Migrating a large modelling environment from UML/XML to GMF/Xtext

  • 1. Migrating a large modelling environment from UML/XML to GMF/Xtext Codegeneration Conference 2010, Cambridge, UK
  • 2. Moritz Eysholdt Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 3. Moritz Eysholdt • Software Architect and Consultant at itemis Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 4. Moritz Eysholdt • Software Architect and Consultant at itemis • Committer at the Eclipse Projects Xtext, Xpand and EMF Compare Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 5. Moritz Eysholdt • Software Architect and Consultant at itemis • Committer at the Eclipse Projects Xtext, Xpand and EMF Compare • Speaker at various international conferences Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 6. Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 7. • Specialized in Model Driven Software Development Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 8. • Specialized in Model Driven Software Development • Founded in 2003 Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 9. • Specialized in Model Driven Software Development • Founded in 2003 • 140 Employes Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 10. • Specialized in Model Driven Software Development • Founded in 2003 • 140 Employes • Branches in Germany, Swiss, France and Canada Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 11. • Specialized in Model Driven Software Development • Founded in 2003 • 140 Employes • Branches in Germany, Swiss, France and Canada • Strategic Member of the Eclipse Foundation Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 12. • Specialized in Model Driven Software Development • Founded in 2003 • 140 Employes • Branches in Germany, Swiss, France and Canada • Strategic Member of the Eclipse Foundation Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 13. • Specialized in Model Driven Software Development • Founded in 2003 • 140 Employes • Branches in Germany, Swiss, France and Canada • Strategic Member of the Eclipse Foundation • http://twitter.com/itemis Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 14. Johannes Rupprecht Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 15. Johannes Rupprecht • Chief Software Architect of VSA group Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 16. Johannes Rupprecht • Chief Software Architect of VSA group • 2005-2008 IT project manager of the biggest VSA software project Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 17. Johannes Rupprecht • Chief Software Architect of VSA group • 2005-2008 IT project manager of the biggest VSA software project • 2002-2005 Leading architect and one of the developers of the VSA framework marvin Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 18. Group Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 19. Group • VSA:Verrechnungsstelle der Süddeutschen Apotheken (Clearing House of the South German Pharmacies) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 20. Group • VSA:Verrechnungsstelle der Süddeutschen Apotheken (Clearing House of the South German Pharmacies) • Company founded in 1983 Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 21. Group • VSA:Verrechnungsstelle der Süddeutschen Apotheken (Clearing House of the South German Pharmacies) • Company founded in 1983 • Owned by 7,000 German pharmacists Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 22. Group • VSA:Verrechnungsstelle der Süddeutschen Apotheken (Clearing House of the South German Pharmacies) • Company founded in 1983 • Owned by 7,000 German pharmacists • 1,100 employees Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 23. Group • VSA:Verrechnungsstelle der Süddeutschen Apotheken (Clearing House of the South German Pharmacies) • Company founded in 1983 • Owned by 7,000 German pharmacists • 1,100 employees • Three business units: • VSA: Clearing for German pharmacies • azh: Clearing and IT for German health care professionals • awinta: Pharmacy administration systems Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 24. Software Development at VSA Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 25. Software Development at VSA • 150 developers in several projects in several locations Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 26. Software Development at VSA • 150 developers in several projects in several locations • Internal systems, like the two clearing systems Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 27. Software Development at VSA • 150 developers in several projects in several locations • Internal systems, like the two clearing systems • Online systems for the clearing customers Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 28. Software Development at VSA • 150 developers in several projects in several locations • Internal systems, like the two clearing systems • Online systems for the clearing customers • Pharmacy administration systems Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 29. Software Development at VSA • 150 developers in several projects in several locations • Internal systems, like the two clearing systems • Online systems for the clearing customers • Pharmacy administration systems • Development mostly in Java, but also C#, C++, C, Objective-C Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 30. Development before Eclipse based modeling
  • 31. VSA has a framework called marvin. Why?
  • 33. #/)/%6,-'20 ! #&@!!!!!!!!7'G%! JK3L%6,-'20 ! !!!!!!!!!!!!!!<'()'(! marvin #/)/%6,-'20!%! JK3L%6,-'20% !"#$%%!&'()'(! *4/+0'( ! *4/+0'(! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12! 3145,'!612.'+0! ='<<15(.'<'()-.'! &'<<-12! &'()-.'! 71(891:!"2;-2'! ")'20<'()-.'! L-.'2<-2;!&'()-.'! ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB ! 71(891:%OD+,P ! L1.8-2; ! 612N;5(/0-12<<'()-.'! &'()-.'! 71(891:!&0'+<! *.0-)-0-'<! C<'(!*4D-2-<0(/0-12! &'.5(-0E! L-.'2.'! &'()-.'! $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<! @'(<-<0'2.'! =',/0-12/,!M$! Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 34. #/)/%6,-'20 ! #&@!!!!!!!!7'G%! JK3L%6,-'20 ! !!!!!!!!!!!!!!<'()'(! marvin #/)/%6,-'20!%! JK3L%6,-'20% !"#$%%!&'()'(! *4/+0'( ! *4/+0'(! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12! 3145,'!612.'+0! ='<<15(.'<'()-.'! &'<<-12! &'()-.'! 71(891:!"2;-2'! ")'20<'()-.'! L-.'2<-2;!&'()-.'! ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB ! 71(891:%OD+,P ! L1.8-2; ! 612N;5(/0-12<<'()-.'! &'()-.'! 71(891:!&0'+<! No JPA, no *.0-)-0-'<! C<'(!*4D-2-<0(/0-12! Hibernate &'.5(-0E! L-.'2.'! &'()-.'! $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<! @'(<-<0'2.'! =',/0-12/,!M$! Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 35. #/)/%6,-'20 ! #&@!!!!!!!!7'G%! JK3L%6,-'20 ! !!!!!!!!!!!!!!<'()'(! Just EJB 1.3, marvin no Spring #/)/%6,-'20!%! JK3L%6,-'20% !"#$%%!&'()'(! *4/+0'( ! *4/+0'(! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12! 3145,'!612.'+0! ='<<15(.'<'()-.'! &'<<-12! &'()-.'! 71(891:!"2;-2'! ")'20<'()-.'! L-.'2<-2;!&'()-.'! ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB ! 71(891:%OD+,P ! L1.8-2; ! 612N;5(/0-12<<'()-.'! &'()-.'! 71(891:!&0'+<! *.0-)-0-'<! C<'(!*4D-2-<0(/0-12! &'.5(-0E! L-.'2.'! &'()-.'! $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<! @'(<-<0'2.'! =',/0-12/,!M$! Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 36. #/)/%6,-'20 ! #&@!!!!!!!!7'G%! JK3L%6,-'20 ! Not many web frame- !!!!!!!!!!!!!!<'()'(! works, just Struts marvin #/)/%6,-'20!%! JK3L%6,-'20% !"#$%%!&'()'(! *4/+0'( ! *4/+0'(! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12! 3145,'!612.'+0! ='<<15(.'<'()-.'! &'<<-12! &'()-.'! 71(891:!"2;-2'! ")'20<'()-.'! L-.'2<-2;!&'()-.'! ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB ! 71(891:%OD+,P ! L1.8-2; ! 612N;5(/0-12<<'()-.'! &'()-.'! 71(891:!&0'+<! *.0-)-0-'<! C<'(!*4D-2-<0(/0-12! &'.5(-0E! L-.'2.'! &'()-.'! $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<! @'(<-<0'2.'! =',/0-12/,!M$! Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 37. #/)/%6,-'20 ! #&@!!!!!!!!7'G%! JK3L%6,-'20 ! !!!!!!!!!!!!!!<'()'(! marvin #/)/%6,-'20!%! JK3L%6,-'20% !"#$%%!&'()'(! *4/+0'( ! *4/+0'(! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12! 3145,'!612.'+0! ='<<15(.'<'()-.'! No Eclipse modeling, &'<<-12! &'()-.'! 71(891:!"2;-2'! ")'20<'()-.'! no MDA hype yet! L-.'2<-2;!&'()-.'! ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB ! 71(891:%OD+,P ! L1.8-2; ! 612N;5(/0-12<<'()-.'! &'()-.'! 71(891:!&0'+<! *.0-)-0-'<! C<'(!*4D-2-<0(/0-12! &'.5(-0E! L-.'2.'! &'()-.'! $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<! @'(<-<0'2.'! =',/0-12/,!M$! Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 38. #/)/%6,-'20 ! #&@!!!!!!!!7'G%! JK3L%6,-'20 ! !!!!!!!!!!!!!!<'()'(! marvin #/)/%6,-'20!%! JK3L%6,-'20% !"#$%%!&'()'(! *4/+0'( ! *4/+0'(! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&'()'(!*++,-./0-12! 3145,'!612.'+0! ='<<15(.'<'()-.'! &'<<-12! &'()-.'! 71(891:!"2;-2'! ")'20<'()-.'! L-.'2<-2;!&'()-.'! ='+1(0<'()-.'!>?'0:1(8!@(-20-2;AB ! 71(891:%OD+,P ! L1.8-2; ! 612N;5(/0-12<<'()-.'! &'()-.'! 71(891:!&0'+<! *.0-)-0-'<! C<'(!*4D-2-<0(/0-12! &'.5(-0E! L-.'2.'! &'()-.'! $5<-2'<<!FGH'.0<!I!$5<-2'<<!&'()-.'<! @'(<-<0'2.'! =',/0-12/,!M$! Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 39. Reimplementation of all systems Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 40. Reimplementation of all systems • VSA planned in 2000 and 2002 to start the reimplementation of almost all important VSA group systems based on Java Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 41. Reimplementation of all systems • VSA planned in 2000 and 2002 to start the reimplementation of almost all important VSA group systems based on Java • Big need of supporting framework Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 42. Reimplementation of all systems • VSA planned in 2000 and 2002 to start the reimplementation of almost all important VSA group systems based on Java • Big need of supporting framework • Generating seemed to be the right way Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 43. Reimplementation of all systems • VSA planned in 2000 and 2002 to start the reimplementation of almost all important VSA group systems based on Java • Big need of supporting framework • Generating seemed to be the right way • Based on XML files Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 44. Reimplementation of all systems • VSA planned in 2000 and 2002 to start the reimplementation of almost all important VSA group systems based on Java • Big need of supporting framework • Generating seemed to be the right way • Based on XML files • Later a UML modeling was set on top of that Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 45. Reimplementation of all systems • VSA planned in 2000 and 2002 to start the reimplementation of almost all important VSA group systems based on Java • Big need of supporting framework • Generating seemed to be the right way • Based on XML files • Later a UML modeling was set on top of that • MagicDraw was used as UML tool, with VSA plugins for generating XMLs from the UML model Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 47. 9&:% <:9% $685)5;6,;% $685)5;6,;% 6,;);)65% =)6>5% /00%#4,% /?@% 76485% >+8AB+>5% /01200% &&20% 3*45565% #45A5% &'(%#)**)+,% -+.% !"#$% /000%CD-% E)4F84#5%
  • 48. 85& 45/& 63#2)273!7& 9)3:2& ';<& 63#2)273!7& :$#=>$:2& 3!7)7)32& '-.-//& 5';& 0*12232& (12=2& '&()**)$!& '///&?@+& +$,& !"#$%& %)1A#1(2&
  • 50. Why a new modeling for marvin?
  • 51. Problems with the UML Modelling Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 52. Problems with the UML Modelling • Opening a UML module lasted up to one hour Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 53. Problems with the UML Modelling • Opening a UML module lasted up to one hour • Opening a big UML diagram lasted up to ten minutes Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 54. Problems with the UML Modelling • Opening a UML module lasted up to one hour • Opening a big UML diagram lasted up to ten minutes • Turnaround times were too slow (changing UML diagram, generating XML files, generating Java files and compiling via ANT) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 55. Problems with the UML Modelling • Opening a UML module lasted up to one hour • Opening a big UML diagram lasted up to ten minutes • Turnaround times were too slow (changing UML diagram, generating XML files, generating Java files and compiling via ANT) • So we needed much coffee… Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 56. Problems with the UML Modelling Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 57. Problems with the UML Modelling • Modelling was not intuitive, because UML was “abused” to model something, that can’t be expressed in UML at all Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 58. Problems with the UML Modelling • Modelling was not intuitive, because UML was “abused” to model something, that can’t be expressed in UML at all • Modelling was partly cumbersome, because there is no assistance in editing the models Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 59. Problems with the UML Modelling • Modelling was not intuitive, because UML was “abused” to model something, that can’t be expressed in UML at all • Modelling was partly cumbersome, because there is no assistance in editing the models • Model was partly more complex than the XML file Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 60. Problems with the UML Modelling • Modelling was not intuitive, because UML was “abused” to model something, that can’t be expressed in UML at all • Modelling was partly cumbersome, because there is no assistance in editing the models • Model was partly more complex than the XML file • Workflow diagrams became too big, were confusing Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 61. Problems with the UML Modelling Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 62. Problems with the UML Modelling • Referencing other model elements was done only textual, not by model references Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 63. Problems with the UML Modelling • Referencing other model elements was done only textual, not by model references • No validation and code completion in the tool Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 64. Problems with the UML Modelling • Referencing other model elements was done only textual, not by model references • No validation and code completion in the tool • Branching was not possible, only one branch can be modeled Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 65. Problems with the UML Modelling • Referencing other model elements was done only textual, not by model references • No validation and code completion in the tool • Branching was not possible, only one branch can be modeled • Not all functionality of the XML Files could be expressed via UML Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 66. Problems with the UML Modelling • Referencing other model elements was done only textual, not by model references • No validation and code completion in the tool • Branching was not possible, only one branch can be modeled • Not all functionality of the XML Files could be expressed via UML • No two way editing between XML Files and UML Models Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 67. Problems with the UML Modelling • Referencing other model elements was done only textual, not by model references • No validation and code completion in the tool • Branching was not possible, only one branch can be modeled • Not all functionality of the XML Files could be expressed via UML • No two way editing between XML Files and UML Models • No navigation between code and model Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 68. Initializing Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 69. Initializing • Target was to massively improve tool handling and performance Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 70. Initializing • Target was to massively improve tool handling and performance • Four different offerers made suggestions for solution. Three of them made the same suggestion: Xtext and GMF based on Eclipse Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 71. Initializing • Target was to massively improve tool handling and performance • Four different offerers made suggestions for solution. Three of them made the same suggestion: Xtext and GMF based on Eclipse • itemis won the race due to best competence in Xtext Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 72. Project Start Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 73. Project Start • Fixed price contract including VSA developers taking part in the project to ensure training on the new technologies Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 74. Project Start • Fixed price contract including VSA developers taking part in the project to ensure training on the new technologies • Specification: Document and legacy code Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 75. Project Start • Fixed price contract including VSA developers taking part in the project to ensure training on the new technologies • Specification: Document and legacy code • two developers from items and two full time and two part time developers from VSA Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 76. Why Eclipse Modeling Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 77. Why Eclipse Modeling • Large ecosystem of modeling tools and frameworks available like in no other platform: • EMF • Xtext • GMF Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 78. Why Eclipse Modeling • Large ecosystem of modeling tools and frameworks available like in no other platform: • EMF • Xtext • GMF • Possibility of mixing textual and graphical modeling Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 79. Basic Objectives Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 80. Basic Objectives • Textual modeling for all languages with Xtext Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 81. Basic Objectives • Textual modeling for all languages with Xtext • Graphical modeling with GMF for selected aspects of certain languages to getting better overview (no UML!) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 82. Basic Objectives • Textual modeling for all languages with Xtext • Graphical modeling with GMF for selected aspects of certain languages to getting better overview (no UML!) • Integration of the legacy marvin generator as Eclipse Builder Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 83. Basic Objectives • Textual modeling for all languages with Xtext • Graphical modeling with GMF for selected aspects of certain languages to getting better overview (no UML!) • Integration of the legacy marvin generator as Eclipse Builder • Tooling for automatic 100% migration of existing projects, including layout information from MagicDraw; ability to migrate one project at a time Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 84. Basic Objectives • Textual modeling for all languages with Xtext • Graphical modeling with GMF for selected aspects of certain languages to getting better overview (no UML!) • Integration of the legacy marvin generator as Eclipse Builder • Tooling for automatic 100% migration of existing projects, including layout information from MagicDraw; ability to migrate one project at a time • support for mixing migrated and unmigrated projects, because projects can't be migrated all at once Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 85. Two language families, five languages
  • 86. XML + UML workflowdef.xsd datadict.xsd <?xml version="1.0" encoding="ISO-8859-15"?> <dataDictionary xmlns="http://www.vsa.de/datadict/1.45.2.4"> <domain> <databaseMapping tableName="VDOMAIN"> <column name="ID"> <IdType/> </column> <?xml version="1.0" encoding="ISO-8859-15"?> </databaseMapping> <dataDictionary <generator> xmlns="http://www.vsa.de/datadict/1.45.2.4"> <classes> <view> ... <databaseMapping viewName="V_VATTRIBUTE_JOIN_VIEW"/> <generator> <classes> ... <?xml version="1.0" encoding="ISO-8859-15"?> <workflow xmlns="http://www.vsa.de/workflow/1.0"> <javadoc>comment</javadoc> <synchWorkflow isMasterWorkflow="true" isStartableAsDetailWorkflow="true"> <targetGuis> <gui name="JAVA"/> </targetGuis> <objectModel> <rootObject class="vsa.marvin.mod.schulung.workflow.impl.CustomerManagementRoot" name="CustomerManagement"> <javadoc>Rootobject of the workflow</javadoc> <value attributePath="searchFor" name="searchFor"/> </rootObject> </objectModel> <globalMasks> <globalActivities> <activity name="SearchCustomer2"> <javadoc></javadoc> <synchTransition nextStep="CURRENT_STEP"/> </activity>
  • 87. <?xml version="1.0" encoding="ISO-8859-15"?> <dataDictionary xmlns="http://www.vsa.de/datadict/1.45.2.4"> <domain> <databaseMapping tableName="VDOMAIN"> <column name="ID"> <IdType/> </column> <column allowNulls="false" name="VDOMAINATTR"> <DecimalType precision="10" scale="0"/> </column> </databaseMapping> <generator> <classes> <superClass name="vsa.marvin.persist.DefaultPersistentObject"/> <domainIF internalName="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImplIF" name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.VDomainIF" baseOnly="true" generateBase="true" generatePublic="true"/> <domainImpl name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImpl" baseOnly="true" generateBase="true"/> </classes> <attributes> <defineAttributes> <attribute name="vdomainattr" type="int"> <javadoc></javadoc> <columnRef columnName="VDOMAINATTR"/> </attribute> </defineAttributes> </attributes> <createMethods/> <findMethods/> </generator> </domain> </dataDictionary>
  • 88. ?xml version="1.0" encoding="ISO-8859-15"? dataDictionary remove XML-noise: </...> xmlns="http: www.vsa.de datadict 1.45.2.4" domain databaseMapping tableName="VDOMAIN" column name="ID" IdType column column allowNulls="false" name="VDOMAINATTR" DecimalType precision="10" scale="0" column databaseMapping generator classes superClass name="vsa.marvin.persist.DefaultPersistentObject" domainIF internalName="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImplIF" name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.VDomainIF" baseOnly="true" generateBase="true" generatePublic="true" domainImpl name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImpl" baseOnly="true" generateBase="true" classes attributes defineAttributes attribute name="vdomainattr" type="int" javadoc javadoc columnRef columnName="VDOMAINATTR" attribute defineAttributes attributes createMethods findMethods generator domain dataDictionary
  • 89. dataDictionary remove metadata domain databaseMapping tableName="VDOMAIN" column name="ID" IdType column column allowNulls="false" name="VDOMAINATTR" DecimalType precision="10" scale="0" column databaseMapping generator classes superClass name="vsa.marvin.persist.DefaultPersistentObject" domainIF internalName="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImplIF" name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.VDomainIF" baseOnly="true" generateBase="true" generatePublic="true" domainImpl name="gen.vsa.marvin.mod.persist.examples.reference.views.joins.core.VDomainImpl" baseOnly="true" generateBase="true" classes attributes defineAttributes attribute name="vdomainattr" type="int" javadoc javadoc columnRef columnName="VDOMAINATTR" attribute defineAttributes attributes createMethods findMethods generator domain dataDictionary
  • 90. dataDictionary remove default/derivable values domain databaseMapping tableName="VDOMAIN" column name="VDOMAINATTR" DecimalType precision="10" scale="0" column databaseMapping generator classes superClass name="vsa.marvin.persist.DefaultPersistentObject" classes attributes defineAttributes attribute name="vdomainattr" type="int" javadoc javadoc columnRef columnName="VDOMAINATTR" attribute defineAttributes attributes createMethods findMethods generator domain dataDictionary
  • 91. dataDictionary summarize columns/attributes domain databaseMapping tableName="VDOMAIN" databaseMapping generator classes superClass name="vsa.marvin.persist.DefaultPersistentObject" classes attributes defineAttributes attribute name="vdomainattr" type="int" javadoc javadoc attribute defineAttributes attributes createMethods findMethods generator domain dataDictionary
  • 92. remove more noise domain databaseMapping "VDOMAIN" superClass name="vsa.marvin.persist.DefaultPersistentObject" attribute "vdomainattr" type="int"
  • 93. design convenient syntax domain-language-v2.0 package vsa.marvin.mod.persist.examples.reference.views.joins; import vsa.marvin.persist.DefaultPersistentObject; domain VDomain { database { table VDOMAIN; } classes { superClass javaClass DefaultPersistentObject; } attributes { private int vdomainattr; } methods { } }
  • 94. Let’s build this language in less than a minute
  • 95.
  • 96. Launch the New Editor
  • 97. datadict.xsd workflowdef.xsd Domain.xtext View.xtext Workflow.xtext ObjectModel.xtext Mask.xtext
  • 98. Models are code! Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 99. Models are code! • This is good, because we know how to handle code: • Compare, Merge • Version Control • Copy’n’paste across applications • Send artifacts via e-mail or web Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 100. Models are code! • This is good, because we know how to handle code: • Compare, Merge • Version Control • Copy’n’paste across applications • Send artifacts via e-mail or web • Furthermore, they integrate seamlessly with • existing code • existing build infrastructures Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 101. Architecture Xtend M2M <XML/> Xtext Model Model Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 102. Architecture Xtend M2M <XML/> EMF Xtext Model Model Model Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 103. Architecture Structure Def: Ecore derived from XML Schema Xtend M2M <XML/> EMF Xtext Model Model Model Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 104. Architecture Structure Def: Structure Def: Ecore derived from Ecore derived from XML Schema Xtend M2M Xtext Grammars <XML/> EMF Xtext Model Model Model Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 105. Architecture Structure Def: Structure Def: Ecore derived from Ecore derived from XML Schema Xtend M2M Xtext Grammars <XML/> EMF Xtext Model Model Model Load/Save: Xtend M2M EMF’s XMLResource Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 106. Architecture Structure Def: Structure Def: Ecore derived from Ecore derived from XML Schema Xtend M2M Xtext Grammars <XML/> EMF Xtext Model Model Model Load/Save: Load/Save: Xtend M2M XtextResource EMF’s XMLResource (extends EMF’s ResourceImpl) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 107. Migrate XML Models Xtend M2M XMLResource.load() XtextResource.save() <XML/> Xtext Model Model Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 108. Integrate Legacy Code Generator Xtend M2M <XML/> Xtext CodeGen Model Model XtextResource.load() XMLResource. save() Xtend M2M { Java } Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 109. Generic Integration Test (Roundtrip) Xtend M2M XMLResource.load() XtextResource.save() Compare <XML/> Xtext Model Model XMLResource.save() XtextResource.load() Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 110. Generic Integration Test This Tests: (Roundtrip) Xtend M2M XMLResource.load() XtextResource.save() Compare <XML/> Xtext Model Model XMLResource.save() XtextResource.load() Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 111. Generic Integration Test This Tests: (Roundtrip) XML2Xtext Xtend M2M XMLResource.load() XtextResource.save() Compare <XML/> Xtext Model Model XMLResource.save() XtextResource.load() Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 112. Generic Integration Test This Tests: (Roundtrip) XML2Xtext Serialization Xtend M2M XMLResource.load() XtextResource.save() Compare <XML/> Xtext Model Model XMLResource.save() XtextResource.load() Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 113. Generic Integration Test This Tests: (Roundtrip) XML2Xtext Serialization Xtend M2M Grammar XMLResource.load() XtextResource.save() Compare <XML/> Xtext Model Model XMLResource.save() XtextResource.load() Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 114. Generic Integration Test This Tests: (Roundtrip) XML2Xtext Serialization Xtend M2M Grammar XMLResource.load() XtextResource.save() Compare <XML/> Xtext Scoping Model Model XMLResource.save() XtextResource.load() Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 115. Generic Integration Test This Tests: (Roundtrip) XML2Xtext Serialization Xtend M2M Grammar XMLResource.load() XtextResource.save() Compare <XML/> Xtext Scoping Model Model XMLResource.save() XtextResource.load() Lexing/Parsing Xtend M2M Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 116. Generic Integration Test This Tests: (Roundtrip) XML2Xtext Serialization Xtend M2M Grammar XMLResource.load() XtextResource.save() Compare <XML/> Xtext Scoping Model Model XMLResource.save() XtextResource.load() Lexing/Parsing Xtend M2M ValueConversion Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 117. Generic Integration Test This Tests: (Roundtrip) XML2Xtext Serialization Xtend M2M Grammar XMLResource.load() XtextResource.save() Compare <XML/> Xtext Scoping Model Model XMLResource.save() XtextResource.load() Lexing/Parsing Xtend M2M Xtext2XML ValueConversion Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 118. GMF Integration (how to persist diagrams) XMI XMI via EMF’s XMIResource via EMF’s XMIResource <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1"> xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1"> <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel"> <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel"> <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004"> <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004"> <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/> <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/> <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/> <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/> <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/> <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/> <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/> <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/> <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/> <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/> </children> </children> ... ... Semantic Model (the actual model) Notation Model (Layout, Formatting, etc.) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 119. GMF Integration (how to persist diagrams) XMI XMI via EMF’s XMIResource via EMF’s XMIResource <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1"> xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1"> <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel"> <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel"> <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004"> <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004"> <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/> <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/> <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/> <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/> <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/> <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/> <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/> <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/> <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/> <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/> </children> </children> ... ... Semantic Model (the actual model) Notation Model (Layout, Formatting, etc.) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 120. GMF Integration (how to persist diagrams) Text XMI via XtextResource via EMF’s XMIResource workflow-language-v2.0 package vsa.marvin.mod.schulung.^workflow; <?xml version="1.0" encoding="UTF-8"?> <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:wf="http://www.vsa.de/marvin/dsl/workflow/0.1"> /* This workflow creates/removes/updates customer records */ <notation:Diagram xmi:id="_WRi84HSqEd-YCPMLqI1FhQ" type="workflow" measurementUnit="Pixel"> <children xmi:type="notation:Node" xmi:id="_WT_z8HSqEd-YCPMLqI1FhQ" type="2004"> workflow CustomerManagement isMasterWorkflow canBeDetailWorkflow { <children xmi:type="notation:DecorationNode" xmi:id="_WUBCEHSqEd-YCPMLqI1FhQ" type="5005"/> <styles xmi:type="notation:DescriptionStyle" xmi:id="_WT_z8XSqEd-YCPMLqI1FhQ"/> firstStep OverviewStep; <styles xmi:type="notation:FontStyle" xmi:id="_WT_z8nSqEd-YCPMLqI1FhQ" fontName="Lucida Grande" fontHeight="10"/> <styles xmi:type="notation:LineStyle" xmi:id="_WT_z83SqEd-YCPMLqI1FhQ"/> <element xmi:type="wf:NonGuiStep" href="CustomerManagement.wf#vsa_/steps:DeleteCustomer"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WT_z9HSqEd-YCPMLqI1FhQ" x="702" y="153"/> references { </children> ... objectModelRef CustomerManagement; externalDefinitionsRef Externals as infoheader; compWorkflowRef customersales workflow CustomerSales; Notation Model (Layout, Formatting, etc.) } workflowPart foopart { globalActivities { activity ShowCustomerCount -> ShowCustomerCountMessage; } guiStep ShowSalesInclude { javaMask vsa.marvin.mod.schulung.^workflow.ShowSalesIncludeMask; activity NextMonth -> ShowSalesInclude; Semantic Model (the actual model) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 121. GMF Integration - Consequences Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 122. GMF Integration - Consequences • No need for the graphical editor to cover complete model • Cheaper • Only use graphical syntax where it is indeed superior to textual syntax Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 123. GMF Integration - Consequences • No need for the graphical editor to cover complete model • Cheaper • Only use graphical syntax where it is indeed superior to textual syntax • If the XMI is lost, only the layout is lost Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 131. Domain Diagram: A canvas to pin up files
  • 134. Migration Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 135. Migration • A 100% migration of the existing models was necessary Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 136. Migration • A 100% migration of the existing models was necessary • About 75 CVS Modules to migrate Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 137. Migration • A 100% migration of the existing models was necessary • About 75 CVS Modules to migrate • At early time in project a automated migration test tool was implemented • Checkout all modules from CVS and build • Migrate to new modeling • Verify the results by comparing artefacts • Logging all errors and relevant differences Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 138. Migration • A 100% migration of the existing models was necessary • About 75 CVS Modules to migrate • At early time in project a automated migration test tool was implemented • Checkout all modules from CVS and build • Migrate to new modeling • Verify the results by comparing artefacts • Logging all errors and relevant differences • All problems in migration were discovered before rollout Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 139. Migration • A 100% migration of the existing models was necessary • About 75 CVS Modules to migrate • At early time in project a automated migration test tool was implemented • Checkout all modules from CVS and build • Migrate to new modeling • Verify the results by comparing artefacts • Logging all errors and relevant differences • All problems in migration were discovered before rollout • But: Searching for all the errors took much more time than predicted Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 140. Training of the users Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 141. Training of the users • Even for very experienced users it is helpful to be trained on a complete new way to model and new tools Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 142. Training of the users • Even for very experienced users it is helpful to be trained on a complete new way to model and new tools • An exercises project was implemented with tutorials covering the main features Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 143. Training of the users • Even for very experienced users it is helpful to be trained on a complete new way to model and new tools • An exercises project was implemented with tutorials covering the main features • All VSA developers (even our Rumanian ones) took part in a 4-6 hour training Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 144. Training of the users • Even for very experienced users it is helpful to be trained on a complete new way to model and new tools • An exercises project was implemented with tutorials covering the main features • All VSA developers (even our Rumanian ones) took part in a 4-6 hour training • Result:Very few handling problems, low support effort of the VSA modeling developers Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 145. Distributed project Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 146. Distributed project • Project was distributed over four locations Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 147. Distributed project • Project was distributed over four locations • Shared infrastructure from the very beginning • Subversion • Bug tracking system • Wiki Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 148. Distributed project • Project was distributed over four locations • Shared infrastructure from the very beginning • Subversion • Bug tracking system • Wiki • Weekly telephone conference to check status and discuss problems Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 149. Distributed project • Project was distributed over four locations • Shared infrastructure from the very beginning • Subversion • Bug tracking system • Wiki • Weekly telephone conference to check status and discuss problems • Later in the project communication rules to ensure efficient working Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 150. How to minimize complexity Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 151. How to minimize complexity • Use stable versions of the frameworks Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 152. How to minimize complexity • Use stable versions of the frameworks • Use GMF only if necessary Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 153. How to minimize complexity • Use stable versions of the frameworks • Use GMF only if necessary • Migrate existing models only if necessary, because you are not free in defining the language and migration has to be tested very intensive Moritz Eysholdt, itemis - Johannes Rupprecht,VSA
  • 154. How to minimize complexity • Use stable versions of the frameworks • Use GMF only if necessary • Migrate existing models only if necessary, because you are not free in defining the language and migration has to be tested very intensive • Work test-driven with continous integration (that is a really big problem when developing plugins for eclipse) Moritz Eysholdt, itemis - Johannes Rupprecht,VSA

Hinweis der Redaktion