Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EMF Search Framework Extensibility
search core extensibility
org.eclipse.emf.search.modelSearchEngine
Users wanting to contribute an custom ecore metamodel based search should extends modelSearchEngine.
* id - model search engine unique ID * label - Query label to be displayed as a prefix of in search result pages * searchQueryFactory - This extension point element describes a model search engine compliant with org.eclipse.emf.search.providers.IModelSearchQueryFactory APIs. * queryParametersFactory - parameter factory compliant with IModelSearchQueryParametersFactory * modelResourceValidator - resource validator compliant with IModelSearchQueryParametersFactory and specializing AbstractModelResourceValidator
Example:
<extension point="org.eclipse.emf.search.modelSearchEngine"> <modelSearchEngine id="org.eclipse.emf.search.genModelSearchEngine" label="%GenModelSearchEngine.Label" modelResourceValidator="org.eclipse.emf.search.genmodel.engine.GenModelResourceValidator" queryParametersFactory="org.eclipse.emf.search.genmodel.factories.GenModelSearchQueryParametersFactory" searchQueryFactory="org.eclipse.emf.search.genmodel.factories.GenModelSearchQueryFactory"> </modelSearchEngine> </extension>
import org.eclipse.emf.search.core.engine.AbstractModelSearchQuery; import org.eclipse.emf.search.core.factories.IModelSearchQueryFactory; import org.eclipse.emf.search.core.parameters.IModelSearchQueryParameters; import org.eclipse.emf.search.genmodel.engine.GenModelSearchQuery; public class GenModelSearchQueryFactory implements IModelSearchQueryFactory { private static GenModelSearchQueryFactory instance; public GenModelSearchQueryFactory() {} public static GenModelSearchQueryFactory getInstance() { return instance == null ? instance = new GenModelSearchQueryFactory() : instance; } public AbstractModelSearchQuery createModelSearchQuery(String expr, IModelSearchQueryParameters p) { return new GenModelSearchQuery(expr, p); } }
import org.eclipse.emf.search.core.factories.IModelSearchQueryParametersFactory; import org.eclipse.emf.search.core.parameters.AbstractModelSearchQueryParameters; import org.eclipse.emf.search.core.parameters.IModelSearchQueryParameters; public class GenModelSearchQueryParametersFactory implements IModelSearchQueryParametersFactory { private static GenModelSearchQueryParametersFactory instance; public GenModelSearchQueryParametersFactory() {} public static GenModelSearchQueryParametersFactory getInstance() { return instance == null ? instance = new GenModelSearchQueryParametersFactory() : instance; } protected final class GenModelModelSearchQueryParameters extends AbstractModelSearchQueryParameters { @Override public String getModelSearchEngineID() { return "org.eclipse.emf.search.genModelSearchEngine"; //$NON-NLS-1$ } } public IModelSearchQueryParameters createSearchQueryParameters() { return new GenModelModelSearchQueryParameters(); } }
import java.util.ArrayList; import java.util.List; import org.eclipse.emf.codegen.ecore.genmodel.GenBase; import org.eclipse.emf.ecore.ENamedElement; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.search.core.engine.IModelSearchQuery; import org.eclipse.emf.search.ecore.engine.EcoreModelSearchQuery; import org.eclipse.emf.search.ecore.evaluators.EcoreTextualModelSearchQueryEvaluator; import org.eclipse.emf.search.ecore.regex.ModelSearchQueryTextualExpressionEnum; import org.eclipse.emf.search.ecore.regex.ModelSearchQueryTextualExpressionMatchingHelper; import org.eclipse.emf.search.genmodel.l10n.Messages; public class GenModelTextualModelSearchQueryEvaluatorextends EcoreTextualModelSearchQueryEvaluator<Q, T> { @Override public List<?> eval(Q query, T target, boolean notifiy) { List<Object> results = new ArrayList<Object>(); ModelSearchQueryTextualExpressionEnum kind = ((EcoreModelSearchQuery)query).getKind(); for (Object o : query.getValidParticipantMetaElements()) { if (o instanceof GenBase) { String text = query.getQueryExpression(); text = (text == "" && kind == ModelSearchQueryTextualExpressionEnum.NORMAL_TEXT) ? "*" : text; EObject elem = ((GenBase)o).getEcoreModelElement(); if (elem instanceof ENamedElement) { String elemName = ((ENamedElement)elem).getName(); elemName = elemName != null ? elemName : ""; //$NON-NLS-1$ if (ModelSearchQueryTextualExpressionMatchingHelper.getInstance().lookAt(elemName, text, kind)) { results.add(query.processSearchResultMatching(target, o, notifiy)); } } } } return results; } @Override public String getLabel() { return Messages.getString("GenModelTextualModelSearchQueryEvaluator.Label"); //$NON-NLS-1$ } }