package cn.bran.japid.util; import java.io.File; import java.util.HashSet; import cn.bran.japid.MyTuple2; import cn.bran.japid.template.JapidTemplateBaseWithoutPlay; public class JapidFlags { // static { // System.out.println("JapidFlags.<cinit>()"); // } static private HashSet<File> versionCheckedDirs = new HashSet<File>(); static public boolean isDirVersionChecked (File dir) { return versionCheckedDirs.contains(dir); } static public void dirVersionChecked(File dir) { versionCheckedDirs.add(dir); } static enum LogLevel { debug(0), info(1), warn(2), error(3); LogLevel(int i) { this.level = i; } int level; /** * @author Bing Ran (bing.ran@gmail.com) * @param debug2 * @return */ public boolean noLowerThan(LogLevel debug2) { return level >= debug2.level; } } static LogLevel logLevel = LogLevel.warn; public static boolean verbose = true; private static StringBuffer buffer = new StringBuffer(); private static int internBufferSize; /** * @author Bing Ran (bing.ran@hotmail.com) * @param string */ public static void log(String string) { if (verbose) out(string); } public static void out(String string) { if (!string.startsWith("[Japid")) string = "[Japid]" + " " + string.trim(); System.out.println(string); } /** * @author Bing Ran (bing.ran@gmail.com) * @param string */ public static void debug(String string) { if (LogLevel.debug.noLowerThan(logLevel)) { out("[debug] " + string); } } public static void warn(String string) { if (LogLevel.warn.noLowerThan(logLevel)) { out("[warn] " + string); } } public static void setLogLevel(LogLevel l) { out("set log level to " + l); logLevel = l; } /** * @author Bing Ran (bing.ran@gmail.com) * @param string */ public static void info(String string) { if (LogLevel.info.noLowerThan(logLevel)) { out("[info] " + string); } } public static void error(String string) { if (LogLevel.error.noLowerThan(logLevel)) { out("[error] " + string); } } public static void setLogLevelDebug() { setLogLevel(LogLevel.debug); } public static void setLogLevelInfo() { setLogLevel(LogLevel.info); } public static void setLogLevelWarn() { setLogLevel(LogLevel.warn); } public static void setLogLevelError() { setLogLevel(LogLevel.error); } /** * for internal use to buffer debugging information. * * It should NOT be used by externally by end users. * * @author Bing Ran (bing.ran@gmail.com) * @param string */ public static void _log(String string) { // TODO Auto-generated method stub buffer.append(string); internBufferSize = buffer.length(); } public static void _flush() { if (internBufferSize > 0) { String string = buffer.toString(); System.out.println(string); buffer = new StringBuffer(); } } public static void logTimeLogs(JapidTemplateBaseWithoutPlay t) { if (t.isStopwatch()) { String src = t.sourceTemplate; out("The time logs for: " + src); if (t.timeLogs.size() > 0) { for (MyTuple2<String, Long> tup : t.timeLogs) { _log(tup._1() + ": " + tup._2() + "μs\n"); } } } _flush(); } /** * @author Bing Ran (bing.ran@gmail.com) */ public static void printLogLevel() { out("japid log level: " + logLevel + ". Call " + JapidFlags.class.getCanonicalName() + ".setLogLevel(LogLevel ll) to change it."); } /** * @author Bing Ran (bing.ran@gmail.com) * @param versionCheckedDirs2 */ public static void setVersionCheckedDirs(HashSet<File> versionCheckedDirs2) { versionCheckedDirs = versionCheckedDirs2; } public static HashSet<File> getVersionCheckedDirs() { return versionCheckedDirs; } }