merge -r 61110:61111
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ObjectDataSource.cs
1 //
2 // System.Web.UI.WebControls.ObjectDataSource
3 //
4 // Authors:
5 //  Lluis Sanchez Gual (lluis@novell.com)
6 //
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
8 //
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 #if NET_2_0
32 using System.Collections;
33 using System.Collections.Specialized;
34 using System.ComponentModel;
35 using System.IO;
36 using System.Security.Permissions;
37 using System.Drawing;
38
39 namespace System.Web.UI.WebControls
40 {
41         
42         [DefaultEventAttribute ("Selecting")]
43         [DefaultPropertyAttribute ("TypeName")]
44         [DesignerAttribute ("System.Web.UI.Design.WebControls.ObjectDataSourceDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
45         [ParseChildrenAttribute (true)]
46         [PersistChildrenAttribute (false)]
47         [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
48         [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
49         [ToolboxBitmap ("bitmap file goes here")]
50         public class ObjectDataSource : DataSourceControl
51         {
52                 ObjectDataSourceView defaultView;
53
54                 public ObjectDataSource ()
55                 {
56                 }
57                 
58                 public ObjectDataSource (string typeName, string selectMethod)
59                 {
60                         SelectMethod = selectMethod;
61                         TypeName = typeName;
62                 }
63                 
64                 ObjectDataSourceView DefaultView {
65                         get {
66                                 if (defaultView == null)
67                                         defaultView = new ObjectDataSourceView (this, "DefaultView", Context);
68                                 return defaultView;
69                         }
70                 }
71                 
72                 public event ObjectDataSourceStatusEventHandler Deleted {
73                         add { DefaultView.Deleted += value; }
74                         remove { DefaultView.Deleted -= value; }
75                 }
76                 
77                 public event ObjectDataSourceMethodEventHandler Deleting {
78                         add { DefaultView.Deleting += value; }
79                         remove { DefaultView.Deleting -= value; }
80                 }
81                 
82                 public event ObjectDataSourceFilteringEventHandler Filtering {
83                         add { DefaultView.Filtering += value; }
84                         remove { DefaultView.Filtering -= value; }
85                 }
86                 
87                 public event ObjectDataSourceStatusEventHandler Inserted {
88                         add { DefaultView.Inserted += value; }
89                         remove { DefaultView.Inserted -= value; }
90                 }
91                 
92                 public event ObjectDataSourceMethodEventHandler Inserting {
93                         add { DefaultView.Inserting += value; }
94                         remove { DefaultView.Inserting -= value; }
95                 }
96                 
97                 public event ObjectDataSourceObjectEventHandler ObjectCreated {
98                         add { DefaultView.ObjectCreated += value; }
99                         remove { DefaultView.ObjectCreated -= value; }
100                 }
101                 
102                 public event ObjectDataSourceObjectEventHandler ObjectCreating {
103                         add { DefaultView.ObjectCreating += value; }
104                         remove { DefaultView.ObjectCreating -= value; }
105                 }
106                 
107                 public event ObjectDataSourceDisposingEventHandler ObjectDisposing {
108                         add { DefaultView.ObjectDisposing += value; }
109                         remove { DefaultView.ObjectDisposing -= value; }
110                 }
111                 
112                 /*              public event ObjectDataSourceResolvingMethodEventHandler ResolvingMethod {
113                                 add { DefaultView.ResolvingMethod += value; }
114                                 remove { DefaultView.ResolvingMethod -= value; }
115                                 }
116                 */
117                 public event ObjectDataSourceStatusEventHandler Selected {
118                         add { DefaultView.Selected += value; }
119                         remove { DefaultView.Selected -= value; }
120                 }
121                 
122                 public event ObjectDataSourceSelectingEventHandler Selecting {
123                         add { DefaultView.Selecting += value; }
124                         remove { DefaultView.Selecting -= value; }
125                 }
126                 
127                 public event ObjectDataSourceStatusEventHandler Updated {
128                         add { DefaultView.Updated += value; }
129                         remove { DefaultView.Updated -= value; }
130                 }
131                 
132                 public event ObjectDataSourceMethodEventHandler Updating {
133                         add { DefaultView.Updating += value; }
134                         remove { DefaultView.Updating -= value; }
135                 }
136
137                 [DefaultValue (0)]
138                 [TypeConverter ("System.Web.UI.DataSourceCacheDurationConverter, " + Consts.AssemblySystem_Web)]
139                 [MonoTODO]
140                 public virtual int CacheDuration 
141                 {
142                         get {
143                                 throw new NotImplementedException ();
144                         }
145                         set {
146                                 throw new NotImplementedException ();
147                         }
148                 }
149
150                 [DefaultValue (DataSourceCacheExpiry.Absolute)]
151                 [MonoTODO]
152                 public virtual DataSourceCacheExpiry CacheExpirationPolicy 
153                 {
154                         get {
155                                 throw new NotImplementedException ();
156                         }
157                         set {
158                                 throw new NotImplementedException ();
159                         }
160                 }
161
162                 [DefaultValue ("")]
163                 [MonoTODO]
164                 public virtual string CacheKeyDependency 
165                 {
166                         get {
167                                 throw new NotImplementedException ();
168                         }
169                         set {
170                                 throw new NotImplementedException ();
171                         }
172                 }
173                 
174                 
175                 
176                 [WebCategoryAttribute ("Data")]
177                 [DefaultValueAttribute (ConflictOptions.OverwriteChanges)]
178                 public ConflictOptions ConflictDetection {
179                         get { return DefaultView.ConflictDetection; }
180                         set { DefaultView.ConflictDetection = value; }
181                 }
182
183                 [DefaultValue (false)]
184                 [MonoTODO]
185                 public bool ConvertNullToDBNull
186                 {
187                         get {
188                                 throw new NotImplementedException ();
189                         }
190                         set {
191                                 throw new NotImplementedException ();
192                         }
193                 }
194                 
195                 
196                 [WebCategoryAttribute ("Data")]
197                 [DefaultValueAttribute ("")]
198                 public string DataObjectTypeName {
199                         get { return DefaultView.DataObjectTypeName; }
200                         set { DefaultView.DataObjectTypeName = value; }
201                 }
202                 
203                 [WebCategoryAttribute ("Data")]
204                 [DefaultValueAttribute ("")]
205                 public string DeleteMethod {
206                         get { return DefaultView.DeleteMethod; }
207                         set { DefaultView.DeleteMethod = value; }
208                 }
209                 
210                 [WebCategoryAttribute ("Data")]
211                 [MergablePropertyAttribute (false)]
212                 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
213                 [DefaultValueAttribute (null)]
214                 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
215                 public ParameterCollection DeleteParameters {
216                         get { return DefaultView.DeleteParameters; }
217                 }
218
219                 [DefaultValue (false)]
220                 [MonoTODO]
221                 public virtual bool EnableCaching 
222                 {
223                         get {
224                                 throw new NotImplementedException ();
225                         }
226                         set {
227                                 throw new NotImplementedException ();
228                         }
229                 }
230                 
231                 
232                 [WebCategoryAttribute ("Paging")]
233                 [DefaultValueAttribute (false)]
234                 public bool EnablePaging {
235                         get { return DefaultView.EnablePaging; }
236                         set { DefaultView.EnablePaging = value; }
237                 }
238                 
239                 [WebCategoryAttribute ("Data")]
240                 [DefaultValueAttribute ("")]
241                 public string FilterExpression {
242                         get { return DefaultView.FilterExpression; }
243                         set { DefaultView.FilterExpression = value; }
244                 }
245                 
246                 [WebCategoryAttribute ("Data")]
247                 [MergablePropertyAttribute (false)]
248                 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
249                 [DefaultValueAttribute (null)]
250                 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
251                 public ParameterCollection FilterParameters {
252                         get { return DefaultView.FilterParameters; }
253                 }
254                 
255                 [DefaultValueAttribute ("")]
256                 [WebCategoryAttribute ("Data")]
257                 public string InsertMethod {
258                         get { return DefaultView.InsertMethod; }
259                         set { DefaultView.InsertMethod = value; }
260                 }
261                 
262                 [WebCategoryAttribute ("Data")]
263                 [MergablePropertyAttribute (false)]
264                 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
265                 [DefaultValueAttribute (null)]
266                 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
267                 public ParameterCollection InsertParameters {
268                         get { return DefaultView.InsertParameters; }
269                 }
270                 
271                 [WebCategoryAttribute ("Paging")]
272                 [DefaultValueAttribute ("maximumRows")]
273                 public string MaximumRowsParameterName {
274                         get { return DefaultView.MaximumRowsParameterName; }
275                         set { DefaultView.MaximumRowsParameterName = value; }
276                 }
277
278                 [WebCategoryAttribute ("Data")]
279                 [DefaultValueAttribute ("{0}")]
280                 public string OldValuesParameterFormatString {
281                         get { return DefaultView.OldValuesParameterFormatString; }
282                         set { DefaultView.OldValuesParameterFormatString = value; }
283                 }
284                 
285                 [WebCategoryAttribute ("Paging")]
286                 [DefaultValueAttribute ("")]
287                 public string SelectCountMethod {
288                         get { return DefaultView.SelectCountMethod; }
289                         set { DefaultView.SelectCountMethod = value; }
290                 }
291                 
292                 [DefaultValueAttribute ("")]
293                 [WebCategoryAttribute ("Data")]
294                 public string SelectMethod {
295                         get { return DefaultView.SelectMethod; }
296                         set { DefaultView.SelectMethod = value; }
297                 }
298                 
299                 [WebCategoryAttribute ("Data")]
300                 [MergablePropertyAttribute (false)]
301                 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
302                 [DefaultValueAttribute (null)]
303                 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
304                 public ParameterCollection SelectParameters {
305                         get { return DefaultView.SelectParameters; }
306                 }
307
308                 [DefaultValueAttribute ("")]
309                 [WebCategoryAttribute ("Data")]
310                 public string SortParameterName {
311                         get { return DefaultView.SortParameterName; }
312                         set { DefaultView.SortParameterName = value; }
313                 }
314
315                 [DefaultValue ("")]
316                 [MonoTODO]
317                 public virtual string SqlCacheDependency
318                 {
319                         get {
320                                 throw new NotImplementedException ();
321                         }
322                         set {
323                                 throw new NotImplementedException ();
324                         }
325                 }
326                 
327                 
328                 [WebCategoryAttribute ("Paging")]
329                 [DefaultValueAttribute ("startRowIndex")]
330                 public string StartRowIndexParameterName {
331                         get { return DefaultView.StartRowIndexParameterName; }
332                         set { DefaultView.StartRowIndexParameterName = value; }
333                 }
334                 
335                 [DefaultValueAttribute ("")]
336                 [WebCategoryAttribute ("Data")]
337                 public string TypeName {
338                         get { return DefaultView.TypeName; }
339                         set { DefaultView.TypeName = value; }
340                 }
341                 
342                 [DefaultValueAttribute ("")]
343                 [WebCategoryAttribute ("Data")]
344                 public string UpdateMethod {
345                         get { return DefaultView.UpdateMethod; }
346                         set { DefaultView.UpdateMethod = value; }
347                 }
348                 
349                 [WebCategoryAttribute ("Data")]
350                 [MergablePropertyAttribute (false)]
351                 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
352                 [DefaultValueAttribute (null)]
353                 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
354                 public ParameterCollection UpdateParameters {
355                         get { return DefaultView.UpdateParameters; }
356                 }
357                 
358                 protected override DataSourceView GetView (string viewName)
359                 {
360                         return DefaultView;
361                 }
362                 
363                 protected override ICollection GetViewNames ()
364                 {
365                         return new string [] { "DefaultView" };
366                 }
367                 
368                 public IEnumerable Select ()
369                 {
370                         return DefaultView.Select (DataSourceSelectArguments.Empty);
371                 }
372                 
373                 public int Update ()
374                 {
375                         Hashtable empty = new Hashtable ();
376                         return DefaultView.Update (empty, empty, null);
377                 }
378
379                 public int Delete ()
380                 {
381                         Hashtable empty = new Hashtable ();
382                         return DefaultView.Delete (empty, null);
383                 }
384                 
385                 public int Insert ()
386                 {
387                         Hashtable empty = new Hashtable ();
388                         return DefaultView.Insert (empty);
389                 }
390                 
391                 protected internal override void OnInit (EventArgs e)
392                 {
393                         Page.LoadComplete += OnPageLoadComplete;
394                 }
395                 
396                 void OnPageLoadComplete (object sender, EventArgs e)
397                 {
398                         DeleteParameters.UpdateValues (Context, this);
399                         FilterParameters.UpdateValues (Context, this);
400                         InsertParameters.UpdateValues (Context, this);
401                         SelectParameters.UpdateValues (Context, this);
402                         UpdateParameters.UpdateValues (Context, this);
403                 }
404                 
405                 protected override void LoadViewState (object savedState)
406                 {
407                         if (savedState == null) {
408                                 base.LoadViewState (null);
409                                 ((IStateManager)DefaultView).LoadViewState (null);
410                         } else {
411                                 Pair p = (Pair) savedState;
412                                 base.LoadViewState (p.First);
413                                 ((IStateManager)DefaultView).LoadViewState (p.Second);
414                         }
415                 }
416
417                 protected override object SaveViewState()
418                 {
419                         object baseState = base.SaveViewState ();
420                         object viewState = ((IStateManager)DefaultView).SaveViewState ();
421                         if (baseState != null || viewState != null) return new Pair (baseState, viewState);
422                         else return null;
423                 }
424
425                 protected override void TrackViewState()
426                 {
427                         ((IStateManager)DefaultView).TrackViewState ();
428                 }
429         }
430 }
431 #endif
432