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