]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/output/PlainTextWriterImpl.java
Clean up base package
[signal-cli] / 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 (file)
index 0000000..abf850a
--- /dev/null
@@ -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;
+        }
+    }
+}