1 // 2 // ServiceModelConfigurationElementCollection.cs 3 // 4 // Author: 5 // Atsushi Enomoto <atsushi@ximian.com> 6 // 7 // Copyright (C) 2005 Novell, Inc. http://www.novell.com 8 // 9 // Permission is hereby granted, free of charge, to any person obtaining 10 // a copy of this software and associated documentation files (the 11 // "Software"), to deal in the Software without restriction, including 12 // without limitation the rights to use, copy, modify, merge, publish, 13 // distribute, sublicense, and/or sell copies of the Software, and to 14 // permit persons to whom the Software is furnished to do so, subject to 15 // the following conditions: 16 // 17 // The above copyright notice and this permission notice shall be 18 // included in all copies or substantial portions of the Software. 19 // 20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 // 28 using System; 29 using System.Configuration; 30 31 namespace System.ServiceModel.Configuration 32 { 33 public abstract class ServiceModelConfigurationElementCollection<ConfigurationElementType> : ConfigurationElementCollection 34 where ConfigurationElementType : ConfigurationElement, new() 35 { ServiceModelConfigurationElementCollection()36 internal ServiceModelConfigurationElementCollection () 37 : base (StringComparer.Ordinal) 38 { 39 } 40 41 public ConfigurationElementType this [int index] { 42 get { return (ConfigurationElementType) base.BaseGet (index); } 43 set { 44 if (Count <= index) 45 throw new ArgumentOutOfRangeException (String.Format ("Index is out of range: {0}", index), "index"); 46 BaseRemoveAt (index); 47 BaseAdd (index, value); 48 } 49 } 50 51 public virtual ConfigurationElementType this [object key] { 52 get { 53 return (ConfigurationElementType) BaseGet (key); 54 } 55 set { 56 if (!GetElementKey(value).Equals (key)) 57 throw new ArgumentException (String.Format ("The key '{0}' does not match the element key '{1}'", key, GetElementKey(value))); 58 Add (value); 59 } 60 } 61 62 public override ConfigurationElementCollectionType CollectionType { 63 get { return ConfigurationElementCollectionType.AddRemoveClearMap; } 64 } 65 66 protected override string ElementName { 67 get { 68 return AddElementName; 69 } 70 } 71 Add(ConfigurationElementType element)72 public void Add (ConfigurationElementType element) 73 { 74 BaseAdd (element); 75 } 76 BaseAdd(ConfigurationElement element)77 protected override void BaseAdd (ConfigurationElement element) 78 { 79 BaseAdd (element, false); 80 } 81 Clear()82 public void Clear () 83 { 84 BaseClear (); 85 } 86 ContainsKey(object key)87 public virtual bool ContainsKey (object key) 88 { 89 return BaseGet (key) != null; 90 } 91 CreateNewElement()92 protected override ConfigurationElement CreateNewElement () 93 { 94 return (ConfigurationElement) Activator.CreateInstance (typeof (ConfigurationElementType), new object [0]); 95 } 96 CopyTo(ConfigurationElementType [] array, int start)97 public void CopyTo (ConfigurationElementType [] array, int start) 98 { 99 base.CopyTo (array, start); 100 } 101 IndexOf(ConfigurationElementType element)102 public int IndexOf (ConfigurationElementType element) 103 { 104 return BaseIndexOf (element); 105 } 106 Remove(ConfigurationElementType element)107 public void Remove (ConfigurationElementType element) 108 { 109 BaseRemove (GetElementKey (element)); 110 } 111 RemoveAt(int index)112 public void RemoveAt (int index) 113 { 114 BaseRemoveAt (index); 115 } 116 RemoveAt(object key)117 public void RemoveAt (object key) 118 { 119 BaseRemove (key); 120 } 121 } 122 } 123