Difference between revisions of "EMF Search---Developer Guide"

From Eclipsepedia

Jump to: navigation, search
(Search Scope & Visitors)
(Search Scope & Visitors)
Line 38: Line 38:
 
     }
 
     }
 
  </source>
 
  </source>
 +
 +
These IModelSearchScope are populated with specialized visitors depending on the locations considered model resources are stored.
 +
 +
For the moment, main storages area are:
  
 
* Workspaces
 
* Workspaces
 
+
**Workspace
- Entire Workspace
+
**Projects
- Projects
+
**Given Resource (IResource among IFile, IProject, ...)
- Given Resource (IResource among IFile, IProject, ...)
+
**Working Set
- Working Set
+
  
 
* Local File Systems
 
* Local File Systems
 
+
**Files
- Files
+
**Directories
- Directories
+
  
 
* Distant locations (Http URIs)
 
* Distant locations (Http URIs)
 
+
**http URIs
- http URIs
+
  
 
* EE repositories
 
* EE repositories
 
+
**TBD
- TBD
+
  
 
=== Ecore Query & Helper ===
 
=== Ecore Query & Helper ===

Revision as of 13:33, 25 April 2008

Contents

Introduction

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();
    }

These IModelSearchScope are populated with specialized visitors depending on the locations considered model resources are stored.

For the moment, main storages area are:

  • Workspaces
    • Workspace
    • Projects
    • Given Resource (IResource among IFile, IProject, ...)
    • Working Set
  • Local File Systems
    • Files
    • Directories
  • Distant locations (Http URIs)
    • http URIs
  • EE repositories
    • TBD

Ecore Query & Helper

Ecore EMF Search comes with several helpers for query building & launching :


Ecore Textual Model Search Query Builder Helper


//
// Non Case Sensitive Joker expression matching all text beginning with either 'a' or 'A'
//
private static final String ELEMENT_NAME_VALUATION_BEGINS_WITH_A = "A*";
 
//
// In this case IModelSearchScope associated to
// "org.eclipse.emf.search.ecoreSearchEngine" search engine
// will collect any files with *.ecore extension from the current
// workspace.
//
IModelSearchScope scope = 
    ModelSearchWorkspaceScopeFactory.getInstance().
        createModelSearchWorkspaceScope(
            "org.eclipse.emf.search.ecoreSearchEngine"
        );
 
//
// Creates a new query to apply on the whole workspace.
// This query will open any *.ecore collected in the
// IModelSearchScope built upper in the code
//
IModelSearchQuery query = 
    EcoreTextualModelSearchQueryBuilderHelper.getInstance().
        buildGlobalTextualModelSearchQuery(
            ELEMENT_NAME_VALUATION_BEGINING_WITH_A,
            scope,
            EcorePackage.eNS_URI
    );
 
//
// Run the query with Eclise Search infrastructure in backgroud.
// Using a progress monitor allows to cancel this query if executed
// in Eclipse UI & having acces to Job view.
//
query.run(new NullProgressMonitor());
 
ISearchResult result = query.getModelSearchResult();
 
if (result instanceof IModelSearchResult) {
    //
    // Model result is a match occurences hierarchical tree mixing matches leaves and intermediate parent nodes
    // In this case a vistor flatten leaves in a collection of match occurences
    //
    Collection<IModelResultEntry> resultEntries = ((IModelSearchResult)result).getResultsFlatenned();
    if (resultEntries.getSource() instanceof EObject) {
        //
        // User to process this occurence
        //
    }
}



Ecore Textual Model Search Query Launcher Helper

//
// Non Case Sensitive Joker expression matching all text beginning with either 'a' or 'A'
//
private static final String ELEMENT_NAME_VALUATION_BEGINS_WITH_A = "A*";
 
//
// In this case IModelSearchScope associated to
// "org.eclipse.emf.search.ecoreSearchEngine" search engine
// will collect any files with *.ecore extension from the current
// workspace.
//
IModelSearchScope scope = 
    ModelSearchWorkspaceScopeFactory.getInstance().
        createModelSearchWorkspaceScope(
            "org.eclipse.emf.search.ecoreSearchEngine"
        );
 
//
// 1)
//
// Creates & launches a new query to apply on the whole workspace.
// This query will open any *.ecore collected in the
// IModelSearchScope built upper in the code.
//
// 2)
//
// Run the query with Eclise Search infrastructure in backgroud.
// Using a progress monitor allows to cancel this query if executed
// in Eclipse UI & having acces to Job view.
//
IModelSearchResult query = 
    EcoreTextualModelSearchQueryLauncheerHelper.getInstance().
        launchGlobalTextualModelSearchQuery(
            ELEMENT_NAME_VALUATION_BEGINING_WITH_A,
            scope,
            EcorePackage.eNS_URI
    );
 
//
//
query.run(new NullProgressMonitor());
 
ISearchResult result = query.getModelSearchResult();
 
if (result instanceof IModelSearchResult) {
    //
    // Model result is a match occurences hierarchical tree mixing matches leaves and intermediate parent nodes
    // In this case a vistor flatten leaves in a collection of match occurences
    //
    Collection<IModelResultEntry> resultEntries = ((IModelSearchResult)result).getResultsFlatenned();
    if (resultEntries.getSource() instanceof EObject) {
        //
        // User to process this occurence
        //
    }
}

Custom Queries & Helper

Custom Dialogs

Custom Wizards