mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

boli
08.38.2007 04dfafe19f0d3687d0f0b3e51d2d5bf3d19b58bf
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
 */
 
package org.opends.server.loggers;
 
import static org.opends.server.util.ServerConstants.LOG_SEVERITY_DISABLED;
import static org.opends.server.util.ServerConstants.LOG_SEVERITY_ALL;
 
import java.util.*;
 
 
/**
 * The Level class defines a set of standard logging levels that
 * can be used to control logging output.  The logging Level objects
 * are ordered and are specified by ordered integers.  Enabling logging
 * at a given level also enables logging at all higher levels.
 */
public class LogLevel
{
  private static ArrayList<LogLevel> known =  new ArrayList<LogLevel>();
 
  /**
   * OFF is a special level that can be used to turn off logging.
   * This level is initialized to <CODE>Integer.MAX_VALUE</CODE>.
   */
  public static final LogLevel DISABLED = new LogLevel(
      LOG_SEVERITY_DISABLED,Integer.MAX_VALUE);
 
 
 
  /**
   * ALL indicates that all messages should be logged.
   * This level is initialized to <CODE>Integer.MIN_VALUE</CODE>.
   */
  public static final LogLevel ALL = new LogLevel(
      LOG_SEVERITY_ALL, Integer.MIN_VALUE);
 
 
 
  /**
   * The non-localized name of the level.
   */
  private final String name;
 
  /**
   * The integer value of the level.
   */
  private final int value;
 
 
  /**
   * Create a named Level with a given integer value.
   * <p>
   * Note that this constructor is "protected" to allow subclassing.
   *
   * @param name  the name of the Level, for example "SEVERE".
   * @param value an integer value for the level.
   */
  protected LogLevel(String name, int value) {
    if (name == null) {
      throw new NullPointerException();
    }
    this.name = name;
    this.value = value;
 
    known.add(this);
  }
 
  /**
   * Return the non-localized string name of the Level.
   *
   * @return non-localized name
   */
  public String getName() {
    return name;
  }
 
  /**
   * Retrieve the string reprentation of this log level.
   *
   * @return the non-localized name of the Level, for example "INFO".
   */
  public final String toString() {
    return name;
  }
 
  /**
   * Get the integer value for this level.  This integer value
   * can be used for efficient ordering comparisons between
   * Level objects.
   * @return the integer value for this level.
   */
  public final int intValue() {
    return value;
  }
 
  /**
   * Parse a level name string into a LogLevel.
   * <p>
   * The argument string may consist of either a level name
   * or an integer value.
   * <p>
   * For example:
   * <ul>
   * <li> "SEVERE"
   * <li> "1000"
   * </ul>
   * @param  name   string to be parsed
   * @throws IllegalArgumentException if the value is not valid.
   * Valid values are integers between <CODE>Integer.MIN_VALUE</CODE>
   * and <CODE>Integer.MAX_VALUE</CODE>, and all known level names.
   * Known names are the levels defined by this class (i.e. <CODE>FINE</CODE>,
   * <CODE>FINER</CODE>, <CODE>FINEST</CODE>), or created by this class with
   * appropriate package access, or new levels defined or created
   * by subclasses.
   *
   * @return The parsed value. Passing an integer that corresponds to a
   * known name (eg 700) will return the associated name
   * (eg <CODE>CONFIG</CODE>). Passing an integer that does not (eg 1)
   * will return a new level name initialized to that value.
   */
  public static synchronized LogLevel parse(String name)
      throws IllegalArgumentException {
    // Check that name is not null.
    name.length();
 
    // Look for a known Level with the given non-localized name.
    for (int i = 0; i < known.size(); i++) {
      LogLevel l = known.get(i);
      if (name.equalsIgnoreCase(l.name)) {
        return l;
      }
    }
 
    // Now, check if the given name is an integer.  If so,
    // first look for a Level with the given value and then
    // if necessary create one.
    try {
      int x = Integer.parseInt(name);
      for (int i = 0; i < known.size(); i++) {
        LogLevel l = known.get(i);
        if (l.value == x) {
          return l;
        }
      }
      // Create a new Level.
      return new LogLevel(name, x);
    } catch (NumberFormatException ex) {
      // Not an integer.
      // Drop through.
    }
 
    // OK, we've tried everything and failed
    throw new IllegalArgumentException("Bad level \"" + name + "\"");
  }
 
  /**
   * Compare two objects for value equality.
   *
   * @param ox the LogLevel object to test.
   * @return true if and only if the two objects have the same level value.
   */
  public boolean equals(Object ox) {
    try {
      LogLevel lx = (LogLevel)ox;
      return (lx.value == this.value);
    } catch (Exception ex) {
      return false;
    }
  }
 
  /**
   * Retrives the hashcode for this log level. It is just the integer value.
   *
   * @return the hashCode for this log level.
   */
  public int hashCode()
  {
    return this.value;
  }
 
  /**
   * Returns the string representations of all the levels. All strings will
   * be in lower case.
   * @return The string representations of the levels in lower case.
   */
  public static HashSet<String> getLevelStrings()
  {
    HashSet<String> strings = new HashSet<String>();
 
    for (int i = 0; i < known.size(); i++)
    {
      strings.add(known.get(i).name.toLowerCase());
    }
 
    return strings;
  }
}