Priority.java 4.18 KB
Newer Older
Matt Tucker's avatar
Matt Tucker committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
/*
 * 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);
    }
}