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() {