package org.asamk.signal.output; import org.slf4j.helpers.MessageFormatter; import java.io.IOException; import java.io.Writer; public final class PlainTextWriterImpl implements PlainTextWriter { private final Writer writer; private PlainTextWriter indentedWriter; public PlainTextWriterImpl(final Writer writer) { this.writer = writer; } @Override public void println(String format, Object... args) { final var message = MessageFormatter.arrayFormat(format, args).getMessage(); try { writer.write(message); writer.write(System.lineSeparator()); writer.flush(); } catch (IOException e) { throw new AssertionError(e); } } @Override public PlainTextWriter indentedWriter() { if (indentedWriter == null) { indentedWriter = new IndentedPlainTextWriter(this, writer); } return indentedWriter; } private static final class IndentedPlainTextWriter implements PlainTextWriter { private static final int INDENTATION = 2; private final String spaces = " ".repeat(INDENTATION); private final PlainTextWriter plainTextWriter; private final Writer writer; private PlainTextWriter indentedWriter; private IndentedPlainTextWriter(final PlainTextWriter plainTextWriter, final Writer writer) { this.plainTextWriter = plainTextWriter; this.writer = writer; } @Override public void println(final String format, final Object... args) { try { writer.write(spaces); } catch (IOException e) { throw new AssertionError(e); } plainTextWriter.println(format, args); } @Override public PlainTextWriter indentedWriter() { if (indentedWriter == null) { indentedWriter = new IndentedPlainTextWriter(this, writer); } return indentedWriter; } } }