package sk.stuba.fiit.perconik.eclipse.core.runtime; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.annotation.Nullable; import static java.lang.System.currentTimeMillis; import static sk.stuba.fiit.perconik.utilities.SmartStringBuilder.builder; public abstract class TimeHookConsole extends ForwardingPluginConsole { private static final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); protected TimeHookConsole() {} @SuppressWarnings("static-method") protected String hook(final long time, final String message) { return builder().format(format, new Date(time)).append(" ").append(message).toString(); } @Override public PluginConsole append(@Nullable final CharSequence s) { return super.append(this.hook(currentTimeMillis(), String.valueOf(s))); } @Override public PluginConsole append(@Nullable final CharSequence s, final int from, final int to) { return super.append(this.hook(currentTimeMillis(), String.valueOf(s).substring(from, to))); } @Override public PluginConsole append(final char c) { return super.append(this.hook(currentTimeMillis(), String.valueOf(c))); } @Override public void put(final @Nullable String message) { super.put(this.hook(currentTimeMillis(), String.format(String.valueOf(message)))); } @Override public void put(final String format, final Object ... args) { super.put(this.hook(currentTimeMillis(), String.format(format, args))); } @Override public void print(final @Nullable String message) { super.print(this.hook(currentTimeMillis(), String.format(String.valueOf(message)))); } @Override public void print(final String format, final Object ... args) { super.print(this.hook(currentTimeMillis(), String.format(format, args))); } }