[475829] Redirect xxxExecs calls to default display if no workbench

Redirect all the PlatformUI.getWorkbench().getDisplay().syncExec /
asyncExec / readAndDispatch calls to a specific method which will check
if the workbench is here and will use Display.getDefault() when the
workbench is not present.

Bug: 475829
Change-Id: Ib543ede26578db7354a28ac0ed59f54b7925e44c
Signed-off-by: Cedric Brun <cedric.brun@obeo.fr>
diff --git a/plugins/org.eclipse.sirius.common.ui/src/org/eclipse/sirius/common/ui/tools/api/util/EclipseUIUtil.java b/plugins/org.eclipse.sirius.common.ui/src/org/eclipse/sirius/common/ui/tools/api/util/EclipseUIUtil.java
index d0450c0..b8fa6c9 100644
--- a/plugins/org.eclipse.sirius.common.ui/src/org/eclipse/sirius/common/ui/tools/api/util/EclipseUIUtil.java
+++ b/plugins/org.eclipse.sirius.common.ui/src/org/eclipse/sirius/common/ui/tools/api/util/EclipseUIUtil.java
@@ -294,4 +294,56 @@
             }
         }
     }
+
+    /**
+     * Post a runnable to be invoked by the user-interface thread at the next
+     * reasonable opportunity.
+     * 
+     * If a workbench is started its Display instance will be used, otherwhise
+     * Display.getDefault() will be used.
+     * 
+     * @param r
+     *            the runnable to execute.
+     */
+    public static void displayAsyncExec(Runnable r) {
+        getCurrentDisplay().asyncExec(r);
+    }
+
+    private static Display getCurrentDisplay() {
+        Display d;
+        if (PlatformUI.isWorkbenchRunning()) {
+            d = PlatformUI.getWorkbench().getDisplay();
+        } else {
+            d = Display.getDefault();
+        }
+        return d;
+    }
+
+    /**
+     * Post a runnable to be invoked by the user-interface thread at the next
+     * reasonable opportunity. The thread which calls this method is suspended
+     * until the runnable completes.
+     * 
+     * If a workbench is started its Display instance will be used, otherwhise
+     * Display.getDefault() will be used.
+     * 
+     * @param r
+     *            the runnable to execute.
+     */
+    public static void displaySyncExec(Runnable r) {
+        getCurrentDisplay().syncExec(r);
+    }
+
+    /**
+     * Process any event or runnables waiting in the user-interface queue.
+     */
+    public static void synchronizeWithUIThread() {
+        Display d = getCurrentDisplay();
+        while (d.readAndDispatch()) {
+            /*
+             * We wait for the UI thread to process all remaining events.
+             */
+        }
+    }
+
 }
diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.diagram.sequence.ui/META-INF/MANIFEST.MF
index 86bce59..57ab577 100644
--- a/plugins/org.eclipse.sirius.diagram.sequence.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/META-INF/MANIFEST.MF
@@ -11,6 +11,7 @@
  org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.6.0",
  org.eclipse.ui.ide;bundle-version="3.8.2",
  org.eclipse.sirius.diagram.ui;bundle-version="2.0.0",
+ org.eclipse.sirius.common.ui;bundle-version="3.0.0",
  org.eclipse.sirius.diagram.ui.ext;bundle-version="3.0.0",
  org.eclipse.emf.common.ui;bundle-version="2.7.0"
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/SequenceDiagramEditPart.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/SequenceDiagramEditPart.java
index 8215ff4..efc1d0c 100644
--- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/SequenceDiagramEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/SequenceDiagramEditPart.java
@@ -26,6 +26,7 @@
 import org.eclipse.sirius.business.api.session.Session;
 import org.eclipse.sirius.business.api.session.SessionEventBroker;
 import org.eclipse.sirius.business.internal.session.SessionEventBrokerImpl;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceElementAccessor;
 import org.eclipse.sirius.diagram.sequence.business.internal.elements.SequenceDiagram;
 import org.eclipse.sirius.diagram.sequence.business.internal.refresh.RefreshLayoutCommand;
@@ -50,7 +51,6 @@
 import org.eclipse.sirius.ext.base.Options;
 import org.eclipse.sirius.tools.api.ui.property.IPropertiesProvider;
 import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
