272 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.IO;
 | 
						|
using System.Runtime.Serialization.Formatters.Binary;
 | 
						|
using System.ComponentModel;
 | 
						|
using Csla.Properties;
 | 
						|
 | 
						|
namespace Csla
 | 
						|
{
 | 
						|
 | 
						|
  /// <summary>
 | 
						|
  /// This is the base class from which readonly name/value
 | 
						|
  /// collections should be derived.
 | 
						|
  /// </summary>
 | 
						|
  /// <typeparam name="K">Type of the key values.</typeparam>
 | 
						|
  /// <typeparam name="V">Type of the values.</typeparam>
 | 
						|
  [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
 | 
						|
  [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
 | 
						|
  [Serializable()]
 | 
						|
  public abstract class NameValueListBase<K, V> : 
 | 
						|
    Core.ReadOnlyBindingList<NameValueListBase<K, V>.NameValuePair>, 
 | 
						|
    ICloneable, Core.IBusinessObject
 | 
						|
  {
 | 
						|
 | 
						|
    #region Core Implementation
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Returns the value corresponding to the
 | 
						|
    /// specified key.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="key">Key value for which to retrieve a value.</param>
 | 
						|
    public V Value(K key)
 | 
						|
    {
 | 
						|
      foreach (NameValuePair item in this)
 | 
						|
        if (item.Key.Equals(key))
 | 
						|
          return item.Value;
 | 
						|
      return default(V);
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Returns the key corresponding to the
 | 
						|
    /// first occurance of the specified value
 | 
						|
    /// in the list.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="value">Value for which to retrieve the key.</param>
 | 
						|
    public K Key(V value)
 | 
						|
    {
 | 
						|
      foreach (NameValuePair item in this)
 | 
						|
        if (item.Value.Equals(value))
 | 
						|
          return item.Key;
 | 
						|
      return default(K);
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether the list contains the
 | 
						|
    /// specified key.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="key">Key value for which to search.</param>
 | 
						|
    public bool ContainsKey(K key)
 | 
						|
    {
 | 
						|
      foreach (NameValuePair item in this)
 | 
						|
        if (item.Key.Equals(key))
 | 
						|
          return true;
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether the list contains the
 | 
						|
    /// specified value.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="value">Value for which to search.</param>
 | 
						|
    public bool ContainsValue(V value)
 | 
						|
    {
 | 
						|
      foreach (NameValuePair item in this)
 | 
						|
        if (item.Value.Equals(value))
 | 
						|
          return true;
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region Constructors
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Creates an instance of the object.
 | 
						|
    /// </summary>
 | 
						|
    protected NameValueListBase()
 | 
						|
    {
 | 
						|
      Initialize();
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region Initialize
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Override this method to set up event handlers so user
 | 
						|
    /// code in a partial class can respond to events raised by
 | 
						|
    /// generated code.
 | 
						|
    /// </summary>
 | 
						|
    protected virtual void Initialize()
 | 
						|
    { /* allows subclass to initialize events before any other activity occurs */ }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region NameValuePair class
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Contains a key and value pair.
 | 
						|
    /// </summary>
 | 
						|
    [Serializable()]
 | 
						|
    public class NameValuePair
 | 
						|
    {
 | 
						|
      private K _key;
 | 
						|
      private V _value;
 | 
						|
 | 
						|
      /// <summary>
 | 
						|
      /// The Key or Name value.
 | 
						|
      /// </summary>
 | 
						|
      public K Key
 | 
						|
      {
 | 
						|
        get { return _key; }
 | 
						|
      }
 | 
						|
 | 
						|
      /// <summary>
 | 
						|
      /// The Value corresponding to the key/name.
 | 
						|
      /// </summary>
 | 
						|
      public V Value
 | 
						|
      {
 | 
						|
        get { return _value; }
 | 
						|
      }
 | 
						|
 | 
						|
      /// <summary>
 | 
						|
      /// Creates an instance of the object.
 | 
						|
      /// </summary>
 | 
						|
      /// <param name="key">The key.</param>
 | 
						|
      /// <param name="value">The value.</param>
 | 
						|
      public NameValuePair(K key, V value)
 | 
						|
      {
 | 
						|
        _key = key;
 | 
						|
        _value = value;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region ICloneable
 | 
						|
 | 
						|
    object ICloneable.Clone()
 | 
						|
    {
 | 
						|
      return GetClone();
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Creates a clone of the object.
 | 
						|
    /// </summary>
 | 
						|
    /// <returns>A new object containing the exact data of the original object.</returns>
 | 
						|
    [EditorBrowsable(EditorBrowsableState.Advanced)]
 | 
						|
    protected virtual object GetClone()
 | 
						|
    {
 | 
						|
      return Core.ObjectCloner.Clone(this);
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Creates a clone of the object.
 | 
						|
    /// </summary>
 | 
						|
    public NameValueListBase<K, V> Clone()
 | 
						|
    {
 | 
						|
      return (NameValueListBase<K, V>)GetClone();
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region Criteria
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Default Criteria for retrieving simple
 | 
						|
    /// name/value lists.
 | 
						|
    /// </summary>
 | 
						|
    /// <remarks>
 | 
						|
    /// This criteria merely specifies the type of
 | 
						|
    /// collection to be retrieved. That type information
 | 
						|
    /// is used by the DataPortal to create the correct
 | 
						|
    /// type of collection object during data retrieval.
 | 
						|
    /// </remarks>
 | 
						|
    [Serializable()]
 | 
						|
    protected class Criteria : CriteriaBase
 | 
						|
    {
 | 
						|
      /// <summary>
 | 
						|
      /// Creates an instance of the object.
 | 
						|
      /// </summary>
 | 
						|
      /// <param name="collectionType">
 | 
						|
      /// The <see cref="Type"/> of the business
 | 
						|
      /// collection class.
 | 
						|
      /// </param>
 | 
						|
      public Criteria(Type collectionType)
 | 
						|
        : base(collectionType)
 | 
						|
      { }
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region Data Access
 | 
						|
 | 
						|
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "criteria")]
 | 
						|
    private void DataPortal_Create(object criteria)
 | 
						|
    {
 | 
						|
      throw new NotSupportedException(Resources.CreateNotSupportedException);
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Override this method to allow retrieval of an existing business
 | 
						|
    /// object based on data in the database.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="criteria">An object containing criteria values to identify the object.</param>
 | 
						|
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores", MessageId = "Member")]
 | 
						|
    protected virtual void DataPortal_Fetch(object criteria)
 | 
						|
    {
 | 
						|
      throw new NotSupportedException(Resources.FetchNotSupportedException);
 | 
						|
    }
 | 
						|
 | 
						|
    private void DataPortal_Update()
 | 
						|
    {
 | 
						|
      throw new NotSupportedException(Resources.UpdateNotSupportedException);
 | 
						|
    }
 | 
						|
 | 
						|
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "criteria")]
 | 
						|
    private void DataPortal_Delete(object criteria)
 | 
						|
    {
 | 
						|
      throw new NotSupportedException(Resources.DeleteNotSupportedException);
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Called by the server-side DataPortal prior to calling the 
 | 
						|
    /// requested DataPortal_XYZ method.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="e">The DataPortalContext object passed to the DataPortal.</param>
 | 
						|
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores", MessageId = "Member")]
 | 
						|
    [EditorBrowsable(EditorBrowsableState.Advanced)]
 | 
						|
    protected virtual void DataPortal_OnDataPortalInvoke(DataPortalEventArgs e)
 | 
						|
    {
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Called by the server-side DataPortal after calling the 
 | 
						|
    /// requested DataPortal_XYZ method.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="e">The DataPortalContext object passed to the DataPortal.</param>
 | 
						|
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores", MessageId = "Member")]
 | 
						|
    [EditorBrowsable(EditorBrowsableState.Advanced)]
 | 
						|
    protected virtual void DataPortal_OnDataPortalInvokeComplete(DataPortalEventArgs e)
 | 
						|
    {
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Called by the server-side DataPortal if an exception
 | 
						|
    /// occurs during data access.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="e">The DataPortalContext object passed to the DataPortal.</param>
 | 
						|
    /// <param name="ex">The Exception thrown during data access.</param>
 | 
						|
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores", MessageId = "Member")]
 | 
						|
    [EditorBrowsable(EditorBrowsableState.Advanced)]
 | 
						|
    protected virtual void DataPortal_OnDataPortalException(DataPortalEventArgs e, Exception ex)
 | 
						|
    {
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
  }
 | 
						|
} |