X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.workbench.search.impl%2Fsrc%2Forg%2Fsimantics%2Fworkbench%2Fsearch%2Fimpl%2FSearchServiceFactory.java;fp=bundles%2Forg.simantics.workbench.search.impl%2Fsrc%2Forg%2Fsimantics%2Fworkbench%2Fsearch%2Fimpl%2FSearchServiceFactory.java;h=5ad172941c2f5531443ea6425064e25bfb7e5be9;hb=38d133f2a39bab76deed5d047fbabee4479b5373;hp=0000000000000000000000000000000000000000;hpb=a9e5abf29200550168557ae2c7e0a6e2442f6c2b;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.workbench.search.impl/src/org/simantics/workbench/search/impl/SearchServiceFactory.java b/bundles/org.simantics.workbench.search.impl/src/org/simantics/workbench/search/impl/SearchServiceFactory.java new file mode 100644 index 000000000..5ad172941 --- /dev/null +++ b/bundles/org.simantics.workbench.search.impl/src/org/simantics/workbench/search/impl/SearchServiceFactory.java @@ -0,0 +1,51 @@ +package org.simantics.workbench.search.impl; + + +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; + +@SuppressWarnings("restriction") +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; + } + + @SuppressWarnings("unchecked") + 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); + } + +}