X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/6c33a89f82ffac98454c6f854e1c8877e3941f6a..03c30519b11e9772eecdc74f89d350bdecd20361:/src/main/java/org/asamk/signal/PlainTextWriterImpl.java diff --git a/src/main/java/org/asamk/signal/PlainTextWriterImpl.java b/src/main/java/org/asamk/signal/PlainTextWriterImpl.java new file mode 100644 index 00000000..19874d55 --- /dev/null +++ b/src/main/java/org/asamk/signal/PlainTextWriterImpl.java @@ -0,0 +1,67 @@ +package org.asamk.signal; + +import org.slf4j.helpers.MessageFormatter; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; + +public final class PlainTextWriterImpl implements PlainTextWriter { + + private final Writer writer; + + private PlainTextWriter indentedWriter; + + public PlainTextWriterImpl(final OutputStream outputStream) { + this.writer = new BufferedWriter(new OutputStreamWriter(outputStream)); + } + + @Override + public void println(String format, Object... args) throws IOException { + final String message = MessageFormatter.arrayFormat(format, args).getMessage(); + + writer.write(message); + writer.write(System.lineSeparator()); + writer.flush(); + } + + @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) throws IOException { + writer.write(spaces); + plainTextWriter.println(format, args); + } + + @Override + public PlainTextWriter indentedWriter() { + if (indentedWriter == null) { + indentedWriter = new IndentedPlainTextWriter(this, writer); + } + return indentedWriter; + } + } +}