//
// Mono.Data.ProviderCollection
//
// Authors:
// Brian Ritchie (brianlritchie@hotmail.com)
//
//
// Copyright (C) Brian Ritchie, 2002
//
//
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// 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
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
namespace Mono.Data
{
using System;
using System.Collections;
using System.Collections.Specialized;
///
///
/// A collection that stores objects.
///
///
///
[Serializable ()]
#if NET_2_0
[Obsolete("ProviderFactory in assembly Mono.Data has been made obsolete by DbProviderFactories in assembly System.Data.")]
#endif
public class ProviderCollection : DictionaryBase
{
///
///
/// Initializes a new instance of .
///
///
public ProviderCollection ()
{
}
///
///
/// Initializes a new instance of based on another .
///
///
///
/// A from which the contents are copied
///
public ProviderCollection (ProviderCollection value)
{
if (value == null)
throw new System.ArgumentNullException ("value");
this.AddRange (value);
}
///
///
/// Initializes a new instance of containing any array of objects.
///
///
///
/// A array of objects with which to intialize the collection
///
public ProviderCollection (Provider[] value)
{
if (value == null)
throw new System.ArgumentNullException ("value");
this.AddRange (value);
}
///
/// Represents the entry at the specified index of the .
///
/// The zero-based index of the entry to locate in the collection.
///
/// The entry at the specified index of the collection.
///
/// is outside the valid range of indexes for the collection.
public Provider this [string Name]
{
get {
return ((Provider)(Dictionary [Name]));
}
set {
Dictionary [Name] = value;
}
}
public Provider FindByCommandType(Type CommandType)
{
if (CommandType == null)
throw new System.ArgumentNullException ("CommandType");
foreach (Provider p in this) {
if (p.CommandType == CommandType)
return p;
}
throw new IndexOutOfRangeException ();
}
public Provider FindByDataAdapterType(Type DataAdapterType)
{
if (DataAdapterType == null)
throw new System.ArgumentNullException ("DataAdapterType");
foreach (Provider p in this) {
if (p.DataAdapterType == DataAdapterType)
return p;
}
throw new IndexOutOfRangeException ();
}
public Provider FindByConnectionType(Type ConnectionType)
{
if (ConnectionType == null)
throw new System.ArgumentNullException("ConnectionType");
foreach (Provider p in this) {
if (p.ConnectionType == ConnectionType)
return p;
}
throw new IndexOutOfRangeException ();
}
///
/// Adds a with the specified value to the
/// .
///
/// The to add.
///
/// The index at which the new element was inserted.
///
///
public void Add(Provider value)
{
if (value == null)
throw new System.ArgumentNullException ("value");
Dictionary.Add (value.Name, value);
}
///
/// Copies the elements of an array to the end of the .
///
///
/// An array of type containing the objects to add to the collection.
///
///
/// None.
///
///
public void AddRange (Provider[] value)
{
if (value == null)
throw new System.ArgumentNullException ("value");
for (int i = 0; i < value.Length; i++)
this.Add (value [i]);
}
///
///
/// Adds the contents of another to the end of the collection.
///
///
///
/// A containing the objects to add to the collection.
///
///
/// None.
///
///
public void AddRange(ProviderCollection value)
{
if (value == null)
throw new System.ArgumentNullException ("value");
foreach (Provider p in value)
this.Add (p);
}
///
/// Gets a value indicating whether the
/// contains the specified .
///
/// The to locate.
///
/// if the is contained in the collection;
/// otherwise, .
///
///
public bool Contains (Provider value)
{
if (value == null)
throw new System.ArgumentNullException("value");
return Dictionary.Contains (value);
}
///
/// Copies the values to a one-dimensional instance at the
/// specified index.
///
/// The one-dimensional that is the destination of the values copied from .
/// The index in where copying begins.
///
/// None.
///
/// is multidimensional. -or- The number of elements in the is greater than the available space between and the end of .
/// is .
/// is less than 's lowbound.
///
public void CopyTo(Provider[] array, int index)
{
if (array == null)
throw new System.ArgumentNullException ("array");
Dictionary.CopyTo(array, index);
}
///
/// Returns an enumerator that can iterate through
/// the .
///
/// None.
///
public new ProviderEnumerator GetEnumerator ()
{
return new ProviderEnumerator (this);
}
///
/// Removes a specific from the
/// .
///
/// The to remove from the .
/// None.
/// is not found in the Collection.
public void Remove(Provider value)
{
if (value == null)
throw new System.ArgumentNullException ("value");
Dictionary.Remove(value);
}
public class ProviderEnumerator : object, IEnumerator
{
private IEnumerator baseEnumerator;
private IEnumerable temp;
public ProviderEnumerator(ProviderCollection mappings)
{
if (mappings == null)
throw new System.ArgumentNullException ("mappings");
this.temp = ((IEnumerable)(mappings));
this.baseEnumerator = temp.GetEnumerator();
}
public Provider Current
{
get
{
return ((Provider) ((DictionaryEntry) (baseEnumerator.Current)).Value);
}
}
object IEnumerator.Current
{
get
{
return baseEnumerator.Current;
}
}
public bool MoveNext()
{
return baseEnumerator.MoveNext();
}
bool IEnumerator.MoveNext()
{
return baseEnumerator.MoveNext();
}
public void Reset()
{
baseEnumerator.Reset();
}
void IEnumerator.Reset()
{
baseEnumerator.Reset();
}
}
}
}