* Contributors:
* VTT Technical Research Centre of Finland - initial API and implementation
* Semantum Oy - issue #4384
+ * Semantum Oy - issue #7737
*******************************************************************************/
package org.simantics.ui.workbench;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.internal.PartSite;
+import org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor;
import org.eclipse.ui.part.EditorPart;
+import org.simantics.Simantics;
import org.simantics.db.Resource;
import org.simantics.db.Session;
import org.simantics.db.common.request.ParametrizedRead;
-import org.simantics.db.event.ChangeListener;
import org.simantics.db.management.ISessionContext;
-import org.simantics.ui.SimanticsUI;
/**
* ResourceEditorPart is a base implementation for editors that support
* </p>
*
* @author Tuukka Lehtonen
+ * @author Jani Simomaa
*/
public abstract class ResourceEditorPart extends EditorPart implements IResourceEditorPart {
// Set initial part name according to the name given by IEditorInput
setPartName(getEditorInput().getName());
- Session session = SimanticsUI.peekSession();
+ Session session = Simantics.peekSession();
if (session != null) {
Supplier<Boolean> disposedCallback = () -> disposed;
session.asyncRequest(
new TitleRequest(site.getId(), getResourceInput()),
- new TitleUpdater(site.getShell().getDisplay(), this::setPartName, disposedCallback));
+ new TitleUpdater(site.getShell().getDisplay(), this::safeSetPartName, disposedCallback));
session.asyncRequest(
new ToolTipRequest(site.getId(), getResourceInput()),
- new TitleUpdater(site.getShell().getDisplay(), this::setTitleToolTip, disposedCallback));
+ new TitleUpdater(site.getShell().getDisplay(), this::safeSetTitleToolTip, disposedCallback));
+ }
+ }
+
+ /**
+ * Safely sets part name for parts whose IEditorInput is not yet disposed (e.g.
+ * removed from database)
+ *
+ * @param partName
+ */
+ protected void safeSetPartName(String partName) {
+ if (!disposed && checkCompatibilityPartNotBeingDisposed()) { // this is to fix bug https://gitlab.simantics.org/simantics/platform/issues/117
+ setPartName(partName);
+ }
+ }
+
+ @SuppressWarnings("restriction")
+ private boolean checkCompatibilityPartNotBeingDisposed() {
+ IWorkbenchPartSite site = getSite();
+ if (site instanceof PartSite) {
+ PartSite partSite = (PartSite) getSite();
+ Object object = partSite.getModel().getObject();
+ if (object instanceof CompatibilityEditor) {
+ CompatibilityEditor editor = (CompatibilityEditor) object;
+ return !editor.isBeingDisposed();
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Safely sets title tooltip for parts whose IEditorInput is not yet disposed (e.g.
+ * removed from database)
+ *
+ * @param toolTip
+ */
+ protected void safeSetTitleToolTip(String toolTip) {
+ if (!disposed) {
+ setTitleToolTip(toolTip);
}
}