| /* |
| * Copyright 2008 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.core.ext; |
| |
| import java.net.URL; |
| |
| /** |
| * An interface used to log messages in deferred binding generators. |
| */ |
| public abstract class TreeLogger { |
| |
| /** |
| * Provides extra information to the user, generally details of what caused |
| * the problem or what the user should do to fix the problem. How this |
| * information is interpreted and displayed is implementation-dependent. |
| */ |
| public abstract static class HelpInfo { |
| |
| /** |
| * @return the text to use for an anchor if not null and getURL is non-null. |
| */ |
| public String getAnchorText() { |
| return null; |
| } |
| |
| /** |
| * @return the prefix to go before the link. |
| */ |
| public String getPrefix() { |
| return "More info: "; |
| } |
| |
| /** |
| * @return a URL containing extra information about the problem, or null if |
| * none. |
| */ |
| public URL getURL() { |
| return null; |
| } |
| } |
| |
| /** |
| * A type-safe enum of all possible logging severity types. |
| */ |
| @SuppressWarnings("hiding") |
| public enum Type { |
| |
| /** |
| * Logs an error. |
| */ |
| ERROR(true), |
| |
| /** |
| * Logs a warning. |
| */ |
| WARN(true), |
| |
| /** |
| * Logs information. |
| */ |
| INFO(false), |
| |
| /** |
| * Logs information related to lower-level operation. |
| */ |
| TRACE(false), |
| |
| /** |
| * Logs detailed information that could be useful during debugging. |
| */ |
| DEBUG(false), |
| |
| /** |
| * Logs extremely verbose and detailed information that is typically useful |
| * only to product implementors. |
| */ |
| SPAM(false), |
| |
| /** |
| * Logs everything -- quite a bit of stuff. |
| */ |
| ALL(false); |
| |
| /** |
| * Gets all the possible severity types as an array. |
| * |
| * @return an array of severity types |
| */ |
| public static Type[] instances() { |
| return Type.values(); |
| } |
| |
| private final boolean needsAttention; |
| |
| /** |
| * Constructs a log type with an optional parent. |
| */ |
| private Type(boolean needsAttention) { |
| this.needsAttention = needsAttention; |
| } |
| |
| /** |
| * Gets the label for this severity type. |
| * |
| * @return the label |
| */ |
| public String getLabel() { |
| return this.toString(); |
| } |
| |
| /** |
| * Determines whether this log type is of lower priority than some other log |
| * type. |
| * |
| * @param other the other log type |
| * @return <code>true</code> if this log type is lower priority |
| */ |
| public boolean isLowerPriorityThan(Type other) { |
| // Counterintuitive: higher number is lower priority. |
| return this.ordinal() > other.ordinal(); |
| } |
| |
| /** |
| * Indicates whether this severity type represents a high severity that |
| * should be highlighted for the user. |
| * |
| * @return <code>true</code> if this severity is high, otherwise |
| * <code>false</code>. |
| */ |
| public boolean needsAttention() { |
| return needsAttention; |
| } |
| } |
| |
| /** |
| * Logs an error. |
| */ |
| public static final Type ERROR = Type.ERROR; |
| |
| /** |
| * Logs a warning. |
| */ |
| public static final Type WARN = Type.WARN; |
| |
| /** |
| * Logs information. |
| */ |
| public static final Type INFO = Type.INFO; |
| |
| /** |
| * Logs information related to lower-level operation. |
| */ |
| public static final Type TRACE = Type.TRACE; |
| |
| /** |
| * Logs detailed information that could be useful during debugging. |
| */ |
| public static final Type DEBUG = Type.DEBUG; |
| |
| /** |
| * Logs extremely verbose and detailed information that is typically useful |
| * only to product implementors. |
| */ |
| public static final Type SPAM = Type.SPAM; |
| |
| /** |
| * Logs everything -- quite a bit of stuff. |
| */ |
| public static final Type ALL = Type.ALL; |
| |
| /** |
| * A valid logger that ignores all messages. Occasionally useful when calling |
| * methods that require a logger parameter. |
| */ |
| public static final TreeLogger NULL = new TreeLogger() { |
| @Override |
| public TreeLogger branch(Type type, String msg, Throwable caught, |
| HelpInfo helpInfo) { |
| return this; |
| } |
| |
| @Override |
| public boolean isLoggable(Type type) { |
| return false; |
| } |
| |
| @Override |
| public void log(Type type, String msg, Throwable caught, HelpInfo helpInfo) { |
| // nothing |
| } |
| }; |
| |
| /** |
| * Calls |
| * {@link #branch(com.google.gwt.core.ext.TreeLogger.Type, String, Throwable, com.google.gwt.core.ext.TreeLogger.HelpInfo)} |
| * with a <code>null</code> <code>caught</code> and <code>helpInfo</code>. |
| */ |
| public final TreeLogger branch(TreeLogger.Type type, String msg) { |
| return branch(type, msg, null, null); |
| } |
| |
| /** |
| * Calls |
| * {@link #branch(com.google.gwt.core.ext.TreeLogger.Type, String, Throwable, com.google.gwt.core.ext.TreeLogger.HelpInfo)} |
| * with a <code>null</code> <code>helpInfo</code>. |
| */ |
| public final TreeLogger branch(TreeLogger.Type type, String msg, |
| Throwable caught) { |
| return branch(type, msg, caught, null); |
| } |
| |
| /** |
| * Produces a branched logger, which can be used to write messages that are |
| * logically grouped together underneath the current logger. The details of |
| * how/if the resulting messages are displayed is implementation-dependent. |
| * |
| * <p> |
| * The log message supplied when branching serves two purposes. First, the |
| * message should be considered a heading for all the child messages below it. |
| * Second, the <code>type</code> of the message provides a hint as to the |
| * importance of the children below it. As an optimization, an implementation |
| * could return a "no-op" logger if messages of the specified type weren't |
| * being logged, which the implication being that all nested log messages were |
| * no more important than the level of their branch parent. |
| * </p> |
| * |
| * <p> |
| * As an example of how hierarchical logging can be used, a branched logger in |
| * a GUI could write log message as child items of a parent node in a tree |
| * control. If logging to streams, such as a text console, the branched logger |
| * could prefix each entry with a unique string and indent its text so that it |
| * could be sorted later to reconstruct a proper hierarchy. |
| * </p> |
| * |
| * @param type |
| * @param msg an optional message to log, which can be <code>null</code> if |
| * only an exception is being logged |
| * @param caught an optional exception to log, which can be <code>null</code> |
| * if only a message is being logged |
| * @param helpInfo extra information that might be used by the logger to |
| * provide extended information to the user |
| * @return an instance of {@link TreeLogger} representing the new branch of |
| * the log; may be the same instance on which this method is called |
| */ |
| public abstract TreeLogger branch(TreeLogger.Type type, String msg, |
| Throwable caught, HelpInfo helpInfo); |
| |
| /** |
| * Determines whether or not a log entry of the specified type would actually |
| * be logged. Caller use this method to avoid constructing log messages that |
| * would be thrown away. |
| */ |
| public abstract boolean isLoggable(TreeLogger.Type type); |
| |
| /** |
| * Calls {@link #log(TreeLogger.Type, String, Throwable, HelpInfo)} with a |
| * <code>null</code> <code>caught</code> and <code>helpInfo</code>. |
| */ |
| public final void log(TreeLogger.Type type, String msg) { |
| log(type, msg, null, null); |
| } |
| |
| /** |
| * Calls {@link #log(TreeLogger.Type, String, Throwable, HelpInfo)} with a |
| * <code>null</code> <code>helpInfo</code>. |
| */ |
| public final void log(TreeLogger.Type type, String msg, Throwable caught) { |
| log(type, msg, caught, null); |
| } |
| |
| /** |
| * Logs a message and/or an exception, with optional help info. It is also |
| * legal to call this method using <code>null</code> arguments for <i>both</i> |
| * <code>msg</code> and <code>caught</code>, in which case the log event |
| * can be ignored. The <code>info</code> can provide extra information to |
| * the logger; a logger may choose to ignore this info. |
| * |
| * @param type |
| * @param msg an optional message to log, which can be <code>null</code> if |
| * only an exception is being logged |
| * @param caught an optional exception to log, which can be <code>null</code> |
| * if only a message is being logged |
| * @param helpInfo extra information that might be used by the logger to |
| * provide extended information to the user |
| */ |
| public abstract void log(TreeLogger.Type type, String msg, Throwable caught, |
| HelpInfo helpInfo); |
| } |