1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.log4j.xml;
19  
20  import org.apache.log4j.Level;
21  
22  
23  /**
24     This class introduces a new level level called TRACE. TRACE has
25     lower level than DEBUG.
26  
27   */
28  public class XLevel extends Level {
29    private static final long serialVersionUID = 7288304330257085144L;
30  
31    static public final int  TRACE_INT   = Level.DEBUG_INT - 1;
32    static public final int  LETHAL_INT  = Level.FATAL_INT + 1;
33  
34  
35    private static String TRACE_STR  = "TRACE";
36    private static String LETHAL_STR  = "LETHAL";
37  
38  
39    public static final XLevel TRACE = new XLevel(TRACE_INT, TRACE_STR, 7);
40    public static final XLevel LETHAL = new XLevel(LETHAL_INT, LETHAL_STR, 
41  						       0);
42  
43  
44    protected
45    XLevel(int level, String strLevel, int syslogEquiv) {
46      super(level, strLevel, syslogEquiv);
47    }
48  
49    /**
50       Convert the string passed as argument to a level. If the
51       conversion fails, then this method returns {@link #TRACE}. 
52    */
53    public
54    static
55    Level toLevel(String sArg) {
56      return (Level) toLevel(sArg, XLevel.TRACE);
57    }
58  
59  
60    public
61    static
62    Level toLevel(String sArg, Level defaultValue) {
63  
64      if(sArg == null) {
65        return defaultValue;
66      }
67      String stringVal = sArg.toUpperCase();
68      
69      if(stringVal.equals(TRACE_STR)) {
70        return XLevel.TRACE;
71      } else if(stringVal.equals(LETHAL_STR)) {
72        return XLevel.LETHAL;
73      }
74        
75      return Level.toLevel(sArg, (Level) defaultValue);    
76    }
77  
78  
79    public
80    static
81    Level toLevel(int i) throws  IllegalArgumentException {
82      switch(i) {
83      case TRACE_INT: return XLevel.TRACE;
84      case LETHAL_INT: return XLevel.LETHAL;
85      }
86      return Level.toLevel(i);
87    }
88  
89  }
90