SlideShare a Scribd company logo
1 of 76
A FRESH LOOK
        AT
GRAPHICAL EDITING
     Dr. Jan Köhnlein
A PICTURE
     SAYS
 MORE THAN
A THOUSAND
   WORDS
A PICTURE
     SAYS
 MORE THAN
A THOUSAND
   WORDS w
          ron
              g
package ecore

class EObject {}

abstract class EModelElement extends EObject {}

class EFactory extends EObject {}
abstract class ENamedElement extends EModelElement{}
class EAnnotation extends EObject {}

class EPackage extends ENamedElement {}
abstract class EClassifier extends ENamedElement {}
class EEnumLiteral extends ENamedElement {}
abstract class ETypedElement extends ENamedElement {}

class EClass extends EClassifier {}
class EDataType extends EClassifier {}

abstract class EStructuralFeature extends ETypedElement {}
class EOperation extends ETypedElement {}
class EParameter extends ETypedElement {}

class EEnum extends EDataType {}

class EAttribute extends EStructuralFeature {}
class EReference extends EStructuralFeature {}
package ecore

           class EObject {}

           abstract class EModelElement extends EObject {}

           class EFactory extends EObject {}
           abstract class ENamedElement extends EModelElement{}
           class EAnnotation extends EObject {}

           class EPackage extends ENamedElement {}
           abstract class EClassifier extends ENamedElement {}
           class EEnumLiteral extends ENamedElement {}
           abstract class ETypedElement extends ENamedElement {}

           class EClass extends EClassifier {}
           class EDataType extends EClassifier {}

           abstract class EStructuralFeature extends ETypedElement {}
           class EOperation extends ETypedElement {}




73 words
           class EParameter extends ETypedElement {}

           class EEnum extends EDataType {}

           class EAttribute extends EStructuralFeature {}
           class EReference extends EStructuralFeature {}
abstract class EStructuralFeature extends ETypedElement {
	    boolean changeable = "true"
	    boolean ^volatile
	    boolean ^transient
	    String defaultValueLiteral
	    EJavaObject defaultValue
	    boolean ^unsettable
	    boolean ^derived
	    op int getFeatureID()
	    op EJavaClass getContainerClass()
	    container EClass eContainingClass opposite eStructuralFeatures
}

class EReference extends EStructuralFeature {
	    boolean containment
	    boolean ^container
	    boolean resolveProxies = "true"
	    refers EReference eOpposite opposite eOpposite
}



class EParameter extends ETypedElement {
	    container EOperation eOperation opposite eParameters
}

class EAttribute extends EStructuralFeature {
	    boolean iD
	    refers EDataType eAttributeType
}

class EEnumLiteral extends ENamedElement {
	    int value
	    EEnumerator instance
	    container EEnum eEnum opposite eLiterals
}

class EEnum extends EDataType {
	    op EEnumLiteral getEEnumLiteral(String name)
	    op EEnumLiteral getEEnumLiteral(int value)
	    contains EEnumLiteral[] eLiterals opposite eEnum
}

class EObject {}
type EJavaClass wraps Class
type EJavaObject wraps Object
type EEnumerator wraps java.util.Enumeration
abstract class EStructuralFeature extends ETypedElement {
 	    boolean changeable = "true"
 	    boolean ^volatile
 	    boolean ^transient
 	    String defaultValueLiteral
 	    EJavaObject defaultValue
 	    boolean ^unsettable
 	    boolean ^derived
 	    op int getFeatureID()
 	    op EJavaClass getContainerClass()
 	    container EClass eContainingClass opposite eStructuralFeatures
 }

 class EReference extends EStructuralFeature {
 	    boolean containment
 	    boolean ^container
 	    boolean resolveProxies = "true"
 	    refers EReference eOpposite opposite eOpposite
 }



 class EParameter extends ETypedElement {



368 Words
 	    container EOperation eOperation opposite eParameters
 }

 class EAttribute extends EStructuralFeature {
 	    boolean iD
 	    refers EDataType eAttributeType
 }

 class EEnumLiteral extends ENamedElement {
 	    int value
 	    EEnumerator instance
 	    container EEnum eEnum opposite eLiterals
 }

 class EEnum extends EDataType {
 	    op EEnumLiteral getEEnumLiteral(String name)
 	    op EEnumLiteral getEEnumLiteral(int value)
 	    contains EEnumLiteral[] eLiterals opposite eEnum
 }

 class EObject {}
 type EJavaClass wraps Class
 type EJavaObject wraps Object
 type EEnumerator wraps java.util.Enumeration
