/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.jivesoftware.util.log;
import java.io.ObjectStreamException;
import java.io.Serializable;
/**
* Class representing and holding constants for priority.
*
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
*/
public final class Priority implements Serializable {
/**
* Developer orientated messages, usually used during development of product.
*/
public final static Priority DEBUG = new Priority("DEBUG", 5);
/**
* Useful information messages such as state changes, client connection, user login etc.
*/
public final static Priority INFO = new Priority("INFO", 10);
/**
* A problem or conflict has occurred but it may be recoverable, then
* again it could be the start of the system failing.
*/
public final static Priority WARN = new Priority("WARN", 15);
/**
* A problem has occurred but it is not fatal. The system will still function.
*/
public final static Priority ERROR = new Priority("ERROR", 20);
/**
* Something caused whole system to fail. This indicates that an administrator
* should restart the system and try to fix the problem that caused the failure.
*/
public final static Priority FATAL_ERROR = new Priority("FATAL_ERROR", 25);
private final String m_name;
private final int m_priority;
/**
* Retrieve a Priority object for the name parameter.
*
* @param priority the priority name
* @return the Priority for name
*/
public static Priority getPriorityForName(final String priority) {
if (Priority.DEBUG.getName().equals(priority))
return Priority.DEBUG;
else if (Priority.INFO.getName().equals(priority))
return Priority.INFO;
else if (Priority.WARN.getName().equals(priority))
return Priority.WARN;
else if (Priority.ERROR.getName().equals(priority))
return Priority.ERROR;
else if (Priority.FATAL_ERROR.getName().equals(priority))
return Priority.FATAL_ERROR;
else
return Priority.DEBUG;
}
/**
* Private Constructor to block instantiation outside class.
*
* @param name the string name of priority
* @param priority the numerical code of priority
*/
private Priority(final String name, final int priority) {
m_name = name;
m_priority = priority;
}
/**
* Overidden string to display Priority in human readable form.
*
* @return the string describing priority
*/
public String toString() {
return "Priority[" + getName() + "/" + getValue() + "]";
}
/**
* Get numerical value associated with priority.
*
* @return the numerical value
*/
public int getValue() {
return m_priority;
}
/**
* Get name of priority.
*
* @return the priorities name
*/
public String getName() {
return m_name;
}
/**
* Test whether this priority is greater than other priority.
*
* @param other the other Priority
*/
public boolean isGreater(final Priority other) {
return m_priority > other.getValue();
}
/**
* Test whether this priority is lower than other priority.
*
* @param other the other Priority
*/
public boolean isLower(final Priority other) {
return m_priority < other.getValue();
}
/**
* Test whether this priority is lower or equal to other priority.
*
* @param other the other Priority
*/
public boolean isLowerOrEqual(final Priority other) {
return m_priority <= other.getValue();
}
/**
* Helper method that replaces deserialized object with correct singleton.
*
* @return the singleton version of object
* @throws ObjectStreamException if an error occurs
*/
private Object readResolve()
throws ObjectStreamException {
return getPriorityForName(m_name);
}
}