BindingFlags.Public needed here as Exception.HResult is now public in .NET 4.5. This...
[mono.git] / mcs / class / System.Web.DynamicData / System.Web.DynamicData / DynamicValidator.cs
1 //
2 // DynamicValidator.cs
3 //
4 // Author:
5 //      Atsushi Enomoto <atsushi@ximian.com>
6 //      Marek Habersack <mhabersack@novell.com>
7 //
8 // Copyright (C) 2008-2009 Novell Inc. http://novell.com
9 //
10
11 //
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
19 // 
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 // 
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 //
31 using System;
32 using System.Collections;
33 using System.Collections.Generic;
34 using System.Collections.Specialized;
35 using System.ComponentModel;
36 using System.Drawing;
37 using System.Globalization;
38 using System.Security.Permissions;
39 using System.Security.Principal;
40 using System.Web.Caching;
41 using System.Web.UI;
42 using System.Web.UI.WebControls;
43
44 namespace System.Web.DynamicData
45 {
46         [ToolboxBitmap (typeof(DynamicValidator), "DynamicValidator.ico")]
47         [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
48         [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
49         public class DynamicValidator : BaseValidator
50         {
51                 IDynamicDataSource dynamicDataSource;
52
53                 IDynamicDataSource DynamicDataSource {
54                         get {
55                                 if (dynamicDataSource == null)
56                                         dynamicDataSource = this.FindDataSourceControl ();
57
58                                 return dynamicDataSource;
59                         }
60                 }
61                 
62                 [Themeable (false)]
63                 [Browsable (false)]
64                 public MetaColumn Column { get; set; }
65
66                 [Themeable (false)]
67                 [Browsable (false)]
68                 public string ColumnName {
69                         get {
70                                 // LAMESPEC: returns Column.Name if Column is not null, String.Empty
71                                 // otherwise
72                                 MetaColumn column = Column;
73                                 return column != null ? column.Name : String.Empty;
74                         }
75                 }
76
77                 protected virtual Exception ValidationException { get; set; }           
78
79                 protected override bool ControlPropertiesValid ()
80                 {
81                         return base.ControlPropertiesValid () && DynamicDataSource != null;
82                 }
83
84                 [MonoTODO]
85                 protected override bool EvaluateIsValid ()
86                 {
87                         Exception ex = ValidationException;
88                         if (ex != null) {
89                                 ErrorMessage = HttpUtility.HtmlEncode (ex.Message);
90                                 return false;
91                         }
92
93                         string controlToValidate = ControlToValidate;
94                         if (String.IsNullOrEmpty (controlToValidate))
95                                 return true;
96
97                         GetControlValidationValue (controlToValidate);
98
99                         return true;
100                 }
101
102                 void HandleException (object sender, DynamicValidatorEventArgs args)
103                 {
104                         if (args == null)
105                                 return;
106                         
107                         ValidateException (args.Exception);
108                 }
109                 
110                 protected override void OnInit (EventArgs e)
111                 {
112                         IDynamicDataSource dds = DynamicDataSource;
113                         if (dds != null)
114                                 dds.Exception += HandleException;
115                         
116                         base.OnInit (e);
117                 }
118
119                 [MonoTODO]
120                 protected virtual void ValidateException (Exception exception)
121                 {
122                         // http://forums.asp.net/p/1287649/2478409.aspx#2478409
123                         //
124                         // The above suggests that IDynamicValidatorException.InnerExceptions is
125                         // indexed on column name
126                         //
127                         throw new NotImplementedException ();
128                 }
129         }
130 }