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.
Difference between revisions of "EMF Search Framework Extensibility"
(→Example:) |
|||
Line 34: | Line 34: | ||
public class GenModelSearchQueryFactory implements IModelSearchQueryFactory { | 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.factories.IModelSearchQueryParametersFactory; | ||
Line 63: | Line 64: | ||
return new GenModelModelSearchQueryParameters(); | 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 GenModelTextualModelSearchQueryEvaluator <Q extends IModelSearchQuery, T> extends EcoreTextualModelSearchQueryEvaluator<Q, T> { | public class GenModelTextualModelSearchQueryEvaluator <Q extends IModelSearchQuery, T> extends 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() { | + | |
− | + | public String getLabel() { | |
− | + | return Messages.getString("GenModelTextualModelSearchQueryEvaluator.Label"); //$NON-NLS-1$ | |
− | } | + | } |
+ | } |
Revision as of 15:39, 5 February 2008
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$ } }