X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.workbench%2Fsrc%2Forg%2Fsimantics%2Fworkbench%2Finternal%2Fcontributions%2Fsearch%2FSearchServiceFactory.java;fp=bundles%2Forg.simantics.workbench%2Fsrc%2Forg%2Fsimantics%2Fworkbench%2Finternal%2Fcontributions%2Fsearch%2FSearchServiceFactory.java;h=0f5d2f4e96b3df65aa6bdf30b91d77223ddf89ff;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/SearchServiceFactory.java b/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/SearchServiceFactory.java new file mode 100644 index 000000000..0f5d2f4e9 --- /dev/null +++ b/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/SearchServiceFactory.java @@ -0,0 +1,50 @@ +package org.simantics.workbench.internal.contributions.search; + + +import org.eclipse.core.expressions.Expression; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPartSite; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.internal.expressions.ActivePartExpression; +import org.eclipse.ui.internal.expressions.WorkbenchWindowExpression; +import org.eclipse.ui.internal.services.IWorkbenchLocationService; +import org.eclipse.ui.services.AbstractServiceFactory; +import org.eclipse.ui.services.IServiceLocator; +import org.simantics.workbench.search.ISearchService; + +public class SearchServiceFactory extends AbstractServiceFactory { + + + @SuppressWarnings("rawtypes") + @Override + public Object create(Class serviceInterface, IServiceLocator parentLocator, + IServiceLocator locator) { + if (!ISearchService.class.equals(serviceInterface)) + return null; + IWorkbenchLocationService wls = (IWorkbenchLocationService) locator + .getService(IWorkbenchLocationService.class); + final IWorkbench wb = wls.getWorkbench(); + if (wb == null) { + return null; + } + + Object parent = parentLocator.getService(serviceInterface); + if (parent == null) { + return new SearchServiceImpl(); + } + final IWorkbenchWindow window = wls.getWorkbenchWindow(); + final IWorkbenchPartSite site = wls.getPartSite(); + if (site == null) { + Expression exp = new WorkbenchWindowExpression(window); + return new SlaveSearchService((ISearchService)parent, exp); + } + if (parent instanceof SlaveSearchService) { + Expression parentExp = ((SlaveSearchService) parent).getDefaultExpression(); + return new NestableSearchService((ISearchService)parent, parentExp); + } + + Expression exp = new ActivePartExpression(site.getPart()); + return new SlaveSearchService((ISearchService)parent, exp); + } + +}