]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/SearchServiceFactory.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.workbench / src / org / simantics / workbench / internal / contributions / search / SearchServiceFactory.java
1 package org.simantics.workbench.internal.contributions.search;\r
2 \r
3 \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
14 \r
15 public class SearchServiceFactory extends AbstractServiceFactory {\r
16 \r
17 \r
18         @SuppressWarnings("rawtypes")\r
19         @Override\r
20         public Object create(Class serviceInterface, IServiceLocator parentLocator,\r
21                         IServiceLocator locator) {\r
22                 if (!ISearchService.class.equals(serviceInterface))\r
23                         return null;\r
24                 IWorkbenchLocationService wls = (IWorkbenchLocationService) locator\r
25                                 .getService(IWorkbenchLocationService.class);\r
26                 final IWorkbench wb = wls.getWorkbench();\r
27                 if (wb == null) {\r
28                         return null;\r
29                 }\r
30                 \r
31                 Object parent = parentLocator.getService(serviceInterface);\r
32                 if (parent == null) {\r
33                         return new SearchServiceImpl();\r
34                 }\r
35                 final IWorkbenchWindow window = wls.getWorkbenchWindow();\r
36                 final IWorkbenchPartSite site = wls.getPartSite();\r
37                 if (site == null) {\r
38                         Expression exp = new WorkbenchWindowExpression(window);\r
39                         return new SlaveSearchService((ISearchService)parent, exp);\r
40                 }\r
41                 if (parent instanceof SlaveSearchService) {\r
42                         Expression parentExp = ((SlaveSearchService) parent).getDefaultExpression();\r
43                         return new NestableSearchService((ISearchService)parent, parentExp);\r
44                 }\r
45                 \r
46                 Expression exp = new ActivePartExpression(site.getPart());\r
47                 return new SlaveSearchService((ISearchService)parent, exp);\r
48         }\r
49 \r
50 }\r