]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/CompilePGraphsAction.java
Added Simantics/PGraph SCL API for compiling shared ontologies TGs
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / actions / CompilePGraphsAction.java
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
new file mode 100644 (file)
index 0000000..783244a
--- /dev/null
@@ -0,0 +1,70 @@
+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();
+        }
+    }
+
+}