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