]> gerrit.simantics Code Review - simantics/python.git/blob - 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
1 package org.simantics.pythonlink;
2
3 import java.io.Writer;
4
5 import org.simantics.scl.runtime.reporting.SCLReporting;
6
7 public class SCLReportingWriter extends Writer {
8         
9         StringBuilder builder = null;
10         
11         public SCLReportingWriter() {
12                 builder = new StringBuilder();
13         }
14         
15         @Override
16         public void close() {
17                 flush();
18         }
19
20         @Override
21         public void flush() {
22                 if (builder.length() > 0) {
23                         SCLReporting.print(builder.toString());
24                         builder.setLength(0);
25                 }
26         }
27
28         @Override
29         public void write(char[] buf, int off, int len) {
30                 if (len == 0) return;
31                 
32                 if (len < 0) throw new IllegalArgumentException("Negative buffer region length");
33                 if (off < 0) throw new IllegalArgumentException("Negative buffer region offset");
34                 if (off + len > buf.length) throw new IllegalArgumentException("Buffer region overflow");
35                 
36                 for (int i = 0; i < len; i++) {
37                         if (buf[off + i] == '\n') {
38                                 SCLReporting.print(builder.toString());
39                                 builder.setLength(0);
40                         }
41                         else {
42                                 builder.append(buf[off + i]);
43                         }
44                 }
45         }
46 }