ENTIRE ECORE ~500 WORDS
A GOOD DIAGRAM
IS A PROJECTION
Mapping




Semantic model       Diagram
Mapping




Semantic model       Diagram
STRUCTURAL MISMATCH
                         bar
               Foo             Bar



Package              Diagram
 Class                Node
   Property
 Class                Node
 Association          Connection
   Property            Label
EDITING METAPHORS
                 bar
           Foo         Bar
EDITING METAPHORS
                          bar
                    Foo         Bar



Delete from model
EDITING METAPHORS
                             bar
                      Foo          Bar



Delete from model   Delete from diagram
EDITING METAPHORS
                               bar
                        Foo          Bar



Delete from model     Delete from diagram
              Drag & Drop
EDITING METAPHORS
                                bar
                         Foo          Bar



Delete from model      Delete from diagram
              Drag & Drop
              Copy & Paste
TECHNOLOGY MISMATCH
 EMF               EMF
 EMFT    Changes
                   EMFT
 Xtext
                   CDO
  Java              ...
   ...
TODOs for a
Graphical Tool
TODOs for a
Diagram editor
 Graphical Tool
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
Element picker / filter
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
Element picker / filter
Bidirectional
transaction mapper
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
Element picker / filter
Bidirectional
transaction mapper
Diagram design
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
           view
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter   DSL
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter DSL
 Bidirectional  expressions
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter DSL
 Bidirectional  expressions
 transaction mapper
                        snapshot
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter DSL
 Bidirectional  expressions
 transaction mapper
                        snapshot
          stylesheet DSL
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
    Element picker / filter DSL
    Bidirectional   expressions
    transaction mapper
                           snapshot
liveDiagramstylesheet DSL
              design
   Model browser or full
   model editor
   Detail editor
   Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
live Element picker / filter DSL
     Bidirectional   expressions
     transaction mapper
                            snapshot
liveDiagramstylesheet DSL
               design
   Model browser or full
   model editor
   Detail editor
   Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
live Element picker / filter DSL
     Bidirectional   expressions
     transaction mapper
                            snapshot
liveDiagramstylesheet DSL
               design
   Model browser or full
   model editor
   Detail editor
   Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
live Element picker / filter DSL
     Bidirectional   expressions
     transaction mapper
                            snapshot
liveDiagramstylesheet DSL
               design
   Model browser or full
           text
   model editor
   Detail editor
   Model navigation
base
base
Modern Expression Language
base
Modern Expression Language
Java-Integration
base
Modern Expression Language
Java-Integration
Statically Typed
base
Modern Expression Language
Java-Integration
Statically Typed
Highly Reusable
RUNTIME
•   Reads mapping and stylesheet

•   Capture snapshots of any live model

•   Render GEF diagram with shape library

•   Selection / navigation adapter for

    •   EMF, Xtext, JDT
MAPPING DSL
•   Xtext-based with Xbase expressions

•   Uni-directional transformation

•   Interpreted
STYLING DSL
•   Xtext-based with Xbase expressions

•   Directly modifies Draw2d figures

•   Interpreted
MyClass



SuperClass
MyClass     this


SuperClass
diagram EClassHierarchy type EClass {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this




 MyClass       this                     MyClass




SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {




 MyClass       this                    MyClass




SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {




 MyClass                               MyClass




SuperClass      this
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass                               MyClass




SuperClass      this
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass                               MyClass




SuperClass      this
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass                               MyClass




SuperClass      this                  SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass       this                    MyClass




SuperClass                            SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass       this                    MyClass




SuperClass                            SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this
	 	 }
	 }
}




 MyClass       this                    MyClass




SuperClass                            SuperClass
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy
                                           refs to mappings
style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()      Xbase body
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
                                           this variable
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}
                                           color literals
