signal-cli/src/main/java/org/asamk/signal/output/PlainTextWriterImpl.java
2023-11-10 14:03:13 +01:00

72 lines
2 KiB
Java

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 static final 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;
}
}
}