]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
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 (file)
index 0000000..0f5d2f4
--- /dev/null
@@ -0,0 +1,50 @@
+package org.simantics.workbench.internal.contributions.search;\r
+\r
+\r
+import org.eclipse.core.expressions.Expression;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPartSite;\r
+import org.eclipse.ui.IWorkbenchWindow;\r
+import org.eclipse.ui.internal.expressions.ActivePartExpression;\r
+import org.eclipse.ui.internal.expressions.WorkbenchWindowExpression;\r
+import org.eclipse.ui.internal.services.IWorkbenchLocationService;\r
+import org.eclipse.ui.services.AbstractServiceFactory;\r
+import org.eclipse.ui.services.IServiceLocator;\r
+import org.simantics.workbench.search.ISearchService;\r
+\r
+public class SearchServiceFactory extends AbstractServiceFactory {\r
+\r
+\r
+       @SuppressWarnings("rawtypes")\r
+       @Override\r
+       public Object create(Class serviceInterface, IServiceLocator parentLocator,\r
+                       IServiceLocator locator) {\r
+               if (!ISearchService.class.equals(serviceInterface))\r
+                       return null;\r
+               IWorkbenchLocationService wls = (IWorkbenchLocationService) locator\r
+                               .getService(IWorkbenchLocationService.class);\r
+               final IWorkbench wb = wls.getWorkbench();\r
+               if (wb == null) {\r
+                       return null;\r
+               }\r
+               \r
+               Object parent = parentLocator.getService(serviceInterface);\r
+               if (parent == null) {\r
+                       return new SearchServiceImpl();\r
+               }\r
+               final IWorkbenchWindow window = wls.getWorkbenchWindow();\r
+               final IWorkbenchPartSite site = wls.getPartSite();\r
+               if (site == null) {\r
+                       Expression exp = new WorkbenchWindowExpression(window);\r
+                       return new SlaveSearchService((ISearchService)parent, exp);\r
+               }\r
+               if (parent instanceof SlaveSearchService) {\r
+                       Expression parentExp = ((SlaveSearchService) parent).getDefaultExpression();\r
+                       return new NestableSearchService((ISearchService)parent, parentExp);\r
+               }\r
+               \r
+               Expression exp = new ActivePartExpression(site.getPart());\r
+               return new SlaveSearchService((ISearchService)parent, exp);\r
+       }\r
+\r
+}\r