<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1495223311988358528</id><updated>2012-01-30T22:55:22.139+01:00</updated><category term='MDSD conference oAW MDA'/><category term='Ecore'/><category term='MacOSX'/><category term='ESE'/><category term='MDSD MDA conference oAW Cambridge'/><category term='JUG'/><category term='Talk'/><category term='Visualisation'/><category term='EMF Index'/><category term='Eclipse Xtext DSL'/><category term='Webinar'/><category term='GMFTools'/><category term='EMF'/><category term='Railroad Diagram'/><category term='Xtend'/><category term='Modeling'/><category term='Eclipse Summit Europe'/><category term='CodeGeneration'/><category term='conference'/><category term='ruhrjug'/><category term='Java'/><category term='Refactoring'/><category term='GEF'/><category term='Cambridge'/><category term='Xbase'/><category term='Xtext'/><category term='iPhone'/><category term='MDSD'/><category term='Languages'/><category term='JAX'/><category term='Graphics'/><category term='git'/><category term='SharedEditingDomain'/><category term='DSL'/><category term='Eclipse'/><category term='Expressions'/><category term='GMF'/><category term='Proposal'/><category term='Interpreter'/><category term='EMFatic'/><category term='Android'/><category term='NASA'/><category term='bugzilla'/><category term='EclipseCon'/><title type='text'>Jan's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>47</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2977466277912342881</id><published>2012-01-18T19:30:00.005+01:00</published><updated>2012-01-29T16:46:02.259+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='GEF'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualisation'/><title type='text'>Impressions on GEF</title><content type='html'>For the &lt;a href="https://github.com/JanKoehnlein/Generic-Graph-View"&gt;Generic Graphical View&lt;/a&gt; project I've been digging deep into the &lt;a href="http://www.eclipse.org/gef/"&gt;Graphical Editing Framework&lt;/a&gt; (GEF) lately. GEF is the base technology below almost any graphical framework in the Eclipse environment. I wanted to keep the tool stack as low as possible and have the maximum control on everything so I decided to use GEF directly. Here are my impressions.&lt;br /&gt;&lt;br /&gt;I really like GEF's base architecture: The separation between Draw2D and GEF, the concepts of &lt;span style="font-family:arial;"&gt;Tools&lt;/span&gt;, &lt;span style="font-family:arial;"&gt;Requests&lt;/span&gt;, &lt;span style="font-family:arial;"&gt;EditParts&lt;/span&gt; and &lt;span style="font-family:arial;"&gt;EditPolicies&lt;/span&gt;. It helps you to find the component to change in order to implement a new feature quickly. The pictures in the GEF online help really help&lt;br /&gt;understanding this.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4&gt;Pecularities&lt;br /&gt;&lt;/h4&gt; In some areas GEF appears to be kind of rusty. A whole bunch of relevant commercial products has been relying on it for years. Long term backward API compatibility has taken its toll. Some things definitely need a serious overhaul and often a better naming. I am very happy to hear that a 3.0 version is planned. Here is my wishlist for improvements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make coordinates &lt;span style="font-family:arial;"&gt;double&lt;/span&gt; by default. Integer coordinates often result in rendering glitches due to rounding errors and are not well suited for scaling. &lt;/li&gt;&lt;li&gt;Add alpha channel (transparency) support.&lt;/li&gt;&lt;li&gt;Revise scaling of fonts: Sometimes a label's bounds don't match its text's extend.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rename methods of the update mechanism. I am often confused about the semantics &lt;span style="font-family:arial;"&gt;validate()&lt;/span&gt;, &lt;span style="font-family:arial;"&gt;invalidate()&lt;/span&gt;, &lt;span style="font-family:arial;"&gt;invalidateTree()&lt;/span&gt; or &lt;span style="font-family:arial;"&gt;revalidate()&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Rectangular bounds are not well suited for round things like ellipses. Similar to that, clipping child figures only makes sense for &lt;span style="font-family:arial;"&gt;Viewports&lt;/span&gt; but nothing else. The need of an invisible container figure for side affixed children is really an ugly workaround.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Diagram layout does not take connection labels into account.&lt;/li&gt;&lt;li&gt;Add support for curve connections.&lt;/li&gt;&lt;li&gt;The feedback figures - the surrogates when a figure is moved or resized - seem to come from a time where hardware graphics acceleration was pure luxury. If you have nested edit parts you might have to reimplement the nested figure construction twice for nicer feedback.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using a bit less inheritance and more composition would be fine.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4&gt;Mutable Geometric Primitives&lt;/h4&gt;As many other graphics frameworks, GEF code tries to create as little new objects as possible. Geometrical primitives such as points, dimensions and rectangles are therefore mutable and reused often. There are even things as a static &lt;span style="font-family:arial;"&gt;Rectangle.SINGLETON&lt;/span&gt; for temporary calculation. This pretty much reminds me of good old C++. I am not sure whether such optimization is still necessary.  It results in pretty unreadable code:&lt;br /&gt;&lt;pre&gt;Point p = figure.getLocation(); &lt;br /&gt;// p is the location in local coordinates&lt;br /&gt;p.getParent().transformToParent(p);&lt;br /&gt;// now p is in parent coordinates&lt;br /&gt;Point q = p.add(p).scale(2):&lt;br /&gt;// this will also modify p&lt;br /&gt;&lt;/pre&gt;You see: As the semantics of the variable changes, it is no surprise you cannot find a more expressive name than &lt;span style="font-family:arial;"&gt;p&lt;/span&gt;. In addition, you have to be very careful if you are dealing with a reference or a copy. Modifying a &lt;span style="font-family:arial;"&gt;Translatable&lt;/span&gt; (once again  bad name, as &lt;span style="font-family:arial;"&gt;Dimension&lt;/span&gt; also implements this interface) directly can also circumvent an event mechanism. This is really error prone. I'd strongly advise to introduce immutable primitives.&lt;br /&gt;&lt;h4&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4&gt;Coordinate Transformations&lt;br /&gt;&lt;/h4&gt;The way transformation between local, global and parent coordinates are handled is somehow unsuggestive. I've used various 2D and 3D scenegraph-based frameworks but I never got as confused with coordinates as in GEF. For example, if you have a &lt;span style="font-family:arial;"&gt;ScalableLayeredPane&lt;/span&gt; showing some scaled content, its &lt;span style="font-family:arial;"&gt;translateToAbsolute(Point)&lt;/span&gt; method will not take the scaling into account while &lt;span style="font-family:arial;"&gt;translateToParent(Point)&lt;/span&gt; will.&lt;br /&gt;&lt;h4&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4&gt;Some Hints&lt;br /&gt;&lt;/h4&gt; Starting with GEF from zero is hard. You will likely spend a serious amount of time debugging why your diagram doesn't show anything at all. Better copy some basic setup from one of the GEF examples. Here are my favorite pitfalls:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;missing minimum size on figure - figure does not show up at all in some layouts&lt;/li&gt;&lt;li&gt;wrong coordinate system - figures don't appear where they should, somtimes in nirvana&lt;br /&gt;&lt;/li&gt;&lt;li&gt;wrong layout manager, e.g. a plain &lt;span style="font-family:arial;"&gt;XYLayout&lt;/span&gt; on a &lt;span style="font-family:arial;"&gt;FreeformFigure&lt;/span&gt; - results in endless layout loop&lt;/li&gt;&lt;li&gt;reusing a geometry element instead of making a copy - completely unpredictable editor behavior&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the default &lt;span style="font-family:arial;"&gt;ChangeBoundsRequest&lt;/span&gt; does not take local coordinate systems into account&lt;/li&gt;&lt;/ul&gt;For better diagram layout algorithms the &lt;a href="http://trac.rtsys.informatik.uni-kiel.de/trac/kieler/wiki/WikiStart"&gt;KIELER project&lt;/a&gt; offers a good choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2977466277912342881?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2977466277912342881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2977466277912342881' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2977466277912342881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2977466277912342881'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2012/01/impressions-on-gef.html' title='Impressions on GEF'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-7589494370723300561</id><published>2012-01-18T17:19:00.005+01:00</published><updated>2012-01-20T07:28:04.139+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbase'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualisation'/><title type='text'>Multitouch Gestures in the Generic Graph View</title><content type='html'>In my &lt;a href="http://koehnlein.blogspot.com/2012/01/discovery-diagrams-for-generic.html"&gt;previous post&lt;/a&gt;, I've already described the discovery mechanisms of the &lt;a href="https://github.com/JanKoehnlein/Generic-Graph-View"&gt;Generic Graphical View&lt;/a&gt; project: Starting from one node you can step by step reveal other connected nodes in the same model. The model itself is fixed - it is still a view! - but the user can decide herself which subset of elements should appear in the diagram. That behavor allows to create diagram views focussed on a specific semantic aspect of the model.&lt;br /&gt;&lt;br /&gt;The challenge is to find a decent UI for nodes wich have several hidden connections. How should a user select any subset of these?&lt;br /&gt;&lt;br /&gt;Since the Helios release SWT supports four multitouch gestures: &lt;span style="font-style: italic;"&gt;PAN&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;ZOOM&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;SWIPE&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;ROTATE&lt;/span&gt;. On my Mac's touchpad these gestures are actually easier to perform than a conventional drag operation because there is no extra mouse button. So I decided to give it a try and have a look how gestures could be used in the graph view. Here is a screencast showing the results:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/35263430?title=0&amp;amp;byline=0&amp;amp;portrait=0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" frameborder="0" height="270" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;SWT's multitouch API is fairly simple (&lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet353.java?view=co"&gt;example snippet&lt;/a&gt;). The first step was to add multitouch events to GEF, such that the can be handled in the same way as mouse or keyboard events. I had to extend a couple of GEF classes. If you're interested in the details, have a look at the classes in the package &lt;a href="https://github.com/JanKoehnlein/Generic-Graph-View/tree/master/org.eclipse.xtext.graphview/src/org/eclipse/xtext/graphview/behavior/gestures"&gt;&lt;span style="font-family:arial;"&gt;org.eclipse.xtext.graphview.behavior.gestures&lt;/span&gt;&lt;/a&gt; and the &lt;a href="https://github.com/JanKoehnlein/Generic-Graph-View/blob/master/org.eclipse.xtext.graphview/src/org/eclipse/xtext/graphview/editpart/GraphViewRootEditPart.java"&gt;&lt;span style="font-family:arial;"&gt;GraphViewRootEditPart&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;These changes allow to use a &lt;span style="font-style: italic;"&gt;ZOOM&lt;/span&gt; gesture on a &lt;span style="font-family:arial;"&gt;ScalableFreeformRootEditPart&lt;/span&gt;.&lt;br /&gt;Note that the &lt;span style="font-style: italic;"&gt;PAN&lt;/span&gt; gesture is already supported by GEF because the &lt;span style="font-family:arial;"&gt;FigureCanvas&lt;/span&gt; uses hardware scrolling. Unfortunately, these event is always consumed, such that it will not make it through to other GEF elements.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;ZOOM&lt;/span&gt; gesture can also be used to drill down into elements. If the mapping defines an open reference to another diagram, you can drill down by selecting it and performing the &lt;span style="font-style: italic;"&gt;ZOOM&lt;/span&gt; in gesture. If you‘re inside a drill down diagram, you can &lt;span style="font-style: italic;"&gt;ZOOM&lt;/span&gt; out into the container diagram.&lt;br /&gt;&lt;br /&gt;Any &lt;span style="font-family:arial;"&gt;Tool&lt;/span&gt; can now handle multitouch gestures by implementing the &lt;span style="font-family:arial;"&gt;IViewerGestureHandler&lt;/span&gt; interface. For a &lt;span style="font-family:arial;"&gt;DragTracker&lt;/span&gt; this makes no sense, as it is exited as soon as the mouse key is released and you cannot start a drag and a multitouch gesture simultaneously.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-family:arial;"&gt;RevealGestureTool&lt;/span&gt; works as follows: Click on the + button to reveal the hidden connected elements, Then use &lt;span style="font-style: italic;"&gt;ROTATE&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;SWIPE&lt;/span&gt; to rotate elements, &lt;span style="font-style: italic;"&gt;ZOOM&lt;/span&gt; to change the distance and right-click to select and pin individual elements. Another click will commit the input.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-7589494370723300561?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/7589494370723300561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=7589494370723300561' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7589494370723300561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7589494370723300561'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2012/01/multitouch-gestures-in-generic-graph.html' title='Multitouch Gestures in the Generic Graph View'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-7069015599089091437</id><published>2012-01-18T15:16:00.005+01:00</published><updated>2012-01-18T15:44:36.792+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbase'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualisation'/><title type='text'>Discovery Diagrams for the Generic Graphical View</title><content type='html'>If you've read my &lt;a href="http://koehnlein.blogspot.com/2011/06/using-xbase-to-define-generic-graphical.html"&gt;previous posts&lt;/a&gt; or seen my &lt;a href="http://www.slideshare.net/schwurbel/a-fresh-look-at-graphical-editing-10068461"&gt;presentation&lt;/a&gt; at EclipseCon Europe 2011, you'll already know the &lt;a href="https://github.com/JanKoehnlein/Generic-Graph-View"&gt;Generic Graphical View&lt;/a&gt; framework: Using two Xtext-based DSLs - one for mapping semantic to graphical elements and the other for styling the figures - you can easily create nice looking diagrams for any Java based model.&lt;br /&gt;&lt;br /&gt; In its first version the contents of the diagram was entirely defined in the mapping DSL. It was only possible to restrict the visible elements to a subset of the model by adding filtering expressions in the mapping. For bigger models it was hard to focus on a subset that is not structural defined but based on semantics, e.g. all classes that deal with addresses in a CRM application.&lt;br /&gt;&lt;br /&gt;Many graphical frameworks handle the selection of the visible elements in a diagram by means of dialogs. The user is then forced to switch between keyboard and mouse which is annoying, and these dialogs are often complicated and unintuitive. The goal for the Generic Graph View project was to build a UI for choosing the diagram contents that uses the mouse or trackpad only and avoid dialogs at all cost. The following screencast demonstrates the basic functionality.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/35256324?title=0&amp;amp;byline=0&amp;amp;portrait=0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" frameborder="0" height="270" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;As a first step, actions were introduced that allow to hide existing graphical elements - nodes, labels or connections. If you hover over an element, you'll get an popup button allowing to remove it from the view. So you can start with a big diagram and strip it down to what you want to see. Once an element inside a node has been removed, you can restore the node completely using another popup button. You can define elements as initially hidden using a &lt;span style="font-family: courier new;"&gt;hidden&lt;/span&gt; flag in the mapping definition.&lt;br /&gt;&lt;br /&gt;In addition to the subtractive approach, you can step by step extend the diagram contents from an initial node. If you're hovering over a node that has hidden connection, several &lt;span style="font-family: courier new;"&gt;+&lt;/span&gt; buttons will popup. When one of these buttons is triggered, the hidden elements and connections will appear in transparent arranged in a circle around the source element. In the same drag operation you can change the distance and the angle of that circle. This behavior will get really cool with multitouch gestures, which I will cover in a separate post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-7069015599089091437?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/7069015599089091437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=7069015599089091437' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7069015599089091437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7069015599089091437'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2012/01/discovery-diagrams-for-generic.html' title='Discovery Diagrams for the Generic Graphical View'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-4818441528068091369</id><published>2011-11-07T09:54:00.006+01:00</published><updated>2011-11-08T10:20:19.058+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Eclipse Con Europe 2011</title><content type='html'>The slides of my talk &lt;span style="font-style: italic;"&gt;A Fresh Look at Graphical Editing&lt;/span&gt; at &lt;a href="http://eclipsecon.org/"&gt;Eclipse Con Europe 2011&lt;/a&gt; are &lt;a href="http://www.slideshare.net/schwurbel/a-fresh-look-at-graphical-editing-10068461"&gt;online&lt;/a&gt; now. If you're interested in the code it's on &lt;a href="https://github.com/JanKoehnlein/Generic-Graph-View"&gt;github&lt;/a&gt;, but remember it's a prototype - no tests so far, no support. Unfortunately, there was no cake being served at 5pm, so the pie fight had to be cancelled.&lt;br /&gt;&lt;br /&gt;As I have been asked this a couple of times at the booth: I am convined it makes &lt;span style="font-weight: bold;"&gt;no&lt;/span&gt; sense turning the presented &lt;span style="font-style: italic;"&gt;view&lt;/span&gt; framework into a graphical &lt;span style="font-style: italic;"&gt;editing&lt;/span&gt; framework. I am not entirely opposed to graphical editors but keep in mind that&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You're going to need much more than graphical editing frameworks provide (projection, navigation, browsing, ...) I'd estimate a factor of 10-20 in the effort of building a graphical tool as opposed to a textual tool.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The bi-directional mapping from the semantic model to the graphical one is source of a lot of problems. Not all of them can be hidden from the users.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The structure of the semantic model must match the diagram model. This is not even true for the simplest models like UML2 class diagrams. You should be in a position to change the semantic metamodel to have a perfect structural match.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Would have been interested to discuss the last point with Bran Selic, who claimed in his keynote that UML2 is cool but the tools suck...&lt;br /&gt;&lt;br /&gt;Eclipse Con Europe 2011 was an excellent event as always. I really enjoyed meeting all the nice people from the community. Thanks a lot for the organization and especially for the delicious food.&lt;br /&gt;&lt;br /&gt;But remember: After the conference is before the conference. The CfP for &lt;a href="http://eclipsecon.org/2012/"&gt;Eclipse Con 2012 in Reston, Virgina&lt;/a&gt;, is open. Hope to see all of you there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-4818441528068091369?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/4818441528068091369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=4818441528068091369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4818441528068091369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4818441528068091369'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/11/eclipse-con-europe-2011.html' title='Eclipse Con Europe 2011'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-4053261695341622686</id><published>2011-10-31T10:31:00.006+01:00</published><updated>2011-10-31T11:50:55.002+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbase'/><title type='text'>Join My Pie Fight Session at EclipseCon Europe 2011</title><content type='html'>&lt;a href="http://www.eclipsecon.org/europe2011"&gt;&lt;img style="float:right" src="http://www.eclipsecon.org/europe2011/sites/default/files/130x100_speaking.gif?1307137694" alt="EclipseCon Europe 2011" border="0" height="100" width="130" /&gt;&lt;/a&gt;Competition is hard at &lt;a href="http://www.eclipsecon.org"&gt;EclipseCon&lt;/a&gt;: Everybody has to make sure to get the most participants into his talk. As &lt;a href="http://blog.efftinge.de/2011/10/this-is-not-your-fathers-java.html"&gt;Sven already announced a quiz&lt;/a&gt; for the same timeslot as mine I've had to figure out something even more exciting.&lt;br /&gt;&lt;br /&gt;So here's my idea for &lt;a href="http://www.eclipsecon.org/sessions/fresh-look-graphical-editing"&gt;my session&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;I'll begin the session ranting on every Eclipse project that's somehow related to graphics. I'll shamelessly reveal all of their weaknesses. Everybody involved in one of these projects will be so offended that they start to get personal, first against me then against each other. When emotions boil up, I expect people to self-organize in teams, like &lt;span style="font-style: italic;"&gt;The Knights of GMF Runtime&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;The Zest'o'Maniacs&lt;/span&gt;. My session is at 5pm so I expect a good supply of cake as in the years before. I am starting the fight by throwing the first cake, e.g. on the &lt;span style="font-style: italic;"&gt;GMF Tooling Ultras&lt;/span&gt;. They try to answer but unluckily hit a member of the &lt;span style="font-style: italic;"&gt;Spray Front&lt;/span&gt;, who's already in the midst of a quarrel with a &lt;span style="font-style: italic;"&gt;Graphiti Warrior&lt;/span&gt;. Thinking it was a &lt;span style="font-style: italic;"&gt;GEF Cyclope&lt;/span&gt; who threw the cake...  A real pie fight breaks loose.&lt;br /&gt;&lt;br /&gt;Hehehe (demonic laughter)&lt;br /&gt;&lt;br /&gt;Well... thinking again... the cake at EclipseCon is usually quite yummy. It would be a pity to waste it in such a way. Maybe I should come up with something more peaceful.&lt;br /&gt;&lt;br /&gt;OK, I see, I have to make that differently: I am going to point to some general issues with graphical editing. I'll weigh the cost against the usefullness and show, why an interpreted graphical view is so much simpler to implement and to use than a graphical editor. Second part will be a live demo of a prototype for such a framework.&lt;br /&gt;&lt;br /&gt;Maybe I should bring a helmet, just in case someone did not notice my change of plan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-4053261695341622686?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/4053261695341622686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=4053261695341622686' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4053261695341622686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4053261695341622686'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/10/join-my-pie-fight-session-at-eclipsecon.html' title='Join My Pie Fight Session at EclipseCon Europe 2011'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2640797870051959636</id><published>2011-09-13T11:21:00.007+02:00</published><updated>2011-09-13T11:38:52.226+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Git and Bugzilla patches</title><content type='html'>I am one of these unteachable conservatives that sometimes prefer the shell over IDE. Using &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; is not an exception here. One of the things I've always been missing was to apply a patch that is attached to a &lt;a href="https://bugs.eclipse.org/bugs/"&gt;bugzilla&lt;/a&gt; entry directly, i.e. by referring to its URL without downloading it to a file. Fiddling arround a bit, I found a solution that I think is elegant.&lt;br /&gt;&lt;br /&gt;You'll need &lt;span style="font-style: italic;"&gt;wget&lt;/span&gt; for this to work. On my Mac I use the one from &lt;a href="http://www.macports.org/"&gt;Mac Ports&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Add the following line to your &lt;span style="font-style:italic;"&gt;.profile&lt;/span&gt; (or the config file of whatever shell you use)&lt;br /&gt;&lt;pre&gt;git config --global alias.applyurl '!wget -qO- $1 | git apply -'&lt;/pre&gt;You should now have a new &lt;span style="font-style:italic;"&gt;git&lt;/span&gt; command &lt;span style="font-style:italic;"&gt;applyurl&lt;/span&gt;. Now open the bug with the patch you want to apply in your browser and copy the link of the patch. Finally you can on the command line, you can type&lt;br /&gt;&lt;pre&gt;git applyurl [paste the url here]&lt;/pre&gt;That's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2640797870051959636?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2640797870051959636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2640797870051959636' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2640797870051959636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2640797870051959636'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/09/git-and-bugzilla-patches.html' title='Git and Bugzilla patches'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3836326125679405782</id><published>2011-07-14T20:13:00.005+02:00</published><updated>2011-07-15T11:34:16.593+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Expressions'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbase'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Extending Xbase</title><content type='html'>The new expression language library &lt;a href="http://www.eclipse.org/Xtext/documentation/2_0_0/199e-xbase-language-reference.php"&gt;Xbase&lt;/a&gt; allows to integrate expressions in your own &lt;a href="http://www.xtext.org"&gt;Xtext 2.0&lt;/a&gt; DSLs. Xbase offers a grammar, a large runtime library and a compiler as well as an interpreter to execute these expressions. Thus, Xbase opens the field for a much wider class of DSLs and annihilates prior advantages of internal DSLs over external DSLs based on Xtext.&lt;br /&gt;&lt;br /&gt;In a series of internal workshops on Xbase, I've often encountered one question: Can we extend the expressions of Xbase? In this blogpost, I am going to show you how to do that. It is based on the domain model example shipped with Xtext 2.0, which you can instantiate by choosing &lt;em&gt;File &gt; New &gt; Example... &gt; Xtext &gt; Xtext Domain-Model Example&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;The Grammar&lt;/h4&gt;&lt;br /&gt;By default, Xbase only knows integer literals. In this example we are adding decimal literals.  &lt;br /&gt;&lt;br /&gt;If you want to add a new concept to Xbase expressions syntactically, you have to hook into the right rule of Xbase. As the name suggests a literal can be added in the Xbase rule &lt;code&gt;XLiteral&lt;/code&gt;. So in the &lt;code&gt;Dominamodel.xtext&lt;/code&gt; you have to add &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import "http://www.eclipse.org/xtext/xbase/Xbase"&lt;br /&gt;...&lt;br /&gt;XLiteral returns XExpression:&lt;br /&gt;  XClosure |&lt;br /&gt;  XBooleanLiteral |&lt;br /&gt;  XIntLiteral |&lt;br /&gt;  XNullLiteral |&lt;br /&gt;  XStringLiteral |&lt;br /&gt;  XTypeLiteral |&lt;br /&gt;  DecimalLiteral; // our new alternative&lt;br /&gt;&lt;br /&gt;DecimalLiteral:&lt;br /&gt;  intPart=INT '.' decimalPart=INT;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As the &lt;code&gt;EPackage&lt;/code&gt; of the domainmodel language is &lt;em&gt;generated&lt;/em&gt; this will introduce a new &lt;code&gt;EClass&lt;/code&gt; &lt;em&gt;DecimalLiteral&lt;/em&gt; as soon as you regenerate the language infrastructure.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Type Provider&lt;/h4&gt;&lt;br /&gt;For the sake of simplicity, our decimal literal will be mapped to &lt;code&gt;java.lang.Double&lt;/code&gt;. We have to adapt the type provider accordingly&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public DomainmodelTypeProvider {&lt;br /&gt;  @Inject&lt;br /&gt;  private TypeReferences typeReferences;  &lt;br /&gt;  ...&lt;br /&gt;  protected JvmTypeReference _type(DecimalLiteral literal, &lt;br /&gt;                                   boolean rawType) {&lt;br /&gt;    return typeReferences.getTypeForName(Double.class, &lt;br /&gt;                                         literal);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Compiler&lt;/h4&gt;&lt;br /&gt;The compiler has to understand what to do with decimal literals. We have to add a method that appends the concrete syntax of the Java double literal for a &lt;code&gt;DecimalLiteral&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class DomainmodelCompiler {&lt;br /&gt;  ...  &lt;br /&gt;  protected void _toJavaExpression(DecimalLiteral expr,&lt;br /&gt;                                   IAppendable b) {&lt;br /&gt;    b.append(expr.getIntPart() + "." &lt;br /&gt;      + expr.getDecimalPart());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  protected void _toJavaStatement(DecimalLiteral expr, &lt;br /&gt;                                  IAppendable b, &lt;br /&gt;                                  boolean isReferenced) {&lt;br /&gt;    generateComment(expr, b, isReferenced);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We can now use decimal literals in your expressions and they are correctly converted to &lt;code&gt;java.lang.Double&lt;/code&gt;s. The following domain model should now compile:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;entity DecimalLiteralTest {&lt;br /&gt;  op approxPi() : double {&lt;br /&gt;    3.1415926535&lt;br /&gt;  }&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that autoboxing/unboxing works in Xbase the same as in Java. Still we do not have any operations for decimal literals. The next section shows how to add them. &lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Operators&lt;/h4&gt;&lt;br /&gt;Operators in Xbase are implemented as Java methods following a &lt;a href="http://www.eclipse.org/Xtext/documentation/2_0_0/199h-xbase-language-reference-expressions.php#Xbase_Expressions_Operators"&gt;naming convention&lt;/a&gt;. For example, the operator &lt;code&gt;+&lt;/code&gt; will be mapped to a call to a method named &lt;code&gt;operator_plus()&lt;/code&gt;. There are several places where Xbase tries to find this method&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;in the current type as &lt;code&gt;operator_plus(OperandType1, OperandType2)&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;in the class of the first operand, as &lt;code&gt;OperandType1.operator_plus(OperandType2)&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;in the extension scope as &lt;code&gt;operator_plus(OperandType1, OperandType2)&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;The first alternative is ruled out, as we want to provide global operations. The second does not apply as we cannot change the final class &lt;code&gt;java.lang.Double&lt;/code&gt;, so we're eventually dealing with alternative 3. &lt;br /&gt;&lt;br /&gt;Let's write a new extension library class holding the operations as static methods. These methods need to be available at runtime, too, as the generated Java code will call them. That's why it is a good idea to put such extension classes into a separate plug-in &lt;em&gt;org.eclipse.xtext.example.domainmodel.lib&lt;/em&gt;.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package org.eclipse.xtext.example.domainmodel.lib;&lt;br /&gt;public class DecimalExtensions {&lt;br /&gt;  public static Double operator_plus(Double x, &lt;br /&gt;                                     Double y) {&lt;br /&gt;    return x + y;&lt;br /&gt;  }&lt;br /&gt;  public static Double operator_minus(Double x, &lt;br /&gt;                                      Double y) {&lt;br /&gt;    return x - y;&lt;br /&gt;  }&lt;br /&gt;  public static Double operator_multiply(Double x, &lt;br /&gt;                                         Double y) {&lt;br /&gt;    return x * y;&lt;br /&gt;  }&lt;br /&gt;  public static Double operator_divide(Double x,&lt;br /&gt;                                       Double y) {&lt;br /&gt;    return x / y;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Globally available extension classes and literal classes have to be registered in the&lt;br /&gt;&lt;code&gt;StaticMethodsFeatureForTypeProvider&lt;/code&gt;. We override it&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package org.eclipse.xtext.example.domainmodel.scoping;&lt;br /&gt;...&lt;br /&gt;public class DomainmodelStaticMethodsProvider &lt;br /&gt;    extends StaticMethodsFeatureForTypeProvider {&lt;br /&gt;  @Override&lt;br /&gt;  protected Iterable&lt;String&gt; getVisibleTypesContainingStaticMethods&lt;br /&gt;    (JvmTypeReference reference) {&lt;br /&gt;    Iterable&lt;String&gt; resultFromSuper = &lt;br /&gt;      super.getVisibleTypesContainingStaticMethods&lt;br /&gt;        (reference);&lt;br /&gt;    if (reference != null &amp;&amp; reference.getType() != null&lt;br /&gt;        &amp;&amp; "java.lang.Double"&lt;br /&gt;          .equals(reference.getType().getIdentifier())) {&lt;br /&gt;      return Iterables.concat(Collections.singletonList&lt;br /&gt;("org.eclipse.xtext.example.domainmodel.lib.DecimalExtensions"),&lt;br /&gt;          resultFromSuper);&lt;br /&gt;    }&lt;br /&gt;    return resultFromSuper;&lt;br /&gt;  } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and bind our customized implementation&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class DomainmodelRuntimeModule &lt;br /&gt;  extends AbstractDomainmodelRuntimeModule {&lt;br /&gt;...&lt;br /&gt;  public Class&lt;? extends StaticMethodsFeatureForTypeProvider&gt; &lt;br /&gt;      bindStaticMethodsFeatureForTypeProvider() {&lt;br /&gt;    return DomainmodelStaticMethodsProvider.class;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you add the plug-in &lt;em&gt;org.eclipse.xtext.example.domainmodel.lib&lt;/em&gt; to the classpath of the project in the runtime workspace, the following domain model should compile:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;entity DecimalLiteralTest2 {&lt;br /&gt;  op circleArea(double radius) : double {&lt;br /&gt;    3.1415926535 * radius * radius&lt;br /&gt;  }&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3836326125679405782?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3836326125679405782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3836326125679405782' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3836326125679405782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3836326125679405782'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/07/extending-xbase.html' title='Extending Xbase'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3833440459488991924</id><published>2011-07-08T12:42:00.003+02:00</published><updated>2011-07-08T12:54:13.220+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Railroad Diagram'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Graphical Syntax View for Xtext</title><content type='html'>I demoed it so often that I almost forgot blogging about it: In &lt;a href="http://www.xtext.org"&gt;Xtext 2.0&lt;/a&gt; you can now visualize the syntax of your DSLs grammar in a live railroad diagram view. The view supports navigation between the editor and the view and you can export your diagrams to a file. We even have a special representation for &lt;a href="http://www.eclipse.org/Xtext/documentation/2_0_0/020-grammar-language.php#unordered_groups"&gt;unordered groups&lt;/a&gt;. Watch this screencast to see it in action:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/26154086?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The syntax graph is implemented in plain Draw2d using a custom layout algorithm. It is technically &lt;span style="font-style:italic;"&gt;not&lt;/span&gt; related to the &lt;a href="http://koehnlein.blogspot.com/2011/06/using-xbase-to-define-generic-graphical.html"&gt;generic graphical view&lt;/a&gt; I presented in my previous blogpost.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3833440459488991924?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3833440459488991924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3833440459488991924' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3833440459488991924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3833440459488991924'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/07/graphical-syntax-view-for-xtext.html' title='Graphical Syntax View for Xtext'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5144429948622245710</id><published>2011-06-24T14:28:00.004+02:00</published><updated>2011-06-24T15:30:40.461+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interpreter'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbase'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Using Xbase to Define a Generic Graphical View</title><content type='html'>While textual representations such as code are perfectly suited to process the details of an object model, a graphical view can be very helpful to display the relationships between objects.  &lt;br /&gt;&lt;br /&gt;Most graphics frameworks in the Eclipse ecosystem provide graphical &lt;span style="font-style:italic;"&gt;editors&lt;/span&gt;. Usually, the semantic model is mapped to its graphical representation using a hard wired transformation, be it in code (&lt;a href="http://www.eclipse.org/gef/"&gt;GEF&lt;/a&gt;, &lt;a href="http://www.eclipse.org/graphiti/"&gt;Graphiti&lt;/a&gt;) or in models and a code generator (&lt;a href="http://www.eclipse.org/modeling/gmp/"&gt;GMF&lt;/a&gt;, the upcoming &lt;a href="http://code.google.com/a/eclipselabs.org/p/spray/"&gt;Spray&lt;/a&gt; project). There are two issues here: First, as opposed to a graphical &lt;span style="font-style:italic;"&gt;view&lt;/span&gt;, a graphical &lt;span style="font-style:italic;"&gt;editor&lt;/span&gt; requires the mapping to be bidirectional. That constrains the transformation a lot, e.g. requires having the same structure on the graphical as on the semantic side. Second, hard wiring the mapping introduces extra compilation/generation/deployment turnarounds.&lt;br /&gt;&lt;br /&gt;I've created a prototype of a graphical view that is configured using two textual DSLs: A mapping DSL that declaratively describes the transformation from semantic objects to graphical elements, and a styling DSL to modify the graphical representation. The graphical view interprets the mapping and the stylesheet on a given input model, giving immediate feedback on changes of these live models.&lt;br /&gt;&lt;br /&gt;Both DSLs are implemented in Xtext 2.0 and make heavy use of the new Xbase expression language library. As Xbase uses Java's typesystem, we can refer to any POJO as an input model. Xbase's rich semantics allow comfortably navigating the models references, and its interpreter can be customized easily to fit our needs. The graphics are implemented using plain GEF and &lt;a href="http://www.eclipse.org/gef/zest/index.php"&gt;Zest&lt;/a&gt; layouts.&lt;br /&gt;&lt;br /&gt;The following screencast gives you a short demo. (Sorry for the poor video quality, it gets better if you got to full screen mode)&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/25551186?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="480" height="360" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5144429948622245710?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5144429948622245710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5144429948622245710' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5144429948622245710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5144429948622245710'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/06/using-xbase-to-define-generic-graphical.html' title='Using Xbase to Define a Generic Graphical View'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2101755322928575605</id><published>2011-06-06T10:22:00.003+02:00</published><updated>2011-06-06T10:35:48.263+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Rename Refactoring in Xtext 2.0</title><content type='html'>The upcoming &lt;a href="http://eclipse.org/indigo/"&gt;Eclipse Indigo&lt;/a&gt; version of Xtext ships with experimental support for generic rename refactoring. It allows you to rename model elements and automatically fix all links to these elements. This blog entry describes the main components behind this new feature. The following screencast shows refactoring for a domainmodel language:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/24710712?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="468" height="351" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Enabling Refactoring&lt;/h3&gt;&lt;br /&gt;To enable refactoring support for your language, you have to add the RefactorElementNameFragment in the fragment section of the MWE workflow of your language, e.g. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// rename refactoring&lt;br /&gt;fragment = refactoring.RefactorElementNameFragment {}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The fragment has an additional flag &lt;code&gt;useJdtRefactoring&lt;/code&gt; which can be used to delegate to JDT's refactorings for languages using the JVM types compiling to Java (i.e. the domain model example or Xtend). Usually users are fine with the defaults.&lt;br /&gt;&lt;br /&gt;After running the workflow, you will have working refactoring support - at least if you have stuck to the defaults with regard to naming, cross-referencing. and indexing. Give it a try. If it doesn't work yet you have to adapt the infrastructure a bit more. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Customizing&lt;/h3&gt;&lt;br /&gt;The most likely component you want to customize is the &lt;code&gt;IRenameStrategy&lt;/code&gt;. This component defines how the declaration of the target element is performed. It has two major responsibilities:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Apply and revert the declaration change on the semantic model (methods &lt;code&gt;applyDeclarationChange&lt;/code&gt; and &lt;code&gt;revertDeclarationChange&lt;/code&gt;))&lt;/br&gt;&lt;br /&gt;The default is to look for an &lt;code&gt;EAttribute&lt;/code&gt; 'name' on the target object and set its value using EMFs reflective API.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create the LTK &lt;code&gt;Change&lt;/code&gt; objects of the declaration change. These changes will be aggregated, checked for overlaps, presented to you in the preview and finally executed if you apply the refactoring.&lt;/br&gt;&lt;br /&gt;The default is to use the &lt;code&gt;ILocationInFileProvider&lt;/code&gt; to locate the text range representing the name and create a &lt;code&gt;ReplaceEdit&lt;/code&gt;  for it.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;As the &lt;code&gt;IRenameStrategy&lt;/code&gt; is a stateful object, you have to bind a custom &lt;code&gt;IRenameStrategy.Factory&lt;/code&gt; instead of the strategy itself to integrate your changes.&lt;br /&gt;&lt;br /&gt;The other component you might want to customize is the &lt;code&gt;IDependentElementsCalculator&lt;/code&gt;. Dependent elements are those elements whose qualified name changes when the target element is renamed. E.g. when you rename a Java class the qualified names of its inner classes change, too, thus references to these have to be updated. This calculation is performed by the &lt;code&gt;IDependentElementsCalculator&lt;/code&gt;. By default, all elements contained in the target element are added. This matches Xtext's default strategy of qualified name computation. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Internals&lt;/h3&gt;&lt;br /&gt;The following describe the steps taken in the refactoring and the responsible components&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Refactoring UI&lt;/h4&gt;&lt;br /&gt;In terms of UI, the refactoring of Xtext looks pretty much the same as in JDT. When the user has triggered the refactoring - by a keystroke or using a context menu entry - the editor goes into a linked editing mode allowing to edit all occurrences of the element in the current document at once. Pressing the keys again or using the popup menu, the user switched to a dialog wizard or a preview wizard. Thanks a lot to &lt;a href="http://holgerschill.blogspot.com/"&gt;Holger&lt;/a&gt; who did the major work on the UI.&lt;br /&gt;&lt;br /&gt;The UI parts pass an element of type &lt;code&gt;IRenameElementContext&lt;/code&gt; to the non-UI components, holding information on the target element, its &lt;code&gt;EClass&lt;/code&gt;, the current editor etc. &lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Non-UI&lt;/h4&gt;&lt;br /&gt;The non-UI part and thereby the actual refactoring is mainly managed by the &lt;code&gt;RenameElementProcessor&lt;/code&gt;. &lt;br /&gt;&lt;br /&gt;As a first step, it loads the model declaring the element to be renamed into a new &lt;code&gt;ResourceSet&lt;/code&gt; that is configured with respect to the declaring language. This allows to easily abandon all changes as well as avoiding concurrency issues. Some basic checks are performed like 'is the element available' or 'is the resource writeable' and the &lt;code&gt;IRenameStrategy&lt;/code&gt; is initialized.&lt;br /&gt;&lt;br /&gt;Then we calculate the &lt;em&gt;dependent elements&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;After that the URIs of the elements that are affected by the refactoring are calculated. Those URIs may change, e.g. if you use a name-based fragment strategy. So we calculate the original URIs, apply the change and recalculate the new URIs. The result is a &lt;code&gt;Map&amp;lt;URI, URI&amp;gt;&lt;/code&gt;. This task is the responsibility of the &lt;code&gt;IRenamedElementTracker&lt;/code&gt;.&lt;br /&gt;In the end, the changes are reverted to leave the resource in the same state as before.&lt;br /&gt;&lt;br /&gt;The final step is to handle the cross-references to the renamed elements. We have to consider resource internal cross-references as well as the ones from other resources. The latter can be retrieved from Xtext's index. Note that if your external cross-references are not indexed, they won't be found and consequently won't be updated by the refactoring.&lt;br /&gt;&lt;br /&gt;As references can come from any other language, we use a &lt;code&gt;ReferenceUpdaterDispatcher&lt;/code&gt; that searches for local and indexed references and dispatches to the &lt;code&gt;IReferenceUpdater&lt;/code&gt; of the referring language. We have two implementations of this interface: The &lt;code&gt;DefaultReferenceUpdater&lt;/code&gt; works with Xtext resources and uses the language's serializer to update the reference text. OTOH, the &lt;code&gt;EmfResourceReferenceUpdater&lt;/code&gt; works for all EMF based languages and re-serializes the whole resource after applying the semantic change. &lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Rename Participants&lt;/h4&gt;&lt;br /&gt;Finally, one refactoring can trigger another. E.g. when renaming a rule in an Xtext grammar, the returned &lt;code&gt;EClass&lt;/code&gt; should be renamed, too. For these cases, you can register a &lt;code&gt;RenameParticipant&lt;/code&gt; by the common means of LTK. If the target of the participant is Xtext based, you can use a &lt;code&gt;AbstractProcessorBasedRenameParticipant&lt;/code&gt; in order to reuse lots of the already described classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2101755322928575605?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2101755322928575605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2101755322928575605' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2101755322928575605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2101755322928575605'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/06/rename-refactoring-in-xtext-20.html' title='Rename Refactoring in Xtext 2.0'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-559679555631592849</id><published>2011-04-06T15:12:00.001+02:00</published><updated>2011-04-06T15:13:22.374+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtend'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse Xtext DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbase'/><title type='text'>EclipseCon 2011 Slides</title><content type='html'>&lt;a href="http://www.eclipsecon.org/2011/"&gt;EclipseCon 2011&lt;/a&gt; was once again a cool conference, even though I really needed a week of holiday to recover from the bad weather, the jet-lag and the general lack of sleep :-) This is why it took me some time to upload the slides of our presentations. But better late than never, here they are. &lt;br /&gt;&lt;br /&gt;First, &lt;a href="http://zarnekow.blogspot.com/"&gt;Sebastian&lt;/a&gt; and me presented &lt;a href="http://www.eclipsecon.org/2011/sessions?id=2034"&gt;What's Cooking in Xtext 2.0&lt;/a&gt;. The room was almost full, and when I asked a vast majority of the audience had already had contact with &lt;a href="http://www.eclipse.org/Xtext/"&gt;Xtext&lt;/a&gt;. To me that shows that Xtext has really become mainstream, a really good feeling. Here are the slides:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_7534110"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/schwurbel/whats-cooking-in-xtext-20" title="What&amp;#39;s Cooking in Xtext 2.0"&gt;What&amp;#39;s Cooking in Xtext 2.0&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse7534110" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=whatscookinginxtext2-0-110406071210-phpapp01&amp;stripped_title=whats-cooking-in-xtext-20&amp;userName=schwurbel" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse7534110" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=whatscookinginxtext2-0-110406071210-phpapp01&amp;stripped_title=whats-cooking-in-xtext-20&amp;userName=schwurbel" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-6WAgMtxQ7wY/TZxjpxqOy9I/AAAAAAAAAEI/bsWIQ-mNS-s/s1600/xtend.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 133px;" src="http://4.bp.blogspot.com/-6WAgMtxQ7wY/TZxjpxqOy9I/AAAAAAAAAEI/bsWIQ-mNS-s/s200/xtend.jpg" border="0" alt="DSL Tutorial" id="BLOGGER_PHOTO_ID_5592454406643567570" /&gt;&lt;/a&gt;On Thursday, &lt;a href="http://blog.efftinge.de/"&gt;Sven&lt;/a&gt;, &lt;a href="http://zarnekow.blogspot.com/"&gt;Sebastian&lt;/a&gt; and me gave the tutorial on &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;id=2053"&gt;Pragmatic DSL Design with Xtext&lt;/a&gt;. There were so many participants, that we had to switch rooms with Stephan Herrmann's tutorial on &lt;a href="http://blog.objectteams.org/"&gt;Object Teams&lt;/a&gt;. Thanks for that, Stephan! And here are our slides:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_7534313"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/schwurbel/pragmatic-dsl-design-with-xtext-xbase-and-xtend-2" title="Pragmatic DSL Design with Xtext, Xbase and Xtend 2"&gt;Pragmatic DSL Design with Xtext, Xbase and Xtend 2&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse7534313" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eclipsecon2011tutorial-110406073339-phpapp01&amp;stripped_title=pragmatic-dsl-design-with-xtext-xbase-and-xtend-2&amp;userName=schwurbel" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse7534313" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eclipsecon2011tutorial-110406073339-phpapp01&amp;stripped_title=pragmatic-dsl-design-with-xtext-xbase-and-xtend-2&amp;userName=schwurbel" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-559679555631592849?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/559679555631592849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=559679555631592849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/559679555631592849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/559679555631592849'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/04/eclipsecon-2011-slides.html' title='EclipseCon 2011 Slides'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-6WAgMtxQ7wY/TZxjpxqOy9I/AAAAAAAAAEI/bsWIQ-mNS-s/s72-c/xtend.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5221759297400389321</id><published>2011-03-11T16:14:00.003+01:00</published><updated>2011-03-11T16:52:36.858+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xtend'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbase'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Did I mention EclipseCon?</title><content type='html'>I just realized that I haven't blogged on this year's &lt;a href="http://www.blogger.com/www.eclipsecon.org"&gt;EclipseCon&lt;/a&gt; yet. Time to do that. You might have guessed it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipsecon.org/2011/"&gt;&lt;img src="http://www.eclipsecon.org/2011/static/image/friends/100x100_attending.gif" alt="I'm going to EclipseCon 2011" align="left" border="0" height="100" width="100" /&gt;&lt;/a&gt;&lt;br /&gt;As a committer to several Eclipse projects, I am really looking forward to meeting "the family". It's always been big fun and I guess it will be the same this year. But the main reason for going there is of course:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipsecon.org/2011/"&gt;&lt;img src="http://www.eclipsecon.org/2011/static/image/friends/100x100_speaking.gif" alt="I'm speaking at EclipseCon 2011" align="left" border="0" height="100" width="100" /&gt;&lt;/a&gt;&lt;br /&gt;Together with &lt;a href="http://zarnekow.blogspot.com/"&gt;Sebastian&lt;/a&gt; I will give a talk on &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2034"&gt;What's cooking in Xtext 2.0&lt;/a&gt; on Tuesday at 2pm. We're eager to show you all the new features of &lt;a href="www.xtext.org"&gt;Xtext&lt;/a&gt; we've been working on during the last months, especially the expression language library &lt;em&gt;Xbase&lt;/em&gt; and the code generation langauge &lt;em&gt;Xtend&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;You should not miss our tutorial &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2053"&gt;&lt;br /&gt;Pragmatic DSL Design with Xtext, Xbase and Xtend 2&lt;/a&gt; on Thursday at 10:30am. &lt;a href="http://blog.efftinge.de/"&gt;Sven&lt;/a&gt; will join us to give you a walk through tutorial on a modern way of creating DSLs. We just had another rehearsal on this one and I promise you it will be a real burner. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipsecon.org/2011/"&gt;&lt;img src="http://www.eclipsecon.org/2011/static/image/friends/100x100_sponsoring.gif" alt="We're sponsoring EclipseCon 2011" align="left" border="0" height="100" width="100" /&gt;&lt;/a&gt;&lt;br /&gt;All of that wouldn't have been possible without the support from the company we're working for: &lt;a href="http://www.blogger.com/www.itemis.com"&gt;itemis&lt;/a&gt;. Into the bargain we're bronze sponsors for this years conference.&lt;br /&gt;It is great to work for a company that really lives open source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5221759297400389321?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5221759297400389321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5221759297400389321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5221759297400389321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5221759297400389321'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/03/did-i-mention-eclipsecon.html' title='Did I mention EclipseCon?'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5573438226838824610</id><published>2011-03-01T10:41:00.005+01:00</published><updated>2011-03-01T11:35:27.888+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MacOSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>JDK Source Code on MacOSX</title><content type='html'>After installing the latest update of Java for MacOSX Snow Leopard - must have been in March 2010 if my file system is not cheating on me - I missed the source code for the JDK classes. I remembered I had to install the Java Developer Package from the Apple developer center, but I couldn't find any. Consequently, I learned to live without the sources and forgot about the issue.&lt;br /&gt;&lt;br /&gt;Yesterday I stumbled across a big performance issue in the upcoming Xtend2 compiler that only happened on my machine. Profiling yielded that it was because I have no local sources (another strange story). &lt;br /&gt;&lt;br /&gt;So I decided to look for the developer package once again et voilà: Apple had been so kind to release it in the meantime. BTW, the timestamp says October 20th :-o&lt;br /&gt;&lt;br /&gt;So here's what I did to get the MacOSX Java sources back (it's on your own risk, I disclaim any responsibility if you should break or machine)&lt;br /&gt;&lt;br /&gt;1) Get an &lt;a href="http://connect.apple.com"&gt;Apple Developper Connection&lt;/a&gt; account (it's free, but you have to register).&lt;br /&gt;2) Login choose Java and download the Java for Mac OS X Developer Package matching your OS and Java version.&lt;br /&gt;3) Install the DMG.&lt;br /&gt;&lt;br /&gt;The install location of the JDK is somehow weird - e.g. you cannot directly open it in Eclipse's "Choose JDK location" dialog. To make it the default, I found it easiest to retarget the symbolic link pointing to the default JRE. You have to be super user in this case.&lt;br /&gt;&lt;br /&gt;4) Open a Terminal and enter&lt;br /&gt;&lt;pre&gt;cd /System/Library/Frameworks/JavaVM.framework/Versions&lt;br /&gt;sudo rm CurrentJDK&lt;br /&gt;sudo ln -s /Library/Java/JavaVirtualMachines/1.6.0_22-b04-307.jdk/Contents CurrentJDK&lt;br /&gt;&lt;/pre&gt;If Eclipse uses the default MacOSX JDK, you should now have sources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5573438226838824610?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5573438226838824610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5573438226838824610' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5573438226838824610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5573438226838824610'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2011/03/jdk-source-code-on-macosx.html' title='JDK Source Code on MacOSX'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-4117545796656435618</id><published>2010-10-28T19:11:00.004+02:00</published><updated>2010-10-28T20:00:19.116+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse Summit Europe'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Learn how to create a language for Android development using Eclipse Modeling</title><content type='html'>If you are lucky, you have already registered for&lt;br /&gt;&lt;a href="http://www.eclipsecon.org/summiteurope2010/"&gt;Eclipse Summit Europe 2010&lt;/a&gt; in Ludwigsburg, Germany. If not, I have sad news for you: It is sold out. Sorry.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipsesummit.org/"&gt;&lt;img src="http://www.eclipsecon.org/summiteurope2010/static/image/friends/130x100_speaking.gif" alt="I'm speaking at Eclipse Summit Europe 2010" border="0" width="130" height="100" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you're there, I hope you registered for our tutorial &lt;a href="http://www.eclipsecon.org/summiteurope2010/sessions/?page=sessions&amp;amp;id=1833"&gt;Creating a Language for Android Apps with Eclipse Modeling&lt;/a&gt;. A joint team from Obeo (&lt;a href="http://mdenutshell.blogspot.com/"&gt;Mikael Barbero&lt;/a&gt; and &lt;a href="http://sbegaudeau.tumblr.com/"&gt;Stephane Begaudeau&lt;/a&gt;)&lt;br /&gt;and itemis (&lt;a href="http://holgerschill.blogspot.com/"&gt;Holger Schill&lt;/a&gt;, Dennis Hübner, and me) will introduce you to the basics of the Android SDK and show how EMF, Xtext, and Acceleo can be leveraged to simplify the development of Android Apps.&lt;br /&gt;Bring your laptops, it's going to be a hands-on experience.&lt;br /&gt;&lt;br /&gt;If you like this approach, learn how it works on larger scale in the talk &lt;a href="http://www.eclipsecon.org/summiteurope2010/sessions?id=1733"&gt;Models To Go: How We Built a DSL for Mobile Apps With Tools From the Eclipse Modeling Project&lt;/a&gt;&lt;br /&gt;by &lt;a href="http://www.peterfriese.de/"&gt;Peter Friese&lt;/a&gt; and &lt;a href="http://heikobehrens.net/"&gt;Heiko Behrens&lt;/a&gt; who implemented the official ESE App for the iPhone.&lt;br /&gt;&lt;br /&gt;Curious about what we have in mind for the future of Xtext? Then you must see &lt;a href="http://www.eclipsecon.org/summiteurope2010/sessions?id=1754"&gt;Live Coding: Building a UI styling language for E4 with Xtext&lt;/a&gt;. Sven Efftinge and Sebastian Zarnekow will demonstrate Xbase, an Xtext based expression language bringing behaviour to your DSLs.&lt;br /&gt;Sven will also talk about &lt;a href="http://www.eclipsecon.org/summiteurope2010/sessions?id=1753"&gt;Dependency Injection&lt;/a&gt; which is the key to extensibility and an easy programming model, not only in Xtext.&lt;br /&gt;&lt;br /&gt;Itemis will give two more presentations: Andreas Unger and Axel Terfloth from our embedded team will teach you on &lt;a href="http://www.eclipsecon.org/summiteurope2010/sessions/?page=sessions&amp;amp;id=1941"&gt;Developing Embedded Software with Eclipse, State Machines and Block Diagrams&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://nirmalsasidharan.wordpress.com/"&gt;Nirmal Sasidharan&lt;/a&gt; will present &lt;a href="http://www.eclipsecon.org/summiteurope2010/sessions?id=1988"&gt;Eclipse - an IDE for Organisational Change&lt;/a&gt;. I am sure you'll like these, too!&lt;br /&gt;&lt;br /&gt;I am particularly looking forward to the keynotes, especially the one by Jeff Norris from NASA who already rocked this year's EclipseCon.&lt;br /&gt;&lt;br /&gt;See you in Ludwigsburg!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-4117545796656435618?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/4117545796656435618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=4117545796656435618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4117545796656435618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4117545796656435618'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2010/10/learn-how-to-create-language-for.html' title='Learn how to create a language for Android development using Eclipse Modeling'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-8552226964195996161</id><published>2010-06-20T15:01:00.007+02:00</published><updated>2010-10-27T09:57:08.335+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><title type='text'>Semantic Model Access in Xtext</title><content type='html'>In Xtext, the parser creates the  EMF-based &lt;span style="font-style: italic;"&gt;semantic model&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;abstract   syntax tree&lt;/span&gt; from the textual representation of the model. Many  components, e.g. validation or  outline, but also an interpreter or code generator work on this semantic model rather than on the textual representation. In this post, I want to introduce you to Xtext's APIs to safely read and modify the semantic model of an Xtext document.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Why do we need model synchronization at all?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In a running Xtext Workbench, there are a number of components which access the semantic model, i.e. the parser, the linker, the validator, the outline, the index builder etc. While some of these components are executed by the display thread, others like the parser or the indexer use different concurrent threads to not deteriorate the editing experience. If you for example want to have a consistent outline of your model, it is essential to keep other threads from modifying the model while the outline component reads it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Why not use EMF Transaction?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Editors that use EMF Transaction usually employ a so called &lt;span style="font-style: italic;"&gt;TransactionalEditingDomain&lt;/span&gt; that shields a &lt;span style="font-style: italic;"&gt;ResourceSet&lt;/span&gt; with a lock and manages a transactional command stack. The &lt;span style="font-style: italic;"&gt;Resources&lt;/span&gt; in the &lt;span style="font-style: italic;"&gt;ResourceSet&lt;/span&gt; can be read safely - i.e. excluding any concurrent write operation - inside a &lt;span style="font-style: italic;"&gt;Runnable&lt;/span&gt; that is passed to the &lt;span style="font-style: italic;"&gt;TransactionalEditingDomain.runExclusive()&lt;/span&gt; method. Write access is only possible by issuing a command. A change listener throws an Exception if write operations are executed outside of  write command.&lt;br /&gt;&lt;br /&gt;This quite heavy-weight mechanism can be appropriate for pure model editors, i.e. editors modifying the model directly like the generated EMF tree editor, but experience shows that it is not easily integrated with other command frameworks. (If you don't believe this, just look at the way GMF deals with EMF Transactions, GEF commands and the Eclipse Operation history.)&lt;br /&gt;&lt;br /&gt;Architecturally, an Xtext editor is a text editor in the first place. The commands on its undo/redo stack are the usual commands used in text editors. So instead of inventing yet another adapter technology, we headed for an easier synchronization mechanism.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;How do I read a model safely?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Each &lt;span style="font-style: italic;"&gt;XtextEditor&lt;/span&gt; uses an &lt;span style="font-style: italic;"&gt;IXtextDocument&lt;/span&gt; to store its model. The &lt;span style="font-style: italic;"&gt;IXtextDocument&lt;/span&gt; allows reentrant read/write access to the underlying semantic model by means of the two methods&lt;br /&gt;&lt;span style="font-style: italic;"&gt;readOnly()&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;modify()&lt;/span&gt;. Both take an argument of type &lt;span style="font-style: italic;"&gt;IUnitOfWork(&amp;lt;T&amp;gt;, IXtextResource)&lt;/span&gt; which defines a method &lt;span style="font-style: italic;"&gt;&amp;lt;T&amp;gt; exec(IXtextResource)&lt;/span&gt; that contains what you want to do with the model and allows to deliver a result of arbitrary type.&lt;br /&gt;&lt;br /&gt;So here is an example of safely reading a model:&lt;br /&gt;&lt;pre&gt;IXtextDocument myDocument = ...;&lt;br /&gt;String rootElementName =  myDocument.readOnly(&lt;br /&gt;new IUnitOfWork&lt;string,&gt;(){&lt;br /&gt;       public String exec(IXtextResource resource) {&lt;br /&gt;             MyType type = (MyType)resource.getContents().get(0);&lt;br /&gt;             return myType.getName();&lt;br /&gt;       }&lt;br /&gt; });&lt;/string,&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;How do I modify a model safely?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Direct write-access on the document is usually only performed inside the framework. If you want to change a document by means of its semantic model, you should rather use an &lt;span style="font-style: italic;"&gt;IDocumentEditor&lt;/span&gt; which uses the &lt;span style="font-style: italic;"&gt;modify()&lt;/span&gt; method internally but takes care of synchronizing the node model, too:&lt;br /&gt;&lt;pre&gt;@Inject&lt;br /&gt;private IDocumentEditor documentEditor;&lt;br /&gt;&lt;br /&gt;public void setRootName(IXtextDocument myDocument,&lt;br /&gt;                     final String newName) {&lt;br /&gt;documentEditor.process(&lt;br /&gt;  new IUnitOfWork&lt;string,&gt;.Void() {&lt;br /&gt;     public void process(IXtextResource resource) {&lt;br /&gt;        MyType type = (MyType)resource.getContents().get(0);&lt;br /&gt;        myType.setName(newName);&lt;br /&gt;     }&lt;br /&gt;  }, myDocument);&lt;br /&gt;}&lt;/string,&gt;&lt;/pre&gt;&lt;br /&gt;BTW, the QuickFix-API internally uses an &lt;span style="font-style: italic;"&gt;IDocumentEditor&lt;/span&gt;, too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;PS:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Xtext 2.0 we have changed the semantics of &lt;span style="font-style: italic;"&gt;XtextDocument.modify()&lt;/span&gt; to use the former &lt;span style="font-style: italic;"&gt;IDocumentEditor&lt;/span&gt; functionality. So the model write example now symmetrically becomes&lt;br /&gt;&lt;pre&gt;public void setRootName(IXtextDocument myDocument,&lt;br /&gt;                     final String newName) {&lt;br /&gt; myDocument.modify(&lt;br /&gt;    new IUnitOfWork.Void(){&lt;br /&gt;       public void process(IXtextResource resource) {&lt;br /&gt;           MyType type = (MyType)resource.getContents().get(0);&lt;br /&gt;           myType.setName(newName);&lt;br /&gt;       }&lt;br /&gt; });&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-8552226964195996161?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/8552226964195996161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=8552226964195996161' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/8552226964195996161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/8552226964195996161'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2010/06/semantic-model-access-in-xtext.html' title='Semantic Model Access in Xtext'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-4930690074784645118</id><published>2010-06-07T10:30:00.004+02:00</published><updated>2010-06-07T10:49:42.244+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Talk'/><category scheme='http://www.blogger.com/atom/ns#' term='Webinar'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Xtext: Webinar and Eclipse Demo Camp</title><content type='html'>Tomorrow (Tue, 8th of June) will be my Xtext presentation day ;-)&lt;br /&gt;&lt;br /&gt;At 5pm CEST I will jump in for Sebastian in the &lt;a href="http://live.eclipse.org/node/886"&gt;Xtext Webinar&lt;/a&gt;. Sven and me will give a free one hour live seminar on Xtext introducing the framework and demonstrating its new fancy features in Helios. Moritz will assist us in answering your questions on the live chat. It's free and it's broadcast live via internet. Why not join? &lt;br /&gt;&lt;br /&gt;If you're based in Germany's Ruhr area, you might want to visit the &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Helios_2010/Dortmund"&gt;Eclipse Demo Camp in Dortmund&lt;/a&gt;. I will give another 20min demo of Xtext and - guess what - its new amazing features! But even for non-Xtext enthusiasts there will be nice demos, e.g on SAP's new graphical modeling framework "Graphiti", on developing Android apps with Eclipse and a lot more intriguing topics. &lt;br /&gt;&lt;br /&gt;Finally, I plan to have my hopefully well-earned after-work pint in the Eclipse Stammtisch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-4930690074784645118?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/4930690074784645118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=4930690074784645118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4930690074784645118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/4930690074784645118'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2010/06/xtext-webinar-and-eclipse-demo-camp.html' title='Xtext: Webinar and Eclipse Demo Camp'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2110857575140126758</id><published>2010-03-31T16:44:00.007+02:00</published><updated>2010-03-31T18:26:47.914+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='EMFatic'/><category scheme='http://www.blogger.com/atom/ns#' term='Ecore'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><title type='text'>Xtext For Your Ecore Models</title><content type='html'>The new M6 release of Xtext ships with a new component: The &lt;span style="font-style: italic;"&gt;Ecore2Xtext&lt;/span&gt; &lt;span style="font-style: italic;"&gt;Wizard&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why should you use the &lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;font-size:100%;" &gt;Ecore2Xtext Wizard&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;?&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You want your models to be in a syntax that humans can not only read but also understand.&lt;/li&gt;&lt;li&gt;You want a model editor that offers all the convenience of a modern IDE.&lt;/li&gt;&lt;li&gt;You already have an Ecore model but don't know how to start with Xtext.&lt;/li&gt;&lt;li&gt;Your Ecore model is huge and you want a quick start with Xtext. You can easily fine-tune the syntax later on.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;How do you use it?&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start the wizard by choosing &lt;span style="font-style: italic;"&gt;New -&gt; Xtext -&gt; Xtext Project From Existing Ecore Models&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Select the EMF generator models&lt;a href="http://www.blogger.com/post-create.g?blogID=1495223311988358528#footnote"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; from your workspace for which you want a textual syntax and choose your root element's type.&lt;/li&gt;&lt;li&gt;Fill in all the language metadata on the second page of the wizard. Remember the file extension.&lt;/li&gt;&lt;li&gt;Click &lt;span style="font-style: italic;"&gt;Finish&lt;/span&gt; and wait until Xtext has generated the two common Xtext plug-ins and the Xtext grammar for your language.&lt;/li&gt;&lt;li&gt;Run the MWE2 workflow located in the same directory as the grammar. Now Xtext generates the language infrastructure (parser, editor, formatter etc) .&lt;/li&gt;&lt;li&gt;Spawn a new Eclipse runtime workbench, create a sample&lt;span style="font-style: italic;"&gt; Java Project&lt;/span&gt;, and open a new model file with the file extension you have chosen in the wizard. Play around and have fun with your new textual model editor.&lt;/li&gt;&lt;/ol&gt;&lt;a name="footnote"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; the genmodel is needed because we  need the fully qualified names of the generated Java classes as well as  the location of the Ecore file. The genmodel offers both of them.&lt;br /&gt;&lt;br /&gt;Watch this short screencast to see it in action:&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="350"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10579056&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=10579056&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is the generated syntax like?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Names of EClasses and EStructuralFeatures become keywords, containment is marked with curly braces, elements in lists are separated by commas, etc... Here's an example of an entity model in the generated language:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Iv16ZiqDyCA/S7Nq_AckGxI/AAAAAAAAACw/qevKp3XjyUo/s1600/Bildschirmfoto+2010-03-31+um+17.30.57.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 176px;" src="http://2.bp.blogspot.com/_Iv16ZiqDyCA/S7Nq_AckGxI/AAAAAAAAACw/qevKp3XjyUo/s200/Bildschirmfoto+2010-03-31+um+17.30.57.png" alt="" id="BLOGGER_PHOTO_ID_5454821204359912210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What if it doesn't work?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The grammar is the primary artifact of every Xtext language, but there are a couple of further services you might have to configure:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A IQualifiedNameProvider to define how the fully qualified name of an element is derived.&lt;/li&gt;&lt;li&gt;A IScopeProvider to define which elements are candidates for a cross reference.&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;Please consult the Xtext documentation for more information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Another geekish meta-confusing example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All right geeks, Ecore itself is defined in Ecore, so let's generate a textual syntax for Ecore and see how Ecore looks in that syntax! Only two adaptions of the generated code where necessary to get this editor:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Iv16ZiqDyCA/S7N1L69S6RI/AAAAAAAAADA/uy1bgAWOb5g/s1600/Bildschirmfoto+2010-03-31+um+18.14.54.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 190px;" src="http://3.bp.blogspot.com/_Iv16ZiqDyCA/S7N1L69S6RI/AAAAAAAAADA/uy1bgAWOb5g/s200/Bildschirmfoto+2010-03-31+um+18.14.54.png" alt="" id="BLOGGER_PHOTO_ID_5454832421341161746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(The '^' chars are automatically added by Xtext to distinguish identifiers from keywords, which of course collide a lot in this example) It is certainly not as complete as &lt;a href="http://www.eclipse.org/modeling/emft/?project=emfatic"&gt;EMFatic&lt;/a&gt;, and it has a quite verbose syntax, but it could be the starting point for a nice textual Ecore editor.&lt;br /&gt;&lt;/div&gt;&lt;a name="footnote"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2110857575140126758?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2110857575140126758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2110857575140126758' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2110857575140126758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2110857575140126758'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2010/03/xtext-for-your-ecore-models.html' title='Xtext For Your Ecore Models'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Iv16ZiqDyCA/S7Nq_AckGxI/AAAAAAAAACw/qevKp3XjyUo/s72-c/Bildschirmfoto+2010-03-31+um+17.30.57.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3062638799341394466</id><published>2010-03-25T22:08:00.005+01:00</published><updated>2010-03-25T22:34:16.576+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse Xtext DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='NASA'/><title type='text'>EclipseCon 2010 - Xtext everywhere</title><content type='html'>It's the last day of this year's EclipseCon. My second time in Santa Clara and I even liked it better than last year: Many intriguing talks around Eclipse, OSGi, e4 and others, interesting people, much time for getting to know each other. &lt;br /&gt;&lt;br /&gt;The itemis team has had a fair share on the program: With Moritz and Heiko, I gave a workshop in which we showed how to build an Xtext editor for the e4 workbench model. I also had a lightning talk on my favorite topic "Combining text and graphics in modeling editors". As always, you can download the slides to all talks from &lt;a href="http://www.slideshare.net/schwurbel"&gt;slideshare&lt;/a&gt;. We also had talks on Xtext, MWE2, Xpand and model-driven iPhone application development.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Iv16ZiqDyCA/S6vT-uWpNUI/AAAAAAAAACg/feBUAgT_dYI/s1600/IMG_0421.JPG"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 120px;" src="http://1.bp.blogspot.com/_Iv16ZiqDyCA/S6vT-uWpNUI/AAAAAAAAACg/feBUAgT_dYI/s200/IMG_0421.JPG" alt="" id="BLOGGER_PHOTO_ID_5452684848410473794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Xtext has been ubiquitous. We have seen a lot of cool Xtext editors in many talks. Quite a bunch of people came to our booth just to say thank you for the cool piece of software we've been working on for the past years. The absolute highlight was when Xtext received the Eclipse Community Award for the most innovative Eclipse project. It is so inspiring to get such a huge amount of positive feedback.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Iv16ZiqDyCA/S6vVBHUaVQI/AAAAAAAAACo/0dvM-x6hHKo/s1600/IMG_0430.JPG"&gt;&lt;img style="float:left; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 134px; height: 200px;" src="http://4.bp.blogspot.com/_Iv16ZiqDyCA/S6vVBHUaVQI/AAAAAAAAACo/0dvM-x6hHKo/s200/IMG_0430.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5452685988983362818" /&gt;&lt;/a&gt;NASA also sponsored a competition of building a e4 client to control a small robot simulating the Mars Rover. Peter and Heiko have decided not to sleep but to rather build an iPhone client instead. Even though it was not based on e4, people were really impressed. Watch Jeff Norris from NASA driving the rover with an iPhone! By the way, Jeff gave the best keynote I have ever seen on "Rocket Science and the Republic".&lt;br /&gt;&lt;br /&gt;Tonight will be the European Reception sponsored by itemis and the conference will end. We'll have another day in San Francisco before returning home to Germany. I hope I will make it next year again. Thanks to the organizational team for giving such a wonderful conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3062638799341394466?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3062638799341394466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3062638799341394466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3062638799341394466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3062638799341394466'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2010/03/eclipsecon-2010-xtext-everywhere.html' title='EclipseCon 2010 - Xtext everywhere'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Iv16ZiqDyCA/S6vT-uWpNUI/AAAAAAAAACg/feBUAgT_dYI/s72-c/IMG_0421.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-6446037634713613780</id><published>2009-10-30T10:39:00.003+01:00</published><updated>2009-10-30T11:00:55.761+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ESE'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><title type='text'>Eclipse Summit Europe 2009 retrospective</title><content type='html'>Attending &lt;a href="http://www.eclipsecon.org/summiteurope2009/"&gt;Eclipse Summit Europe 2009&lt;/a&gt; once again felt like a big family meeting. It is always a pleasure to meet people you usually only correspond with electronically in person. The organization was once again almost perfect and the food excellent. Thanks a lot to the organizers and sponsors!&lt;br /&gt;&lt;br /&gt;We had a very productive project meeting for the EMF Index project, clarifying a lot of critical points and further aligning the efforts and requirements of the involved parties.&lt;br /&gt;&lt;br /&gt;Markus, Sebastian, Karsten and me were impressed by the large number of about 50 participants in our workshop on &lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=1010"&gt;Domain-specific Languages with Eclipse Modeling&lt;/a&gt;. &lt;a href="http://www.slideshare.net/schwurbel/domain-specific-languages-with-eclipse-modeling"&gt;The slides&lt;/a&gt; are now online at slideshare, just in case you're interested. With such an audience it was of course a little bit difficult to make it a real hands-on experience, but I think we at least managed to leave a good impression on the presented toolchain.&lt;br /&gt;&lt;br /&gt;Jos's and my talk on &lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=957"&gt;Combining text and graphics in modeling tools&lt;/a&gt; was also well attended, and from the quality of questions that were asked I guess our message has been understood. &lt;a href="http://www.slideshare.net/schwurbel/combining-graphical-and-textual"&gt;The slides&lt;/a&gt; are also available at slideshare.&lt;br /&gt;&lt;br /&gt;Apart from a number of really impressive talks, the thing that most impressed me was SAP's graphical editing framework. Instead of using a code-generation approach it rather focusses on an provider-based Java API. They are currently in the process of adapting it to EMF and their plan is to make it open source. I hope they really do, because it seems to have the potential of greatly reducing the complexity of creating graphical editors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-6446037634713613780?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/6446037634713613780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=6446037634713613780' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/6446037634713613780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/6446037634713613780'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/10/eclipse-summit-europe-2009_30.html' title='Eclipse Summit Europe 2009 retrospective'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5196635238075007586</id><published>2009-10-25T14:51:00.003+01:00</published><updated>2009-10-25T15:23:36.491+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharedEditingDomain'/><category scheme='http://www.blogger.com/atom/ns#' term='GMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='GMFTools'/><title type='text'>GMFTools Part 2: Sharing an EditingDomain</title><content type='html'>In this blog, I will elaborate on how &lt;a href="http://code.google.com/p/gmftools"&gt;GMFTools&lt;/a&gt; facilitates to share the same instance of an &lt;span style="font-style: italic;"&gt;EditingDomain&lt;/span&gt; across multiple diagram editors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is an EditingDomain?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.eclipse.org/modeling/gmf/"&gt;GMF&lt;/a&gt;, each diagram editor works on its own instance of a so called &lt;span style="font-style: italic;"&gt;TransactionalEditingDomain&lt;/span&gt;. &lt;span style="font-style: italic;"&gt;TransactionalEditingDomain&lt;/span&gt; is a concept from &lt;a href="http://www.eclipse.org/modeling/emf/?project=transaction"&gt;EMF Transaction&lt;/a&gt;. In GMF, it contains an &lt;a href="http://www.eclipse.org/modeling/emf/"&gt;EMF&lt;/a&gt; ResourceSet holding the diagram model, its semantic model and all referenced models as well as a command stack for undo/redo support. In addition, each editor registers a &lt;span style="font-style: italic;"&gt;WorkspaceSynchronizer&lt;/span&gt; to its resource files, making sure external changes are synchronized with the editor's content.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why share the EditingDomain? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the default setup, problems occur if two editors operate on the same resources: If both editors change the same resource, saving one will overwrite the changes of the other. This situation already happens when you're using the &lt;span style="font-style: italic;"&gt;Related Diagrams&lt;/span&gt; feature in the gmfmap model: On double click, it will open a new diagram that is saved in the same resource but in a different editing domain. As the original editor is still open, conflicts can arise quickly.&lt;br /&gt;&lt;br /&gt;Another reason for sharing the editing domain is to save memory and performance, especially if you're working on big models with a couple of editors.&lt;br /&gt;&lt;br /&gt;In many cases you might want to see changes immediately in all editors without having to save first, e.g. when your editors show different parts or aspects of the same model. GMF has already built-in support for that as it uses EMF's notification mechanism to synchronize the notation (diagram) model with the semantic model.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Consequences of sharing an EditingDomain&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sharing the editing domain across several editors has a number of consequences&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The editors will also share the same command stack. Undo/redo becomes a global operation and can therefore affect other editors than the currently active one.&lt;/li&gt;&lt;li&gt;For reasons of simplicity, all editors should be saved synchronously, and they will all be either dirty or clean at the same time.&lt;/li&gt;&lt;li&gt;You should no longer dispose the editing domain when closing an editor. That means, to avoid memory leaks you need strategy for unloading unneeded resources.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The command stack will keep references to unloaded model elements, too, so you might want to have an garbage collecting strategy here as well or at least keep the command history short.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Solution in GMFTools&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The solution in &lt;a href="http://code.google.com/p/gmftools"&gt;GMFTools&lt;/a&gt; is based on &lt;a href="http://wiki.eclipse.org/index.php/GMF_Tips#Sharing_single_EditingDomain_instance_across_several_diagrams"&gt;a WiKi page of GMF&lt;/a&gt; and a couple of newsgroup entries combined with our own experiences. It has been recently refactored to reenable the &lt;span style="font-style: italic;"&gt;WorkspaceSynchronizer&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It comes in a number of aspectual template changes for the GMF code generator, an additional runtime plug-in and tool support for fixing the type registry, such that  it is rather easy to consume even if you're not too familiar with the GMF runtime. Note that so far we have only been using it to generate plain diagram plug-ins, i.e. not for GMF's RCP generator.&lt;br /&gt;&lt;br /&gt;The major changes are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Redirect all creation statements of an editing domain to a new utility class and the dispose statements to an unloading tool.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make sure to use consistent element types.&lt;/li&gt;&lt;li&gt;The common behavior of all &lt;span style="font-style: italic;"&gt;XXDocumentProvider.ResourceSetInfo&lt;/span&gt; has been extracted to avoid synchronization feedback loops.&lt;/li&gt;&lt;/ul&gt;If you're interested in the details have a look at the &lt;a href="http://code.google.com/p/gmftools/wiki/SharedEditingDomain"&gt;WiKi-page&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5196635238075007586?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5196635238075007586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5196635238075007586' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5196635238075007586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5196635238075007586'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/10/gmftools-part-2-sharing-editingdomain.html' title='GMFTools Part 2: Sharing an EditingDomain'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5139082364251459086</id><published>2009-10-09T18:18:00.006+02:00</published><updated>2009-10-09T18:59:49.487+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='GMFTools'/><title type='text'>GMFTools Part 1: UI Extensions</title><content type='html'>This is the first of a short series of posts on &lt;a href="http://code.google.com/p/gmftools/"&gt;GMFTools&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://eclipse.org/modeling/gmf/"&gt;Graphical Modeling Framework&lt;/a&gt; is a powerful framework for the development of graphical editors for EMF-based models. It's based on &lt;a href="http://eclipse.org/modeling/emf/"&gt;EMF&lt;/a&gt; and &lt;a href="http://eclipse.org/gef/"&gt;GEF &lt;/a&gt;and uses a model-driven approach for designing the editors.&lt;br /&gt;&lt;br /&gt;Building graphical editors is a complex task. While GMF tries to facilitate that procedure, its abstractions are sometimes still a little hard to grasp, and the generated results often need manual fine-tunig to meet end-user expectations. I am a user, not a developer of GMF. Mymain concern is getting things done in the projects I am working on. That's why I sometimes bend GMF to do what I want it do, rather than use it the way it is meant to be used. That fact makes it somehow hard to contribute back to the GMF project. Still, me and my colleagues take a lot of benefit from using GMF.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;GMFTools&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;As a long term user of GMF, I started to collect code, tools, samples and several tipps and tricks in the &lt;a href="http://code.google.com/p/gmftools/"&gt;GMFTools&lt;/a&gt; project about a year ago. In the meantime, the project has attracted additional committers and it has become quite a useful collection of real-world solutions around GMF.&lt;br /&gt;&lt;br /&gt;GMFTools roughly consists of three components&lt;br /&gt;&lt;ul&gt;&lt;li&gt;UI-Extensions making GMF easier to use.&lt;/li&gt;&lt;li&gt;Runtime extensions that add new functionality by means of additional classes and generator template changes.&lt;/li&gt;&lt;li&gt;Examples demonstrating the use of the runtime extensions.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;The GMFTools Button&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Iv16ZiqDyCA/Ss9i42XrJ7I/AAAAAAAAACI/7kqAvlFxnwA/s1600-h/Bild+1.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 153px; height: 92px;" src="http://4.bp.blogspot.com/_Iv16ZiqDyCA/Ss9i42XrJ7I/AAAAAAAAACI/7kqAvlFxnwA/s200/Bild+1.png" alt="" id="BLOGGER_PHOTO_ID_5390636007792781234" border="0" /&gt;&lt;/a&gt;The first thing that may catch your attention after having installed GMFTools is a new GMF button in your button bar. It is meant to make GMF development easier and performs a bunch of actions on your GMF projects, including running the GMF code generator. To see what kind of actions, open the preference page for GMFTools. Each action can be enabled and disabled separately.&lt;br /&gt;&lt;br /&gt;Most of the actions are self-explanatory. You may wonder wh&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Iv16ZiqDyCA/Ss9j0VeIgRI/AAAAAAAAACQ/eMGZeQC4Zxw/s1600-h/Bild+2.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 176px; height: 200px;" src="http://3.bp.blogspot.com/_Iv16ZiqDyCA/Ss9j0VeIgRI/AAAAAAAAACQ/eMGZeQC4Zxw/s200/Bild+2.png" alt="" id="BLOGGER_PHOTO_ID_5390637029753651474" border="0" /&gt;&lt;/a&gt;y I want to delete the gmfgen model and the diagram code before re-generating. The reason is that by deleting the generated artifacts before re-generation, I circumvent all reconciliation steps (including JMerge). I have very bad experiences with reconcilers in general and so I prefer not to mix manually written and generated code.  Some people have called me a "purist" for this attitude, but from my experience a clean separation will pay in the long run of a model-driven project.&lt;br /&gt;&lt;br /&gt;As a consequence gmfgen model becomes a temporary artifact in the whole code generation procedure. To be able to modify the gmfgen model nevertheless, I have introduced a model-to-model transformation that is performed before generating the actual diagram code from the gmfgen model. This transformation is performed using an Xtend file (both oAW and M2T work) which is persisted next to your GMF design models.&lt;br /&gt;&lt;br /&gt;The fix of the type registration will be covered in a post on shared editing domains.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Iv16ZiqDyCA/Ss9oIza2DUI/AAAAAAAAACY/TbXJAiWl_bs/s1600-h/Bild+4.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 108px;" src="http://3.bp.blogspot.com/_Iv16ZiqDyCA/Ss9oIza2DUI/AAAAAAAAACY/TbXJAiWl_bs/s200/Bild+4.png" alt="" id="BLOGGER_PHOTO_ID_5390641779436817730" border="0" /&gt;&lt;/a&gt;In the middle of the preferences, you can manipulate your current set of GMF models (might not be the best name), i.e. the combinations of ecore, genmodel, gmfgraph, gmftool and gmfmap models you need to generate a GMF editor, as well as the Xtend transformation. These sets can also be provided by means of *.def files that can be stored in your workspace next to the design models.&lt;br /&gt;&lt;br /&gt;By a single click on the GMF button, all enabled actions are executed on the currently / last  selected models. In its drop-down menu you can access all your editor model individually. That really speeds up GMF development significantly, as you no longer have to find your way through the popup menus of different files. Nevertheless, individual actions can still be executed from the popup menus of the respective files.&lt;br /&gt;&lt;br /&gt;That's all for today. Stay tuned for more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5139082364251459086?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5139082364251459086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5139082364251459086' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5139082364251459086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5139082364251459086'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/10/gmftools-part-1-ui-extensions.html' title='GMFTools Part 1: UI Extensions'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Iv16ZiqDyCA/Ss9i42XrJ7I/AAAAAAAAACI/7kqAvlFxnwA/s72-c/Bild+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5369012871207692057</id><published>2009-10-08T18:49:00.003+02:00</published><updated>2009-10-08T19:09:48.015+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ESE'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='MDSD'/><title type='text'>Eclipse Summit Europe 2009</title><content type='html'>&lt;a href="http://www.eclipsesummit.org/"&gt;&lt;img src="http://www.eclipsecon.org/summiteurope2009/static/image/friends/100x100_speaking.gif" alt="I'm speaking at Eclipse Summit Europe 2009" align="right" border="0" width="100" height="100" /&gt;&lt;/a&gt;&lt;br /&gt;I am looking forward to &lt;a href="http://www.eclipsecon.org/summiteurope2009/"&gt;Eclipse Summit Europe 2009&lt;/a&gt; in Ludwigsburg, Germany.&lt;br /&gt;&lt;br /&gt;My colleagues from itemis and me, we're once again going to have our share:&lt;br /&gt;&lt;br /&gt;Sebastian Zarnekow, Karsten Thoms, Markus Voelter and me are going to give a tutorial on &lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=1010"&gt;Domain-specific Languages with Eclipse Modeling&lt;/a&gt;, in which we show how to set up your own easy-to-use MDSD toolchain.&lt;br /&gt;&lt;br /&gt;In the short talk &lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=957"&gt;Combining Graphics and Text in Modeling Tools&lt;/a&gt;, Jos Warmer and me will be elaborating on mixing concrete syntaxes for the same model using state-of-the-art modeling tool frameworks such as Xtext and GMF.&lt;br /&gt;&lt;br /&gt;In the talk &lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=906"&gt;Xtext - From Galileo to Helios&lt;/a&gt;, Sven Efftinge and Sebastian Zarnekow are presenting the future plans for Xtext.&lt;br /&gt;&lt;br /&gt;Finally, Andreas Graf and Markus Voelter are going to talk on &lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=906"&gt;Leighweight Model-Driven Development for Embedded Systems&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, maybe there's something in for you, too?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5369012871207692057?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5369012871207692057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5369012871207692057' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5369012871207692057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5369012871207692057'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/10/eclipse-summit-europe-2009.html' title='Eclipse Summit Europe 2009'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3430768373979791672</id><published>2009-10-05T08:00:00.003+02:00</published><updated>2009-10-05T08:04:05.990+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MacOSX'/><title type='text'>MacOSX window trouble</title><content type='html'>Clever people know that cleaning your keyboard while your computer is switched on might be a bad idea. I did anyway, and as a result my Eclipse window looked like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Iv16ZiqDyCA/SsmL98McLaI/AAAAAAAAACA/M7C5-3lG7oc/s1600-h/Bild+2.png"&gt;&lt;img style="cursor: pointer; width: 75px; height: 26px;" src="http://3.bp.blogspot.com/_Iv16ZiqDyCA/SsmL98McLaI/AAAAAAAAACA/M7C5-3lG7oc/s200/Bild+2.png" alt="" id="BLOGGER_PHOTO_ID_5388992325372095906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the non MacOSX experts: You won't be able to click on the right restore button, and there is no such menu entry anywhere. Luckily, Eclipse can be restored using&lt;span style="font-style: italic;"&gt; Window-&gt;New Window&lt;/span&gt; (thanks for the hint, Sebastian). Restarting the application or the computer  would not work.&lt;br /&gt;&lt;br /&gt;But how's that supposed to work in MacOSX anyway? I found a couple of Applescript solutions, but nothing really user-friendly in the internet. I couldn't even figure out how I got into this situation. Any ideas?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3430768373979791672?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3430768373979791672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3430768373979791672' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3430768373979791672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3430768373979791672'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/10/macosx-window-trouble.html' title='MacOSX window trouble'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Iv16ZiqDyCA/SsmL98McLaI/AAAAAAAAACA/M7C5-3lG7oc/s72-c/Bild+2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-7778206923999061872</id><published>2009-09-18T15:26:00.002+02:00</published><updated>2009-09-18T15:44:37.211+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF Index'/><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>EMF Index</title><content type='html'>Work on the Eclipse project EMF Index has started. As the project lead, I am proud to present our new website &lt;a href="http://eclipse.org/emfindex"&gt;http://eclipse.org/emfindex&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's a bit plain - because I made it myself and I am not much of a designer - but still looks quite slick, as it is based on the Nova CSS. &lt;a href="http://www.heikobehrens.net/"&gt;Heiko's&lt;/a&gt; webpages on &lt;a href="http://www.eclipse.org/Xtext"&gt;Xtext&lt;/a&gt; have been a useful template.&lt;br /&gt;&lt;br /&gt;Dennis and Sven have worked hard to finally get the automatic build running. You can download the latest snapshots&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the interim build update site: &lt;a href="http://download.eclipse.org/modeling/emft/emfindex/updates/interim/"&gt;http://download.eclipse.org/modeling/emft/emfindex/updates/interim/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;the nightly build update site: &lt;a href="http://download.eclipse.org/modeling/emft/emfindex/updates/nightly/"&gt;http://download.eclipse.org/modeling/emft/emfindex/updates/nightly/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The current implementation is based on EMF. SAP is working in parallel on another implementation using tables and a paging mechanism.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-7778206923999061872?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/7778206923999061872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=7778206923999061872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7778206923999061872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7778206923999061872'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/09/emf-index.html' title='EMF Index'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3405876677861478899</id><published>2009-08-24T23:01:00.008+02:00</published><updated>2009-09-10T18:37:04.392+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Talk'/><category scheme='http://www.blogger.com/atom/ns#' term='ruhrjug'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Xtext in Essen aftermath</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Iv16ZiqDyCA/SpMHxs95I7I/AAAAAAAAAB4/WMMw4vuSi6U/s1600-h/3852321848_af605c54a6.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 133px; height: 200px;" src="http://1.bp.blogspot.com/_Iv16ZiqDyCA/SpMHxs95I7I/AAAAAAAAAB4/WMMw4vuSi6U/s200/3852321848_af605c54a6.jpg" alt="" id="BLOGGER_PHOTO_ID_5373647330848875442" border="0" /&gt;&lt;/a&gt;Thursday was the hottest day this summer in Germany. But despite 30° C and thunderstorms   a bunch of Java enthusiasts made it to the meeting of the &lt;a href="http://www.ruhrjug.de/"&gt;ruhrjug&lt;/a&gt;, the Java user group in Essen (Germany).&lt;br /&gt;&lt;br /&gt;Having a talk on &lt;a href="http://www.slideshare.net/schwurbel/domnenspezifische-sprachen-mit-xtext"&gt;Domain-specific Languages with Xtext&lt;/a&gt; was once again a refreshing experience, as the audience appeared very interested and posed a lot of intriguing questions. The whole thing has been recorded on video (sorry, it's in German), so you'll be able to see me sweating as soon as I have the link.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Iv16ZiqDyCA/SpMB8LQ2GbI/AAAAAAAAABo/XwCH3q_z270/s1600-h/3851526691_dab7fc3876.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 133px;" src="http://4.bp.blogspot.com/_Iv16ZiqDyCA/SpMB8LQ2GbI/AAAAAAAAABo/XwCH3q_z270/s200/3851526691_dab7fc3876.jpg" alt="" id="BLOGGER_PHOTO_ID_5373640913710356914" border="0" /&gt;&lt;/a&gt;Thanks to Heiko Sippel and Peter Rossbach who organized the meeting and Prof. Dr. Michael Goedicke our host from the University of Essen/Duisburg at that night.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By the way, if you're hilarious about &lt;a href="http://www.xtext.org/"&gt;Xtext&lt;/a&gt;, don't forget to join our &lt;a href="http://xtext.itemis.com/xtext/language=en/25279/model-prize-laureate"&gt;Model Prize Laureate&lt;/a&gt; competition and win a Google Phone, a ticket to the Eclipse Summit Europe or other fancy and geeky prizes!&lt;br /&gt;&lt;br /&gt;PS: The video is now online. Watch me sweating at &lt;a href="http://www.ruhrjug.de/videos/gse.lectures.app/Talk.html#Xtext"&gt;http://www.ruhrjug.de/videos/gse.lectures.app/Talk.html#Xtext&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3405876677861478899?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3405876677861478899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3405876677861478899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3405876677861478899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3405876677861478899'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/08/xtext-at-essen.html' title='Xtext in Essen aftermath'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Iv16ZiqDyCA/SpMHxs95I7I/AAAAAAAAAB4/WMMw4vuSi6U/s72-c/3852321848_af605c54a6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3747442620349193494</id><published>2009-08-17T09:19:00.003+02:00</published><updated>2009-08-17T09:41:09.276+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Talk'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='JUG'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Xtext in Essen</title><content type='html'>I'll be giving a talk on &lt;a href="http://www.ruhrjug.de/vorschau/details/11-jan-koehnlein"&gt;&lt;span style="font-style: italic;"&gt;Domain-specific languages with Xtext&lt;/span&gt;&lt;/a&gt; to the Java User Group &lt;a href="http://www.ruhrjug.de/"&gt;ruhrjug&lt;/a&gt; in Essen (Germany), Thursday the 20th of August, 18:30h.&lt;br /&gt;&lt;br /&gt;So if you're based in the Ruhr area, bored by your summer holiday and keen to learn more about DSLs in practice, why not give it a try?&lt;br /&gt;&lt;br /&gt;To avoid finding yourself in the wrong location, please note that this is the first ruhrjug event at the new location &lt;a href="http://www.ruhrjug.de/anfahrt"&gt;Glaspavillon Campus Essen&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3747442620349193494?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3747442620349193494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3747442620349193494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3747442620349193494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3747442620349193494'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/08/xtext-in-essen.html' title='Xtext in Essen'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-1451473464802703335</id><published>2009-07-28T14:56:00.004+02:00</published><updated>2009-07-28T15:46:00.117+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse Xtext DSL'/><title type='text'>Source code for the screencast of Xtext and GMF</title><content type='html'>Having received a lot of positive feedback for &lt;a href="http://koehnlein.blogspot.com/2009/06/synchronized-editors-with-tmfxtext-and.html"&gt;my last post&lt;/a&gt;, I finally found the time to make the source code available. You can find it in the SVN repository of the &lt;a href="http://code.google.com/p/gmftools/"&gt;GMFTools project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have put the installation instructions &lt;a href="http://code.google.com/p/gmftools/wiki/GMF_and_Xtext"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note that this is proof-of-concept code rather than production quality. See &lt;a href="http://koehnlein.blogspot.com/2009/06/synchronized-editors-with-tmfxtext-and.html"&gt;my previous post&lt;/a&gt; for implementational details. Also note that two open bugs&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=281014"&gt;http://bugs.eclipse.org/bugs/show_bug.cgi?id=281014&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=284850"&gt;http://bugs.eclipse.org/bugs/show_bug.cgi?id=284850&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;currently limit the fun a little bit, but we're at least working on the Xtext part.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-1451473464802703335?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/1451473464802703335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=1451473464802703335' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1451473464802703335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1451473464802703335'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/07/source-code-for-screencast-of-xtext-and.html' title='Source code for the screencast of Xtext and GMF'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2375377556613856797</id><published>2009-06-21T18:47:00.002+02:00</published><updated>2009-06-21T19:50:26.374+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='GMFTools'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Synchronized editors with TMF/Xtext and GMF</title><content type='html'>Well, here it is, the &lt;a href="http://download.itemis.com/Screencast_Xtext_GMF.mp4"&gt;screencast&lt;/a&gt; showing a textual TMF/Xtext and a graphical GMF editor synchronized on the same model. &lt;br /&gt;&lt;p&gt;&lt;br /&gt;The example has been implemented with only a few changes to generated code: In Xtext, the following modifications were applied:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A &lt;span style="font-style:italic;"&gt;Formatter&lt;/span&gt; to define where to use what kind of whitespace, when the textual representation is derived from the semantic model.&lt;br /&gt;&lt;li&gt;An &lt;span style="font-style:italic;"&gt;IFragmentProvider&lt;/span&gt; that generates name-based fragments (IDs) for elements in an Xtext resource. That way, the correspondence of graphical nodes to semantic elements is preserved even if you delete a preceeding entity.&lt;br /&gt;&lt;li&gt;An &lt;span style="font-style:italic;"&gt;AbstractEntitiesJavaValidator&lt;/span&gt; has been implemented for Java based validation&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;On the GMF side:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;In the mapping model, I had to use feature initializers to make sure names are initialized properly on creation, to always have serializable models.&lt;br /&gt;&lt;li&gt;In the generator model, I had to manually set the domain genmodel and the file extension. &lt;br /&gt;&lt;li&gt;In the generator model, I enabled validation decorators and printing, and added the plug-in &lt;span style="font-style:italic;"&gt;de.itemis.gmf.runtime.extensions&lt;/span&gt; from the GMFTools project containing a more sophisticated layout.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Additionally, I added a bit of glue code:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;An action to navigate from an &lt;span style="font-style:italic;"&gt;EditPart&lt;/span&gt; to the textual representation, using Xtext's &lt;span style="font-style:italic;"&gt;NodeAdapter&lt;/span&gt;.&lt;br /&gt;&lt;li&gt;A listener that warns the user if (s)he's about to change a file that has already been changed in another dirty editor, and allows to abandon the changes.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The editor are synchronizing on save, to avoid GMF's canonical edit policies pruning nodes/edges belonging to temporarily lost elements.&lt;br /&gt;&lt;br /&gt;Xtext plays well with EMF. It registers&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A resource factory for a specific &lt;span style="font-style:italic;"&gt;XtextResource&lt;/span&gt; implementation that encapsulates the parser (text-&gt;model) as well as the serializer (model-&gt;text).&lt;br /&gt;&lt;li&gt;An EValidator with a declarative Java implementation&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2375377556613856797?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2375377556613856797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2375377556613856797' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2375377556613856797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2375377556613856797'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/06/synchronized-editors-with-tmfxtext-and.html' title='Synchronized editors with TMF/Xtext and GMF'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-1701698258736369295</id><published>2009-06-19T12:11:00.002+02:00</published><updated>2009-06-19T12:18:09.325+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeGeneration'/><category scheme='http://www.blogger.com/atom/ns#' term='MDSD'/><title type='text'>Slides from Xtext Workshop at Code Generation 2009</title><content type='html'>Code Generation 2009 has been a lot of fun. Yesterday, Moritz, Sebastian and me gave a hands-on workshop on Xtext. Participants seemed to like it and we could even convince Steven Kelly from Metacase to give it a try. I've uploaded the slides to slideshare, so if you wish to learn something about Xtext, you can have a look at it &lt;a href="http://www.slideshare.net/schwurbel/workshop-on-xtext"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Back to Kiel, we are now sweating to give Xtext the last polish before it is released with Galileo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-1701698258736369295?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/1701698258736369295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=1701698258736369295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1701698258736369295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1701698258736369295'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/06/slides-from-xtext-workshop-at-code.html' title='Slides from Xtext Workshop at Code Generation 2009'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5470322154123250474</id><published>2009-06-16T14:58:00.003+02:00</published><updated>2009-06-16T15:28:59.723+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='GMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeGeneration'/><category scheme='http://www.blogger.com/atom/ns#' term='Cambridge'/><title type='text'>CodeGeneration 2009</title><content type='html'>I am back at Cambridge (UK) for this year's Code Generation conference. &lt;br /&gt;&lt;br /&gt;The itemis-Kiel team already arrived yesterday, and after a nice walk through the town and some fish and chips, I finished a showcase with a GMF editor on an Xtext model. So be prepared for another converging editors screencast soon :-)&lt;br /&gt;&lt;br /&gt;The conference started this morning. Up to now, I have heard two talks: First, Kathleen Dollard from AppVenture talked about &lt;span style="font-style:italic;"&gt;Template Specialization&lt;/span&gt;. Kathleen referred to the .NET code generation languages and their specific problems, e.g. with respect to modularity and extensibility. To me it looked like we've got more comfortable solutions in the Eclipse/Java world. Then, Sven and Sebastian talked about &lt;span style="font-style:italic;"&gt;Challenges in DSL Design&lt;/span&gt;. They elaborated that todays external DSLs usually stop at modeling behavior because of the lack of an embeddable expression language. Looks like that's going to be one of the goals in the next version of Xtext. Right now I am guarding the itemis booth for a while, just to join the case study by Karsten and Heiko on their MDSD projects at Deutsche Börse AG.&lt;br /&gt;&lt;br /&gt;Despite all prejudice against British food, catering is excellent. Thanks to the perfect organisation by Mark Dalgarno and Andy Moorley, we're going on a traditional punting trip along the river Cam tonight. Should I have brought my wetsuit?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5470322154123250474?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5470322154123250474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5470322154123250474' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5470322154123250474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5470322154123250474'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/06/codegeneration-2009.html' title='CodeGeneration 2009'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-8565090112112060677</id><published>2009-04-30T17:25:00.006+02:00</published><updated>2009-04-30T17:56:46.356+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeGeneration'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><title type='text'>JAX is over, now head for Code Generation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Iv16ZiqDyCA/SfnFsA2Ha9I/AAAAAAAAABg/ObepEAt529g/s1600-h/DSC00027.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_Iv16ZiqDyCA/SfnFsA2Ha9I/AAAAAAAAABg/ObepEAt529g/s200/DSC00027.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5330508993901587410" /&gt;&lt;/a&gt;&lt;br /&gt;The JAX 2009 conference in Mainz (Germany) was once again big fun: A good opportunity to meet lots of intriguing people and listen to entertaining and informative talks in a beautiful location at the river Rhine. I've just uploaded the slides of the talks I gave, so if you're interested, have a look at &lt;a href="http://www.slideshare.net/schwurbel/emf-beyond-the-basics"&gt;EMF - Beyond the Basic&lt;/a&gt; or &lt;a href="http://www.slideshare.net/schwurbel/eclipse-modeling-overview"&gt;Eclipse Modeling Overview&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;If you're keen on modelling with double 'l' :-), I recommend to join the upcoming &lt;a href="http://www.codegeneration.net/cg2009/"&gt;CodeGeneration 2009&lt;/a&gt; in Cambridge (UK), 16th-18th June 2009. Next to a bunch of well known speakers from industry and research, my colleagues from itemis and me are also going to have our share on the programme, e.g. &lt;a href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=23"&gt;Challenges in DSL Design&lt;/a&gt;, &lt;a href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=64"&gt;Mastering differentiated MDSD requirements at Deutsche Boerse AG&lt;/a&gt;, &lt;a href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=1"&gt;MDD: The Good, The Bad and The Ugly&lt;/a&gt;, &lt;a href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=53"&gt;MDD: The Best, The Worst and The Ugliest&lt;/a&gt;, &lt;a href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=9"&gt;Language Definition, Extension and Composition with MPS&lt;/a&gt; and an &lt;a href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=30"&gt;Xtext Workshop&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Iv16ZiqDyCA/SfnFWZnk6XI/AAAAAAAAABY/054N4o0h3O8/s1600-h/CG2009logo250x62.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 50px;" src="http://1.bp.blogspot.com/_Iv16ZiqDyCA/SfnFWZnk6XI/AAAAAAAAABY/054N4o0h3O8/s200/CG2009logo250x62.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5330508622594369906" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-8565090112112060677?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/8565090112112060677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=8565090112112060677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/8565090112112060677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/8565090112112060677'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/04/jax-is-over-now-head-for-code.html' title='JAX is over, now head for Code Generation'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Iv16ZiqDyCA/SfnFsA2Ha9I/AAAAAAAAABg/ObepEAt529g/s72-c/DSC00027.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3489646883226672333</id><published>2009-04-17T09:19:00.002+02:00</published><updated>2009-04-17T09:42:18.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><title type='text'>Talks at JAX Conference in Germany</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Iv16ZiqDyCA/SegyQT-shKI/AAAAAAAAABQ/SMQjJl9ZA_M/s1600-h/jax09_speakerbutton_neu.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 100px;" src="http://4.bp.blogspot.com/_Iv16ZiqDyCA/SegyQT-shKI/AAAAAAAAABQ/SMQjJl9ZA_M/s200/jax09_speakerbutton_neu.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5325561815188145314" /&gt;&lt;/a&gt;&lt;br /&gt;Sven and me, we're going to give some talks on Eclipse Modeling, DSLs and Xtext at the &lt;a href="http://it-republik.de/jaxenter/jax/"&gt;JAX conference&lt;/a&gt; in Mainz (Germany) next week:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Eclipse Modeling - Overview&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Sven Efftinge, Jan Köhnlein&lt;/span&gt;&lt;br /&gt;Tue 21/04/2009, 10:00-11:15h&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Code generation in agile Projects&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Sven Efftinge, Jan Köhnlein&lt;/span&gt;&lt;br /&gt;Tue 21/04/2009, 16:45-17:45h&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Xtext&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Sven Efftinge&lt;/span&gt;&lt;br /&gt;Wed 22/04/2009, 10:15-11:15h&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;EMF: Beyond the Basics&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Jan Köhnlein&lt;/span&gt;&lt;br /&gt;Wed 22/04/2009, 16:15-17:15h&lt;br /&gt;&lt;br /&gt;Hope to see you there!&lt;br /&gt;&lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3489646883226672333?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3489646883226672333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3489646883226672333' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3489646883226672333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3489646883226672333'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/04/jax.html' title='Talks at JAX Conference in Germany'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Iv16ZiqDyCA/SegyQT-shKI/AAAAAAAAABQ/SMQjJl9ZA_M/s72-c/jax09_speakerbutton_neu.gif' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5410629439589036245</id><published>2009-03-24T23:50:00.002+01:00</published><updated>2009-03-25T00:04:36.779+01:00</updated><title type='text'>Xtext, Generic Editor and EMF Index at EclipseCon</title><content type='html'>Just finished our talks at EclipseCon.&lt;br /&gt;&lt;br /&gt;First, Sven and me talked about the new TMF/Xtext. The room was so crowded that some listeners even had to sit on the floor. Presenting was really fun and given the feedback people are really excited for Xtext. So we are, even though Sven has a bad throat and almost lost his voice ;-)&lt;br /&gt;&lt;br /&gt;Given the good resonance, we're trying to organize a BoF session on Xtext tomorrow. Stay tuned for exact time and location. &lt;br /&gt;&lt;br /&gt;Sven had a 10 minutes talk on the Generic EMF Editor then, and showed the Editor, Xtend and Xpand. I think, it's a good idea to point people at the fancy features of the oAW languages, such as polymorphic dispatch and higher-order functions.&lt;br /&gt;&lt;br /&gt;Finally, I gave a 10 minutes talk on EMF Index. I have the impression people were quite curious about that topic as we already mentioned that in our Xtext talk. I tried to prepare the slides in the presentation zen style, and I can just conclude that presenting is so much more fun than having a clutter of bullet pointed list. I hope, it's the same for the viewers. And I exactly hit the 10 mins :-)&lt;br /&gt;&lt;br /&gt;EclipseCon is really great. You really meet lots of people in person you have only known from blogs or mailing lists. Having had my share, I can now relax and join the other talks on so many other interesting topics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5410629439589036245?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5410629439589036245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5410629439589036245' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5410629439589036245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5410629439589036245'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/03/xtext-generic-editor-and-emf-index-at.html' title='Xtext, Generic Editor and EMF Index at EclipseCon'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-7733139278373847687</id><published>2009-03-10T17:42:00.003+01:00</published><updated>2009-03-10T18:08:53.669+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF Index'/><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><title type='text'>EMF Index Creation Review</title><content type='html'>Tomorrow will be the creation review for the new EMFT subproject &lt;a href="http://www.eclipse.org/proposals/emf-index/"&gt;EMF Index&lt;/a&gt;. I am really looking forward to my first Eclipse project leadership and I hope everything will work out fine at the review.&lt;br /&gt;&lt;br /&gt;EMF Index aims at indexing EMF models to allow scalable modeling tools with JDT-like comfort. So, if you have any objections against EMF Index, speak now (in the &lt;a href="news://news.eclipse.org:119/gjv4s6$69g$1@build.eclipse.org"&gt;EMFT newsgroup&lt;/a&gt;) or remain silent forever ;-)&lt;br /&gt;&lt;br /&gt;I am also glad to have the opportunity to present &lt;a href="http://www.eclipsecon.org/2009/sessions?id=501"&gt;EMF Index at EclipseCon 2009&lt;/a&gt; in Santa Clara. Looks like many of the interested parties will attend. I am going to give another talk together with Sven on &lt;a href="http://www.eclipsecon.org/2009/sessions?id=436"&gt;Next generation textual DSLs with Xtext&lt;/a&gt;. It's also my first trip to the US, which makes me even more excited. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipsecon.org/2009/"&gt;&lt;img style="float:left; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 130px; height: 100px;" src="http://www.eclipsecon.org/2009/static/image/130x100_speaking.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-7733139278373847687?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/7733139278373847687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=7733139278373847687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7733139278373847687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7733139278373847687'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/03/emf-index-creation-review.html' title='EMF Index Creation Review'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2379697266340802310</id><published>2009-02-02T11:24:00.003+01:00</published><updated>2009-02-02T11:31:05.148+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Xtext'/><title type='text'>Xtext Success Story</title><content type='html'>Just returned from a workshop in Switzerland. One of the guys there managed to &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Get acquainted with and install Eclipse.&lt;br /&gt;&lt;li&gt;Install and learn oAW Xtext.&lt;br /&gt;&lt;li&gt;Define a grammar and generate the code.&lt;br /&gt;&lt;li&gt;Deploy the editor at the customer's side.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;All of that within 5 days. What does that mean&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;That guy is really a wizard.&lt;br /&gt;&lt;li&gt;Eclipse is very easy to install and use.&lt;br /&gt;&lt;li&gt;Xtext can really give you a head-start into modeling.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;It feels so good to have such a mighty toolstack at hand :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2379697266340802310?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2379697266340802310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2379697266340802310' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2379697266340802310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2379697266340802310'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/02/xtext-success-story.html' title='Xtext Success Story'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3707894627981508256</id><published>2009-01-28T12:23:00.003+01:00</published><updated>2009-01-28T12:42:15.105+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>OOP 2009</title><content type='html'>I am at the OOP 2009 conference in Munich. Lots of technical talks on software engineering, but soft skills are also a big topic. Even though our both is not really 80 square meters as promised, we are having lot of fun. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Iv16ZiqDyCA/SYBEDK__stI/AAAAAAAAAAw/XQzk4_W7LA4/s1600-h/DSC00008.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_Iv16ZiqDyCA/SYBEDK__stI/AAAAAAAAAAw/XQzk4_W7LA4/s200/DSC00008.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5296307983070769874" /&gt;&lt;/a&gt;&lt;br /&gt;Yesterday, Sven and I had a talk on the introduction of three DSLs in a customer project: A textual DSL based on Xtext describing the domain model, a graphical DSL based on GMF for defining form layouts and an internal Java DSL for validation. I think we managed to entertaining the audience, as we made fancy slides in the "Presentation Zen" style. Measured by the amount of questions the talk was a success.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3707894627981508256?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3707894627981508256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3707894627981508256' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3707894627981508256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3707894627981508256'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/01/oop-2009.html' title='OOP 2009'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Iv16ZiqDyCA/SYBEDK__stI/AAAAAAAAAAw/XQzk4_W7LA4/s72-c/DSC00008.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-1083311159109602851</id><published>2009-01-06T09:31:00.003+01:00</published><updated>2009-01-06T09:38:50.845+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF Index'/><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Proposal'/><title type='text'>Proposal for new Eclipse Project: EMF Index</title><content type='html'>In the Modeling Symposium at Eclipse Summit Europe 2008 we discussed the necessity of an index for EMF models. Such an index would allow efficient queries for EMF model elements without actually loading the model resources, which is an enabling feature for powerful EMF modeling tools.&lt;br /&gt;&lt;br /&gt;The proposal is now &lt;a href="http://www.eclipse.org/proposals/emf-index/"&gt;online&lt;/a&gt;. Please use the &lt;a href="news://news.eclipse.org:119/gjv4s6$69g$1@build.eclipse.org"&gt;EMFT newsgroup&lt;/a&gt; for discussion. I am looking forward to your feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-1083311159109602851?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/1083311159109602851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=1083311159109602851' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1083311159109602851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1083311159109602851'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2009/01/proposal-for-new-eclipse-project-emf.html' title='Proposal for new Eclipse Project: EMF Index'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-6486301519248686529</id><published>2008-11-27T17:28:00.003+01:00</published><updated>2008-12-05T13:57:21.802+01:00</updated><title type='text'>How to make an xtext language reference another by nsURI</title><content type='html'>In principle, Xtext allows two languages to refer to each other by means of the &lt;span style="font-style: italic;"&gt;importMetamodel&lt;/span&gt; feature. If you specify the imported meta-model by means of a file URI, everything works out of the box. Unfortunately, file URIs are not suitable in many scenarios, so something less physical would be appropriate.&lt;br /&gt;&lt;br /&gt;Due to a certain mismatch between the way openArchitectureWare (and thereby all the language's Xtend and Check files) and EMF access files and handle &lt;span style="font-style: italic;"&gt;EPackage&lt;/span&gt; registration. The following describes the way to go in the version of Xtext that is shipped with oAW 4.3.1. Note that in TMF/Xtext we will provide easier support by means of classpath relative URIs.&lt;h3&gt;Example&lt;/h3&gt;We consider the following two DSLs &lt;span style="font-style: italic;"&gt;asl&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;bsl&lt;/span&gt;, where &lt;span style="font-style: italic;"&gt;asl&lt;/span&gt; references &lt;span style="font-style: italic;"&gt;bsl&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;asl:&lt;pre&gt;importMetamodel "http://www.example.org/my/bsl" as mybsl;&lt;br /&gt;A:&lt;br /&gt; (imports+=Import)*&lt;br /&gt; (bs+=BRef)*;&lt;br /&gt;Import:&lt;br /&gt;"import" file=URI;&lt;br /&gt;BRef:&lt;br /&gt;"a" name=ID "b" b=[mybsl::B];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;bsl:&lt;pre&gt;B:&lt;br /&gt;"b" name=ID;&lt;br /&gt;&lt;/pre&gt;To allow such cross-language reference, you have &lt;span style="font-style: italic;"&gt;bsl&lt;/span&gt; has to be installed in the workbench you use for editing &lt;span style="font-style: italic;"&gt;asl&lt;/span&gt;.&lt;br /&gt;&lt;h3&gt;Install an xtext language&lt;/h3&gt;This usually boils down to deploying the language plug-in into the Eclipse workbench, e.g. by exporting it as &lt;span style="font-style: italic;"&gt;deployable plug-ins and fragments&lt;/span&gt; into the &lt;span style="font-style: italic;"&gt;dropins&lt;/span&gt; folder of the Eclipse installation.&lt;br /&gt;&lt;br /&gt;There is one issue with the way xtext registers its meta-model. The &lt;span style="font-style: italic;"&gt;EPackage&lt;/span&gt; is added to the &lt;span style="font-style: italic;"&gt;EPackage.Registry&lt;/span&gt; programatically in the generated &lt;span style="font-style: italic;"&gt;MetaModelRegistration&lt;/span&gt; class, such that we can call it inside or outside a running Eclipse. If running inside Eclipse, the &lt;span style="font-style: italic;"&gt;MetaModelRegistration&lt;/span&gt; is called by the &lt;span style="font-style: italic;"&gt;Activator&lt;/span&gt; of the language plug-in. This can be too late, as other plug-ins might not use the language but the meta-model, and rely on it to be accessible from the &lt;span style="font-style: italic;"&gt;EPackage.Registry&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;We cannot use EMFs &lt;span style="font-style: italic;"&gt;dynamic_package&lt;/span&gt; extension point, as it requires the ecore file to be in a plug-in neutral folder. This is not the case in Xtext, as it stores the generated file in a source folder, which is no longer present once the plug-in is deployed.&lt;br /&gt;&lt;br /&gt;There are two ways to solve this problem&lt;br /&gt;1) Run the EMF generator to generate code from the ecore model. This will also register the generated &lt;span style="font-style: italic;"&gt;EPackage&lt;/span&gt; Java class to the&lt;span style="font-style: italic;"&gt; generated_package&lt;/span&gt; extension point of EMF.&lt;br /&gt;2) Register a proxy class to the &lt;span style="font-style: italic;"&gt;generated_package&lt;/span&gt; extension point, that implements &lt;span style="font-style: italic;"&gt;EPackage&lt;/span&gt; (empty methods) and returns &lt;span style="font-style: italic;"&gt;MetaModelRegistration.getEPackage()&lt;/span&gt; as its &lt;span style="font-style: italic;"&gt;eINSTANCE&lt;/span&gt;. To ensure that the model is really loaded, you should delete the registered proxy in the static initializer and set the right resource loader before registering the package.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;org.example.bsl.EPackageProxy&lt;/span&gt;:&lt;pre&gt;package org.example.bsl;&lt;br /&gt;...&lt;br /&gt;public class EPackageProxy implements EPackage {&lt;br /&gt;  static {&lt;br /&gt;    ResourceLoader cl = ResourceLoaderFactory.createResourceLoader();&lt;br /&gt;    try {&lt;br /&gt;      ResourceLoaderFactory&lt;br /&gt;        .setCurrentThreadResourceLoader(new ResourceLoaderImpl(&lt;br /&gt;           EPackageProxy.class.getClassLoader()));&lt;br /&gt;      EPackage.Registry.INSTANCE.remove("http://www.example.org/my/bsl");&lt;br /&gt;      MetaModelRegistration.register();&lt;br /&gt;    } finally {&lt;br /&gt;      ResourceLoaderFactory.setCurrentThreadResourceLoader(cl);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static final EPackage eINSTANCE = MetaModelRegistration&lt;br /&gt;       .getEPackage();&lt;br /&gt;&lt;br /&gt;  public EClassifier getEClassifier(String name) {&lt;br /&gt;    throw new UnsupportedOperationException("Method not implemented");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // remaining methods of EPackage&lt;br /&gt;  ...&lt;/pre&gt;plugin.xml:&lt;pre&gt;  &amp;lt;extension point="org.eclipse.emf.ecore.generated_package"&amp;gt;&lt;br /&gt;     &amp;lt;package class="org.example.bsl.EPackageProxy" uri="http://www.example.org/my/bsl"&amp;gt;&lt;br /&gt;     &amp;lt;/package&amp;gt;&lt;br /&gt;  &amp;lt;/extension&amp;gt;&lt;/pre&gt;&lt;h3&gt;Referencing an installed xtext language by nsURI&lt;/h3&gt;The xtext generator starts a new plain Java VM, and therefore does not have access to EPackages registered via extension points. That's why you have to explicitly register the referenced metamodel of bsl in the generator workflow of asl. Into the bargain, we have to register bsl's resource factory. Write a class&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;RegisterBslHelper:&lt;/span&gt;&lt;pre&gt;package org.example.asl;&lt;br /&gt;...&lt;br /&gt;public class RegisterBslHelper {&lt;br /&gt;&lt;br /&gt;   public RegisterBslHelper() {&lt;br /&gt;     EPackage package1 = org.example.bsl.MetaModelRegistration.getEPackage();&lt;br /&gt;     package1.eResource().setURI(URI.createURI(package1.getNsURI()));&lt;br /&gt;     org.example.bsl.ResourceFactoryRegistration.register();&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;and call it in the generator workflow &lt;span style="font-style:italic;"&gt;generator.oaw&lt;/span&gt;:&lt;pre&gt;&amp;lt;workflow&amp;gt;&lt;br /&gt;  &amp;lt;property file="'generate.properties'/"&amp;gt;&lt;br /&gt;  &amp;lt;bean class="org.example.asl.RegisterBslHelper"&amp;gt;&lt;br /&gt;  &amp;lt;component file="'org/openarchitectureware/xtext/Generator.oaw'" inheritall="'true'/"&amp;gt;&lt;br /&gt;  &amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;/workflow&amp;gt;&lt;/pre&gt;Also make sure, that the &lt;span style="font-style:italic;"&gt;my.asl&lt;/span&gt; plug-in has a dependency on &lt;span style="font-style:italic;"&gt;my.bsl&lt;/span&gt; and reexports that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-6486301519248686529?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/6486301519248686529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=6486301519248686529' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/6486301519248686529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/6486301519248686529'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/11/how-to-make-xtext-language-reference.html' title='How to make an xtext language reference another by nsURI'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5889285506842886860</id><published>2008-10-20T15:52:00.001+02:00</published><updated>2008-10-20T16:44:42.339+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='GMFTools'/><title type='text'>Started GMFTools project</title><content type='html'>I've worked with GMF for several years now, and I've built quite a bunch of graphical editors using it.&lt;br /&gt;&lt;br /&gt;On my way, I've come along several issues, problems and annoyances of the GMF framework. Some of these may be a matter of personal taste, others are just reoccurring topics and tasks, which unfortunately have never been really focused within the GMF project. As these are sometimes hard to separate, I've decided to collect my ideas, extract reusable solutions and share them by making them open-source. This way, I hope to share knowledge with other GMF users, get feedback (maybe even by the committers), provide examples for beginners, and of course make my own life easier.&lt;br /&gt;&lt;br /&gt;Have a look at it at &lt;a href="http://code.google.com/p/gmftools/"&gt;http://code.google.com/p/gmftools/&lt;/a&gt;, and, if you like it, feel free to use it.  But please don't expect me to provide extensive support. Main topics covered are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sharing an editing domain among several editors&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make GMF's development process easier, e.g. by bypassing unreliable reconcilers and provide a very simple UI to the code generator.&lt;/li&gt;&lt;li&gt;Additional layouts, e.g. make labels fit into ellipses.&lt;/li&gt;&lt;li&gt;How to implement non- or semi-canonical diagrams.&lt;/li&gt;&lt;/ul&gt; Of course your comments are very welcome.&lt;br /&gt;&lt;br /&gt;Maybe there are even more people around willing to share GMF solutions...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5889285506842886860?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5889285506842886860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5889285506842886860' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5889285506842886860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5889285506842886860'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/10/started-gmftools-project.html' title='Started GMFTools project'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-5171600308526270090</id><published>2008-07-03T14:39:00.001+02:00</published><updated>2008-12-12T02:29:01.950+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MDSD MDA conference oAW Cambridge'/><title type='text'>Code Generation 2008 review</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Iv16ZiqDyCA/SGzItcePD1I/AAAAAAAAAAg/Q5lKFE8-Vys/s1600-h/homerton.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Iv16ZiqDyCA/SGzItcePD1I/AAAAAAAAAAg/Q5lKFE8-Vys/s320/homerton.jpg" alt="" id="BLOGGER_PHOTO_ID_5218766751278239570" border="0" /&gt;&lt;/a&gt;The Code Generation 2008 in Cambridge (UK) has been real fun. Karsten, Sven, Peter and me, we have met a lot of interesting people from the model-driven / DSL world, and have heard lots of interesting views and news on code generation.&lt;br /&gt;&lt;br /&gt;The best thing in a conference on code generation is that the participants are already convinced of the benefits of modeling, so you don't have to explain every time from the very beginning why you think modeling is a good thing.&lt;br /&gt;&lt;br /&gt;Last but not least, our workshop on openArchitectureWare was very successful and we has been rated top by the participants.  It feels good to be assured that we are working on the right things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-5171600308526270090?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/5171600308526270090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=5171600308526270090' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5171600308526270090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/5171600308526270090'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/07/code-generation-2008-review.html' title='Code Generation 2008 review'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Iv16ZiqDyCA/SGzItcePD1I/AAAAAAAAAAg/Q5lKFE8-Vys/s72-c/homerton.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-8561539373113526340</id><published>2008-06-26T10:41:00.000+02:00</published><updated>2008-06-26T10:56:17.373+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MDSD conference oAW MDA'/><title type='text'>CodeGeneration 2008</title><content type='html'>I am currently attending the CodeGeneration 2008 conference at Cambridge (UK).&lt;br /&gt;&lt;br /&gt;It is very inspiring to meet so many people involved in model-driven software development. Many of them come from the Microsoft DSL tools world which apparently has not evolved a lot in the recent past. People show a lot of interest in oAW and Eclipse Modeling techniques.&lt;br /&gt;&lt;br /&gt;Yesterday we had a very vivid gold fish bowl discussion on the evolution of DSLs. Many of the emerging problems seem to be resolvable by better tooling. That just convinced me that we are working on the right topics in the current development of Xtext and oAW5.&lt;br /&gt;&lt;br /&gt;Well, of course there are still a bunch of people around promoting MDA with all the UML and OMG stuff. It appears to me that simple things have a tendency to become rather complicated with that approach.&lt;br /&gt;&lt;br /&gt;Looking forward to our hands on workshop on Eclipse Modeling tools tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-8561539373113526340?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/8561539373113526340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=8561539373113526340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/8561539373113526340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/8561539373113526340'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/06/codegeneration-2008.html' title='CodeGeneration 2008'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-1929296248625196158</id><published>2008-06-03T16:45:00.000+02:00</published><updated>2008-06-03T21:00:54.140+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse Xtext DSL'/><title type='text'>New Article on Textual DSLs with EMP</title><content type='html'>Peter, Sven and me, we have composed an Eclipse article on how to create your own textual DSL using tools from the Eclipse Modeling Project (EMP).  It covers the definition of a grammar using Xtext, generating, running and customizing the DSL editor, adding constraints with Check and generating code with Xpand. You can find it &lt;a href="http://www.eclipse.org/articles/article.php?file=Article-BuildYourOwnDSL/index.html"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We are convinced that the described approach one of the most pragmatic ways of designing DSLs and implement code generators. If you have just a little bit of experience with the described technologies, creating your own external DSL becomes nearly as natural as writing Java code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-1929296248625196158?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/1929296248625196158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=1929296248625196158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1929296248625196158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/1929296248625196158'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/06/peter-sven-and-me-we-have-composed.html' title='New Article on Textual DSLs with EMP'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-6698842708123314498</id><published>2008-03-18T09:23:00.000+01:00</published><updated>2008-03-18T09:46:34.704+01:00</updated><title type='text'>Tuning ELists</title><content type='html'>Just solved a serious performance problem. I programmtically constructed a rather big EMF model. It took ages so I started a profiler: Most of the time was spend in the &lt;code&gt;BasicEList.contains(EObject)&lt;/code&gt; method. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is due to the fact that the corresponding &lt;code&gt;EReferences&lt;/code&gt; have the &lt;code&gt;unique&lt;/code&gt; flag set to &lt;code&gt;true&lt;/code&gt;. EMF makes sure each element appears only once in the list of that reference. This is good, but performs poor for big growing lists.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I construct the model from scratch I can make sure there will be no duplicates. So instead of&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;code&gt;parent.getFeature().add(child);&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I cast to &lt;code&gt;BasicEList&lt;/code&gt; and call&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;code&gt;((BasicEList&amp;lt;EObject&amp;gt;&lt;eobject&gt;) parent.getFeature()).addUnique(child);&lt;/eobject&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my case, that reduced the execution time to a fifth !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-6698842708123314498?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/6698842708123314498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=6698842708123314498' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/6698842708123314498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/6698842708123314498'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/03/tuning-elists.html' title='Tuning ELists'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2454279417891560360</id><published>2008-03-07T17:25:00.000+01:00</published><updated>2008-03-07T17:33:14.296+01:00</updated><title type='text'>Testing Trees</title><content type='html'>&lt;span style="font-family: georgia;"&gt;Working on parsers a lot recently, I have to write quite a bunch of tedious unit tests. Each of these tests analyses an EMF AST model which is the output of the parser. It checks if all nodes are at the right location and if all properties are set correctly. The tests look awful and debugging is a nightmare.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Using Xtext, it is quite easy to create a DSL for tree comparison.  I can now describe expected tree results as&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Extension {            &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        name=Identifier(value='foo')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        params=[&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            DeclaredParameter {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;                name=Identifier(value='this')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;                type=Identifier(value='Object')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            },&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            DeclaredParameter {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;                name=Identifier(value='that')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;                type=Identifier(value='Object')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            }]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="font-family: georgia;"&gt;where Extension, Identifier and DeclaredParameter are EClasses, name,params and type are EReferences and value is a attribute. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Writing such a DSL and an interpreter doesn't take you a day and will save you a lot of time and mental sanity in the future.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2454279417891560360?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2454279417891560360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2454279417891560360' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2454279417891560360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2454279417891560360'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/03/testing-trees.html' title='Testing Trees'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-2814868013390762275</id><published>2008-02-22T17:39:00.000+01:00</published><updated>2008-02-22T17:52:21.863+01:00</updated><title type='text'>Converging Model Editors</title><content type='html'>Yesterday, Sven implemented an EMF Resource that serializes its content in Xtext format. We combined it with a graphical editor and the new &lt;a href="http://apps.itemis.de/roller/itemislabkiel/entry/evalidator_adapter_for_oaw_check"&gt;EValidator adapter&lt;/a&gt; for oAW check. Generating everything, we finally got three synchronized editors all showing different representations of the same resource: Graphical, in Xtext and in an Ecore tree. Even complex changes in one editor were automatically transferred to all other editors on save and two of the editors even used the same checks for validation. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That really rocked.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And it shows how great EMF and oAW really are. In the future, it should be easy to write DSLs with mixed representations, e.g. a graphical part for the element connections and a textual part for the details.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am really looking forward to work on a closer integration of  oAW and EMF. There's so much potential. &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-2814868013390762275?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/2814868013390762275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=2814868013390762275' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2814868013390762275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/2814868013390762275'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/02/converging-model-editors.html' title='Converging Model Editors'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-3113916527194823415</id><published>2008-02-20T11:19:00.000+01:00</published><updated>2008-02-20T11:40:42.011+01:00</updated><title type='text'>Advanced GMF</title><content type='html'>Having collected about two years of experience with Eclipse's &lt;a href="http://www.eclipse.org/gmf/"&gt;Graphical Modeling Framework&lt;/a&gt;, I am now trying to summarize what could be improved or added to the framework. These are my favorites&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Support for a singleton editing domain (keep all semantic and diagram resources in the same resource set)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Support for non-canonical diagrams (multiple diagrams for the same semantic model)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enable the OpenDiagramEditPolicy (linked diagrams)&lt;/li&gt;&lt;/ol&gt;Most of these issues can be implemented without touching GMF runtime code, i.e. by means of aspectual template changes and extensions. But as these are really fundamental and reoccurring topics, I'd rather see them as base functionality inside the original framework. Maybe I can push the GMF project in that direction?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-3113916527194823415?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/3113916527194823415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=3113916527194823415' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3113916527194823415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/3113916527194823415'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/02/advanced-gmf.html' title='Advanced GMF'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1495223311988358528.post-7885967663706941765</id><published>2008-02-19T16:28:00.000+01:00</published><updated>2008-02-19T16:30:21.128+01:00</updated><title type='text'>Here it is...</title><content type='html'>Finally, web 2.0 has reached me. So here is my new blog.  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1495223311988358528-7885967663706941765?l=koehnlein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koehnlein.blogspot.com/feeds/7885967663706941765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1495223311988358528&amp;postID=7885967663706941765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7885967663706941765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1495223311988358528/posts/default/7885967663706941765'/><link rel='alternate' type='text/html' href='http://koehnlein.blogspot.com/2008/02/here-it-is.html' title='Here it is...'/><author><name>Jan Köhnlein</name><uri>http://www.blogger.com/profile/02520748795681285494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-JDFG6XRBIO8/Te3TAJIMO2I/AAAAAAAAAEU/i9HI0gavXVE/s220/Ich_SW.jpg'/></author><thr:total>0</thr:total></entry></feed>
