jmud-0.11/
jmud-0.11/bin/
jmud-0.11/doc/
jmud-0.11/rec/
jmud-0.11/rec/mun/
jmud-0.11/rec/mun/grecia/
jmud-0.11/rec/mun/gunnar/
jmud-0.11/rec/qua/
jmud-0.11/src/bool/
jmud-0.11/src/clone/
jmud-0.11/src/integer/
jmud-0.11/src/misc/
jmud-0.11/src/string/
jmud-0.11/src/util/bit/
jmud-0.11/src/util/color/
jmud-0.11/src/util/file/
jmud-0.11/src/util/jgp/adaptor/
jmud-0.11/src/util/jgp/algorithm/
jmud-0.11/src/util/jgp/container/
jmud-0.11/src/util/jgp/functor/
jmud-0.11/src/util/jgp/interfaces/
jmud-0.11/src/util/jgp/predicate/
jmud-0.11/src/util/log/
jmud-0.11/src/util/state/
jmud-0.11/trash/
package util.log;

import java.util.NoSuchElementException;
import java.util.Enumeration;
import string.StrUtil;
import util.list.List;

public class Log {

  static private       boolean console         = false;
  static private       boolean recipients      = false;
  static private       int     defaultPriority = 0;
  static private       List    theRecipients   = new List();

    static final int L_INF = 0;
    static final int L_DBG = 1;
    static final int L_WRN = 2;
    static final int L_ERR = 3;

    static private int defaultLevel = L_INF;

    static private final String logLabels[] = {
	"",
	"(DEP) ",
	"(AVS) ",
	"(ERR) "
    };

    ////////////////////////////////
    // Metodos obsoletos (substituir por info)

    public static void log(String msg, int priority, int level) {
	msg = logLabels[level] + msg;
	if (recipients) 
	    for (Enumeration enum = theRecipients.elements(); enum.hasMoreElements(); ) {
		LogRecipient rec = (LogRecipient) enum.nextElement();
		rec.forward(msg, priority);
	    }
	if (console)
	    System.out.println(StrUtil.getDate() + " " + msg);
    }

    public static void log(String msg, int priority) {
	log(msg, priority, defaultLevel);
    }

    public static void log(String msg) {
	log(msg, defaultPriority);
    }

    //
    /////////////////////////////////

  public static void info(String msg, int priority) {
    log(msg, priority, L_INF);
  }

    public static void info(String msg, int priority, boolean dbg) {
	if (dbg)
	    info(msg, priority);
    }

  public static void info(String msg) {
    info(msg, defaultPriority);
  }

    public static void info(String msg, boolean dbg) {
	if (dbg)
	    info(msg);
    }

    public static void debug(String msg, int priority) {
	log(msg, priority, L_DBG);
    }

    public static void debug(String msg, int priority, boolean dbg) {
	if (dbg)
	    debug(msg, priority);
    }

    public static void debug(String msg) {
	debug(msg, defaultPriority);
    }

    public static void debug(String msg, boolean dbg) {
	if (dbg)
	    debug(msg);
    }

  public static void warn(String msg, int priority) {
    log(msg, priority, L_WRN);
  }

    public static void warn(String msg, int priority, boolean dbg) {
	if (dbg) 
	    warn(msg, priority);
    }

  public static void warn(String msg) {
    warn(msg, defaultPriority);
  }

    public static void warn(String msg, boolean dbg) {
	if (dbg)
	    warn(msg);
    }

  public static void err(String msg, int priority) {
      log(msg, priority, L_ERR);
  }

    public static void err(String msg, int priority, boolean dbg) {
	if (dbg)
	    err(msg, priority);
    }

  public static void err(String msg) {
    err(msg, defaultPriority);
  }

    public static void err(String msg, boolean dbg) {
	if (dbg)
	    err(msg);
    }

  public static void abort(String msg, int priority) {
    err(msg, priority);
    info("Abortando.", priority);
    System.exit(1);    
  }

    public static void abort(String msg, int priority, boolean dbg) {
	if (dbg)
	    abort(msg, priority);
    }

  public static void abort(String msg) {
    abort(msg, defaultPriority);
  }

    public static void abort(String msg, boolean dbg) {
	if (dbg)
	    abort(msg);
    }

  public static void insert(LogRecipient rec) {
    theRecipients.insert(rec);
  }

  public static void remove(LogRecipient rec) throws NoSuchElementException {
    theRecipients.remove(rec);
  }

  public static void turnConsoleOn(boolean b) {
    console = b;
  }

  public static void turnRecipientsOn(boolean b) {
    recipients = b;
  }

  public static void setDefaultPriority(int priority) {
    defaultPriority = priority;
  }
}