--- /dev/null
+package org.simantics.scl.runtime.reporting;
+
+/**
+ * <p>An interface that is used to handle printing commands from SCL
+ * such as Prelude.print. This interface is typically stored to
+ * SCLContext with name {@link SCLReportingHandler#REPORTING_HANDLER}.
+ *
+ * <p>A convenient way to call the methods of this interface in
+ * arbitrary evaluation context is to use class {@link SCLReporting}
+ *
+ * @author Hannu Niemistö
+ */
+public interface SCLReportingHandler {
+ public static final String REPORTING_HANDLER = "reportingHandler";
+
+ public void print(String text);
+ public void printError(String error);
+ public void printCommand(String command);
+ public void didWork(double amount);
+
+ public static final SCLReportingHandler DEFAULT = new AbstractSCLReportingHandler() {
+ @Override
+ public void print(String text) {
+ System.out.println(text);
+ }
+
+ @Override
+ public void printError(String error) {
+ System.err.println(error);
+ }
+ };
+
+ public static final SCLReportingHandler DEFAULT_WITHOUT_ECHO = new AbstractSCLReportingHandler() {
+ @Override
+ public void print(String text) {
+ System.out.println(text);
+ }
+
+ @Override
+ public void printError(String error) {
+ System.err.println(error);
+ }
+
+ @Override
+ public void printCommand(String command) {
+ }
+ };
+}