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