Bug 483278 - UI freeze in BasicNotifierImpl.eNotify - EditingDomainListener.loadHistory (1.6s)
* show progress dialog while loading history
Change-Id: Ic5f21290c3cabc4a44dc4743e7d5e06e708db5af
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
diff --git a/plugins/org.eclipse.emf.edapt.history.editor/src/org/eclipse/emf/edapt/history/recorder/ui/EcoreEditorDetector.java b/plugins/org.eclipse.emf.edapt.history.editor/src/org/eclipse/emf/edapt/history/recorder/ui/EcoreEditorDetector.java
index dfbb44f..54060d8 100644
--- a/plugins/org.eclipse.emf.edapt.history.editor/src/org/eclipse/emf/edapt/history/recorder/ui/EcoreEditorDetector.java
+++ b/plugins/org.eclipse.emf.edapt.history.editor/src/org/eclipse/emf/edapt/history/recorder/ui/EcoreEditorDetector.java
@@ -11,10 +11,12 @@
*******************************************************************************/
package org.eclipse.emf.edapt.history.recorder.ui;
+import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.URI;
@@ -22,13 +24,17 @@
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edapt.common.ui.EcoreUIUtils;
import org.eclipse.emf.edapt.common.ui.PartAdapter;
+import org.eclipse.emf.edapt.history.presentation.HistoryEditorPlugin;
import org.eclipse.emf.edapt.history.recorder.AddResourceCommand;
import org.eclipse.emf.edapt.history.recorder.EditingDomainListener;
import org.eclipse.emf.edapt.history.recorder.IResourceLoadListener;
+import org.eclipse.emf.edapt.internal.common.LoggingUtils;
import org.eclipse.emf.edapt.spi.history.HistoryPackage;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
@@ -85,15 +91,28 @@
/**
* Attach an {@link EditingDomainListener} to an {@link EcoreEditor}.
*/
- public void addEditor(EcoreEditor editor) {
- EditingDomainListener listener = getListener(editor);
+ public void addEditor(final EcoreEditor editor) {
+ final IRunnableWithProgress attachRunnable = new IRunnableWithProgress() {
+ @Override
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ EditingDomainListener listener = getListener(editor);
- if (listener == null) {
- listener = new EditingDomainListener(editor.getEditingDomain());
+ if (listener == null) {
+ listener = new EditingDomainListener(editor.getEditingDomain());
+ }
+ if (listener.loadHistory()) {
+ validateListener(editor, listener);
+ }
+ }
+ };
+ try {
+ new ProgressMonitorDialog(editor.getSite().getShell()).run(true, false, attachRunnable);
+ } catch (final InvocationTargetException ex) {
+ LoggingUtils.logError(HistoryEditorPlugin.getPlugin(), ex);
+ } catch (final InterruptedException ex) {
+ LoggingUtils.logError(HistoryEditorPlugin.getPlugin(), ex);
}
- if (listener.loadHistory()) {
- validateListener(editor, listener);
- }
+
}
/**