]> gerrit.simantics Code Review - simantics/python.git/blobdiff - org.simantics.pythonlink/src/org/simantics/pythonlink/Python.java
Initial commit of Python Integration feature.
[simantics/python.git] / org.simantics.pythonlink / src / org / simantics / pythonlink / Python.java
diff --git a/org.simantics.pythonlink/src/org/simantics/pythonlink/Python.java b/org.simantics.pythonlink/src/org/simantics/pythonlink/Python.java
new file mode 100644 (file)
index 0000000..af5c9e2
--- /dev/null
@@ -0,0 +1,39 @@
+package org.simantics.pythonlink;\r
+\r
+import org.simantics.scl.runtime.SCLContext;\r
+import org.simantics.scl.runtime.function.Function;\r
+import org.simantics.scl.runtime.tuple.Tuple0;\r
+\r
+public class Python {\r
+    private static final String PYTHON_CONTEXT = "Simantics/Python/Python";\r
+\r
+    public static PythonContext openPythonContext() {\r
+        return new PythonContext();\r
+    }\r
+    \r
+    @SuppressWarnings( { "unchecked", "rawtypes" } )\r
+    public static Object runPython(Function f) {\r
+        SCLContext sclContext = SCLContext.getCurrent();\r
+        Object oldContext = sclContext.get(PYTHON_CONTEXT);\r
+        try (PythonContext newContext = openPythonContext()) {\r
+            sclContext.put(PYTHON_CONTEXT, newContext);\r
+            return f.apply(Tuple0.INSTANCE);\r
+        }\r
+        finally {\r
+            sclContext.put(PYTHON_CONTEXT, oldContext);\r
+        }\r
+    }\r
+    \r
+    @SuppressWarnings( { "unchecked", "rawtypes" } )\r
+    public static Object runWithPythonContext(PythonContext context, Function f) {\r
+        SCLContext sclContext = SCLContext.getCurrent();\r
+        Object oldContext = sclContext.get(PYTHON_CONTEXT);\r
+        try {\r
+            sclContext.put(PYTHON_CONTEXT, context);\r
+            return f.apply(Tuple0.INSTANCE);\r
+        }\r
+        finally {\r
+            sclContext.put(PYTHON_CONTEXT, oldContext);\r
+        }\r
+    }    \r
+}\r