2014-02-23 14:28:42 +01:00

292 lines
8.6 KiB
Java

package com.cradle.iitc_mobile;
import android.webkit.ConsoleMessage;
import android.webkit.ConsoleMessage.MessageLevel;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public final class Log {
private static final HashMap<ConsoleMessage.MessageLevel, Integer> CONSOLE_MAPPING;
private static final List<Receiver> RECEIVERS = new LinkedList<Log.Receiver>();
private static final Pattern URL_PATTERN;
public static final String CONSOLE_TAG = "iitcm-console";
public static final String DEFAULT_TAG = "iitcm";
public static final int ASSERT = android.util.Log.ASSERT;
public static final int DEBUG = android.util.Log.DEBUG;
public static final int ERROR = android.util.Log.ERROR;
public static final int INFO = android.util.Log.INFO;
public static final int VERBOSE = android.util.Log.VERBOSE;
public static final int WARN = android.util.Log.WARN;
static {
CONSOLE_MAPPING = new HashMap<ConsoleMessage.MessageLevel, Integer>();
CONSOLE_MAPPING.put(MessageLevel.TIP, android.util.Log.VERBOSE);
CONSOLE_MAPPING.put(MessageLevel.LOG, android.util.Log.INFO);
CONSOLE_MAPPING.put(MessageLevel.WARNING, android.util.Log.WARN);
CONSOLE_MAPPING.put(MessageLevel.ERROR, android.util.Log.ERROR);
CONSOLE_MAPPING.put(MessageLevel.DEBUG, android.util.Log.DEBUG);
URL_PATTERN = Pattern.compile("^https?://([a-z.-]+)" + Pattern.quote(IITC_FileManager.DOMAIN) + "/(.*)$",
Pattern.CASE_INSENSITIVE);
};
private static synchronized void log(final int priority, final String tag, final String msg, final Throwable tr) {
final Date now = new Date();
final Message message = new Message(now, priority, tag, msg, tr);
for (final Receiver receiver : RECEIVERS) {
receiver.handle(message);
}
}
public static void addReceiver(final Log.Receiver receiver) {
RECEIVERS.add(receiver);
}
public static void d(final String msg) {
d(DEFAULT_TAG, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.d}
*/
@Deprecated
public static void d(final String tag, final String msg) {
log(android.util.Log.DEBUG, tag, msg, null);
android.util.Log.d(tag, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.d}
*/
@Deprecated
public static void d(final String tag, final String msg, final Throwable tr) {
log(android.util.Log.DEBUG, tag, msg, tr);
android.util.Log.d(tag, msg, tr);
}
public static void d(final String msg, final Throwable tr) {
d(DEFAULT_TAG, msg, tr);
}
public static void d(final Throwable tr) {
d("Unexpected " + tr.getClass().getCanonicalName(), tr);
}
public static void e(final String msg) {
e(DEFAULT_TAG, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.e}
*/
@Deprecated
public static void e(final String tag, final String msg) {
log(android.util.Log.ERROR, tag, msg, null);
android.util.Log.e(tag, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.e}
*/
@Deprecated
public static void e(final String tag, final String msg, final Throwable tr) {
log(android.util.Log.ERROR, tag, msg, tr);
android.util.Log.e(tag, msg, tr);
}
public static void e(final String msg, final Throwable tr) {
e(DEFAULT_TAG, msg, tr);
}
public static void e(final Throwable tr) {
e("Unexpected " + tr.getClass().getCanonicalName(), tr);
}
public static void i(final String msg) {
i(DEFAULT_TAG, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.i}
*/
@Deprecated
public static void i(final String tag, final String msg) {
log(android.util.Log.INFO, tag, msg, null);
android.util.Log.i(tag, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.i}
*/
@Deprecated
public static void i(final String tag, final String msg, final Throwable tr) {
log(android.util.Log.INFO, tag, msg, tr);
android.util.Log.i(tag, msg, tr);
}
public static void i(final String msg, final Throwable tr) {
i(DEFAULT_TAG, msg, tr);
}
public static void i(final Throwable tr) {
i("Unexpected " + tr.getClass().getCanonicalName(), tr);
}
public static boolean log(final ConsoleMessage message) {
String msg = message.sourceId();
if (msg == null || "".equals(msg)) {
msg = "<no source>";
} else {
final Matcher matcher = URL_PATTERN.matcher(msg);
if (matcher.matches()) {
msg = "<" + matcher.group(1) + "/" + matcher.group(2) + ">";
}
}
msg += ":" + message.lineNumber() + ": " + message.message();
final Integer priority = CONSOLE_MAPPING.get(message.messageLevel());
if (priority != null) {
log(priority, CONSOLE_TAG, msg, null);
android.util.Log.println(priority, CONSOLE_TAG, msg);
return true;
}
Log.w(CONSOLE_TAG, "Warning: unknown message level in Logger.log(ConsoleMessage message): "
+ message.messageLevel().ordinal() + "/" + message.messageLevel().name());
return false;
}
public static int println(final int priority, final String msg) {
return println(priority, DEFAULT_TAG, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.println}
*/
@Deprecated
public static int println(final int priority, final String tag, final String msg) {
log(priority, tag, msg, null);
return android.util.Log.println(priority, tag, msg);
}
public static void removeReceiver(final Log.Receiver receiver) {
RECEIVERS.remove(receiver);
}
public static void v(final String msg) {
v(DEFAULT_TAG, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.v}
*/
@Deprecated
public static void v(final String tag, final String msg) {
log(android.util.Log.VERBOSE, tag, msg, null);
android.util.Log.v(tag, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.v}
*/
@Deprecated
public static void v(final String tag, final String msg, final Throwable tr) {
log(android.util.Log.VERBOSE, tag, msg, tr);
android.util.Log.v(tag, msg, tr);
}
public static void v(final String msg, final Throwable tr) {
v(DEFAULT_TAG, msg, tr);
}
public static void v(final Throwable tr) {
v("Unexpected " + tr.getClass().getCanonicalName(), tr);
}
public static void w(final String msg) {
w(DEFAULT_TAG, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.w}
*/
@Deprecated
public static void w(final String tag, final String msg) {
log(android.util.Log.WARN, tag, msg, null);
android.util.Log.w(tag, msg);
}
/**
* @deprecated A default tag is provided by {@link Log.w}
*/
@Deprecated
public static void w(final String tag, final String msg, final Throwable tr) {
log(android.util.Log.WARN, tag, msg, tr);
android.util.Log.w(tag, msg, tr);
}
public static void w(final String msg, final Throwable tr) {
w(DEFAULT_TAG, msg, tr);
}
public static void w(final Throwable tr) {
w("Unexpected " + tr.getClass().getCanonicalName(), tr);
}
private Log() {
// prevent instantiation
throw new UnsupportedOperationException();
}
public static class Message {
private final Date mDate;
private final String mMsg;
private final int mPriority;
private final String mTag;
private final Throwable mTr;
private Message(final Date date, final int priority, final String tag, final String msg, final Throwable tr) {
mDate = date;
mPriority = priority;
mTag = tag;
mMsg = msg;
mTr = tr;
}
public Date getDate() {
return mDate;
}
public String getMsg() {
return mMsg;
}
public int getPriority() {
return mPriority;
}
public String getTag() {
return mTag;
}
public Throwable getTr() {
return mTr;
}
}
public static interface Receiver {
void handle(Message message);
}
}