001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2006-2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.loggers;
028
029 import java.util.ArrayList;
030
031 /**
032 * The category class defines a set of standard logging types that
033 * can be used to control logging output.
034 */
035 public class LogCategory
036 {
037 private static ArrayList<LogCategory> known = new ArrayList<LogCategory>();
038
039
040 /**
041 * The non-localized name of the type.
042 */
043 private final String name;
044
045 /**
046 * Create a named type.
047 * <p>
048 * Note that this constructor is "protected" to allow subclassing.
049 *
050 * @param name the name of the category, for example "MESSAGE".
051 */
052 protected LogCategory(String name) {
053 if (name == null) {
054 throw new NullPointerException();
055 }
056 this.name = name;
057
058 known.add(this);
059 }
060
061 /**
062 * Return the non-localized string name of the Level.
063 *
064 * @return non-localized name
065 */
066 public String getName() {
067 return name;
068 }
069
070 /**
071 * Retrieves the string reprentation of this log category.
072 *
073 * @return the non-localized name of the LogCategory, for example "ENTRY".
074 */
075 public final String toString() {
076 return name;
077 }
078
079 /**
080 * Parse a category name string into a LogCategory.
081 * <p>
082 * For example:
083 * <ul>
084 * <li> "EXIT"
085 * <li> "caught"
086 * </ul>
087 * @param name string to be parsed
088 * @throws IllegalArgumentException if the value is not valid.
089 * Known names are the categories defined by this class or created
090 * by this class with appropriate package access, or new levels defined
091 * or created by subclasses.
092 *
093 * @return The parsed category
094 */
095 public static synchronized LogCategory parse(String name)
096 throws IllegalArgumentException {
097 // Check that name is not null.
098 name.length();
099
100 // Look for a known Level with the given name.
101 for (int i = 0; i < known.size(); i++) {
102 LogCategory c = known.get(i);
103 if (name.equalsIgnoreCase(c.name)) {
104 return c;
105 }
106 }
107
108 // OK, we've tried everything and failed
109 throw new IllegalArgumentException("Bad category \"" + name + "\"");
110 }
111 }