X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Factions%2FCompilePGraphsAction.java;h=651f4f66b21128892a8bd0b8d595996db0f10bf1;hp=783244a6176a1c4c3be4ee9fc0e6459c375c35b0;hb=47269fe0acb894f346810417d950a1ab59cdc0ea;hpb=6060da2a6dafae679ef44bf44adfbb5ecfc091bd diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/CompilePGraphsAction.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/CompilePGraphsAction.java index 783244a61..651f4f66b 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/CompilePGraphsAction.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/CompilePGraphsAction.java @@ -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; @@ -14,8 +18,9 @@ import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.adapter.ActionFactory; import org.simantics.graph.compiler.CompilationResult; -import org.simantics.ltk.Problem; +import org.simantics.graph.compiler.internal.ltk.Problem; import org.simantics.modeling.CompilePGraphs; +import org.simantics.modeling.ui.Activator; import org.simantics.utils.ui.ExceptionUtils; /** @@ -28,43 +33,62 @@ 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(Messages.CompilePGraphsAction_CompilePGraphs) { + @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(); }; } public static class CompileUserAgent implements CompilePGraphs.UserAgent { + @Override public void reportProblems(CompilationResult result) { - class ErrorMessageDialog extends MessageDialog { - public ErrorMessageDialog(Shell shell) { - super(shell, - "Unsatisfied dependencies", null, - "The following dependencies were missing. Please import the dependencies and try again.", - MessageDialog.ERROR, new String[] { "Continue" }, 0); - } + Runnable runnable = () -> { + class ErrorMessageDialog extends MessageDialog { + public ErrorMessageDialog(Shell shell) { + super(shell, + Messages.CompilePGraphsAction_ProblemsinOntologyDefinitionFile, null, + Messages.CompilePGraphsAction_FollowingIssuesFound, + MessageDialog.ERROR, new String[] { Messages.CompilePGraphsAction_Continue }, 0); + } - @Override - protected Control createCustomArea(Composite composite) { - GridLayoutFactory.fillDefaults().applyTo(composite); + @Override + protected Control createCustomArea(Composite composite) { + GridLayoutFactory.fillDefaults().applyTo(composite); - org.eclipse.swt.widgets.List list = new org.eclipse.swt.widgets.List(composite, SWT.BORDER | SWT.READ_ONLY); - GridDataFactory.fillDefaults().grab(true, true).applyTo(list); - for (Problem problem : result.getErrors()) - list.add(problem.getLocation() + ": " + problem.getDescription() + "\n"); - for (Problem problem : result.getWarnings()) - list.add(problem.getLocation() + ": " + problem.getDescription() + "\n"); + org.eclipse.swt.widgets.List list = new org.eclipse.swt.widgets.List(composite, SWT.BORDER | SWT.READ_ONLY); + GridDataFactory.fillDefaults().grab(true, true).applyTo(list); + for (Problem problem : result.getErrors()) + list.add(problem.getLocation() + ": " + problem.getDescription() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + for (Problem problem : result.getWarnings()) + list.add(problem.getLocation() + ": " + problem.getDescription() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ - return composite; - } - } + return composite; + } + } - ErrorMessageDialog md = new ErrorMessageDialog(Display.getCurrent().getActiveShell()); - md.open(); + ErrorMessageDialog md = new ErrorMessageDialog(Display.getCurrent().getActiveShell()); + md.open(); + }; + + Display display = Display.getCurrent(); + if (display == null) + display = Display.getDefault(); + display.asyncExec(runnable); } + } }