2004-06-29 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / SqlDataSourceView.cs
1 //
2 // System.Web.UI.WebControls.SqlDataSourceView
3 //
4 // Authors:
5 //      Ben Maurer (bmaurer@users.sourceforge.net)
6 //
7 // (C) 2003 Ben Maurer
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.Text;
35 using System.Data;
36 using System.ComponentModel;
37
38 namespace System.Web.UI.WebControls {
39         public class SqlDataSourceView : DataSourceView, IStateManager {
40
41                 public SqlDataSourceView (SqlDataSource owner, string name)
42                 {
43                         this.owner = owner;
44                         this.name = name;
45                 }
46         
47                 public int Delete ()
48                 {
49                         return Delete (null);
50                 }
51                 
52                 [MonoTODO]
53                 public override int Delete (IDictionary parameters)
54                 {
55                         throw new NotImplementedException ();
56                 }
57                 
58                 public int Insert ()
59                 {
60                         return Insert (null);
61                 }
62                 
63                 [MonoTODO]
64                 public override int Insert (IDictionary values)
65                 {
66                         throw new NotImplementedException ();
67                 }
68                 
69                 [MonoTODO]
70                 public override IEnumerable Select ()
71                 {
72                         throw new NotImplementedException ();
73                 }
74                 
75                 public int Update ()
76                 {
77                         return Update (null, null);
78                 }
79                 
80                 [MonoTODO]
81                 public override int Update (IDictionary parameters, IDictionary values)
82                 {
83                         throw new NotImplementedException ();
84                 }
85
86                 void IStateManager.LoadViewState (object savedState)
87                 {
88                         LoadViewState (savedState);
89                 }
90                 
91                 object IStateManager.SaveViewState ()
92                 {
93                         return SaveViewState ();
94                 }
95                 
96                 void IStateManager.TrackViewState ()
97                 {
98                         TrackViewState ();
99                 }
100                 
101                 protected virtual void LoadViewState (object savedState)
102                 {
103                         object [] vs = savedState as object [];
104                         if (vs == null)
105                                 return;
106                         
107                         if (vs [0] != null) ((IStateManager) deleteParameters).LoadViewState (vs [0]);
108                         if (vs [1] != null) ((IStateManager) filterParameters).LoadViewState (vs [1]);
109                         if (vs [2] != null) ((IStateManager) insertParameters).LoadViewState (vs [2]);
110                         if (vs [3] != null) ((IStateManager) selectParameters).LoadViewState (vs [3]);
111                         if (vs [4] != null) ((IStateManager) updateParameters).LoadViewState (vs [4]);
112                         if (vs [5] != null) ((IStateManager) viewState).LoadViewState (vs [5]);
113                 }
114
115                 protected virtual object SaveViewState ()
116                 {
117                         object [] vs = new object [6];
118                         
119                         if (deleteParameters != null) vs [0] = ((IStateManager) deleteParameters).SaveViewState ();
120                         if (filterParameters != null) vs [1] = ((IStateManager) filterParameters).SaveViewState ();
121                         if (insertParameters != null) vs [2] = ((IStateManager) insertParameters).SaveViewState ();
122                         if (selectParameters != null) vs [3] = ((IStateManager) selectParameters).SaveViewState ();
123                         if (updateParameters != null) vs [4] = ((IStateManager) updateParameters).SaveViewState ();
124                         if (viewState != null) vs [5] = ((IStateManager) viewState).SaveViewState ();
125                                 
126                         foreach (object o in vs)
127                                 if (o != null) return vs;
128                         return null;
129                 }
130                 
131                 protected virtual void TrackViewState ()
132                 {
133                         tracking = true;
134                         
135                         if (deleteParameters != null) ((IStateManager) deleteParameters).TrackViewState ();
136                         if (filterParameters != null) ((IStateManager) filterParameters).TrackViewState ();
137                         if (insertParameters != null) ((IStateManager) insertParameters).TrackViewState ();
138                         if (selectParameters != null) ((IStateManager) selectParameters).TrackViewState ();
139                         if (updateParameters != null) ((IStateManager) updateParameters).TrackViewState ();
140                         if (viewState != null) ((IStateManager) viewState).TrackViewState ();
141                 }
142                 
143                 protected bool IsTrackingViewState {
144                         get { return tracking; }
145                 }
146                 
147                 bool IStateManager.IsTrackingViewState {
148                         get { return IsTrackingViewState; }
149                 }
150                 
151                 public string DeleteCommand {
152                         get {
153                                 string val = ViewState ["DeleteCommand"] as string;
154                                 return val == null ? "" : val;
155                         }
156                         set { ViewState ["DeleteCommand"] = value; }
157                 }
158                 
159                 public string FilterExpression {
160                         get {
161                                 string val = ViewState ["FilterExpression"] as string;
162                                 return val == null ? "" : val;
163                         }
164                         set { ViewState ["FilterExpression"] = value; }
165                 }
166                 
167                 public string InsertCommand {
168                         get {
169                                 string val = ViewState ["InsertCommand"] as string;
170                                 return val == null ? "" : val;
171                         }
172                         set { ViewState ["InsertCommand"] = value; }
173                 }
174                 
175                 public string SelectCommand {
176                         get {
177                                 string val = ViewState ["SelectCommand"] as string;
178                                 return val == null ? "" : val;
179                         }
180                         set { ViewState ["SelectCommand"] = value; }
181                 }
182                 
183                 public string UpdateCommand {
184                         get {
185                                 string val = ViewState ["UpdateCommand"] as string;
186                                 return val == null ? "" : val;
187                         }
188                         set { ViewState ["UpdateCommand"] = value; }
189                 }
190                 
191                 public override string SortExpression {
192                         get {
193                                 string val = ViewState ["SortExpression"] as string;
194                                 return val == null ? "" : val;
195                         }
196                         set { ViewState ["SortExpression"] = value; }
197                 }
198                 
199                 public override bool CanDelete {
200                         get { return DeleteCommand != ""; }
201                 }
202                 
203                 public override bool CanInsert {
204                         get { return UpdateCommand != ""; }
205                 }
206                 
207                 public override bool CanSort {
208                         get { return owner.DataSourceMode == SqlDataSourceMode.DataSet; }
209                 }
210                 
211                 public override bool CanUpdate {
212                         get { return UpdateCommand != ""; }
213                 }
214         
215                 EventHandlerList events;
216                 protected EventHandlerList Events {
217                         get {
218                                 if (events == null)
219                                         events = new EventHandlerList ();
220                                 
221                                 return events;
222                         }
223                 }
224
225                 void ParametersChanged (object source, EventArgs args)
226                 {
227                         OnDataSourceViewChanged (EventArgs.Empty);
228                 }
229                 
230                 ParameterCollection GetParameterCollection (ref ParameterCollection output)
231                 {
232                         if (output != null)
233                                 return output;
234                         
235                         output = new ParameterCollection ();
236                         output.ParametersChanged += new EventHandler (ParametersChanged);
237                         
238                         if (IsTrackingViewState)
239                                 ((IStateManager) output).TrackViewState ();
240                         
241                         return output;
242                 }
243                 
244                 public ParameterCollection DeleteParameters {
245                         get { return GetParameterCollection (ref deleteParameters); }
246                 }
247                 
248                 public ParameterCollection FilterParameters {
249                         get { return GetParameterCollection (ref filterParameters); }
250                 }
251                 
252                 public ParameterCollection InsertParameters {
253                         get { return GetParameterCollection (ref insertParameters); }
254                 }
255                 
256                 public ParameterCollection SelectParameters {
257                         get { return GetParameterCollection (ref selectParameters); }
258                 }
259                 
260                 public ParameterCollection UpdateParameters {
261                         get { return GetParameterCollection (ref updateParameters); }
262                 }
263                 
264                 
265                 public override string Name {
266                         get { return name; }
267                 }
268                 
269                 protected virtual string ParameterPrefix {
270                         get { return "@"; }
271                 }
272
273                 StateBag viewState;
274                 protected StateBag ViewState {
275                         get {
276                                 if (viewState != null)
277                                         return viewState;
278                                 
279                                 viewState = new StateBag ();
280                                 if (IsTrackingViewState)
281                                         viewState.TrackViewState ();
282                                 
283                                 return viewState;
284                         }
285                 }
286                         
287                 ParameterCollection deleteParameters;
288                 ParameterCollection filterParameters;
289                 ParameterCollection insertParameters;
290                 ParameterCollection selectParameters;
291                 ParameterCollection updateParameters;
292
293                 bool tracking;
294         
295                 string name;
296                 SqlDataSource owner;
297                 
298                 static readonly object EventDataSourceViewChanged = new object ();
299                                 
300                 protected virtual void OnDataSourceViewChanged (EventArgs e)
301                 {
302                         if (events == null) return;
303                         EventHandler h = events [EventDataSourceViewChanged] as EventHandler;
304                         if (h != null)
305                                 h (this, e);
306                 }
307                 
308                 public event EventHandler DataSourceViewChanged {
309                         add { Events.AddHandler (EventDataSourceViewChanged, value); }
310                         remove { Events.RemoveHandler (EventDataSourceViewChanged, value); }
311                 }
312
313                 #region OnDelete
314                 static readonly object EventDeleted = new object ();
315                 protected virtual void OnDeleted (SqlDataSourceStatusEventArgs e)
316                 {
317                         if (events == null) return;
318                         SqlDataSourceStatusEventHandler h = events [EventDeleted] as SqlDataSourceStatusEventHandler;
319                         if (h != null)
320                                 h (this, e);
321                 }
322                 
323                 public event SqlDataSourceStatusEventHandler Deleted {
324                         add { Events.AddHandler (EventDeleted, value); }
325                         remove { Events.RemoveHandler (EventDeleted, value); }
326                 }
327                 
328                 static readonly object EventDeleting = new object ();
329                 protected virtual void OnDeleting (SqlDataSourceCommandEventArgs e)
330                 {
331                         if (events == null) return;
332                         SqlDataSourceCommandEventHandler h = events [EventDeleting] as SqlDataSourceCommandEventHandler;
333                         if (h != null)
334                                 h (this, e);
335                 }
336                 public event SqlDataSourceCommandEventHandler Deleting {
337                         add { Events.AddHandler (EventDeleting, value); }
338                         remove { Events.RemoveHandler (EventDeleting, value); }
339                 }
340                 #endregion
341                 
342                 #region OnInsert
343                 static readonly object EventInserted = new object ();
344                 protected virtual void OnInserted (SqlDataSourceStatusEventArgs e)
345                 {
346                         if (events == null) return;
347                         SqlDataSourceStatusEventHandler h = events [EventInserted] as SqlDataSourceStatusEventHandler;
348                         if (h != null)
349                                 h (this, e);
350                 }
351                 
352                 public event SqlDataSourceStatusEventHandler Inserted {
353                         add { Events.AddHandler (EventInserted, value); }
354                         remove { Events.RemoveHandler (EventInserted, value); }
355                 }
356                 
357                 static readonly object EventInserting = new object ();
358                 protected virtual void OnInserting (SqlDataSourceCommandEventArgs e)
359                 {
360                         if (events == null) return;
361                         SqlDataSourceCommandEventHandler h = events [EventInserting] as SqlDataSourceCommandEventHandler;
362                         if (h != null)
363                                 h (this, e);
364                 }
365                 public event SqlDataSourceCommandEventHandler Inserting {
366                         add { Events.AddHandler (EventInserting, value); }
367                         remove { Events.RemoveHandler (EventInserting, value); }
368                 }
369                 #endregion
370                 
371                 #region OnSelect
372                 static readonly object EventSelected = new object ();
373                 protected virtual void OnSelected (SqlDataSourceStatusEventArgs e)
374                 {
375                         if (events == null) return;
376                         SqlDataSourceStatusEventHandler h = events [EventSelected] as SqlDataSourceStatusEventHandler;
377                         if (h != null)
378                                 h (this, e);
379                 }
380                 
381                 public event SqlDataSourceStatusEventHandler Selected {
382                         add { Events.AddHandler (EventSelected, value); }
383                         remove { Events.RemoveHandler (EventSelected, value); }
384                 }
385                 
386                 static readonly object EventSelecting = new object ();
387                 protected virtual void OnSelecting (SqlDataSourceCommandEventArgs e)
388                 {
389                         if (events == null) return;
390                         SqlDataSourceCommandEventHandler h = events [EventSelecting] as SqlDataSourceCommandEventHandler;
391                         if (h != null)
392                                 h (this, e);
393                 }
394                 public event SqlDataSourceCommandEventHandler Selecting {
395                         add { Events.AddHandler (EventSelecting, value); }
396                         remove { Events.RemoveHandler (EventSelecting, value); }
397                 }
398                 #endregion
399                 
400                 #region OnUpdate
401                 static readonly object EventUpdated = new object ();
402                 protected virtual void OnUpdated (SqlDataSourceStatusEventArgs e)
403                 {
404                         if (events == null) return;
405                         SqlDataSourceStatusEventHandler h = events [EventUpdated] as SqlDataSourceStatusEventHandler;
406                         if (h != null)
407                                 h (this, e);
408                 }
409                 
410                 public event SqlDataSourceStatusEventHandler Updated {
411                         add { Events.AddHandler (EventUpdated, value); }
412                         remove { Events.RemoveHandler (EventUpdated, value); }
413                 }
414                 
415                 static readonly object EventUpdating = new object ();
416                 protected virtual void OnUpdating (SqlDataSourceCommandEventArgs e)
417                 {
418                         if (events == null) return;
419                         SqlDataSourceCommandEventHandler h = events [EventUpdating] as SqlDataSourceCommandEventHandler;
420                         if (h != null)
421                                 h (this, e);
422                 }
423                 public event SqlDataSourceCommandEventHandler Updating {
424                         add { Events.AddHandler (EventUpdating, value); }
425                         remove { Events.RemoveHandler (EventUpdating, value); }
426                 }
427                 #endregion
428         }
429         
430 }
431 #endif
432