copied mono-api-diff.cs from mono-2-2 branch so new patch can be applied and history...
[mono.git] / mcs / class / System.Data / System.Data / Constraint.cs
index 09e174787cf0d43e98ee1527f84859054bf288f5..6ca051632d062471ca710c14788a03b7c2794926 100644 (file)
@@ -5,7 +5,7 @@
 //     Franklin Wise <gracenote@earthlink.net>
 //     Daniel Morgan
 //      Tim Coleman (tim@timcoleman.com)
-//   
+//
 //
 // (C) Ximian, Inc. 2002
 // Copyright (C) Tim Coleman, 2002
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -45,16 +45,22 @@ namespace System.Data {
        [Serializable]
        internal delegate void DelegateConstraintNameChange (object sender, string newName);
 
-       [DefaultProperty ("ConstraintName")]    
+       [DefaultProperty ("ConstraintName")]
 #if !NET_2_0
        [Serializable]
 #endif
        [TypeConverterAttribute (typeof (ConstraintConverter))]
-       public abstract class Constraint 
-       {
-               internal event DelegateConstraintNameChange BeforeConstraintNameChange;
+       public abstract class Constraint {
+               static readonly object beforeConstraintNameChange = new object ();
+
+               EventHandlerList events = new EventHandlerList ();
+
+               internal event DelegateConstraintNameChange BeforeConstraintNameChange {
+                       add { events.AddHandler (beforeConstraintNameChange, value); }
+                       remove { events.RemoveHandler (beforeConstraintNameChange, value); }
+               }
 
-               //if constraintName is not set then a name is 
+               //if constraintName is not set then a name is
                //created when it is added to
                //the ConstraintCollection
                //it can not be set to null, empty or duplicate
@@ -69,10 +75,10 @@ namespace System.Data {
 
                DataSet dataSet;
 
-               protected Constraint () 
+               protected Constraint ()
                {
                        dataSet = null;
-                       _properties = new PropertyCollection();
+                       _properties = new PropertyCollection ();
                }
 
                [CLSCompliant (false)]
@@ -86,13 +92,13 @@ namespace System.Data {
 #endif
                [DefaultValue ("")]
                public virtual string ConstraintName {
-                       get{ return _constraintName == null ? "" : _constraintName; } 
-                       set{
+                       get { return _constraintName == null ? "" : _constraintName; }
+                       set {
                                //This should only throw an exception when it
                                //is a member of a ConstraintCollection which
                                //means we should let the ConstraintCollection
                                //handle exceptions when this value changes
-                               _onConstraintNameChange(value);
+                               _onConstraintNameChange (value);
                                _constraintName = value;
                        }
                }
@@ -104,9 +110,6 @@ namespace System.Data {
 #endif
                public PropertyCollection ExtendedProperties {
                        get { return _properties; }
-#if NET_2_0
-                       internal set { _properties = value; }
-#endif
                }
 
 #if !NET_2_0
@@ -117,25 +120,25 @@ namespace System.Data {
                }
 
                internal ConstraintCollection ConstraintCollection {
-                       get{ return _constraintCollection; }
-                       set{ _constraintCollection = value; }
+                       get { return _constraintCollection; }
+                       set { _constraintCollection = value; }
                }
-               
+
                private void _onConstraintNameChange (string newName)
                {
-                       if (null != BeforeConstraintNameChange)
-                       {
-                               BeforeConstraintNameChange (this, newName);
-                       }
+                       DelegateConstraintNameChange eh = events [beforeConstraintNameChange] as DelegateConstraintNameChange;
+                       if (eh != null)
+                               eh (this, newName);
                }
 
                //call once before adding a constraint to a collection
                //will throw an exception to prevent the add if a rule is broken
                internal abstract void AddToConstraintCollectionSetup (ConstraintCollection collection);
-                                       
+
                internal abstract bool IsConstraintViolated ();
-               
-               internal static void ThrowConstraintException(){
+
+               internal static void ThrowConstraintException ()
+               {
                        throw new ConstraintException("Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.");
                }
 
@@ -149,18 +152,18 @@ namespace System.Data {
                {
                }
 
-               internal void AssertConstraint() 
+               internal void AssertConstraint ()
                {
                        // The order is important.. IsConstraintViolated fills the RowErrors if it detects
                        // a violation
-                       if (!IsConstraintViolated())
+                       if (!IsConstraintViolated ())
                                return;
                        if (Table._duringDataLoad || (Table.DataSet != null && !Table.DataSet.EnforceConstraints))
                                return;
-                       ThrowConstraintException();
+                       ThrowConstraintException ();
                }
 
-               internal abstract void AssertConstraint(DataRow row);
+               internal abstract void AssertConstraint (DataRow row);
 
                internal virtual void RollbackAssert (DataRow row)
                {
@@ -181,11 +184,13 @@ namespace System.Data {
                        this.dataSet = dataSet;
                }
 
-               internal Index Index
+               internal void SetExtendedProperties (PropertyCollection properties)
                {
-                       get {
-                               return _index;
-                       }
+                       _properties = properties;
+               }
+
+               internal Index Index {
+                       get { return _index; }
                        set {
                                if (_index != null) {
                                        _index.RemoveRef();
@@ -194,22 +199,20 @@ namespace System.Data {
 
                                _index = value;
 
-                               if (_index != null) {
+                               if (_index != null)
                                        _index.AddRef();
-                               }
                        }
                }
 
-               internal abstract bool IsColumnContained(DataColumn column);
-               internal abstract bool CanRemoveFromCollection(ConstraintCollection col, bool shouldThrow);
+               internal abstract bool IsColumnContained (DataColumn column);
+               internal abstract bool CanRemoveFromCollection (ConstraintCollection col, bool shouldThrow);
 
                /// <summary>
-               /// Gets the ConstraintName, if there is one, as a string. 
+               /// Gets the ConstraintName, if there is one, as a string.
                /// </summary>
-               public override string ToString () 
+               public override string ToString ()
                {
                        return _constraintName == null ? "" : _constraintName;
                }
-
        }
 }