refactoring: Button, ImageButton and LinkButton are used insted internal DataControlB...
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / CompareValidator.cs
index 0249103d9469f590bd3b8a37e37f4bc6dd6526f2..26d89229f540503857a02f16b9925a6b159d08ce 100644 (file)
@@ -1,14 +1,10 @@
 //
-// System.Web.UI.WebControls.CompareValidator.cs
+// System.Web.UI.WebControls.CompareValidator
 //
 // Authors:
-//   Gaurav Vaish (gvaish@iitk.ac.in)
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
+//     Chris Toshok (toshok@novell.com)
 //
-// (C) Gaurav Vaish (2002)
-// (C) 2003 Andreas Nahr
-//
-
+// (C) 2005 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.Web;
-using System.Web.UI;
+using System.Globalization;
 using System.ComponentModel;
+using System.Security.Permissions;
 
-namespace System.Web.UI.WebControls
-{
-       [ToolboxData("<{0}:CompareValidator runat=\"server\""
-                    + "ErrorMessage=\"CompareValidator\"></{0}:CompareValidator>")]
-       public class CompareValidator: BaseCompareValidator
+namespace System.Web.UI.WebControls {
+       // CAS
+       [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       // attributes
+#if NET_2_0
+       [ToolboxData("<{0}:CompareValidator runat=\"server\" ErrorMessage=\"CompareValidator\"></{0}:CompareValidator>")]
+#else
+       [ToolboxData("<{0}:CompareValidator runat=server ErrorMessage=\"CompareValidator\"></{0}:CompareValidator>")]
+#endif
+       public class CompareValidator : BaseCompareValidator
        {
-               public CompareValidator()
+               public CompareValidator ()
                {
-                       // Intitalize();
                }
 
-               [DefaultValue (""), WebCategory ("Behavior")]
-               [TypeConverter (typeof (ValidatedControlConverter))]
-               [WebSysDescription ("The ID of a control that is compared.")]
-               public string ControlToCompare
+               protected override void AddAttributesToRender (HtmlTextWriter w)
                {
-                       get
-                       {
-                               object o = ViewState["ControlToCompare"];
-                               if(o!=null)
-                                       return (string)o;
-                               return String.Empty;
+                       if (RenderUplevel) {
+                               if (ControlToCompare != "")
+                                       w.AddAttribute ("controltocompare", ControlToCompare);
+                               if (ValueToCompare != "")
+                                       w.AddAttribute ("valuetocompare", ValueToCompare);
+                               w.AddAttribute ("operator", Operator.ToString());
+                               w.AddAttribute("evaluationfunction", "CompareValidatorEvaluateIsValid");
                        }
 
-                       set
-                       {
-                               ViewState["ControlToCompare"] = value;
-                       }
+                       base.AddAttributesToRender (w);
                }
 
-               [DefaultValue (typeof (ValidationCompareOperator), "Equal"), WebCategory ("Behavior")]
-               [WebSysDescription ("The operator that is used for comparison.")]
-               public ValidationCompareOperator Operator
+               protected override bool ControlPropertiesValid ()
                {
-                       get
-                       {
-                               object o = ViewState["Operator"];
-                               if(o!=null)
-                                       return (ValidationCompareOperator)o;
-                               return ValidationCompareOperator.Equal;
-                       }
-                       set
-                       {
-                               if(!System.Enum.IsDefined(typeof(ValidationCompareOperator), value))
-                                       throw new ArgumentException();
-                               ViewState["Operator"] = value;
-                       }
-               }
+                       /* if the control id is the default "", or if we're
+                        * using the one Operator that ignores the control
+                        * id.. */
+                       if (ControlToCompare == "" || Operator == ValidationCompareOperator.DataTypeCheck)
+                               return base.ControlPropertiesValid();
 
-               [DefaultValue (""), Bindable (true), WebCategory ("Behavior")]
-               [WebSysDescription ("The value that is compared to.")]
-               public string ValueToCompare
-               {
-                       get
-                       {
-                               object o = ViewState["ValueToCompare"];
-                               if(o!=null)
-                                       return (string)o;
-                               return String.Empty;
-                       }
-                       set
-                       {
-                               ViewState["ValueToCompare"] = value;
-                       }
+                       /* attempt to locate the ControlToCompare somewhere on the page */
+                       Control control = NamingContainer.FindControl (ControlToCompare);
+                       if (control == null)
+                               throw new HttpException (String.Format ("Unable to locate ControlToCompare with id `{0}'", ControlToCompare));
+
+                       return base.ControlPropertiesValid ();
                }
 
                protected override bool EvaluateIsValid ()
                {
-                       string ctrl = GetControlValidationValue (ControlToValidate);
-                       if (ctrl == null || ctrl.Length == 0)
+                       /* wtf? */
+                       if (GetControlValidationValue (ControlToValidate) == "")
                                return true;
 
-                       string cmp;
-                       if (ControlToCompare.Length > 0) {
-                               cmp = GetControlValidationValue (ControlToCompare);
-                       } else {
-                               cmp = ValueToCompare;
-                       }
+                       string compare;
+                       /* ControlToCompare takes precendence, if it's set. */
+                       compare = (ControlToCompare != "" ? GetControlValidationValue (ControlToCompare) : ValueToCompare);
 
-                       return Compare (ctrl, cmp, Operator, Type);
+                       return BaseCompareValidator.Compare (GetControlValidationValue (ControlToValidate), compare,
+                                                            Operator,
+                                                            this.Type);
                }
 
-               [MonoTODO]
-               protected override void AddAttributesToRender (HtmlTextWriter writer)
-               {
-                       base.AddAttributesToRender (writer);
+               [DefaultValue("")]
+               [TypeConverter(typeof(System.Web.UI.WebControls.ValidatedControlConverter))]
+               [WebSysDescription ("")]
+               [WebCategory ("Behavior")]
+#if NET_2_0
+               [Themeable (false)]
+#endif
+               public string ControlToCompare {
+                       get { return ViewState.GetString ("ControlToCompare", String.Empty); }
+                       set { ViewState["ControlToCompare"] = value; }
                }
 
-               [MonoTODO]
-               protected override bool ControlPropertiesValid ()
-               {
-                       return base.ControlPropertiesValid ();
+               [DefaultValue(ValidationCompareOperator.Equal)]
+               [WebSysDescription ("")]
+               [WebCategory ("Behavior")]
+#if NET_2_0
+               [Themeable (false)]
+#endif
+               public ValidationCompareOperator Operator {
+                       get { return (ValidationCompareOperator)ViewState.GetInt ("Operator", (int)ValidationCompareOperator.Equal); }
+                       set { ViewState ["Operator"] = (int)value; }
+               }
+
+#if !NET_2_0
+               [Bindable(true)]
+#endif
+               [DefaultValue("")]
+               [WebSysDescription ("")]
+               [WebCategory ("Behavior")]
+#if NET_2_0
+               [Themeable (false)]
+#endif
+               public string ValueToCompare {
+                       get { return ViewState.GetString ("ValueToCompare", String.Empty); }
+                       set { ViewState ["ValueToCompare"] = value; }
                }
        }
 }