]> gerrit.simantics Code Review - simantics/python.git/blobdiff - org.simantics.pythonlink/src/org/simantics/pythonlink/SCLReportingWriter.java
Support for output and exceptions without tracebacks
[simantics/python.git] / org.simantics.pythonlink / src / org / simantics / pythonlink / SCLReportingWriter.java
diff --git a/org.simantics.pythonlink/src/org/simantics/pythonlink/SCLReportingWriter.java b/org.simantics.pythonlink/src/org/simantics/pythonlink/SCLReportingWriter.java
new file mode 100644 (file)
index 0000000..0bab712
--- /dev/null
@@ -0,0 +1,46 @@
+package org.simantics.pythonlink;
+
+import java.io.Writer;
+
+import org.simantics.scl.runtime.reporting.SCLReporting;
+
+public class SCLReportingWriter extends Writer {
+       
+       StringBuilder builder = null;
+       
+       public SCLReportingWriter() {
+               builder = new StringBuilder();
+       }
+       
+       @Override
+       public void close() {
+               flush();
+       }
+
+       @Override
+       public void flush() {
+               if (builder.length() > 0) {
+                       SCLReporting.print(builder.toString());
+                       builder.setLength(0);
+               }
+       }
+
+       @Override
+       public void write(char[] buf, int off, int len) {
+               if (len == 0) return;
+               
+               if (len < 0) throw new IllegalArgumentException("Negative buffer region length");
+               if (off < 0) throw new IllegalArgumentException("Negative buffer region offset");
+               if (off + len > buf.length) throw new IllegalArgumentException("Buffer region overflow");
+               
+               for (int i = 0; i < len; i++) {
+                       if (buf[off + i] == '\n') {
+                               SCLReporting.print(builder.toString());
+                               builder.setLength(0);
+                       }
+                       else {
+                               builder.append(buf[off + i]);
+                       }
+               }
+       }
+}