ListLogOutput.java
package io.jstach.rainbowgum.output;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
import io.jstach.rainbowgum.LogEvent;
import io.jstach.rainbowgum.LogOutput;
/**
* An output for debugging.
*/
public class ListLogOutput implements LogOutput {
private List<Entry<LogEvent, String>> events;
private volatile BiConsumer<LogEvent, String> consumer;
private ListLogOutput(List<Entry<LogEvent, String>> events, BiConsumer<LogEvent, String> consumer) {
super();
this.events = events;
this.consumer = consumer;
}
@Override
public URI uri() throws UnsupportedOperationException {
throw new UnsupportedOperationException("uri");
}
/**
* Creates a list output.
*/
public ListLogOutput() {
this(new ArrayList<>(), (e, s) -> {
});
}
/**
* Sets a consumer for testing purposes. Default is a noop.
* @param consumer callback to consume events.
*/
public void setConsumer(BiConsumer<LogEvent, String> consumer) {
this.consumer = Objects.requireNonNull(consumer);
}
@Override
public void write(LogEvent event, String s) {
events.add(Map.entry(event, s));
this.consumer.accept(event, s);
}
@Override
public void write(LogEvent event, byte[] bytes, int off, int len, ContentType contentType) {
write(event, new String(bytes, off, len, StandardCharsets.UTF_8));
}
@Override
public void flush() {
}
@Override
public void close() {
}
/**
* The arraylist that contains the logged events so far.
* @return list.
*/
public List<Entry<LogEvent, String>> events() {
return events;
}
@Override
public String toString() {
return events.stream().map(e -> e.getValue()).collect(Collectors.joining());
}
@Override
public OutputType type() {
return OutputType.MEMORY;
}
/**
* Clears the currently stored events.
*/
public void clear() {
events.clear();
}
}