release 0.9.6
[debian/openrocket] / src / net / sf / openrocket / logging / LogHelper.java
diff --git a/src/net/sf/openrocket/logging/LogHelper.java b/src/net/sf/openrocket/logging/LogHelper.java
new file mode 100644 (file)
index 0000000..8ddba5b
--- /dev/null
@@ -0,0 +1,344 @@
+package net.sf.openrocket.logging;
+
+import net.sf.openrocket.util.BugException;
+
+
+/**
+ * Base class for all loggers used in OpenRocket.
+ * <p>
+ * This class contains methods for logging at various log levels, and methods
+ * which take the logging level as a parameter.  All methods may take three types
+ * of parameters:
+ * <ul>
+ *     <li><code>levels</code>         number of additional levels of the stack trace to print
+ *                                                             on the log line.  This is useful to determine from where
+ *                                                             the current method has been called.  Zero if not provided.
+ *  <li><code>message</code>   the String message (may be null).
+ *  <li><code>cause</code>             the exception that caused this log (may be null).
+ * </ul>
+ * 
+ * @author Sampo Niskanen <sampo.niskanen@iki.fi>
+ */
+public abstract class LogHelper {
+       
+       private static final DelegatorLogger delegator = new DelegatorLogger();
+       
+       /**
+        * Get the logger to be used in logging.
+        * 
+        * @return      the logger to be used in all logging.
+        */
+       public static LogHelper getInstance() {
+               return delegator;
+       }
+       
+       
+
+       public abstract void log(LogLine line);
+       
+       
+       
+       /**
+        * Log using DEBUG level.
+        * 
+        * @param message       the logged message (may be null).
+        */
+       public void debug(String message) {
+               log(createLogLine(0, LogLevel.DEBUG, message, null));
+       }
+       
+       /**
+        * Log using DEBUG level.
+        * 
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void debug(String message, Throwable cause) {
+               log(createLogLine(0, LogLevel.DEBUG, message, cause));
+       }
+       
+       /**
+        * Log using DEBUG level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        */
+       public void debug(int levels, String message) {
+               log(createLogLine(levels, LogLevel.DEBUG, message, null));
+       }
+       
+       /**
+        * Log using DEBUG level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void debug(int levels, String message, Throwable cause) {
+               log(createLogLine(levels, LogLevel.DEBUG, message, cause));
+       }
+       
+       
+       /**
+        * Log using INFO level.
+        * 
+        * @param message       the logged message (may be null).
+        */
+       public void info(String message) {
+               log(createLogLine(0, LogLevel.INFO, message, null));
+       }
+       
+       /**
+        * Log using INFO level.
+        * 
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void info(String message, Throwable cause) {
+               log(createLogLine(0, LogLevel.INFO, message, cause));
+       }
+       
+       /**
+        * Log using INFO level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        */
+       public void info(int levels, String message) {
+               log(createLogLine(levels, LogLevel.INFO, message, null));
+       }
+       
+       /**
+        * Log using INFO level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void info(int levels, String message, Throwable cause) {
+               log(createLogLine(levels, LogLevel.INFO, message, cause));
+       }
+       
+       
+       /**
+        * Log using USER level.
+        * 
+        * @param message       the logged message (may be null).
+        */
+       public void user(String message) {
+               log(createLogLine(0, LogLevel.USER, message, null));
+       }
+       
+       /**
+        * Log using USER level.
+        * 
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void user(String message, Throwable cause) {
+               log(createLogLine(0, LogLevel.USER, message, cause));
+       }
+       
+       /**
+        * Log using USER level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        */
+       public void user(int levels, String message) {
+               log(createLogLine(levels, LogLevel.USER, message, null));
+       }
+       
+       /**
+        * Log using USER level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void user(int levels, String message, Throwable cause) {
+               log(createLogLine(levels, LogLevel.USER, message, cause));
+       }
+       
+       
+       /**
+        * Log using WARN level.
+        * 
+        * @param message       the logged message (may be null).
+        */
+       public void warn(String message) {
+               log(createLogLine(0, LogLevel.WARN, message, null));
+       }
+       
+       /**
+        * Log using WARN level.
+        * 
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void warn(String message, Throwable cause) {
+               log(createLogLine(0, LogLevel.WARN, message, cause));
+       }
+       
+       /**
+        * Log using WARN level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        */
+       public void warn(int levels, String message) {
+               log(createLogLine(levels, LogLevel.WARN, message, null));
+       }
+       
+       /**
+        * Log using WARN level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void warn(int levels, String message, Throwable cause) {
+               log(createLogLine(levels, LogLevel.WARN, message, cause));
+       }
+       
+       
+       /**
+        * Log using ERROR level.
+        * 
+        * @param message       the logged message (may be null).
+        */
+       public void error(String message) {
+               log(createLogLine(0, LogLevel.ERROR, message, null));
+       }
+       
+       /**
+        * Log using ERROR level.
+        * 
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void error(String message, Throwable cause) {
+               log(createLogLine(0, LogLevel.ERROR, message, cause));
+       }
+       
+       /**
+        * Log using ERROR level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        */
+       public void error(int levels, String message) {
+               log(createLogLine(levels, LogLevel.ERROR, message, null));
+       }
+       
+       /**
+        * Log using ERROR level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void error(int levels, String message, Throwable cause) {
+               log(createLogLine(levels, LogLevel.ERROR, message, cause));
+       }
+       
+       
+       
+       /**
+        * Log using the provided log level.
+        * 
+        * @param level         the logging level.
+        * @param message       the logged message (may be null).
+        */
+       public void log(LogLevel level, String message) {
+               log(createLogLine(0, level, message, null));
+       }
+       
+       /**
+        * Log using the provided log level.
+        * 
+        * @param level         the logging level.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void log(LogLevel level, String message, Throwable cause) {
+               log(createLogLine(0, level, message, cause));
+       }
+       
+       /**
+        * Log using the provided log level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param level         the logging level.
+        * @param message       the logged message (may be null).
+        */
+       public void log(int levels, LogLevel level, String message) {
+               log(createLogLine(levels, level, message, null));
+       }
+       
+       /**
+        * Log using the provided log level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param level         the logging level.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void log(int levels, LogLevel level, String message, Throwable cause) {
+               log(createLogLine(levels, level, message, cause));
+       }
+       
+       
+       
+       /**
+        * Instantiates, logs and throws a BugException.  The message is logged at
+        * ERROR level.
+        * <p>
+        * This method never returns normally.
+        * 
+        * @param message       the message for the log and exception.
+        * @throws BugException always.
+        */
+       public void throwBugException(String message) throws BugException {
+               BugException e = new BugException(message);
+               log(createLogLine(0, LogLevel.ERROR, message, e));
+               throw e;
+       }
+       
+       /**
+        * Instantiates, logs and throws a BugException.  The message is logged at
+        * ERROR level with the specified cause.
+        * <p>
+        * This method never returns normally.
+        * 
+        * @param message       the message for the log and exception.
+        * @param cause         the causing exception (may be null).
+        * @throws BugException always.
+        */
+       public void throwBugException(String message, Throwable cause) throws BugException {
+               BugException e = new BugException(message, cause);
+               log(createLogLine(0, LogLevel.ERROR, message, cause));
+               throw e;
+       }
+       
+       
+
+       
+       /**
+        * Create a LogLine object from the provided information.  This method must be
+        * called directly from the called method in order for the trace position
+        * to be correct!
+        * 
+        * @param additionalLevels      how many additional stack trace levels to include on the line. 
+        * @param level                         the log level.
+        * @param message                       the log message (null ok).
+        * @param cause                         the log exception (null ok).
+        * 
+        * @return                                      a LogLine populated with all necessary fields.
+        */
+       private LogLine createLogLine(int additionalLevels, LogLevel level, String message, 
+                       Throwable cause) {
+               TraceException trace = new TraceException(2, 2 + additionalLevels);
+               return new LogLine(level, trace, message, cause);
+       }
+}