-import org.eclipse.ui.PlatformUI;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
@@ -156,14 +156,14 @@
                     public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {
                         if (event.getNewValue() instanceof Boolean && ((Boolean) event.getNewValue()).booleanValue()) {
                             if (WorkspaceViewerProperties.SNAPTOGEOMETRY.equals(event.getProperty())) {
-                                PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+                                EclipseUIUtil.displayAsyncExec(new Runnable() {
                                     @Override
                                     public void run() {
                                         workspaceViewerPreferenceStore.setValue(WorkspaceViewerProperties.SNAPTOGEOMETRY, Boolean.FALSE);
                                     }
                                 });
                             } else if (WorkspaceViewerProperties.SNAPTOGRID.equals(event.getProperty())) {
-                                PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+                                EclipseUIUtil.displayAsyncExec(new Runnable() {
                                     @Override
                                     public void run() {
                                         workspaceViewerPreferenceStore.setValue(WorkspaceViewerProperties.SNAPTOGRID, Boolean.FALSE);
diff --git a/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF
index 37634d3..fc7e69c 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF
@@ -56,8 +56,7 @@
  org.eclipse.sirius.diagram.ui.business.api.view;version="2.0.4",
  org.eclipse.sirius.diagram.ui.business.internal.bracket;x-internal:=true;version="2.0.4",
  org.eclipse.sirius.diagram.ui.business.internal.bracket.handles;x-internal:=true;version="2.0.4",
- org.eclipse.sirius.diagram.ui.business.internal.bracket.locators;x-internal:=true;version="2.0.4",
- org.eclipse.sirius.diagram.ui.business.internal.browser;x-internal:=true;version="2.0.4",
+ org.eclipse.sirius.diagram.ui.business.internal.bracket.locators;x-internal:=true;version="2.0.4", 
  org.eclipse.sirius.diagram.ui.business.internal.command;x-internal:=true;version="2.1.0",
  org.eclipse.sirius.diagram.ui.business.internal.dialect;x-internal:=true;version="3.0.0",
  org.eclipse.sirius.diagram.ui.business.internal.edit.helpers;x-internal:=true;version="2.0.4",
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/dialect/DiagramDialectUIServices.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/dialect/DiagramDialectUIServices.java
index b7f54d8..9130921 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/dialect/DiagramDialectUIServices.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/dialect/DiagramDialectUIServices.java
@@ -63,6 +63,7 @@
 import org.eclipse.sirius.common.tools.DslCommonPlugin;
 import org.eclipse.sirius.common.tools.api.interpreter.IInterpreterSiriusVariables;
 import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DDiagram;
 import org.eclipse.sirius.diagram.DDiagramElement;
 import org.eclipse.sirius.diagram.DSemanticDiagram;
@@ -212,7 +213,7 @@
             }
 
         };
-        PlatformUI.getWorkbench().getDisplay().syncExec(runnable);
+        EclipseUIUtil.displaySyncExec(runnable);
         monitor.worked(10);
         if (runnable.getResult() != null) {
             dialectEditor = runnable.getResult();
@@ -252,7 +253,7 @@
             viewpointsName += ", " + neededSirius.getName(); //$NON-NLS-1$
         }
         final String description = viewpointsName;
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
 
             @Override
             public void run() {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/image/refresh/WorkspaceImageFigureRefresher.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/image/refresh/WorkspaceImageFigureRefresher.java
index 9baff5e..1012504 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/image/refresh/WorkspaceImageFigureRefresher.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/image/refresh/WorkspaceImageFigureRefresher.java
@@ -18,6 +18,7 @@
 import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DiagramPlugin;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
@@ -67,7 +68,7 @@
      * Refresh all the edit parts of the opened editors.
      */
     private void refreshOpenedEditors() {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                 if (activeWorkbenchWindow != null) {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/DiagramHeaderPostCommitListener.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/DiagramHeaderPostCommitListener.java
index 6406210..83895cd 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/DiagramHeaderPostCommitListener.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/DiagramHeaderPostCommitListener.java
@@ -15,10 +15,10 @@
 import org.eclipse.emf.transaction.ResourceSetListenerImpl;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DiagramPackage;
 import org.eclipse.sirius.diagram.ui.tools.internal.editor.header.DiagramHeaderComposite;
 import org.eclipse.sirius.viewpoint.ViewpointPackage;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * A ResourceSet listener to refresh the diagram header after changes on :
@@ -81,7 +81,7 @@
      * Refresh the diagram header composite.
      */
     private void refreshDiagramHeader() {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 if (diagramHeader != null && !diagramHeader.isDisposed()) {
                     diagramHeader.rebuildHeaderSection();
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/VisibilityPostCommitListener.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/VisibilityPostCommitListener.java
index 745fd63..8c522db 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/VisibilityPostCommitListener.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/listener/VisibilityPostCommitListener.java
@@ -23,11 +23,11 @@
 import org.eclipse.gmf.runtime.notation.NotationPackage;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.sirius.common.tools.api.listener.NotificationUtil;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DDiagram;
 import org.eclipse.sirius.diagram.ui.internal.edit.parts.DEdgeEditPart;
 import org.eclipse.sirius.ext.base.Option;
 import org.eclipse.sirius.ext.base.Options;
-import org.eclipse.ui.PlatformUI;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
@@ -101,7 +101,7 @@
                 parts.add(elementParts.get());
             }
         }
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 for (DEdgeEditPart edgePart : Iterables.filter(parts, DEdgeEditPart.class)) {
                     Edge edge = (Edge) edgePart.getNotationView();
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusValidationDecoratorProvider.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusValidationDecoratorProvider.java
index dcfe055..77d9a50 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusValidationDecoratorProvider.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusValidationDecoratorProvider.java
@@ -45,6 +45,7 @@
 import org.eclipse.gmf.runtime.notation.Diagram;
 import org.eclipse.gmf.runtime.notation.Edge;
 import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DiagramPlugin;
 import org.eclipse.sirius.diagram.ui.business.api.view.SiriusGMFHelper;
 import org.eclipse.sirius.diagram.ui.internal.edit.parts.DDiagramEditPart;
@@ -133,7 +134,7 @@
             return;
         }
         final Diagram fdiagram = diagram;
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
 
             @Override
             public void run() {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/action/ConcernComboContributionItem.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/action/ConcernComboContributionItem.java
index 06f0eb4..e1b0c74 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/action/ConcernComboContributionItem.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/action/ConcernComboContributionItem.java
@@ -21,6 +21,7 @@
 import org.eclipse.emf.transaction.util.TransactionUtil;
 import org.eclipse.jface.action.ContributionItem;
 import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DDiagram;
 import org.eclipse.sirius.diagram.description.concern.ConcernDescription;
 import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor;
@@ -42,7 +43,6 @@
 import org.eclipse.ui.IPartListener;
 import org.eclipse.ui.IPartService;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * A ControlContribution that uses a {@link org.eclipse.swt.widgets.Combo} as
@@ -136,7 +136,7 @@
 
     private void diagramChanged() {
         if (Display.getCurrent() == null) {
-            PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+            EclipseUIUtil.displayAsyncExec(new Runnable() {
                 public void run() {
                     refresh(false);
                 }
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/editor/AbstractSpecificDDiagramEditor.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/editor/AbstractSpecificDDiagramEditor.java
index a0aabe3..ba91e43 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/editor/AbstractSpecificDDiagramEditor.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/editor/AbstractSpecificDDiagramEditor.java
@@ -36,7 +36,6 @@
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * A specific editor you may extend, which includes a session. The session
@@ -68,7 +67,7 @@
             });
             domain.getCommandStack().execute(new CreateAndStoreGMFDiagramCommand(session, (DSemanticDiagram) diagram));
 
-            PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+            EclipseUIUtil.displayAsyncExec(new Runnable() {
                 public void run() {
                     final IEditorPart activeEditor = EclipseUIUtil.getActiveEditor();
                     if (activeEditor != null) {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/permission/EditPartAuthorityListener.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/permission/EditPartAuthorityListener.java
index c66c301..a7d27c3 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/permission/EditPartAuthorityListener.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/permission/EditPartAuthorityListener.java
@@ -18,6 +18,7 @@
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DecorationEditPolicy;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DDiagramElement;
 import org.eclipse.sirius.diagram.ui.internal.edit.parts.DDiagramEditPart;
 import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin;
@@ -30,7 +31,6 @@
 import org.eclipse.sirius.ext.base.Option;
 import org.eclipse.sirius.ext.base.Options;
 import org.eclipse.sirius.viewpoint.DSemanticDecorator;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * Listener disabling /enabling edit parts when their locking status is
@@ -129,7 +129,7 @@
                 doRefreshEditMode(enableEditMode, diagramEditor, semanticElement);
             } else {
                 // Otherwise, we launch it asynchronously
-                PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+                EclipseUIUtil.displayAsyncExec(new Runnable() {
 
                     @Override
                     public void run() {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java
index 4602675..1629bdf 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java
@@ -96,6 +96,7 @@
 import org.eclipse.sirius.business.api.session.SessionManagerListener;
 import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter;
 import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.common.ui.tools.api.util.IObjectActionDelegateWrapper;
 import org.eclipse.sirius.diagram.DDiagram;
 import org.eclipse.sirius.diagram.DDiagramElement;
@@ -1106,7 +1107,7 @@
     public void notify(final int changeKind) {
         DDiagramEditorSessionListenerDelegate dDiagramEditorSessionListenerDelegate = new DDiagramEditorSessionListenerDelegate(this, toolFilterWhenRepresentationIsLocked, changeKind);
         if (Display.getCurrent() == null) {
-            PlatformUI.getWorkbench().getDisplay().asyncExec(dDiagramEditorSessionListenerDelegate);
+            EclipseUIUtil.displayAsyncExec(dDiagramEditorSessionListenerDelegate);
         } else {
             dDiagramEditorSessionListenerDelegate.run();
         }
@@ -1144,7 +1145,7 @@
             }
         };
         if (Display.getCurrent() == null) {
-            PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
+            EclipseUIUtil.displayAsyncExec(runnable);
         } else {
             runnable.run();
         }
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java
index 7aa8abb..c287512 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java
@@ -21,6 +21,7 @@
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor;
 import org.eclipse.sirius.ecore.extender.business.api.permission.IAuthorityListener;
 import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority;
@@ -33,7 +34,6 @@
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PlatformUI;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Version;
 
@@ -196,7 +196,7 @@
     }
 
     private void updateAllItems() {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 List<IContributionItem> items = Arrays.asList(manager.getItems());
                 for (IContributionItem item : items) {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarRefresher.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarRefresher.java
index 04cc8f1..445fead 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarRefresher.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarRefresher.java
@@ -13,6 +13,7 @@
 import org.eclipse.emf.transaction.ResourceSetChangeEvent;
 import org.eclipse.emf.transaction.ResourceSetListenerImpl;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramEditorImpl;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
@@ -61,7 +62,7 @@
      * Reinit the toolbar
      */
     private void reinitToolbar() {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                 if (activeWorkbenchWindow != null) {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/part/SiriusDiagramGraphicalViewer.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/part/SiriusDiagramGraphicalViewer.java
index 82c941e..6a6142d 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/part/SiriusDiagramGraphicalViewer.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/part/SiriusDiagramGraphicalViewer.java
@@ -25,11 +25,11 @@
 import org.eclipse.jface.util.TransferDropTargetListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DiagramPlugin;
 import org.eclipse.sirius.diagram.ui.tools.api.part.IDiagramDialectGraphicalViewer;
 import org.eclipse.sirius.diagram.ui.tools.internal.editor.SiriusPaletteToolDropTargetListener;
 import org.eclipse.sirius.diagram.ui.tools.internal.graphical.edit.policies.ChangeBoundRequestRecorder;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * {@link org.eclipse.gef.GraphicalViewer} used for the
@@ -173,7 +173,7 @@
          */
         @Override
         protected void sendUpdateRequest() {
-            PlatformUI.getWorkbench().getDisplay().asyncExec(new UpdateRequest());
+            EclipseUIUtil.displayAsyncExec(new UpdateRequest());
         }
 
         /**
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/filters/FiltersActivationAdapter.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/filters/FiltersActivationAdapter.java
index b27aaaf..7a92417 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/filters/FiltersActivationAdapter.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/filters/FiltersActivationAdapter.java
@@ -16,10 +16,10 @@
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DDiagram;
 import org.eclipse.sirius.diagram.DiagramPackage;
 import org.eclipse.sirius.diagram.description.filter.FilterDescription;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * An adapter to listen layer activation change.
@@ -44,7 +44,7 @@
     }
 
     private void update(final DDiagram diagram, final FilterDescription filter, final boolean activate) {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 if (viewer != null) {
                     viewer.update(filter, null);
@@ -54,7 +54,7 @@
     }
 
     private void update(final DDiagram notifier, final Collection<FilterDescription> filters, final boolean b) {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 if (viewer != null && filters != null) {
                     for (FilterDescription filter : filters) {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersActivationAdapter.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersActivationAdapter.java
index 4e3a9e6..baaa553 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersActivationAdapter.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersActivationAdapter.java
@@ -14,11 +14,11 @@
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.diagram.DDiagram;
 import org.eclipse.sirius.diagram.DiagramPackage;
 import org.eclipse.sirius.diagram.description.Layer;
 import org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.palette.PaletteManager;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * An adapter to listen layer activation change.
@@ -56,7 +56,7 @@
     }
 
     private void update(final DDiagram diagram, final Layer layer, final boolean activate) {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 if (viewer != null) {
                     viewer.update(layer, null);
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersEventsListener.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersEventsListener.java
index fe1c824..169957e 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersEventsListener.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/views/providers/layers/LayersEventsListener.java
@@ -13,7 +13,7 @@
 import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.sirius.business.api.session.SessionListener;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 
 /**
  * A listener to update the viewer.
@@ -55,7 +55,7 @@
     }
 
     private void updateViewer() {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 if (viewer != null && !viewer.getControl().isDisposed()) {
                     viewer.refresh();
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
index 2acffdc..ba8457c 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
@@ -769,6 +769,13 @@
 			<li><span class="label label-success">Added</span> Classes from 
 				<code>org.eclipse.sirius.common.ui.tools.api.dialog.quickoutline</code> packages are available in API to allow editor to provide quick outline feature easily.
 			</li>
+			<li><span class="label label-success">Added</span> The methods 
+				<code>displaySyncExec(Runnable)</code> , 
+				<code>displayAsyncExec(Runnable)</code> and 
+				<code>synchronizeWithUIThread()</code> have been added in class 
+				<code>org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil</code> to encapsulate accesses to the current 
+				<code>Display</code> instance.
+			</li>
 			<li><span class="label label-info">Moved</span> Extensions in 
 				<code>plugin.xml</code> that provide UI functionalities have been moved to 
 				<code>org.eclipse.sirius.common.ui.ext</code>.
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
index 5c9cf2d..235c527 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
@@ -222,6 +222,7 @@
 h4. Changes in @org.eclipse.sirius.common.ui@
 
 * <span class="label label-success">Added</span> Classes from @org.eclipse.sirius.common.ui.tools.api.dialog.quickoutline@ packages are available in API to allow editor to provide quick outline feature easily.
+* <span class="label label-success">Added</span> The methods @displaySyncExec(Runnable)@ , @displayAsyncExec(Runnable)@ and @synchronizeWithUIThread()@ have been added in class @org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil@ to encapsulate accesses to the current @Display@ instance.
 * <span class="label label-info">Moved</span> Extensions in @plugin.xml@ that provide UI functionalities have been moved to @org.eclipse.sirius.common.ui.ext@.
 
 h4. Changes in @org.eclipse.sirius@
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/business/internal/dialect/TableDialectUIServices.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/business/internal/dialect/TableDialectUIServices.java
index 5dc2cd1..4081911 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/business/internal/dialect/TableDialectUIServices.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/business/internal/dialect/TableDialectUIServices.java
@@ -35,6 +35,7 @@
 import org.eclipse.sirius.business.api.session.Session;
 import org.eclipse.sirius.common.tools.DslCommonPlugin;
 import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.table.business.internal.metamodel.TableToolVariables;
 import org.eclipse.sirius.table.metamodel.table.DTable;
 import org.eclipse.sirius.table.metamodel.table.DTableElement;
@@ -120,7 +121,7 @@
                             }
                         }
                     };
-                    PlatformUI.getWorkbench().getDisplay().syncExec(runnable);
+                    EclipseUIUtil.displaySyncExec(runnable);
                     monitor.worked(8);
                     if (runnable.getResult() instanceof AbstractDTableEditor) {
                         editorPart = runnable.getResult();
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/TableUIUpdater.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/TableUIUpdater.java
index 2fc2eca..bf1e57a 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/TableUIUpdater.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/TableUIUpdater.java
@@ -26,6 +26,7 @@
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.emf.transaction.util.TransactionUtil;
 import org.eclipse.sirius.business.api.dialect.DRepresentationNotificationFilter;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.table.metamodel.table.DCell;
 import org.eclipse.sirius.table.metamodel.table.DCellStyle;
 import org.eclipse.sirius.table.metamodel.table.DColumn;
@@ -38,7 +39,6 @@
 import org.eclipse.sirius.table.ui.tools.internal.editor.DTableViewerManager;
 import org.eclipse.sirius.viewpoint.DRepresentation;
 import org.eclipse.sirius.viewpoint.ViewpointPackage;
-import org.eclipse.ui.PlatformUI;
 
 import com.google.common.collect.Sets;
 
@@ -263,7 +263,7 @@
             Runnable tableUIUpdaterRunnable = new TableUIUpdaterRunnable(dTableViewerManager, dTableTreeViewer, toExpands, toCollapses, toRefreshInViewerWithUpdateLabels,
                     launchGlobalRefreshWithoutUpdateLabels, launchGlobalRefreshWithUpdateLabels, objectsToUpdateInViewer, dColumnsToUpdateDirectly, dColumnsWidthToUpdate, dColumnsToRemove,
                     dColumnsToAdd, dColumnsToVisibilityChanged, updateHeaderColumnWidth);
-            PlatformUI.getWorkbench().getDisplay().asyncExec(tableUIUpdaterRunnable);
+            EclipseUIUtil.displayAsyncExec(tableUIUpdaterRunnable);
         }
     }
 
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/properties/section/common/AbstractDTablePropertySection.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/properties/section/common/AbstractDTablePropertySection.java
index 5760d8f..e56830c 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/properties/section/common/AbstractDTablePropertySection.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/properties/section/common/AbstractDTablePropertySection.java
@@ -31,13 +31,13 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.views.properties.IPropertySourceProvider;
 import org.eclipse.ui.views.properties.PropertySheetPage;
 import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
 import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 
 import org.eclipse.sirius.common.tools.DslCommonPlugin;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.table.metamodel.table.provider.TableUIPlugin;
 import org.eclipse.sirius.table.ui.tools.api.editor.DTableEditor;
 import org.eclipse.sirius.tools.api.profiler.SiriusTasksKey;
@@ -325,7 +325,7 @@
 
             if (notifier instanceof EObject && contentPage != null && contentPage.getControl() != null) {
                 final Control control = contentPage.getControl();
-                PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+                EclipseUIUtil.displayAsyncExec(new Runnable() {
                     public void run() {
                         if (!control.isDisposed() && control.isVisible()) {
                             refresh();
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/DeleteFromDiagramActionTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/DeleteFromDiagramActionTests.java
index adc8abf..b624d33 100644
--- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/DeleteFromDiagramActionTests.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/DeleteFromDiagramActionTests.java
@@ -21,8 +21,6 @@
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.sirius.diagram.DDiagram;
-import org.eclipse.sirius.diagram.ui.business.internal.browser.DiagramEditorBrowser;
-import org.eclipse.sirius.diagram.ui.business.internal.browser.MatchBySemanticElement;
 import org.eclipse.sirius.diagram.ui.internal.edit.parts.DEdgeNameEditPart;
 import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor;
 import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromDiagramAction;
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/DiagramEditorBrowser.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/DiagramEditorBrowser.java
similarity index 88%
rename from plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/DiagramEditorBrowser.java
rename to plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/DiagramEditorBrowser.java
index 7840c8b..073438e 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/DiagramEditorBrowser.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/DiagramEditorBrowser.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Obeo - initial API and implementation
  *******************************************************************************/
-package org.eclipse.sirius.diagram.ui.business.internal.browser;
+package org.eclipse.sirius.tests.unit.diagram.action;
 
 import java.util.Collections;
 import java.util.Iterator;
@@ -18,7 +18,7 @@
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.requests.ArrangeRequest;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterators;
@@ -99,7 +99,7 @@
      */
     public void arrangeAll() throws InterruptedException {
 
-        synchronizationWithUIThread();
+        EclipseUIUtil.synchronizeWithUIThread();
 
         final ArrangeRequest request = new ArrangeRequest(ActionIds.ACTION_ARRANGE_ALL);
         request.setPartsToArrange(Lists.newArrayList(editor.getDiagramEditPart()));
@@ -108,18 +108,9 @@
         editor.getEditingDomain().getCommandStack().flush();
         editor.getDiagramEditPart().getRoot().getViewer().flush();
 
-        synchronizationWithUIThread();
+        EclipseUIUtil.synchronizeWithUIThread();
         Thread.sleep(30000);
-        synchronizationWithUIThread();
-    }
-
-    private void synchronizationWithUIThread() {
-        while (PlatformUI.getWorkbench().getDisplay().readAndDispatch()) {
-            /*
-             * We'll just wait for the UI thread to process all the events
-             * needed to refresh the diagram.
-             */
-        }
+        EclipseUIUtil.synchronizeWithUIThread();
     }
 
 }
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/MatchByAutoSizeStatus.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/MatchByAutoSizeStatus.java
similarity index 96%
rename from plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/MatchByAutoSizeStatus.java
rename to plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/MatchByAutoSizeStatus.java
index b7d58d6..0113f6d 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/MatchByAutoSizeStatus.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/MatchByAutoSizeStatus.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Obeo - initial API and implementation
  *******************************************************************************/
-package org.eclipse.sirius.diagram.ui.business.internal.browser;
+package org.eclipse.sirius.tests.unit.diagram.action;
 
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.notation.Bounds;
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/MatchBySemanticElement.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/MatchBySemanticElement.java
similarity index 95%
rename from plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/MatchBySemanticElement.java
rename to plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/MatchBySemanticElement.java
index c386fb1..956bff7 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/browser/MatchBySemanticElement.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/action/MatchBySemanticElement.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Obeo - initial API and implementation
  *******************************************************************************/
-package org.eclipse.sirius.diagram.ui.business.internal.browser;
+package org.eclipse.sirius.tests.unit.diagram.action;
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
diff --git a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/ArrangeAllTest.java b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/ArrangeAllTest.java
index 1c1fcb5..4f1683c 100644
--- a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/ArrangeAllTest.java
+++ b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/ArrangeAllTest.java
@@ -20,7 +20,6 @@
 import org.eclipse.gef.requests.ChangeBoundsRequest;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
-import org.eclipse.sirius.diagram.ui.business.internal.browser.MatchByAutoSizeStatus;
 import org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramContainerEditPart;
 import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeContainerEditPart;
 import org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase;
@@ -28,6 +27,7 @@
 import org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession;
 import org.eclipse.sirius.tests.swtbot.support.api.business.UIResource;
 import org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor;
+import org.eclipse.sirius.tests.unit.diagram.action.MatchByAutoSizeStatus;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
diff --git a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/business/internal/dialect/TreeDialectUIServices.java b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/business/internal/dialect/TreeDialectUIServices.java
index b7961fd..1df4cbb 100644
--- a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/business/internal/dialect/TreeDialectUIServices.java
+++ b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/business/internal/dialect/TreeDialectUIServices.java
@@ -34,6 +34,7 @@
 import org.eclipse.sirius.business.api.session.Session;
 import org.eclipse.sirius.common.tools.DslCommonPlugin;
 import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.tools.api.profiler.SiriusTasksKey;
 import org.eclipse.sirius.tree.DTree;
 import org.eclipse.sirius.tree.DTreeItem;
@@ -140,7 +141,7 @@
                         }
                     }
                 };
-                PlatformUI.getWorkbench().getDisplay().syncExec(runnable);
+                EclipseUIUtil.displaySyncExec(runnable);
                 monitor.worked(8);
                 IEditorPart result = runnable.getResult();
                 if (canHandleEditor(result)) {
diff --git a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/TreeUIUpdater.java b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/TreeUIUpdater.java
index db4267e..2f2db4d 100644
--- a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/TreeUIUpdater.java
+++ b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/TreeUIUpdater.java
@@ -21,6 +21,7 @@
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.emf.transaction.util.TransactionUtil;
 import org.eclipse.sirius.business.api.dialect.DRepresentationNotificationFilter;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.tree.DTree;
 import org.eclipse.sirius.tree.DTreeItem;
 import org.eclipse.sirius.tree.DTreeItemContainer;
@@ -30,7 +31,6 @@
 import org.eclipse.sirius.viewpoint.DRepresentation;
 import org.eclipse.sirius.viewpoint.ViewpointPackage;
 import org.eclipse.sirius.viewpoint.description.style.StylePackage;
-import org.eclipse.ui.PlatformUI;
 
 import com.google.common.collect.Sets;
 
@@ -167,7 +167,7 @@
         if (!toRefreshInViewer.isEmpty() || !toUpdateInViewer.isEmpty() || !toCollapses.isEmpty() || !toExpands.isEmpty()) {
             final Object[] objectsToUpdateInViewer = Sets.difference(toUpdateInViewer, toRefreshInViewer).toArray(new Object[0]);
             Runnable runnable = new TreeUIUpdaterRunnable(dTreeViewer, toRefreshInViewer, objectsToUpdateInViewer, toExpands, toCollapses);
-            PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
+            EclipseUIUtil.displayAsyncExec(runnable);
         }
     }
 
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/EditorNameAdapter.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/EditorNameAdapter.java
index 37dad13..3c53cd27 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/EditorNameAdapter.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/EditorNameAdapter.java
@@ -19,13 +19,13 @@
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.sirius.business.api.session.SessionListener;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.ui.business.api.dialect.DialectEditor;
 import org.eclipse.sirius.viewpoint.DRepresentation;
 import org.eclipse.sirius.viewpoint.ViewpointPackage;
 import org.eclipse.sirius.viewpoint.provider.SiriusEditPlugin;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * Adapter which update name of editors when diagram name change.
@@ -95,7 +95,7 @@
      *            the editor part
      */
     private void updateEditorInputName(final SessionEditorInput editorInput, final IEditorPart editor) {
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 editorInput.setName(editor.getTitle());
             }
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionHelper.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionHelper.java
index 90029f4..2359005 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionHelper.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionHelper.java
@@ -20,6 +20,7 @@
 import org.eclipse.sirius.business.api.dialect.DialectManager;
 import org.eclipse.sirius.business.api.query.RepresentationDescriptionQuery;
 import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
 import org.eclipse.sirius.ui.tools.internal.dialogs.RepresentationsSelectionDialog;
 import org.eclipse.sirius.viewpoint.DRepresentation;
@@ -144,7 +145,7 @@
         if (candidates.size() == 1) {
             selection.addAll(candidates);
         } else if (candidates.size() > 1) {
-            PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
+            EclipseUIUtil.displaySyncExec(new Runnable() {
                 public void run() {
                     final Shell shell = PlatformUI.getWorkbench().getDisplay().getActiveShell();
                     final RepresentationsSelectionDialog dlg = new RepresentationsSelectionDialog(shell, candidates);
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/analysis/SmartDialogAnalysisSelector.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/analysis/SmartDialogAnalysisSelector.java
index b86ddf0..cdfd7f5 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/analysis/SmartDialogAnalysisSelector.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/analysis/SmartDialogAnalysisSelector.java
@@ -19,6 +19,7 @@
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.window.Window;
 import org.eclipse.sirius.business.api.session.danalysis.DAnalysisSelector;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.viewpoint.DAnalysis;
 import org.eclipse.sirius.viewpoint.DRepresentation;
 import org.eclipse.sirius.viewpoint.provider.SiriusEditPlugin;
@@ -100,7 +101,7 @@
             }
         };
         /* synch execution as the user need to choose before we can get further */
-        PlatformUI.getWorkbench().getDisplay().syncExec(runnable);
+        EclipseUIUtil.displaySyncExec(runnable);
         if (runnable.getResult() instanceof DAnalysis) {
             return (DAnalysis) runnable.getResult();
         }
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/command/AbstractSWTCallback.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/command/AbstractSWTCallback.java
index d79c594..ce88b05 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/command/AbstractSWTCallback.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/command/AbstractSWTCallback.java
@@ -45,6 +45,7 @@
 import org.eclipse.sirius.common.ui.SiriusTransPlugin;
 import org.eclipse.sirius.common.ui.tools.api.selection.EMFMessageDialog;
 import org.eclipse.sirius.common.ui.tools.api.selection.EObjectSelectionWizard;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.tools.api.command.ui.UICallBack;
 import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
 import org.eclipse.sirius.ui.business.api.resource.LoadEMFResourceRunnableWithProgress;
@@ -278,7 +279,7 @@
                     setResult(MessageDialog.openQuestion(getActiveShell(), title, message));
                 }
             };
-            PlatformUI.getWorkbench().getDisplay().syncExec(reload);
+            EclipseUIUtil.displaySyncExec(reload);
             return reload.getResult();
         }
     }
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/OpenViewpointSelectionAction.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/OpenViewpointSelectionAction.java
index 76a371b..977ff37 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/OpenViewpointSelectionAction.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/OpenViewpointSelectionAction.java
@@ -14,9 +14,9 @@
 import org.eclipse.jface.action.Action;
 import org.eclipse.sirius.business.api.session.Session;
 import org.eclipse.sirius.business.api.session.SessionManager;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelection;
 import org.eclipse.sirius.viewpoint.provider.SiriusEditPlugin;
-import org.eclipse.ui.PlatformUI;
 
 /**
  * An actions opening a dialog allowing to change the {@link ViewpointSelection}
@@ -59,7 +59,7 @@
     @Override
     public void run() {
         final Session session = SessionManager.INSTANCE.getExistingSession(sessionURI);
-        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+        EclipseUIUtil.displayAsyncExec(new Runnable() {
             public void run() {
                 ViewpointSelection.openViewpointsSelectionDialog(session);
             }
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java
index 6d0a36b..473ac1e 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java
@@ -39,6 +39,7 @@
 import org.eclipse.sirius.business.api.session.SessionManagerListener;
 import org.eclipse.sirius.business.api.session.SessionStatus;
 import org.eclipse.sirius.common.ui.SiriusTransPlugin;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
 import org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor;
 import org.eclipse.sirius.ecore.extender.business.api.permission.IAuthorityListener;
 import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority;
@@ -663,7 +664,7 @@
     public void notify(final int changeKind) {
         AbstractDTreeEditorSessionListenerDelegate abstractDTreeEditorSessionListenerDelegate = new AbstractDTreeEditorSessionListenerDelegate(this, changeKind);
         if (Display.getCurrent() == null) {
-            PlatformUI.getWorkbench().getDisplay().asyncExec(abstractDTreeEditorSessionListenerDelegate);
+            EclipseUIUtil.displayAsyncExec(abstractDTreeEditorSessionListenerDelegate);
         } else {
             abstractDTreeEditorSessionListenerDelegate.run();
         }
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/SelectDRepresentationElementsListener.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/SelectDRepresentationElementsListener.java
index a648dd8..20a7d3f 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/SelectDRepresentationElementsListener.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/SelectDRepresentationElementsListener.java
@@ -34,7 +34,6 @@
 import org.eclipse.sirius.viewpoint.UIState;
 import org.eclipse.sirius.viewpoint.ViewpointPackage;
 import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.PlatformUI;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Iterables;
@@ -131,7 +130,7 @@
                 // Set the selection in async exec: for some dialect, ui could
                 // be refresh by another post commit triggered after this one
                 // and doing some UI refresh in sync exec.
-                PlatformUI.getWorkbench().getDisplay().asyncExec(new SetSelectionRunnable(dialectEditor, elementsToSelect));
+                EclipseUIUtil.displayAsyncExec(new SetSelectionRunnable(dialectEditor, elementsToSelect));
             }
         }
     }