]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/PlainTextWriterImpl.java
19874d55fa28df3a8e64d20665491d7ecd4b0e0d
[signal-cli] / src / main / java / org / asamk / signal / PlainTextWriterImpl.java
1 package org.asamk.signal;
2
3 import org.slf4j.helpers.MessageFormatter;
4
5 import java.io.BufferedWriter;
6 import java.io.IOException;
7 import java.io.OutputStream;
8 import java.io.OutputStreamWriter;
9 import java.io.Writer;
10
11 public final class PlainTextWriterImpl implements PlainTextWriter {
12
13 private final Writer writer;
14
15 private PlainTextWriter indentedWriter;
16
17 public PlainTextWriterImpl(final OutputStream outputStream) {
18 this.writer = new BufferedWriter(new OutputStreamWriter(outputStream));
19 }
20
21 @Override
22 public void println(String format, Object... args) throws IOException {
23 final String message = MessageFormatter.arrayFormat(format, args).getMessage();
24
25 writer.write(message);
26 writer.write(System.lineSeparator());
27 writer.flush();
28 }
29
30 @Override
31 public PlainTextWriter indentedWriter() {
32 if (indentedWriter == null) {
33 indentedWriter = new IndentedPlainTextWriter(this, writer);
34 }
35 return indentedWriter;
36 }
37
38 private static final class IndentedPlainTextWriter implements PlainTextWriter {
39
40 private final static int INDENTATION = 2;
41
42 private final String spaces = " ".repeat(INDENTATION);
43 private final PlainTextWriter plainTextWriter;
44 private final Writer writer;
45
46 private PlainTextWriter indentedWriter;
47
48 private IndentedPlainTextWriter(final PlainTextWriter plainTextWriter, final Writer writer) {
49 this.plainTextWriter = plainTextWriter;
50 this.writer = writer;
51 }
52
53 @Override
54 public void println(final String format, final Object... args) throws IOException {
55 writer.write(spaces);
56 plainTextWriter.println(format, args);
57 }
58
59 @Override
60 public PlainTextWriter indentedWriter() {
61 if (indentedWriter == null) {
62 indentedWriter = new IndentedPlainTextWriter(this, writer);
63 }
64 return indentedWriter;
65 }
66 }
67 }