EMF Index
Introduction
EMF Index is a proposed open source project under the Eclipse Modeling Framework Technology Project (EMFT).
This proposal is in the Project Proposal Phase (as defined in the Eclipse Development Process document) and is written to declare its intent and scope. This proposal is written to solicit additional participation and input from the Eclipse community. You are invited to comment on and/or join the project. Please send all feedback to the http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.emft newsgroup.
Background
Many development tools maintain an index on the processed artifacts to allow fast and scalable queries for elements that match certain criteria. In the Java Development Toolkit (JDT) for example, the internal Java models are indexed to quickly find calls of a method, navigate to the declaration of a field or find all subclasses of a given class. It also allows to find classes whose names match a wildcard pattern.
EMF Index will provide an index for modeling tools based on the Eclipse Modeling Framework (EMF). That index will automatically collect and synchronize index data on Ecore models and instances. It will allow fast queries without the need to have EMF resources instantiated in memory, thereby enabling scalable modeling tools based on EMF.
Scope
The objectives of the EMF Index project are the following:
- Define APIs and implement components for specifying search scopes, collecting and persisting index data, synchronization of index data with model changes, and querying of model elements.
- Increase the usability of EMF-based modeling tools by providing a JDT-like user interface for following references, finding elements by type and querying scoped elements. This can also be the foundation of model refactoring support.
- Increase the scalability of modeling tools by enabling queries on models that are not loaded. This will allow the processing of bigger models and a greater number of model resources. It will also help to deal with temporarily unavailable models, e.g. resources fetched from the network.
- Integrate with other Eclipse components, e.g. the searching support.
- Provide a platform to collect and discuss requirements and use cases for model indexing.
EMF Index will not cover these issues:
- Deal with models not based on EMF.
- Implement a model repository. Only specific, pre-selected properties of model elements should be stored in the index.
Description
EMF Index will have to define APIs and provide implementations for the following functionality:
- Index scope
- EMF follows an open-world paradigm, i.e. it is possible to load every resource that is accessible, locally or from the network. While that is fine for on-demand loading of referenced elements, a search operation needs a confined scope. Clients must have a way define the scope of indexed elements, e.g. as the resources in their workspace.
- Collection of index data
- Retrieve index data from a given EMF resource. The index data will consist of generic data, e.g. the type of an element, as well as model-specific data, e.g. a collection of attributes that constitute a fully-qualified name. Any model-specific data can be stored in the index. There will be a way to specify which data will be retrieved from the EMF model. This also includes the definition of model-specific scopes for queries.
- Persistence
- Store the collected index data independently from the indexed resources in such a way that it can be queried easily later.
- Synchronization of index data
- Whenever it is possible, detect model changes and update the model index automatically.
- Queries
- Queries should consist of a set of criteria and a query scope. The results of a query must be descriptors (e.g. EMF proxies or fragment URIs) of model elements rather than the elements themselves, such that the client decides whether to load them or not. The descriptors can carry any additional information on the element available in the index.
- Exchangeable storage backend
- The backend to actually store the index data will be exchangeable, allowing customized implementations for specific storage technologies, such as pure in-memory or database storage of index data.
Relationship with other Eclipse Projects
- EMF Index will be built on top of EMF.
- As EMF Index will be generic, it will be usable by any EMF-based framework, not depending on the specific concrete syntax.
- TMF/Xtext is expected to make strong use of EMF Index. As models are described textually in Xtext, a common problem is to resolve/find a model element by some domain-specific textual description. An index taking these descriptions into account will be a great benefit.
- EMF Index will make contributions to Eclipse search.
Organization
Mentors
- Ed Merks (Macro Modeling, Canada)
- Sven Efftinge (itemis AG, Germany)
Proposed initial committers
- Jan Köhnlein (itemis AG, Germany), lead
- Sven Efftinge (itemis AG, Germany)
- Dennis Hübner (itemis AG, Germany), release engineering
- Bernd Kolb (Independent, Germany)
- Jos Warmer (Ordina, Netherlands)
Interested parties
The need for a model index has been discussed in the Modeling Symposium at the Eclipse Summit Europe 2009.
Parties indicating interest were
- Macro Modeling (Canada), Ed Merks
- Geensys (France), Stephan Eberle
- paranor (Switzerland), Knut Wannheden
- SAP (Germany), Boris Gruschko
- ikv++ (Germany), Matthias Erche
Code contributions
The initial code contribution will be a set of plug-ins from the TMF/Xtext Eclipse project.