package com.netifera.platform.ui.console;
import org.eclipse.swt.widgets.Display;
import com.netifera.platform.api.log.ILogEntry;
import com.netifera.platform.api.log.ILogReader;
public class ConsoleLogReader implements ILogReader{
private final ConsoleView consoleView;
private final Display display;
ConsoleLogReader(ConsoleView view) {
this.consoleView = view;
this.display = consoleView.getSite().getShell().getDisplay();
}
public void log(ILogEntry entry) {
final OutputState out = new OutputState(entry);
addBanner(out);
out.println(entry.getMessage());
addException(out);
printToConsole(out);
}
public void logRaw(final String message) {
if(display.isDisposed()) {
return;
}
display.asyncExec(new Runnable() {
public void run() {
if(message.endsWith("\n"))
consoleView.addOutput(message);
else
consoleView.addOutput(message + "\n");
}
});
}
private void addBanner(OutputState out) {
final ILogEntry entry = out.getEntry();
switch(entry.getLevel()) {
case DEBUG:
out.print("DEBUG");
break;
case INFO:
out.print("INFO");
break;
case WARNING:
out.print("WARN");
break;
case ERROR:
out.print("ERROR");
break;
}
out.print(" (" + entry.getComponent() + ") : ");
}
private void addException(OutputState out) {
final ILogEntry entry = out.getEntry();
if(entry.getException() != null) {
out.printException(entry.getException());
}
}
private void printToConsole(final OutputState out) {
if(display.isDisposed()) {
return;
}
display.asyncExec(new Runnable() {
public void run() {
consoleView.addOutput(out.toString());
}
});
}
}