Xtext Eclipse Demo Camp Berlin

65
Peter Friese, itemis @peterfriese @xtext (c) 2009 Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.php More info: http://www.peterfriese.de / http://www.itemis.com

description

Slides for my talk on Domain Specific Languages at the Eclipse DemoCamp in Berlin.

Transcript of Xtext Eclipse Demo Camp Berlin

Page 1: Xtext Eclipse Demo Camp Berlin

Peter Friese, itemis@peterfriese

@xtext(c) 2009 Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.php

More info: http://www.peterfriese.de / http://www.itemis.com

Page 2: Xtext Eclipse Demo Camp Berlin

➊Peter Friese, itemis

@peterfriese@xtext

(c) 2009 Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.phpMore info: http://www.peterfriese.de / http://www.itemis.com

Page 3: Xtext Eclipse Demo Camp Berlin

➊ ➋Peter Friese, itemis

@peterfriese@xtext

(c) 2009 Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.phpMore info: http://www.peterfriese.de / http://www.itemis.com

Page 4: Xtext Eclipse Demo Camp Berlin

➊ ➋ ➌Peter Friese, itemis

@peterfriese@xtext

(c) 2009 Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.phpMore info: http://www.peterfriese.de / http://www.itemis.com

Page 5: Xtext Eclipse Demo Camp Berlin

➊ ➋ ➌Peter Friese, itemis

@peterfriese@xtext

(c) 2009 Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.phpMore info: http://www.peterfriese.de / http://www.itemis.com

Page 6: Xtext Eclipse Demo Camp Berlin
Page 7: Xtext Eclipse Demo Camp Berlin

Right tool for the job?

?

Page 8: Xtext Eclipse Demo Camp Berlin

Your trusty swiss army knife!

Page 9: Xtext Eclipse Demo Camp Berlin

You’d want to core a few more apples...

Page 10: Xtext Eclipse Demo Camp Berlin

... for an apple cake.

Page 11: Xtext Eclipse Demo Camp Berlin

Still the best tool for the job?

Page 12: Xtext Eclipse Demo Camp Berlin

Better use this one.

Page 13: Xtext Eclipse Demo Camp Berlin

and this one:

Page 14: Xtext Eclipse Demo Camp Berlin

A DSL is...

Page 15: Xtext Eclipse Demo Camp Berlin

A specific toolfor a specific job

Page 16: Xtext Eclipse Demo Camp Berlin

A specific toolfor a specific job

Page 17: Xtext Eclipse Demo Camp Berlin

Think about your job!

Page 18: Xtext Eclipse Demo Camp Berlin

Feel like this?

Page 19: Xtext Eclipse Demo Camp Berlin

...

Page 20: Xtext Eclipse Demo Camp Berlin

because

Page 21: Xtext Eclipse Demo Camp Berlin

you

Page 22: Xtext Eclipse Demo Camp Berlin

need

Page 23: Xtext Eclipse Demo Camp Berlin

to

Page 24: Xtext Eclipse Demo Camp Berlin

write

Page 25: Xtext Eclipse Demo Camp Berlin

THIS?

Page 26: Xtext Eclipse Demo Camp Berlin

THIS?

Page 27: Xtext Eclipse Demo Camp Berlin

Wrong Level of Abstraction!http://www.flickr.com/photos/rykerstribe/3222969466/

Page 28: Xtext Eclipse Demo Camp Berlin
Page 29: Xtext Eclipse Demo Camp Berlin

@SuppressWarnings("serial")@Entity@Table(name = "CUSTOMER_INFO")public class CustomerInfo implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idSeq") @SequenceGenerator(name = "idSeq", sequenceName = "CUST_SEQ", allocationSize = 1) @Column(name = "CUST_ID", nullable = false) private String customerId;

public void setCustomerId(String customerId) { this.customerId = customerId; }

public String getCustomerId() { return customerId; }

@Column(name = "EMAIL", nullable = false, length = 128) private String emailAddress;

public String getEmailAddress() { return emailAddress; }

