--- /dev/null
+package org.simantics.modeling.ui.actions;
+
+import java.io.IOException;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+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.modeling.CompilePGraphs;
+import org.simantics.utils.ui.ExceptionUtils;
+
+/**
+ * @author Antti Villberg
+ */
+public class CompilePGraphsAction implements ActionFactory {
+
+ @Override
+ public Runnable create(Object target) {
+ if (!(target instanceof Resource))
+ return null;
+ return () -> {
+ try {
+ CompilePGraphs.compilePGraphs((Resource) target, new CompileUserAgent());
+ } catch (IOException | DatabaseException e) {
+ ExceptionUtils.logAndShowError(e);
+ }
+ };
+ }
+
+ 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);
+ }
+
+ @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");
+
+ return composite;
+ }
+ }
+
+ ErrorMessageDialog md = new ErrorMessageDialog(Display.getCurrent().getActiveShell());
+ md.open();
+ }
+ }
+
+}