]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/CompilePGraphsAction.java
Progress monitoring to users Pgraph compilation
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / actions / CompilePGraphsAction.java
index 783244a6176a1c4c3be4ee9fc0e6459c375c35b0..eda0228f9049d08ab1fba7e8ea0e5983d603de48 100644 (file)
@@ -2,6 +2,10 @@ package org.simantics.modeling.ui.actions;
 
 import java.io.IOException;
 
+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.jface.dialogs.MessageDialog;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
@@ -16,6 +20,7 @@ import org.simantics.db.layer0.adapter.ActionFactory;
 import org.simantics.graph.compiler.CompilationResult;
 import org.simantics.ltk.Problem;
 import org.simantics.modeling.CompilePGraphs;
+import org.simantics.modeling.ui.Activator;
 import org.simantics.utils.ui.ExceptionUtils;
 
 /**
@@ -28,11 +33,21 @@ public class CompilePGraphsAction implements ActionFactory {
         if (!(target instanceof Resource))
             return null;
         return () -> {
-            try {
-                CompilePGraphs.compilePGraphs((Resource) target, new CompileUserAgent());
-            } catch (IOException | DatabaseException e) {
-                ExceptionUtils.logAndShowError(e);
-            }
+            Job job = new Job("Compile PGraphs") {
+                @Override
+                protected IStatus run(IProgressMonitor monitor) {
+                    try {
+                        CompilePGraphs.compilePGraphs((Resource) target, new CompileUserAgent(), monitor);
+                        return Status.OK_STATUS;
+                    } catch (IOException | DatabaseException e) {
+                        ExceptionUtils.logAndShowError(e);
+                        return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage());
+                    } finally {
+                        monitor.done();
+                    }
+                }
+            };
+            job.schedule();
         };
     }