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