2004-04-22 Martin Baulig <martin@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ParameterCollection.cs
1 //
2 // System.Web.UI.WebControls/ParameterCollection.cs
3 //
4 // Author: Todd Berman <tberman@gentoo.org>
5 //
6 // (C) 2003 Todd Berman
7
8 #if NET_2_0
9
10 using System.Web.UI;
11 using System.Collections;
12 using System.Collections.Specialized;
13
14 namespace System.Web.UI.WebControls
15 {
16
17         public class ParameterCollection : StateManagedCollection
18         {
19
20                 private static Type[] _knownTypes = new Type[] {
21                                                     typeof (ControlParameter),
22                                                     typeof (CookieParameter),
23                                                     typeof (FormParameter),
24                                                     typeof (Parameter),
25                                                     typeof (QueryStringParameter),
26                                                     typeof (SessionParameter) };
27                                                     
28                 private EventHandler _parametersChanged;
29                 private KeyedList _values;
30
31
32                 public int Add (Parameter param)
33                 {
34                         return ((IList)this).Add (param);
35                 }
36
37                 public int Add (string name, string value)
38                 {
39                         return ((IList)this).Add (new Parameter (name, TypeCode.Object, value));
40                 }
41
42                 public int Add (string name, TypeCode type, string value)
43                 {
44                         return ((IList)this).Add (new Parameter (name, type, value));
45                 }
46
47                 protected override object CreateKnownType (int idx)
48                 {
49                         switch (idx) {
50                         case 0:
51                                 return new ControlParameter ();
52                                 break;
53                         case 1:
54                                 return new CookieParameter ();
55                                 break;
56                         case 2:
57                                 return new FormParameter ();
58                                 break;
59                         case 3:
60                                 return new Parameter ();
61                                 break;
62                         case 4:
63                                 return new QueryStringParameter ();
64                                 break;
65                         case 5:
66                                 return new SessionParameter ();
67                                 break;
68                         }
69
70                         throw new ArgumentOutOfRangeException ("index");
71                 }
72
73                 protected override Type[] GetKnownTypes ()
74                 {
75                         return _knownTypes;
76                 }
77
78                 public IOrderedDictionary GetValues (Control control)
79                 {
80                         if (_values == null)
81                         {
82                                 _values = new KeyedList ();
83                                 foreach (Parameter param in this)
84                                 {
85                                         string name = param.Name;
86                                         for (int i = 1; _values.Contains (name); i++)
87                                         {
88                                                 name = param.Name + i.ToString ();
89                                         }
90                                         _values.Add (name, param.ParameterValue);
91                                 }
92                         }
93                         return _values;
94                 }
95                 
96                 public void Insert (int idx, Parameter param)
97                 {
98                         ((IList)this).Insert (idx, param);
99                 }
100
101                 protected override void OnClearComplete ()
102                 {
103                         base.OnClearComplete ();
104                         OnParametersChanged (EventArgs.Empty);
105                 }
106
107                 protected override void OnInsert (int idx, object value)
108                 {
109                         base.OnInsert (idx, value);
110                         ((Parameter)value).SetOwnerCollection (this);
111                 }
112
113                 protected override void OnInsertComplete (int idx, object value)
114                 {
115                         base.OnInsertComplete (idx, value);
116                         OnParametersChanged (EventArgs.Empty);
117                 }
118
119                 protected virtual void OnParametersChanged (EventArgs e)
120                 {
121                         if (_parametersChanged != null)
122                                 _parametersChanged(this, e);
123                         
124                         _values = null;
125                 }
126
127                 protected override void OnValidate (object o)
128                 {
129                         base.OnValidate (o);
130                         
131                         if ((o is Parameter) == false)
132                                 throw new ArgumentException ("o is not a Parameter");
133                 }
134
135                 public void Remove (Parameter param)
136                 {
137                         ((IList)this).Remove (param);
138                 }
139
140                 public void RemoveAt (int idx)
141                 {
142                         ((IList)this).RemoveAt (idx);
143                 }
144
145                 [MonoTODO("eh?")]
146                 protected override void SetDirtyObject (object o)
147                 {
148                         throw new NotImplementedException ();
149                 }
150
151                 internal void CallOnParameterChanged ()
152                 {
153                         OnParametersChanged (EventArgs.Empty);
154                 }
155
156                 private int IndexOfString (string name)
157                 {
158                         for (int i = 0; i < Count; i++)
159                         {
160                                 if (((Parameter)((IList)this)[i]).Name == name)
161                                         return i;
162                         }
163                         return -1;
164                 }
165
166                 public Parameter this[int idx] {
167                         get {
168                                 return (Parameter) ((IList)this)[idx];
169                         }
170                         set {
171                                 ((IList)this)[idx] = value;
172                         }
173                 }
174
175                 public Parameter this[string name] {
176                         get {
177                                 int idx = IndexOfString (name);
178                                 if (idx == -1)
179                                         return null;
180                                 return ((Parameter) ((IList)this)[idx]);
181                         }
182                         set {
183                                 int idx = IndexOfString (name);
184                                 if (idx == -1) {
185                                         Add (value);
186                                         return;
187                                 }
188                                 ((IList)this)[idx] = value;
189                         }
190                 }
191
192                 public event EventHandler ParametersChanged {
193                         add { _parametersChanged += value; }
194                         remove { _parametersChanged -= value; }
195                 }
196         }
197 }
198
199 #endif