style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {                    extensions
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)       semantic styling
}
The code is at

https://github.com/JanKoehnlein/Generic-Graph-View


                 But remember:

        IT‘S A PROTOTYPE

More Related Content

What's hot

What's hot (15)

WPF Layout Containers
WPF Layout ContainersWPF Layout Containers
WPF Layout Containers
 
WPF Controls
WPF ControlsWPF Controls
WPF Controls
 
Html entities
Html entitiesHtml entities
Html entities
 
Applets - lev' 2
Applets - lev' 2Applets - lev' 2
Applets - lev' 2
 
Html character entities
Html character entitiesHtml character entities
Html character entities
 
Notes netbeans
Notes netbeansNotes netbeans
Notes netbeans
 
CSS教材
CSS教材CSS教材
CSS教材
 
Auto cad p&id
Auto cad  p&idAuto cad  p&id
Auto cad p&id
 
Uml & rup
Uml & rupUml & rup
Uml & rup
 
14 class design
14 class design14 class design
14 class design
 
14 class design (1)
14 class design (1)14 class design (1)
14 class design (1)
 
27418524 design-patterns-dot-net-with-examples
27418524 design-patterns-dot-net-with-examples27418524 design-patterns-dot-net-with-examples
27418524 design-patterns-dot-net-with-examples
 
Javascript by Yahoo
Javascript by YahooJavascript by Yahoo
Javascript by Yahoo
 
Uml Diagrams for Web Developers
Uml Diagrams for Web DevelopersUml Diagrams for Web Developers
Uml Diagrams for Web Developers
 
13 Graph Classes
13 Graph Classes13 Graph Classes
13 Graph Classes
 

Viewers also liked

Motivation Kommunikation Rhetorik Bildungsinstitut Wirtschaft
Motivation Kommunikation Rhetorik Bildungsinstitut WirtschaftMotivation Kommunikation Rhetorik Bildungsinstitut Wirtschaft
Motivation Kommunikation Rhetorik Bildungsinstitut WirtschaftNicole Biermann-Wehmeyer
 
Tarea 1.1 cics
Tarea 1.1 cicsTarea 1.1 cics
Tarea 1.1 cicsalvcarlop
 
#Buchführungsseminar #BildungsinstitutWirtschaft
#Buchführungsseminar #BildungsinstitutWirtschaft#Buchführungsseminar #BildungsinstitutWirtschaft
#Buchführungsseminar #BildungsinstitutWirtschaftNicole Biermann-Wehmeyer
 
Introduction Monique Barrett
Introduction   Monique BarrettIntroduction   Monique Barrett
Introduction Monique BarrettMonique Barrett
 
Tarea 1. cics
Tarea 1. cicsTarea 1. cics
Tarea 1. cicsalvcarlop
 
Attack the block
Attack the blockAttack the block
Attack the blockToddwhitsey
 
Menú caso de aplicación 2
Menú caso de aplicación 2Menú caso de aplicación 2
Menú caso de aplicación 2ERIKA
 
Android, door Pieter Meijer op de 4DotNet Developers Day
Android, door Pieter Meijer op de 4DotNet Developers DayAndroid, door Pieter Meijer op de 4DotNet Developers Day
Android, door Pieter Meijer op de 4DotNet Developers DayHanneke Dotnet
 
Buscadores y metabuscadores
Buscadores y metabuscadoresBuscadores y metabuscadores
Buscadores y metabuscadoresJorge Moya
 
Preguntas curso de mantenimiento
Preguntas  curso de mantenimientoPreguntas  curso de mantenimiento
Preguntas curso de mantenimientoEdwin Valladares
 
30 reproduccion celular
30 reproduccion celular30 reproduccion celular
30 reproduccion celularjuanapardo
 
AST - the only true tool for building JavaScript
AST - the only true tool for building JavaScriptAST - the only true tool for building JavaScript
AST - the only true tool for building JavaScriptIngvar Stepanyan
 
Creating own language made easy
Creating own language made easyCreating own language made easy
Creating own language made easyIngvar Stepanyan
 

Viewers also liked (20)

