Run diagram synchronization as a workspace job locked on project.

Change-Id: Ife4a6e74b090a0d370d7331312148352b4b672b4
diff --git a/plugins/org.eclipse.tigerstripe.workbench.ui.visualeditor.adaptation/src/org/eclipse/tigerstripe/workbench/ui/visualeditor/adaptation/clazz/sync/ClassDiagramSynchronizer.java b/plugins/org.eclipse.tigerstripe.workbench.ui.visualeditor.adaptation/src/org/eclipse/tigerstripe/workbench/ui/visualeditor/adaptation/clazz/sync/ClassDiagramSynchronizer.java
index 3dcebcd..38189e6 100644
--- a/plugins/org.eclipse.tigerstripe.workbench.ui.visualeditor.adaptation/src/org/eclipse/tigerstripe/workbench/ui/visualeditor/adaptation/clazz/sync/ClassDiagramSynchronizer.java
+++ b/plugins/org.eclipse.tigerstripe.workbench.ui.visualeditor.adaptation/src/org/eclipse/tigerstripe/workbench/ui/visualeditor/adaptation/clazz/sync/ClassDiagramSynchronizer.java
@@ -13,12 +13,15 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.emf.common.command.AbstractCommand;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
@@ -29,15 +32,13 @@
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.viewsupport.IProblemChangedListener;
 import org.eclipse.jdt.internal.ui.viewsupport.ProblemMarkerManager;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.tigerstripe.workbench.TigerstripeException;
 import org.eclipse.tigerstripe.workbench.emf.adaptation.etadapter.BaseETAdapter;
 import org.eclipse.tigerstripe.workbench.internal.api.contract.segment.IFacetReference;
 import org.eclipse.tigerstripe.workbench.internal.api.model.IActiveFacetChangeListener;
 import org.eclipse.tigerstripe.workbench.internal.api.model.IArtifactChangeListener;
+import org.eclipse.tigerstripe.workbench.internal.core.project.InternalTigerstripeProject;
 import org.eclipse.tigerstripe.workbench.model.deprecated_.IAbstractArtifact;
 import org.eclipse.tigerstripe.workbench.model.deprecated_.IArtifactManagerSession;
 import org.eclipse.tigerstripe.workbench.model.deprecated_.IArtifactManagerSessionInternal;
@@ -52,8 +53,6 @@
 import org.eclipse.tigerstripe.workbench.ui.visualeditor.adaptation.clazz.sync.etadapter.MapETAdapter;
 import org.eclipse.tigerstripe.workbench.ui.visualeditor.adaptation.helpers.DiagramEditorHelper;
 import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.eclipse.ui.progress.IProgressService;
@@ -91,25 +90,23 @@
         this.editor = editor;
     }
 
-    protected void doInitialRefresh() {
-        IRunnableWithProgress op = new IRunnableWithProgress() {
-            public void run(IProgressMonitor monitor) {
-                initialRefresh(monitor);
-            }
-        };
-
-        IWorkbench wb = PlatformUI.getWorkbench();
-        IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
-        Shell shell = win != null ? win.getShell() : null;
-
-        try {
-            ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
-            dialog.run(true, false, op);
-        } catch (InterruptedException e) {
-            EclipsePlugin.log(e);
-        } catch (InvocationTargetException e) {
-            EclipsePlugin.log(e);
+    public Optional<IProject> getProject() {
+        ITigerstripeModelProject tsProject = getTSProject();
+        if (tsProject instanceof InternalTigerstripeProject) {
+            IProject project = (IProject) ((InternalTigerstripeProject)tsProject).getAdapter(IProject.class);
+            return Optional.ofNullable(project);
         }
+        return Optional.empty();
+    }
+    
+    protected void doInitialRefresh() {
+        Job refreshJob = Job.create("Refreshing artifacts in Diagram", this::initialRefresh);
+        refreshJob.setUser(true);
+        Optional<IProject> project = getProject();
+        if (project.isPresent()) {
+            refreshJob.setRule(project.get());
+        }
+        refreshJob.schedule();
     }
 
     public void startSynchronizing() {