001: /* ====================================================================
002: * The Apache Software License, Version 1.1
003: *
004: * Copyright (c) 1997-2003 The Apache Software Foundation. All rights
005: * reserved.
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by the
022: * Apache Software Foundation (http://www.apache.org/)."
023: * Alternately, this acknowledgment may appear in the software
024: * itself, if and wherever such third-party acknowledgments
025: * normally appear.
026: *
027: * 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
028: * must not be used to endorse or promote products derived from this
029: * software without prior written permission. For written
030: * permission, please contact apache@apache.org.
031: *
032: * 5. Products derived from this software may not be called "Apache",
033: * nor may "Apache" appear in their name, without prior written
034: * permission of the Apache Software Foundation.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
040: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the Apache Software Foundation. For more
052: * information on the Apache Software Foundation, please see
053: * <http://www.apache.org/>.
054: */
055: package org.apache.log;
056:
057: import java.io.Serializable;
058:
059: /**
060: * Class representing and holding constants for priority.
061: *
062: * @author <a href="mailto:peter@apache.org">Peter Donald</a>
063: */
064: public final class Priority implements Serializable {
065: /**
066: * Developer orientated messages, usually used during development of product.
067: */
068: public static final Priority DEBUG = new Priority("DEBUG", 5);
069:
070: /**
071: * Useful information messages such as state changes, client connection, user login etc.
072: */
073: public static final Priority INFO = new Priority("INFO", 10);
074:
075: /**
076: * A problem or conflict has occurred but it may be recoverable, then
077: * again it could be the start of the system failing.
078: */
079: public static final Priority WARN = new Priority("WARN", 15);
080:
081: /**
082: * A problem has occurred but it is not fatal. The system will still function.
083: */
084: public static final Priority ERROR = new Priority("ERROR", 20);
085:
086: /**
087: * Something caused whole system to fail. This indicates that an administrator
088: * should restart the system and try to fix the problem that caused the failure.
089: */
090: public static final Priority FATAL_ERROR = new Priority(
091: "FATAL_ERROR", 25);
092:
093: /**
094: * Do not log anything.
095: */
096: public static final Priority NONE = new Priority("NONE",
097: Integer.MAX_VALUE);
098:
099: private final String m_name;
100: private final int m_priority;
101:
102: /**
103: * Retrieve a Priority object for the name parameter.
104: *
105: * @param priority the priority name
106: * @return the Priority for name
107: */
108: public static Priority getPriorityForName(final String priority) {
109: if (Priority.DEBUG.getName().equals(priority)) {
110: return Priority.DEBUG;
111: } else if (Priority.INFO.getName().equals(priority)) {
112: return Priority.INFO;
113: } else if (Priority.WARN.getName().equals(priority)) {
114: return Priority.WARN;
115: } else if (Priority.ERROR.getName().equals(priority)) {
116: return Priority.ERROR;
117: } else if (Priority.FATAL_ERROR.getName().equals(priority)) {
118: return Priority.FATAL_ERROR;
119: } else if (Priority.NONE.getName().equals(priority)) {
120: return Priority.NONE;
121: } else {
122: return Priority.DEBUG;
123: }
124: }
125:
126: /**
127: * Private Constructor to block instantiation outside class.
128: *
129: * @param name the string name of priority
130: * @param priority the numerical code of priority
131: */
132: private Priority(final String name, final int priority) {
133: if (null == name) {
134: throw new NullPointerException("name");
135: }
136:
137: m_name = name;
138: m_priority = priority;
139: }
140:
141: /**
142: * Overidden string to display Priority in human readable form.
143: *
144: * @return the string describing priority
145: */
146: public String toString() {
147: return "Priority[" + getName() + "/" + getValue() + "]";
148: }
149:
150: /**
151: * Get numerical value associated with priority.
152: *
153: * @return the numerical value
154: */
155: public int getValue() {
156: return m_priority;
157: }
158:
159: /**
160: * Get name of priority.
161: *
162: * @return the priorities name
163: */
164: public String getName() {
165: return m_name;
166: }
167:
168: /**
169: * Test whether this priority is greater than other priority.
170: *
171: * @param other the other Priority
172: * @return TRUE if the priority is greater else FALSE
173: */
174: public boolean isGreater(final Priority other) {
175: return m_priority > other.getValue();
176: }
177:
178: /**
179: * Test whether this priority is lower than other priority.
180: *
181: * @param other the other Priority
182: * @return TRUE if the priority is lower else FALSE
183: */
184: public boolean isLower(final Priority other) {
185: return m_priority < other.getValue();
186: }
187:
188: /**
189: * Test whether this priority is lower or equal to other priority.
190: *
191: * @param other the other Priority
192: * @return TRUE if the priority is lower or equal else FALSE
193: */
194: public boolean isLowerOrEqual(final Priority other) {
195: return m_priority <= other.getValue();
196: }
197:
198: /**
199: * Helper method that replaces deserialized object with correct singleton.
200: *
201: * @return the singleton version of object
202: */
203: private Object readResolve() {
204: return getPriorityForName(m_name);
205: }
206: }
|