svn path=/branches/mono-1-1-9/mcs/; revision=51212
[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.Web;
30 using System.Web.UI.WebControls;
31 using System.Globalization;
32 using System.ComponentModel;
33
34 namespace System.Web.UI.WebControls
35 {
36 #if NET_2_0
37         [ToolboxData("<{0}:CompareValidator runat=\"server\" ErrorMessage=\"CompareValidator\"></{0}:CompareValidator>")]
38 #else
39         [ToolboxData("<{0}:CompareValidator runat=server ErrorMessage=\"CompareValidator\"></{0}:CompareValidator>")]
40 #endif
41         public class CompareValidator : BaseCompareValidator
42         {
43                 public CompareValidator ()
44                 {
45                 }
46
47                 protected override void AddAttributesToRender (HtmlTextWriter w)
48                 {
49                         if (RenderUplevel) {
50                                 if (ControlToCompare != "")
51                                         w.AddAttribute ("controltocompare", ControlToCompare);
52                                 if (ValueToCompare != "")
53                                         w.AddAttribute ("valuetocompare", ValueToCompare);
54                                 w.AddAttribute ("operator", Operator.ToString());
55                                 w.AddAttribute("evaluationfunction", "CompareValidatorEvaluateIsValid");
56                         }
57
58                         base.AddAttributesToRender (w);
59                 }
60
61                 protected override bool ControlPropertiesValid ()
62                 {
63                         /* if the control id is the default "", or if we're
64                          * using the one Operator that ignores the control
65                          * id.. */
66                         if (ControlToCompare == "" || Operator == ValidationCompareOperator.DataTypeCheck)
67                                 return base.ControlPropertiesValid();
68
69                         /* attempt to locate the ControlToCompare somewhere on the page */
70                         Control control = Page.FindControl (ControlToCompare);
71                         if (control == null)
72                                 throw new HttpException (String.Format ("Unable to locate ControlToCompare with id `{0}'", ControlToCompare));
73
74                         return base.ControlPropertiesValid ();
75                 }
76
77                 protected override bool EvaluateIsValid ()
78                 {
79                         /* wtf? */
80                         if (GetControlValidationValue (ControlToValidate) == "")
81                                 return true;
82
83                         string compare;
84                         /* ControlToCompare takes precendence, if it's set. */
85                         compare = (ControlToCompare != "" ? GetControlValidationValue (ControlToCompare) : ValueToCompare);
86
87                         return BaseCompareValidator.Compare (GetControlValidationValue (ControlToValidate), compare,
88                                                              Operator,
89                                                              this.Type);
90                 }
91
92                 [DefaultValue("")]
93                 [TypeConverter(typeof(System.Web.UI.WebControls.ValidatedControlConverter))]
94                 [WebSysDescription ("")]
95                 [WebCategory ("Behavior")]
96 #if NET_2_0
97                 [Themeable (false)]
98 #endif
99                 public string ControlToCompare {
100                         get {
101                                 return ViewState.GetString ("ControlToCompare", String.Empty);
102                         }
103                         set {
104                                 ViewState["ControlToCompare"] = value;
105                         }
106                 }
107
108                 [DefaultValue(ValidationCompareOperator.Equal)]
109                 [WebSysDescription ("")]
110                 [WebCategory ("Behavior")]
111 #if NET_2_0
112                 [Themeable (false)]
113 #endif
114                 public ValidationCompareOperator Operator {
115                         get {
116                                 return (ValidationCompareOperator)ViewState.GetInt ("Operator", (int)ValidationCompareOperator.Equal);
117                         }
118
119                         set {
120                                 ViewState ["Operator"] = (int)value;
121                         }
122                 }
123
124 #if !NET_2_0
125                 [Bindable(true)]
126 #endif
127                 [DefaultValue("")]
128                 [WebSysDescription ("")]
129                 [WebCategory ("Behavior")]
130 #if NET_2_0
131                 [Themeable (false)]
132 #endif
133                 public string ValueToCompare {
134                         get {
135                                 return ViewState.GetString ("ValueToCompare", String.Empty);
136                         }
137                         set {
138                                 ViewState ["ValueToCompare"] = value;
139                         }
140                 }
141         }
142 }