#region Apache License // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to you under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #endregion using System; using System.Collections; using System.Collections.Specialized; using log4net.Util; namespace log4net.Core { /// /// Mapping between string name and Level object /// /// /// /// Mapping between string name and object. /// This mapping is held separately for each . /// The level name is case insensitive. /// /// /// Nicko Cadell public sealed class LevelMap { #region Member Variables /// /// Mapping from level name to Level object. The /// level name is case insensitive /// private Hashtable m_mapName2Level = SystemInfo.CreateCaseInsensitiveHashtable(); #endregion /// /// Construct the level map /// /// /// /// Construct the level map. /// /// public LevelMap() { } /// /// Clear the internal maps of all levels /// /// /// /// Clear the internal maps of all levels /// /// public void Clear() { // Clear all current levels m_mapName2Level.Clear(); } /// /// Lookup a by name /// /// The name of the Level to lookup /// a Level from the map with the name specified /// /// /// Returns the from the /// map with the name specified. If the no level is /// found then null is returned. /// /// public Level this[string name] { get { if (name == null) { throw new ArgumentNullException("name"); } lock(this) { return (Level)m_mapName2Level[name]; } } } /// /// Create a new Level and add it to the map /// /// the string to display for the Level /// the level value to give to the Level /// /// /// Create a new Level and add it to the map /// /// /// public void Add(string name, int value) { Add(name, value, null); } /// /// Create a new Level and add it to the map /// /// the string to display for the Level /// the level value to give to the Level /// the display name to give to the Level /// /// /// Create a new Level and add it to the map /// /// public void Add(string name, int value, string displayName) { if (name == null) { throw new ArgumentNullException("name"); } if (name.Length == 0) { throw log4net.Util.SystemInfo.CreateArgumentOutOfRangeException("name", name, "Parameter: name, Value: ["+name+"] out of range. Level name must not be empty"); } if (displayName == null || displayName.Length == 0) { displayName = name; } Add(new Level(value, name, displayName)); } /// /// Add a Level to the map /// /// the Level to add /// /// /// Add a Level to the map /// /// public void Add(Level level) { if (level == null) { throw new ArgumentNullException("level"); } lock(this) { m_mapName2Level[level.Name] = level; } } /// /// Return all possible levels as a list of Level objects. /// /// all possible levels as a list of Level objects /// /// /// Return all possible levels as a list of Level objects. /// /// public LevelCollection AllLevels { get { lock(this) { return new LevelCollection(m_mapName2Level.Values); } } } /// /// Lookup a named level from the map /// /// the name of the level to lookup is taken from this level. /// If the level is not set on the map then this level is added /// the level in the map with the name specified /// /// /// Lookup a named level from the map. The name of the level to lookup is taken /// from the property of the /// argument. /// /// /// If no level with the specified name is found then the /// argument is added to the level map /// and returned. /// /// public Level LookupWithDefault(Level defaultLevel) { if (defaultLevel == null) { throw new ArgumentNullException("defaultLevel"); } lock(this) { Level level = (Level)m_mapName2Level[defaultLevel.Name]; if (level == null) { m_mapName2Level[defaultLevel.Name] = defaultLevel; return defaultLevel; } return level; } } } }