Jump to: navigation, search

Difference between revisions of "EMF Search"

(Eclipse Search Ecore Integration)
(UML2 Search Integration)
Line 79: Line 79:
=== UML2 Search Integration ===
=== UML2 Search Integration ===
UML2 Search is a kind of enhanced sample example demonstrating extensibilty of EMF Search framework.
It has same features has Ecore ones by extesnion and add some UML specific ones.
Textual queries are against NamedElement objects. OCL Queries are ran against any ModelElement.
[[Image:UML2TextualSearchPage.png|500px|UML2 Textual Search Page]]
Results are collected in a dedicated result page, offering custom actions and navigation.
[[Image:UML2TextualResultPage.png|800px|UML2 Textual Result Page]]
=== GenModel Search Integration ===
=== GenModel Search Integration ===

Revision as of 16:11, 21 April 2008

Project website at Eclipse [1]


EMF Search provides the fundamental infrastructure and components for search queries on EMF based models. A particular focus is made on integration with the Eclipse Core Search API for end user tight integration.

EMF Search is an Ecore meta-model based extensible search engine which purpose is to provide users query launching services against Ecore based models.

Meta-model based search is basically being able to take advantage of a meta-model structure to run generic search queries onto it. This means that a meta-model structure, defining a minimal modeling "organizaton", contains information enough to get operations applied to it, and by extension having same operations applied to any inheriting model compliant with this meta-model structure. Ecore based search is in fact a particular case of meta-model based treatment, a typical approach also known as Model Driven Architecture.

In other words, this allows to develop meta-model based generic algorithms, valid across any user defined model extending elements & structure of a given meta-model. Such method are usually employed as part of a code generation development process also known as Model Driven Development, allowing developers to code things once, setting up templates based code generation getting its data from the particular valuation of an instance of a given meta-model (eg: An actual user defined model or domain model populated with pertinent data).


For model search explanatory purposes, we need to introduce some terminology. First at all, lets keep in mind a model search query always need to deal with entities such as a scope of model resource(s)/element(s) onto which a search query will apply, a set of participant meta-elements which the search query will consider, and finally a search query, textual, scriptical,programatic which an associated model search engine will evaluate against a scope and participants. This evaluation obviously having the role to produce Model Search Results.

[EMF Model Search Query Entites Overview]

This brief explanation just made main concepts appearing : Model Search Scope, Model Search Participants, Model Search Query, Model Search Engine, Model Search Results.

   * Model Search Engine:
   EMF Search has extension point allowing user to contribute custom model search engines
   (see org.eclipse.emf.search.modelSearchEngine extension point definition).
   A model search engine has responsability, given a model resource scope,
   to evaluate a model search query applying only on a set of selected meta-elements (called meta-elements participants).
   * Model Search Query
   EMF Search offers extensible model search queries mechanism.
   Users can contribute model search queries potentially combined with any numbers of diferent elements particpants.
   (eg. given the fact different user defined elements extends Ecore meta-elements). As a result, users can register to
   org.eclipse.emf.search.modelSearchID extension their own model search queries (plus the way to handle it from UI point of view)
   and the, associating it to an existing model search engine.
   * Model Search Particiants
   EMF Search offers extensible model search participants elements mechanism.
   Users can contribute model search participants potentially combined with any numbers of diferent model search queries.
   As a result, users can register to org.eclipse.emf.search.modelSearchParticipantTab extension their own
   model search participant elements (plus the way to handle it from UI point of view) and, associating it to an existing model search engine.
   * Model Search Scope
   Model Search Scope stands for a set of ecore resources to be considerer by the search query. 
   We can make a comparison with platform search concepts from the scope point of view. 
   As in the text search or java search, user can search into the whole workspace or reduce its scope to selected resources, 
   selected projects or even given working set.
   * Model Search Result
   Query evaluation produces matches, being collected in a result object or each resource evaluated.
   Matches can be considered as reult entries of top level reult object. 
   These matches are considered as Model Search Result and will populate the Eclipse Search View.

Eclipse Search Integration

Eclipse Search Ecore Integration


EMF Search Replace

Replace infrastructure is offered. It allows users to replace a match occurence by a given text.

Normal & Case Sensitive queries replace the whole matched occurence. Regex queries replace only the region matched with given text.