Motivation Kommunikation Rhetorik Bildungsinstitut Wirtschaft
Motivation Kommunikation Rhetorik Bildungsinstitut WirtschaftMotivation Kommunikation Rhetorik Bildungsinstitut Wirtschaft
Motivation Kommunikation Rhetorik Bildungsinstitut Wirtschaft
 
Jyoti sorout
Jyoti soroutJyoti sorout
Jyoti sorout
 
Tarea 1.1 cics
Tarea 1.1 cicsTarea 1.1 cics
Tarea 1.1 cics
 
#Buchführungsseminar #BildungsinstitutWirtschaft
#Buchführungsseminar #BildungsinstitutWirtschaft#Buchführungsseminar #BildungsinstitutWirtschaft
#Buchführungsseminar #BildungsinstitutWirtschaft
 
Introduction Monique Barrett
Introduction   Monique BarrettIntroduction   Monique Barrett
Introduction Monique Barrett
 
Tarea 1. cics
Tarea 1. cicsTarea 1. cics
Tarea 1. cics
 
es6.concurrency()
es6.concurrency()es6.concurrency()
es6.concurrency()
 
JS: Audio Data Processing
JS: Audio Data ProcessingJS: Audio Data Processing
JS: Audio Data Processing
 
Jyoti sorout
Jyoti soroutJyoti sorout
Jyoti sorout
 
Your code is not a string
Your code is not a stringYour code is not a string
Your code is not a string
 
Attack the block
Attack the blockAttack the block
Attack the block
 
Menú caso de aplicación 2
Menú caso de aplicación 2Menú caso de aplicación 2
Menú caso de aplicación 2
 
Android, door Pieter Meijer op de 4DotNet Developers Day
Android, door Pieter Meijer op de 4DotNet Developers DayAndroid, door Pieter Meijer op de 4DotNet Developers Day
Android, door Pieter Meijer op de 4DotNet Developers Day
 
Buscadores y metabuscadores
Buscadores y metabuscadoresBuscadores y metabuscadores
Buscadores y metabuscadores
 
Preguntas curso de mantenimiento
Preguntas  curso de mantenimientoPreguntas  curso de mantenimiento
Preguntas curso de mantenimiento
 
sitio web
sitio websitio web
sitio web
 
30 reproduccion celular
30 reproduccion celular30 reproduccion celular
30 reproduccion celular
 
AST - the only true tool for building JavaScript
AST - the only true tool for building JavaScriptAST - the only true tool for building JavaScript
AST - the only true tool for building JavaScript
 
Creating own language made easy
Creating own language made easyCreating own language made easy
Creating own language made easy
 
Instalación de Linux
Instalación de LinuxInstalación de Linux
Instalación de Linux
 

Similar to Hard-wired Uni-Directional Mapping in Diagram Editors

VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph IntroductionMats Persson
 
Encodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization ComponentsEncodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization ComponentsKrist Wongsuphasawat
 
Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074Paul Sandoz
 
Generics Past, Present and Future
Generics Past, Present and FutureGenerics Past, Present and Future
Generics Past, Present and FutureRichardWarburton
 
Training institute in Bangalore
Training institute in BangaloreTraining institute in Bangalore
Training institute in Bangalorepentagonspace1
 
Best training institute
Best training institute Best training institute
Best training institute pentagonspace1
 
PhD Presentation
PhD PresentationPhD Presentation
PhD Presentationmskayed
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side JavascriptJulie Iskander
 
Overcoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And ArchitectureOvercoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And ArchitecturePeter Friese
 
A recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templatesA recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templatesCoen De Roover
 
Model-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product LinesModel-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product LinesMarkus Voelter
 
A Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X TransformationA Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X TransformationCoen De Roover
 

Similar to Hard-wired Uni-Directional Mapping in Diagram Editors (20)

e4 Webinar - Toolkit Model
e4 Webinar - Toolkit Modele4 Webinar - Toolkit Model
e4 Webinar - Toolkit Model
 
Eclipse meets e4
Eclipse meets e4Eclipse meets e4
Eclipse meets e4
 
VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph Introduction
 
Encodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization ComponentsEncodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization Components
 
Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074
 
ITU - MDD - EMF
ITU - MDD - EMFITU - MDD - EMF
ITU - MDD - EMF
 
