X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.workbench%2Fsrc%2Forg%2Fsimantics%2Fworkbench%2Finternal%2Fcontributions%2Fsearch%2FBrowserView.java;fp=bundles%2Forg.simantics.workbench%2Fsrc%2Forg%2Fsimantics%2Fworkbench%2Finternal%2Fcontributions%2Fsearch%2FBrowserView.java;h=aa96ed13bc6daabd535c908dfa94f1dab07ce379;hp=87adbab7e24713f59364733f80c05fd1777741ec;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/BrowserView.java b/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/BrowserView.java index 87adbab7e..aa96ed13b 100644 --- a/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/BrowserView.java +++ b/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/contributions/search/BrowserView.java @@ -1,170 +1,170 @@ -/******************************************************************************* - * Copyright (c) 2007, 2014 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - * Semantum Oy - *******************************************************************************/ -package org.simantics.workbench.internal.contributions.search; - -import java.net.URL; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.ViewPart; -import org.simantics.Simantics; -import org.simantics.db.Session; -import org.simantics.db.layer0.request.ActiveModels; -import org.simantics.db.management.ISessionContext; -import org.simantics.db.management.ISessionContextChangedListener; -import org.simantics.db.management.SessionContextChangedEvent; -import org.simantics.db.service.LifecycleSupport; -import org.simantics.utils.ui.SWTUtils; -import org.simantics.workbench.search.ISearchService; -import org.simantics.workbench.search.ISearchService.ResultBrowser; -import org.simantics.workbench.search.SearchQuery; - -/** - * A very non-configurable Web browser view for search trim. - * - * @author Tuukka Lehtonen - */ -public class BrowserView extends ViewPart { - - /** - * ID of this view's plug-in extension. - */ - public static final String ID = "org.simantics.workbench.search.browser"; - - /** - * Used as a property of this view to keep track of the last search query - * performed with this view. This information is needed to know whether or - * not to initialize the view with default contents after it has been - * created. This depends on whether the creation was caused by a simple - * activation of the view or an actual search being performed. - */ - public static final String LAST_QUERY_PROPERTY = "org.simantics.workbench.search.browser.lastQuery"; - - private Browser browser; - private boolean disposed; - private ActiveModelsListener currentListener; - - @Override - public void createPartControl(Composite parent) { - browser = new org.eclipse.swt.browser.Browser(parent, SWT.NONE); - - // Ensure the view receives some browser content even when no searches - // have been performed yet. - scheduleInitializeViewContent(false); - - // Make sure that the contents of the view are reset every time the set - // of active models changes. This must be because what is searchable depends - // completely on the active models. When there is no active model, the search - // will find nothing. - Simantics.getSessionContextProvider().addContextChangedListener(sessionListener); - trackActiveModels(Simantics.peekSession()); - } - - private ISessionContextChangedListener sessionListener = new ISessionContextChangedListener() { - @Override - public void sessionContextChanged(SessionContextChangedEvent event) { - ISessionContext ctx = event.getNewValue(); - final Session newSession = ctx != null ? ctx.peekSession() : null; - // Synchronize session changes to the UI thread to keep threading more predictable. - SWTUtils.asyncExec(browser, new Runnable() { - @Override - public void run() { - if (!disposed) - trackActiveModels(newSession); - } - }); - } - }; - - private void trackActiveModels(Session session) { - if (currentListener != null) { - currentListener.dispose(); - currentListener = null; - } - if (session != null) { - - LifecycleSupport lfs = session.peekService(LifecycleSupport.class); - if (lfs == null) - return; - if (lfs.isClosed()) - return; - - ActiveModelsListener listener = new ActiveModelsListener(new Runnable() { - @Override - public void run() { - scheduleInitializeViewContent(true); - } - }); - - // Make sure that the listener is disposed if the session is disposed. - session.registerService(ActiveModelsListener.class, listener); - session.asyncRequest(new ActiveModels(Simantics.getProjectResource()), listener); - this.currentListener = listener; - } - } - - protected void scheduleInitializeViewContent(final boolean force) { - SWTUtils.asyncExec(browser, new Runnable() { - @Override - public void run() { - if (disposed) - return; - // If SearchServiceImpl hasn't performed any queries yet, - // then we shall initialize the view contents at this point. - String lastQuery = getPartProperty(LAST_QUERY_PROPERTY); - if (force || lastQuery == null) - initializeViewContent(); - } - }); - } - - protected void initializeViewContent() { - SearchQuery query = new SearchQuery(""); - query.setSearchFlag("Name", "on"); - query.setSearchFlag("Types", "on"); - ISearchService searchService = (ISearchService) PlatformUI.getWorkbench().getService(ISearchService.class); - if (searchService != null) - searchService.performQuery(query, ResultBrowser.VIEW, false); - } - - @Override - public void dispose() { - disposed = true; - super.dispose(); - } - - public boolean isDisposed() { - return disposed; - } - - @Override - public void setFocus() { - browser.setFocus(); - } - - public org.eclipse.swt.browser.Browser getBrowser() { - return browser; - } - - public void setUrl(URL url) { - getBrowser().setUrl(url.toString()); - } - - @Override - public void setContentDescription(String description) { - super.setContentDescription(description); - } - -} +/******************************************************************************* + * Copyright (c) 2007, 2014 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy + *******************************************************************************/ +package org.simantics.workbench.internal.contributions.search; + +import java.net.URL; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.ViewPart; +import org.simantics.Simantics; +import org.simantics.db.Session; +import org.simantics.db.layer0.request.ActiveModels; +import org.simantics.db.management.ISessionContext; +import org.simantics.db.management.ISessionContextChangedListener; +import org.simantics.db.management.SessionContextChangedEvent; +import org.simantics.db.service.LifecycleSupport; +import org.simantics.utils.ui.SWTUtils; +import org.simantics.workbench.search.ISearchService; +import org.simantics.workbench.search.ISearchService.ResultBrowser; +import org.simantics.workbench.search.SearchQuery; + +/** + * A very non-configurable Web browser view for search trim. + * + * @author Tuukka Lehtonen + */ +public class BrowserView extends ViewPart { + + /** + * ID of this view's plug-in extension. + */ + public static final String ID = "org.simantics.workbench.search.browser"; + + /** + * Used as a property of this view to keep track of the last search query + * performed with this view. This information is needed to know whether or + * not to initialize the view with default contents after it has been + * created. This depends on whether the creation was caused by a simple + * activation of the view or an actual search being performed. + */ + public static final String LAST_QUERY_PROPERTY = "org.simantics.workbench.search.browser.lastQuery"; + + private Browser browser; + private boolean disposed; + private ActiveModelsListener currentListener; + + @Override + public void createPartControl(Composite parent) { + browser = new org.eclipse.swt.browser.Browser(parent, SWT.NONE); + + // Ensure the view receives some browser content even when no searches + // have been performed yet. + scheduleInitializeViewContent(false); + + // Make sure that the contents of the view are reset every time the set + // of active models changes. This must be because what is searchable depends + // completely on the active models. When there is no active model, the search + // will find nothing. + Simantics.getSessionContextProvider().addContextChangedListener(sessionListener); + trackActiveModels(Simantics.peekSession()); + } + + private ISessionContextChangedListener sessionListener = new ISessionContextChangedListener() { + @Override + public void sessionContextChanged(SessionContextChangedEvent event) { + ISessionContext ctx = event.getNewValue(); + final Session newSession = ctx != null ? ctx.peekSession() : null; + // Synchronize session changes to the UI thread to keep threading more predictable. + SWTUtils.asyncExec(browser, new Runnable() { + @Override + public void run() { + if (!disposed) + trackActiveModels(newSession); + } + }); + } + }; + + private void trackActiveModels(Session session) { + if (currentListener != null) { + currentListener.dispose(); + currentListener = null; + } + if (session != null) { + + LifecycleSupport lfs = session.peekService(LifecycleSupport.class); + if (lfs == null) + return; + if (lfs.isClosed()) + return; + + ActiveModelsListener listener = new ActiveModelsListener(new Runnable() { + @Override + public void run() { + scheduleInitializeViewContent(true); + } + }); + + // Make sure that the listener is disposed if the session is disposed. + session.registerService(ActiveModelsListener.class, listener); + session.asyncRequest(new ActiveModels(Simantics.getProjectResource()), listener); + this.currentListener = listener; + } + } + + protected void scheduleInitializeViewContent(final boolean force) { + SWTUtils.asyncExec(browser, new Runnable() { + @Override + public void run() { + if (disposed) + return; + // If SearchServiceImpl hasn't performed any queries yet, + // then we shall initialize the view contents at this point. + String lastQuery = getPartProperty(LAST_QUERY_PROPERTY); + if (force || lastQuery == null) + initializeViewContent(); + } + }); + } + + protected void initializeViewContent() { + SearchQuery query = new SearchQuery(""); + query.setSearchFlag("Name", "on"); + query.setSearchFlag("Types", "on"); + ISearchService searchService = (ISearchService) PlatformUI.getWorkbench().getService(ISearchService.class); + if (searchService != null) + searchService.performQuery(query, ResultBrowser.VIEW, false); + } + + @Override + public void dispose() { + disposed = true; + super.dispose(); + } + + public boolean isDisposed() { + return disposed; + } + + @Override + public void setFocus() { + browser.setFocus(); + } + + public org.eclipse.swt.browser.Browser getBrowser() { + return browser; + } + + public void setUrl(URL url) { + getBrowser().setUrl(url.toString()); + } + + @Override + public void setContentDescription(String description) { + super.setContentDescription(description); + } + +}