It is planned to improve replace infrastructure to offer full regex replace support.

Ecore Regex Replace Parametrization

Once, user gave a new value to replace occurences with, a dialog pops up proposing to apply or not changes.

Ecore Regex Replace Discrimination

UML2 Search Integration


GenModel Search Integration

GenModel is basically an Ecore model for Ecore generation. Thus, it was a natural candidate for an EMF Search integration.

GenModel elements are pretty similar to those defined in Ecore meta model. Search page has a simple textual expression area. GenModel extension of the EMF Search framework is very similar to the UML2 one. They are all inheriting from the Ecore one.

GenModel Textual Search Page

GenModel Navigation

Results are displayed in a very similar form than Ecore or UML2 ones.

GenModel Textual Result Page

Results allow to perform code generation actions as in the EMF genmodel legacy editor.

GenModel Textual Result Code Generation Actions

GenModel owns information enough to generate code *AND* navigate to source.

GenModel Textual Result Navigation To Java Code Action

User can come back to legacy Ecore editor at any time.

GenModel Textual Result Page Navigation To Ecore Element

Custom Textual Search Code Generation

Users wanting to get a boostrap implementation for Search Core & UI can take advantage of code generation wizard.

This wizard works only for textual search queries (No OCL support). Basically speaking generating textual EMF search implementations for arbitrarty ecore models is quite complex. First you need to query .genmodel to get all available String/EString Ecore EStructural features. User must select a few or all of these features from which Core & UI implementations will be generated.

Access to the wizard is available from a popup menu on any .genmodel file. menu is "EMF Search > Generate Textual Search Engine ..."

EMF Search Textual Core and UI Code Generation Action

Wizard allows user to discriminate which textual feature he wants its search to consider.

EMF Search Textual Core and UI Code Generation Wizard

Misc EMF Search Based Tooling

Open Ecore EClass Dialog

A filtered dialog allows to open EClass like Open Java Type Does (Alt + Shift + M).

EMF Search Open EClass Filtered Dialog

Open Ecore EPackage Dialog

A filtered dialog allows to open EPAckage like JDT Does Not ;-) (Alt + Shift + P).

EMF Search Open EPackage Filtered Dialog

Open UML2 Class Dialog

A filtered dialog exist as well to open UML2 Classes (Alt + Shift + K).

EMF Search Open UML Classes Filtered Dialog

Open UML2 Package

A filtered dialog is also available to open UML2 Packages (Alt + Shift + K).

EMF Search Open UML Package Filtered Dialog

Ecore Diagram EReference Resolution

Users maybe interested in knowing an EClass/EDatatype is referenced somewhere ... maybe in many different ecore models

Ecore EReferences query

Results are displayed hierarchically

Ecore EReferences query results

Quick Start Guide


Developer Guide


Developers have several levels/contexts/persitences configurations for which they want to use EMF Search.

One aspect is which modeling level they want their extension to address :

  • meta modeling level
    • Ecore meta-modeling (M3)
    • UML2 meta-modeling or custom meta-models (M2)
    • Model instance (M1)

Another aspect is where and how their meta models are stored :

  • meta model perstistence layer type
    • Eclipse Resources
    • Local File System
    • WWW distant resources (Close to be supported)
    • DB persitence (Support planned)

Depending on these particular situations, EMF Search typical usages exist.

Search Scope & Visitors

EMF Search defines a Scope API contract with IModelSearchScope :

    public interface IModelSearchScope<P, O> {
        List<P> getParticipants();
        void addParticipant(P resource);
        void addParticipants(P[] resources);
        void removeParticipant(P resource);
        void removeParticipants(P[] resources);
        List<P> findPartcipant(Class<O> clazz);
        String getLabel();
  • Eclipse Workspace resource
  • Local File System
  • Distant locations (Http URIs)
  • EE repositories

Ecore Query & Helper

Custom Queries & Helper

Custom Dialogs

Custom Wizards


[EMF Search Framework Extensibility Example]

EMF Search Core Extension Points

[Model Search Engine]

EMF Search UI Extension Points

[Model Search Engine Mapping]

[Model Result Page Action]

[Model Result Page Menu]

[Model Search Participant Tab]

[Model Search Query Tab]

[Open Diagram Participants]

EMF Search OCL Extension Points

[OCL Target MetaModel]