Tuesday, March 10, 2009

EMF Index Creation Review

Tomorrow will be the creation review for the new EMFT subproject EMF Index. I am really looking forward to my first Eclipse project leadership and I hope everything will work out fine at the review.

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 EMFT newsgroup) or remain silent forever ;-)

I am also glad to have the opportunity to present EMF Index at EclipseCon 2009 in Santa Clara. Looks like many of the interested parties will attend. I am going to give another talk together with Sven on Next generation textual DSLs with Xtext. It's also my first trip to the US, which makes me even more excited.

Monday, February 2, 2009

Xtext Success Story

Just returned from a workshop in Switzerland. One of the guys there managed to

  • Get acquainted with and install Eclipse.
  • Install and learn oAW Xtext.
  • Define a grammar and generate the code.
  • Deploy the editor at the customer's side.

All of that within 5 days. What does that mean

  • That guy is really a wizard.
  • Eclipse is very easy to install and use.
  • Xtext can really give you a head-start into modeling.

It feels so good to have such a mighty toolstack at hand :-)

Wednesday, January 28, 2009

OOP 2009

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

Tuesday, January 6, 2009

Proposal for new Eclipse Project: EMF Index

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.

The proposal is now online. Please use the EMFT newsgroup for discussion. I am looking forward to your feedback.

Thursday, November 27, 2008

How to make an xtext language reference another by nsURI

In principle, Xtext allows two languages to refer to each other by means of the importMetamodel 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.

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 EPackage 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.

Example

We consider the following two DSLs asl and bsl, where asl references bsl:

asl:
importMetamodel "http://www.example.org/my/bsl" as mybsl;
A:
(imports+=Import)*
(bs+=BRef)*;
Import:
"import" file=URI;
BRef:
"a" name=ID "b" b=[mybsl::B];

bsl:
B:
"b" name=ID;
To allow such cross-language reference, you have bsl has to be installed in the workbench you use for editing asl.

Install an xtext language

This usually boils down to deploying the language plug-in into the Eclipse workbench, e.g. by exporting it as deployable plug-ins and fragments into the dropins folder of the Eclipse installation.

There is one issue with the way xtext registers its meta-model. The EPackage is added to the EPackage.Registry programatically in the generated MetaModelRegistration class, such that we can call it inside or outside a running Eclipse. If running inside Eclipse, the MetaModelRegistration is called by the Activator 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 EPackage.Registry.

We cannot use EMFs dynamic_package 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.

There are two ways to solve this problem
1) Run the EMF generator to generate code from the ecore model. This will also register the generated EPackage Java class to the generated_package extension point of EMF.
2) Register a proxy class to the generated_package extension point, that implements EPackage (empty methods) and returns MetaModelRegistration.getEPackage() as its eINSTANCE. 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.

org.example.bsl.EPackageProxy:
package org.example.bsl;
...
public class EPackageProxy implements EPackage {
static {
ResourceLoader cl = ResourceLoaderFactory.createResourceLoader();
try {
ResourceLoaderFactory
.setCurrentThreadResourceLoader(new ResourceLoaderImpl(
EPackageProxy.class.getClassLoader()));
EPackage.Registry.INSTANCE.remove("http://www.example.org/my/bsl");
MetaModelRegistration.register();
} finally {
ResourceLoaderFactory.setCurrentThreadResourceLoader(cl);
}
}

public static final EPackage eINSTANCE = MetaModelRegistration
.getEPackage();

public EClassifier getEClassifier(String name) {
throw new UnsupportedOperationException("Method not implemented");
}

// remaining methods of EPackage
...
plugin.xml:
  <extension point="org.eclipse.emf.ecore.generated_package">
<package class="org.example.bsl.EPackageProxy" uri="http://www.example.org/my/bsl">
</package>
</extension>

Referencing an installed xtext language by nsURI

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

RegisterBslHelper:
package org.example.asl;
...
public class RegisterBslHelper {

public RegisterBslHelper() {
EPackage package1 = org.example.bsl.MetaModelRegistration.getEPackage();
package1.eResource().setURI(URI.createURI(package1.getNsURI()));
org.example.bsl.ResourceFactoryRegistration.register();
}
}
and call it in the generator workflow generator.oaw:
<workflow>
<property file="'generate.properties'/">
<bean class="org.example.asl.RegisterBslHelper">
<component file="'org/openarchitectureware/xtext/Generator.oaw'" inheritall="'true'/">
</component>
</workflow>
Also make sure, that the my.asl plug-in has a dependency on my.bsl and reexports that.

Monday, October 20, 2008

Started GMFTools project

I've worked with GMF for several years now, and I've built quite a bunch of graphical editors using it.

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.

Have a look at it at http://code.google.com/p/gmftools/, and, if you like it, feel free to use it. But please don't expect me to provide extensive support. Main topics covered are
  • Sharing an editing domain among several editors
  • Make GMF's development process easier, e.g. by bypassing unreliable reconcilers and provide a very simple UI to the code generator.
  • Additional layouts, e.g. make labels fit into ellipses.
  • How to implement non- or semi-canonical diagrams.
Of course your comments are very welcome.

Maybe there are even more people around willing to share GMF solutions...

Thursday, July 3, 2008

Code Generation 2008 review

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.

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.

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.