package amidst.logging;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import javax.swing.JOptionPane;
import MoF.FinderWindow;
import amidst.gui.CrashDialog;
public class Log {
private static Object logLock = new Object();
private static HashMap<String, LogListener> listeners = new HashMap<String, LogListener>();
public static boolean isUsingAlerts = true;
public static boolean isShowingDebug = true;
static {
addListener("master", new LogRecorder());
}
public static void addListener(String name, LogListener listener) {
synchronized (logLock) {
listeners.put(name, listener);
}
}
public static void removeListener(String name) {
synchronized (logLock) {
listeners.remove(name);
}
}
public static void printTraceStack(Throwable e) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
String exceptionText = stringWriter.toString();
w(exceptionText);
}
public static void i(Object... s) {
synchronized (logLock) {
printWithTag("info", s);
if (listeners.size() != 0)
for (LogListener listener : listeners.values())
listener.info(s);
}
}
public static void debug(Object... s) {
if (!isShowingDebug)
return;
synchronized (logLock) {
printWithTag("debug", s);
if (listeners.size() != 0)
for (LogListener listener : listeners.values())
listener.debug(s);
}
}
public static void w(Object... s) {
synchronized (logLock) {
printWithTag("warning", s);
if (listeners.size() != 0)
for (LogListener listener : listeners.values())
listener.warning(s);
}
}
public static void e(Object... s) {
synchronized (logLock) {
printWithTag("error", s);
if (isUsingAlerts)
JOptionPane.showMessageDialog(null, s, "Error", JOptionPane.ERROR_MESSAGE);
if (listeners.size() != 0)
for (LogListener listener : listeners.values())
listener.error(s);
}
}
public static void crash(String message) {
crash(null, message);
}
public static void crash(Throwable e, String message) {
synchronized (logLock) {
printWithTag("crash", message);
String exceptionText = "";
if (e != null) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
exceptionText = stringWriter.toString();
printWithTag("crash", exceptionText);
}
if (listeners.size() != 0)
for (LogListener listener : listeners.values())
listener.crash(e, exceptionText, message);
new CrashDialog(message);
if (FinderWindow.instance != null)
FinderWindow.instance.dispose();
//System.exit(0);
}
}
private static void printWithTag(String tag, Object... msgs) {
System.out.print("[" + tag + "] ");
for (int i = 0; i < msgs.length; i++) {
System.out.print(msgs[i]);
System.out.print((i < msgs.length - 1) ? " " : "\n");
}
}
}