EMF-IncQuery: First public release

One of the most common tasks when working with models is executing queries on them (e.g. finding a set of corresponding model elements for code generation or finding violations for model constraints) – quite often repeatedly. To allow effective calculation and recalculation, an index of the EMF model has to be created and maintained during editing operations.

EMF-IncQuery is a tool we are developing at the Budapest University of Technology and Economics try to solve this issue by providing a runtime library for these indexes, and additionally an Eclipse-based tooling to specify and debug such queries. I have already blogged about a validation framework based on this technology, and my collegue, István Ráth gave a short presentation in last year’s EclipseCon Europe Modeling Symposium.

However, previous tool demos were held using a tooling and query language originally created for the VIATRA2 model transformation framework, so it was somewhat hard to use. Since these demonstrations we created a new, Xtext-based tooling using a modified query language that fits the EMF model specifications better.

https://i1.wp.com/cubussapiens.hu/wp-content/uploads/2012/10/eiq-editor.png?resize=500%2C266 500w, https://i2.wp.com/cubussapiens.hu/wp-content/uploads/2012/10/eiq-editor.png?w=927 927w" sizes="(max-width: 300px) 85vw, 300px" /> The Xtext-based editor with type information hovers.

Another new user interface component is the Query Explorer: a view that allows evaluating developed queries without using the generated code in a new Eclipse instance, while allowing the reuse of existing domain editors.

https://i0.wp.com/cubussapiens.hu/wp-content/uploads/2012/10/query-explorer.png?resize=500%2C185 500w, https://i0.wp.com/cubussapiens.hu/wp-content/uploads/2012/10/query-explorer.png?w=936 936w" sizes="(max-width: 300px) 85vw, 300px" /> The Query Explorer can be used to evaluate patterns using existing model editors.

As for examples, since last year we developed two new case studies for EMF-IncQuery:

  1. Derived features allow the creation of EMF derived features based on incremental queries as backend;
  2. We also created connectors for JFace databinding for query results allowing query-backed automatically updating user interfaces.

Even better, this new version is available since Wednesday – for a detailed release notes see the announcement post in our homepage. If you want to download this release, you can use the Eclipse Marketplace client (at least if search is working as expected – today we managed to not find our software there using the built-in search 🙁 ). Alternatively, EMF-IncQuery is available from our update site: http://viatra.inf.mit.bme.hu/update/incquery/

Alltogether, the new EMF-IncQuery release marks an important point: we believe at this point, it is ready for use. For me, this is an important checkpoint, as in the last year I put a considerable effort of getting this rolling.

As for the future, EMF-IncQuery is on its track to becoming an Eclipse project: the creation review is scheduled for the 10th October 2012. After the creation, we plan to migrate our codebase, and have of course further ideas on how to improve the system to be usable in more and more cases.

Author: Zoltán Ujhelyi

I am an Eclipse Technology Expert at IncQuery Labs Ltd. and a regular contributor of open-source projects, most importantly the VIATRA project at eclipse.org. Furthermore, I am in the process of finishing my PhD in computer science at the Budapest University of Technology and Economics focusing on analysis techniques for model queries and transformations.

2 thoughts on “EMF-IncQuery: First public release”

  1. This is a very good news.
    Is it possible to query on instances types, cause I recall seen in you web site it was not possible ?
    Thanks.

  2. Hi,

    can you elaborate what do you mean by querying on instance types? I am not sure what you mean by that.

    If you mean to use your own metamodel types (defined by yourself in a .ecore file), then it is supported (in worst case by specifying an extra reference for the generator model).

    If you try to get all instances of a selected metamodel types, you can issue a simple query for that. E.g. to get all School elements, you could write pattern allSchools(S) { School(S); }

    If you want to reference the type of an EObject and use it in the query, then it is not supported. As a workaround, you can write a check expression that queries the type and has a filtering logic – but be very careful if you choose this way.

    I hope, I could help a bit. If not, feel free, to elaborate your questions either here or in the incquery-users mailing list: http://groups.google.com/d/forum/incquery-users

Leave a Reply