Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EMF Search---Developer Guide
Revision as of 11:40, 25 April 2008 by Lucas.bigeardel.gmail.com (Talk | contribs) (→Ecore Query & Helper)
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(); }
- Eclipse Workspace resource
- Local File System
- Distant locations (Http URIs)
- EE repositories
Ecore Query & Helper
Ecore EMF Search comes with several helpers for query building & launching :
// // 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*"; IModelSearchScope scope = ModelSearchWorkspaceScopeFactory.getInstance(). createModelSearchWorkspaceScope( "org.eclipse.emf.search.ecoreSearchEngine" ); IModelSearchResult query = EcoreTextualModelSearchQueryBuilderHelper.getInstance(). buildGlobalTextualModelSearchQuery( ELEMENT_NAME_VALUATION_BEGINS_WITH_A, scope, EcorePackage.eNS_URI ); query.run(new NullProgressMonitor()); ISearchResult result = query.getModelSearchResult(); if (result instanceof IModelSearchResult) { // Help yourself with model result entry Collection<IModelResultEntry> reultEntries = ((IModelSearchResult)result).getResultsFlatenned(); if (reultEntries.getSource() instanceof EObject) { // Do whatever you want on this occurence } }