package sk.stuba.fiit.perconik.eclipse.core.runtime;
import java.io.PrintStream;
import javax.annotation.Nullable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import static com.google.common.base.Preconditions.checkNotNull;
final class StandardPluginConsole implements PluginConsole {
private final Plugin plugin;
private final PrintStream out;
StandardPluginConsole(final Plugin plugin, final PrintStream out) {
this.plugin = checkNotNull(plugin);
this.out = checkNotNull(out);
}
private String identifier() {
return this.plugin.getBundle().getSymbolicName();
}
private void log(final Status status) {
this.plugin.getLog().log(status);
}
public PluginConsole append(@Nullable final CharSequence s) {
this.out.append(s);
return this;
}
public PluginConsole append(@Nullable final CharSequence s, final int from, final int to) {
this.out.append(s, from, to);
return this;
}
public PluginConsole append(final char c) {
this.out.append(c);
return this;
}
public void close() {
this.out.close();
}
public void flush() {
this.out.flush();
}
public void put(@Nullable final String message) {
this.out.print(String.format(String.valueOf(message)));
}
public void put(final String format, final Object ... args) {
this.out.print(String.format(format, args));
}
public void print(@Nullable final String message) {
this.out.println(String.format(String.valueOf(message)));
}
public void print(final String format, final Object ... args) {
this.out.println(String.format(format, args));
}
public void notice(@Nullable final String message) {
this.log(new Status(IStatus.INFO, this.identifier(), String.format(String.valueOf(message))));
}
public void notice(final String format, final Object ... args) {
this.log(new Status(IStatus.INFO, this.identifier(), String.format(format, args)));
}
public void warning(@Nullable final String message) {
this.log(new Status(IStatus.WARNING, this.identifier(), String.format(String.valueOf(message))));
}
public void warning(final String format, final Object ... args) {
this.log(new Status(IStatus.WARNING, this.identifier(), String.format(format, args)));
}
public void error(@Nullable final String message) {
this.log(new Status(IStatus.ERROR, this.identifier(), String.format(String.valueOf(message))));
}
public void error(final String format, final Object ... args) {
this.log(new Status(IStatus.ERROR, this.identifier(), String.format(format, args)));
}
public void error(final Throwable failure, @Nullable final String message) {
this.log(new Status(IStatus.ERROR, this.identifier(), String.format(String.valueOf(message)), failure));
}
public void error(final Throwable failure, final String format, final Object ... args) {
this.log(new Status(IStatus.ERROR, this.identifier(), String.format(format, args), failure));
}
}