2006-02-15 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / CompareValidator.cs
1 //
2 // System.Web.UI.WebControls.CompareValidator
3 //
4 // Authors:
5 //      Chris Toshok (toshok@novell.com)
6 //
7 // (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
29 using System.Globalization;
30 using System.ComponentModel;
31 using System.Security.Permissions;
32
33 namespace System.Web.UI.WebControls {
34         // CAS
35         [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
36         [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
37         // attributes
38 #if NET_2_0
39         [ToolboxData("<{0}:CompareValidator runat=\"server\" ErrorMessage=\"CompareValidator\"></{0}:CompareValidator>")]
40 #else
41         [ToolboxData("<{0}:CompareValidator runat=server ErrorMessage=\"CompareValidator\"></{0}:CompareValidator>")]
42 #endif
43         public class CompareValidator : BaseCompareValidator
44         {
45                 public CompareValidator ()
46                 {
47                 }
48
49                 protected override void AddAttributesToRender (HtmlTextWriter w)
50                 {
51                         if (RenderUplevel) {
52                                 if (ControlToCompare != "")
53                                         w.AddAttribute ("controltocompare", GetControlRenderID(ControlToCompare));
54                                 if (ValueToCompare != "")
55                                         w.AddAttribute ("valuetocompare", ValueToCompare);
56                                 w.AddAttribute ("operator", Operator.ToString());
57                                 w.AddAttribute("evaluationfunction", "CompareValidatorEvaluateIsValid");
58                         }
59
60                         base.AddAttributesToRender (w);
61                 }
62
63                 protected override bool ControlPropertiesValid ()
64                 {
65                         if ((this.Operator != ValidationCompareOperator.DataTypeCheck) && ControlToCompare.Length == 0 && !BaseCompareValidator.CanConvert (this.ValueToCompare, this.Type, this.CultureInvariantValues))
66             {
67                 throw new HttpException(
68                     String.Format("Unable to convert the value: {0} as a {1}", ValueToCompare, Enum.GetName(typeof(ValidationDataType), this.Type)));
69             }
70
71                         if (ControlToCompare.Length > 0) {
72                                 if (string.CompareOrdinal (ControlToCompare, ControlToValidate) == 0)
73                                         throw new HttpException (String.Format ("Control '{0}' cannot have the same value '{1}' for both ControlToValidate and ControlToCompare.", ID, ControlToCompare));
74                                 CheckControlValidationProperty (ControlToCompare, "");
75                         }
76
77                         return base.ControlPropertiesValid ();
78                 }
79
80                 protected override bool EvaluateIsValid ()
81                 {
82                         string control_value;
83
84                         control_value = GetControlValidationValue (this.ControlToValidate);
85                         if (control_value == null)
86                                 return true;
87                         control_value = control_value.Trim ();
88                         if (control_value.Length == 0)
89                                 return true;
90
91                         string compare;
92                         /* ControlToCompare takes precendence, if it's set. */
93                         compare = (ControlToCompare != "" ? GetControlValidationValue (ControlToCompare) : ValueToCompare);
94
95             return BaseCompareValidator.Compare (GetControlValidationValue (ControlToValidate), false, 
96                                 compare, this.CultureInvariantValues,
97                                                             Operator, this.Type);
98                 }
99
100                 [DefaultValue("")]
101                 [TypeConverter(typeof(System.Web.UI.WebControls.ValidatedControlConverter))]
102                 [WebSysDescription ("")]
103                 [WebCategory ("Behavior")]
104 #if NET_2_0
105                 [Themeable (false)]
106 #endif
107                 public string ControlToCompare {
108                         get { return ViewState.GetString ("ControlToCompare", String.Empty); }
109                         set { ViewState["ControlToCompare"] = value; }
110                 }
111
112                 [DefaultValue(ValidationCompareOperator.Equal)]
113                 [WebSysDescription ("")]
114                 [WebCategory ("Behavior")]
115 #if NET_2_0
116                 [Themeable (false)]
117 #endif
118                 public ValidationCompareOperator Operator {
119                         get { return (ValidationCompareOperator)ViewState.GetInt ("Operator", (int)ValidationCompareOperator.Equal); }
120                         set { ViewState ["Operator"] = (int)value; }
121                 }
122
123 #if !NET_2_0
124                 [Bindable(true)]
125 #endif
126                 [DefaultValue("")]
127                 [WebSysDescription ("")]
128                 [WebCategory ("Behavior")]
129 #if NET_2_0
130                 [Themeable (false)]
131 #endif
132                 public string ValueToCompare {
133                         get { return ViewState.GetString ("ValueToCompare", String.Empty); }
134                         set { ViewState ["ValueToCompare"] = value; }
135                 }
136         }
137 }