X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/382d8d22d0ccad109106b140616638799cc646f6..fc8b6d0fcbedd6a4c9ae394a0640e79690e28337:/src/main/java/org/asamk/signal/output/PlainTextWriterImpl.java diff --git a/src/main/java/org/asamk/signal/output/PlainTextWriterImpl.java b/src/main/java/org/asamk/signal/output/PlainTextWriterImpl.java new file mode 100644 index 00000000..abf850a9 --- /dev/null +++ b/src/main/java/org/asamk/signal/output/PlainTextWriterImpl.java @@ -0,0 +1,72 @@ +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 final static 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; + } + } +}