public void setEmailAddress(String emailAddress) { String oldValue = emailAddress; this.emailAddress = emailAddress; firePropertyChangedEvent("emailAddress", oldValue, this.emailAddress); }

Page 30: Xtext Eclipse Demo Camp Berlin

@SuppressWarnings("serial")@Entity@Table(name = "CUSTOMER_INFO")public class CustomerInfo implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idSeq") @SequenceGenerator(name = "idSeq", sequenceName = "CUST_SEQ", allocationSize = 1) @Column(name = "CUST_ID", nullable = false) private String customerId;

public void setCustomerId(String customerId) { this.customerId = customerId; }

public String getCustomerId() { return customerId; }

@Column(name = "EMAIL", nullable = false, length = 128) private String emailAddress;

public String getEmailAddress() { return emailAddress; }

public void setEmailAddress(String emailAddress) { String oldValue = emailAddress; this.emailAddress = emailAddress; firePropertyChangedEvent("emailAddress", oldValue, this.emailAddress); }

Page 31: Xtext Eclipse Demo Camp Berlin

entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128)}

Page 32: Xtext Eclipse Demo Camp Berlin

Bean(POJO) DAO

entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128)}

Page 33: Xtext Eclipse Demo Camp Berlin

DemoCreating an Entity DSL in 3 Simple Steps

Page 34: Xtext Eclipse Demo Camp Berlin

➊Create a DSL

Page 35: Xtext Eclipse Demo Camp Berlin
Page 36: Xtext Eclipse Demo Camp Berlin
Page 37: Xtext Eclipse Demo Camp Berlin

Define the Grammar

Page 38: Xtext Eclipse Demo Camp Berlin
Page 39: Xtext Eclipse Demo Camp Berlin
Page 40: Xtext Eclipse Demo Camp Berlin

Compile the Grammar

Page 41: Xtext Eclipse Demo Camp Berlin
Page 42: Xtext Eclipse Demo Camp Berlin
Page 43: Xtext Eclipse Demo Camp Berlin

Start the Runtime Workbench

Page 44: Xtext Eclipse Demo Camp Berlin
Page 45: Xtext Eclipse Demo Camp Berlin
Page 46: Xtext Eclipse Demo Camp Berlin

Start Using the DSL

Page 47: Xtext Eclipse Demo Camp Berlin
Page 48: Xtext Eclipse Demo Camp Berlin

Page 49: Xtext Eclipse Demo Camp Berlin

Pimp My Write➋

Page 50: Xtext Eclipse Demo Camp Berlin

Page 51: Xtext Eclipse Demo Camp Berlin
Page 52: Xtext Eclipse Demo Camp Berlin

Create a Label Provider

Page 53: Xtext Eclipse Demo Camp Berlin
Page 54: Xtext Eclipse Demo Camp Berlin

Add a Generator

Page 55: Xtext Eclipse Demo Camp Berlin
Page 56: Xtext Eclipse Demo Camp Berlin
Page 57: Xtext Eclipse Demo Camp Berlin

Adding a Builder

Page 58: Xtext Eclipse Demo Camp Berlin
Page 59: Xtext Eclipse Demo Camp Berlin

Page 60: Xtext Eclipse Demo Camp Berlin

Concentrate on Essentials

Page 61: Xtext Eclipse Demo Camp Berlin

Higher Efficiency

Page 62: Xtext Eclipse Demo Camp Berlin

Better Maintainability

http://www.flickr.com/photos/flyforfun/2638180406/

Page 63: Xtext Eclipse Demo Camp Berlin

No More Boring Code

Page 64: Xtext Eclipse Demo Camp Berlin

Twitter: @xtexthttp://www.xtext.org

Page 65: Xtext Eclipse Demo Camp Berlin

Individual

Sven Efftinge

JanKöhnlein

HeikoBehrens

DennisHübner

MoritzEysholdt

PeterFriese

MichaelClay

PatrickSchönbach

KnutWannheden

SebastianZarnekow

Committers