JavaEE Spring Seam
JavaEE Spring SeamJavaEE Spring Seam
JavaEE Spring Seam
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
Generics Past, Present and Future
Generics Past, Present and FutureGenerics Past, Present and Future
Generics Past, Present and Future
 
Training institute in Bangalore
Training institute in BangaloreTraining institute in Bangalore
Training institute in Bangalore
 
Best training institute
Best training institute Best training institute
Best training institute
 
PhD Presentation
PhD PresentationPhD Presentation
PhD Presentation
 
JFree chart
JFree chartJFree chart
JFree chart
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
Overcoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And ArchitectureOvercoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And Architecture
 
java ee 6 Petcatalog
java ee 6 Petcatalogjava ee 6 Petcatalog
java ee 6 Petcatalog
 
A recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templatesA recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templates
 
Model-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product LinesModel-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product Lines
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
A Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X TransformationA Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X Transformation
 

Recently uploaded

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Recently uploaded (20)

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

Hard-wired Uni-Directional Mapping in Diagram Editors

  • 1. A FRESH LOOK AT GRAPHICAL EDITING Dr. Jan Köhnlein
  • 2.
  • 3. A PICTURE SAYS MORE THAN A THOUSAND WORDS
  • 4. A PICTURE SAYS MORE THAN A THOUSAND WORDS w ron g
  • 5.
  • 6. package ecore class EObject {} abstract class EModelElement extends EObject {} class EFactory extends EObject {} abstract class ENamedElement extends EModelElement{} class EAnnotation extends EObject {} class EPackage extends ENamedElement {} abstract class EClassifier extends ENamedElement {} class EEnumLiteral extends ENamedElement {} abstract class ETypedElement extends ENamedElement {} class EClass extends EClassifier {} class EDataType extends EClassifier {} abstract class EStructuralFeature extends ETypedElement {} class EOperation extends ETypedElement {} class EParameter extends ETypedElement {} class EEnum extends EDataType {} class EAttribute extends EStructuralFeature {} class EReference extends EStructuralFeature {}
  • 7. package ecore class EObject {} abstract class EModelElement extends EObject {} class EFactory extends EObject {} abstract class ENamedElement extends EModelElement{} class EAnnotation extends EObject {} class EPackage extends ENamedElement {} abstract class EClassifier extends ENamedElement {} class EEnumLiteral extends ENamedElement {} abstract class ETypedElement extends ENamedElement {} class EClass extends EClassifier {} class EDataType extends EClassifier {} abstract class EStructuralFeature extends ETypedElement {} class EOperation extends ETypedElement {} 73 words class EParameter extends ETypedElement {} class EEnum extends EDataType {} class EAttribute extends EStructuralFeature {} class EReference extends EStructuralFeature {}
  • 8.
  • 9. abstract class EStructuralFeature extends ETypedElement { boolean changeable = "true" boolean ^volatile boolean ^transient String defaultValueLiteral EJavaObject defaultValue boolean ^unsettable boolean ^derived op int getFeatureID() op EJavaClass getContainerClass() container EClass eContainingClass opposite eStructuralFeatures } class EReference extends EStructuralFeature { boolean containment boolean ^container boolean resolveProxies = "true" refers EReference eOpposite opposite eOpposite } class EParameter extends ETypedElement { container EOperation eOperation opposite eParameters } class EAttribute extends EStructuralFeature { boolean iD refers EDataType eAttributeType } class EEnumLiteral extends ENamedElement { int value EEnumerator instance container EEnum eEnum opposite eLiterals } class EEnum extends EDataType { op EEnumLiteral getEEnumLiteral(String name) op EEnumLiteral getEEnumLiteral(int value) contains EEnumLiteral[] eLiterals opposite eEnum } class EObject {} type EJavaClass wraps Class type EJavaObject wraps Object type EEnumerator wraps java.util.Enumeration
  • 10. abstract class EStructuralFeature extends ETypedElement { boolean changeable = "true" boolean ^volatile boolean ^transient String defaultValueLiteral EJavaObject defaultValue boolean ^unsettable boolean ^derived op int getFeatureID() op EJavaClass getContainerClass() container EClass eContainingClass opposite eStructuralFeatures } class EReference extends EStructuralFeature { boolean containment boolean ^container boolean resolveProxies = "true" refers EReference eOpposite opposite eOpposite } class EParameter extends ETypedElement { 368 Words container EOperation eOperation opposite eParameters } class EAttribute extends EStructuralFeature { boolean iD refers EDataType eAttributeType } class EEnumLiteral extends ENamedElement { int value EEnumerator instance container EEnum eEnum opposite eLiterals } class EEnum extends EDataType { op EEnumLiteral getEEnumLiteral(String name) op EEnumLiteral getEEnumLiteral(int value) contains EEnumLiteral[] eLiterals opposite eEnum } class EObject {} type EJavaClass wraps Class type EJavaObject wraps Object type EEnumerator wraps java.util.Enumeration
  • 11.
  • 13. A GOOD DIAGRAM IS A PROJECTION
  • 16. STRUCTURAL MISMATCH bar Foo Bar Package Diagram Class Node Property Class Node Association Connection Property Label
  • 17. EDITING METAPHORS bar Foo Bar
  • 18. EDITING METAPHORS bar Foo Bar Delete from model
  • 19. EDITING METAPHORS bar Foo Bar Delete from model Delete from diagram
  • 20. EDITING METAPHORS bar Foo Bar Delete from model Delete from diagram Drag & Drop
  • 21. EDITING METAPHORS bar Foo Bar Delete from model Delete from diagram Drag & Drop Copy & Paste
  • 22. TECHNOLOGY MISMATCH EMF EMF EMFT Changes EMFT Xtext CDO Java ... ...
  • 23.
  • 25. TODOs for a Diagram editor Graphical Tool
  • 26. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping
  • 27. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter
  • 28. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper
  • 29. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design
  • 30. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor
  • 31. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor
  • 32. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 33. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 34. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 35. TODOs for a Diagram editor Graphical Tool Hard-wired view bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 36. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 37. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 38. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 39. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper snapshot Diagram design Model browser or full model editor Detail editor Model navigation
  • 40. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper snapshot stylesheet DSL Diagram design Model browser or full model editor Detail editor Model navigation
  • 41. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full model editor Detail editor Model navigation
  • 42. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping live Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full model editor Detail editor Model navigation
  • 43. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping live Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full model editor Detail editor Model navigation
  • 44. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping live Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full text model editor Detail editor Model navigation
  • 45. base
  • 50. RUNTIME • Reads mapping and stylesheet • Capture snapshots of any live model • Render GEF diagram with shape library • Selection / navigation adapter for • EMF, Xtext, JDT
  • 51. MAPPING DSL • Xtext-based with Xbase expressions • Uni-directional transformation • Interpreted
  • 52. STYLING DSL • Xtext-based with Xbase expressions • Directly modifies Draw2d figures • Interpreted
  • 54. MyClass this SuperClass
  • 55. diagram EClassHierarchy type EClass { MyClass this SuperClass
  • 56. diagram EClassHierarchy type EClass { MyClass this SuperClass
  • 57. diagram EClassHierarchy type EClass { node EClassNode for this { MyClass this SuperClass
  • 58. diagram EClassHierarchy type EClass { node EClassNode for this { MyClass this SuperClass
  • 59. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this MyClass this SuperClass
  • 60. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this MyClass this MyClass SuperClass
  • 61. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { MyClass this MyClass SuperClass
  • 62. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { MyClass MyClass SuperClass this
  • 63. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass MyClass SuperClass this
  • 64. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass MyClass SuperClass this
  • 65. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass MyClass SuperClass this SuperClass
  • 66. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass this MyClass SuperClass SuperClass
  • 67. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass this MyClass SuperClass SuperClass
  • 68. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this } } } MyClass this MyClass SuperClass SuperClass
  • 69. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 70. stylesheet EClassHierarchy for EClassHierarchy refs to mappings style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 71. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() Xbase body arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 72. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this variable this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 73. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } color literals style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 74. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { extensions font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 75. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) semantic styling }
  • 76. The code is at https://github.com/JanKoehnlein/Generic-Graph-View But remember: IT‘S A PROTOTYPE

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n