1 package org.simantics.workbench.internal.contributions.search;
\r
4 import org.eclipse.core.expressions.Expression;
\r
5 import org.eclipse.ui.IWorkbench;
\r
6 import org.eclipse.ui.IWorkbenchPartSite;
\r
7 import org.eclipse.ui.IWorkbenchWindow;
\r
8 import org.eclipse.ui.internal.expressions.ActivePartExpression;
\r
9 import org.eclipse.ui.internal.expressions.WorkbenchWindowExpression;
\r
10 import org.eclipse.ui.internal.services.IWorkbenchLocationService;
\r
11 import org.eclipse.ui.services.AbstractServiceFactory;
\r
12 import org.eclipse.ui.services.IServiceLocator;
\r
13 import org.simantics.workbench.search.ISearchService;
\r
15 public class SearchServiceFactory extends AbstractServiceFactory {
\r
18 @SuppressWarnings("rawtypes")
\r
20 public Object create(Class serviceInterface, IServiceLocator parentLocator,
\r
21 IServiceLocator locator) {
\r
22 if (!ISearchService.class.equals(serviceInterface))
\r
24 IWorkbenchLocationService wls = (IWorkbenchLocationService) locator
\r
25 .getService(IWorkbenchLocationService.class);
\r
26 final IWorkbench wb = wls.getWorkbench();
\r
31 Object parent = parentLocator.getService(serviceInterface);
\r
32 if (parent == null) {
\r
33 return new SearchServiceImpl();
\r
35 final IWorkbenchWindow window = wls.getWorkbenchWindow();
\r
36 final IWorkbenchPartSite site = wls.getPartSite();
\r
38 Expression exp = new WorkbenchWindowExpression(window);
\r
39 return new SlaveSearchService((ISearchService)parent, exp);
\r
41 if (parent instanceof SlaveSearchService) {
\r
42 Expression parentExp = ((SlaveSearchService) parent).getDefaultExpression();
\r
43 return new NestableSearchService((ISearchService)parent, parentExp);
\r
46 Expression exp = new ActivePartExpression(site.getPart());
\r
47 return new SlaveSearchService((ISearchService)parent, exp);
\r