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 (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

Tarea 1.1 cics
Tarea 1.1 cicsTarea 1.1 cics
Tarea 1.1 cics
alvcarlop
 
Introduction Monique Barrett
Introduction   Monique BarrettIntroduction   Monique Barrett
Introduction Monique Barrett
Monique Barrett
 
Attack the block
Attack the blockAttack the block
Attack the block
Toddwhitsey
 
Buscadores y metabuscadores
Buscadores y metabuscadoresBuscadores y metabuscadores
Buscadores y metabuscadores
Jorge Moya
 
Preguntas curso de mantenimiento
Preguntas  curso de mantenimientoPreguntas  curso de mantenimiento
Preguntas curso de mantenimiento
Edwin Valladares
 
30 reproduccion celular
30 reproduccion celular30 reproduccion celular
30 reproduccion celular
juanapardo
 
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
Ingvar 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 2011 10-24-initiatives-tracker-launch-v1.0

PhD Presentation
PhD PresentationPhD Presentation
PhD Presentation
mskayed
 
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
Markus Voelter
 

Similar to 2011 10-24-initiatives-tracker-launch-v1.0 (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

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

2011 10-24-initiatives-tracker-launch-v1.0

  • 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