]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.workbench.search.impl/src/org/simantics/workbench/search/impl/SearchServiceFactory.java
Move platform to only work with JDK's >= 11
[simantics/platform.git] / bundles / org.simantics.workbench.search.impl / src / org / simantics / workbench / search / impl / SearchServiceFactory.java
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 (file)
index 0000000..5ad1729
--- /dev/null
@@ -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);
+       }
+
+}