/*
* Namespace Summary
* Copyright (C) 2005+ Bogdan Damian Constantin
* E-Mail: damianbcpetro@gmail.com
* WEB: http://www.sourceforge.net/projects/dataholder
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License 2.1 or later, as
* published by the Free Software Foundation. See the included License.txt
* or http://www.gnu.org/copyleft/lesser.html for details.
*
* Used for Transfering optional filters
*/
using System;
using System.Collections;
namespace DataHolder.DataPersistence{
public enum FilterSentenceOperator {And = 1, Or = 2};
/// <summary>
/// contains a sentence of filters separated by filterSentenceOperator
/// </summary>
public class FilterSentence:IDisposable
{
private ColumnFilterInfoCollection l_filters;
private FilterSentenceCollection l_Sentences;
private FilterSentenceOperator l_Operator;
public FilterSentence()
{
l_filters = new ColumnFilterInfoCollection(3);
l_Sentences = new FilterSentenceCollection();
l_Operator = FilterSentenceOperator.And;
}
public FilterSentence(int InitialFiltersCapacity, int InitialSentenceCapacity)
{
l_filters = new ColumnFilterInfoCollection(InitialFiltersCapacity);
l_Sentences = new FilterSentenceCollection(InitialSentenceCapacity);
l_Operator = FilterSentenceOperator.And;
}
public FilterSentence(FilterSentenceOperator p_Operator)
{
l_filters = new ColumnFilterInfoCollection(3);
l_Sentences = new FilterSentenceCollection();
l_Operator = p_Operator;
}
/// <summary>
/// filters for this sentence
/// </summary>
public ColumnFilterInfoCollection Filters
{
get{return l_filters;}
}
/// <summary>
/// other subsentences for this sentence
/// </summary>
public FilterSentenceCollection Sentences
{
get{return l_Sentences;}
}
/// <summary>
/// gets/sets the sentence operator used in the
/// </summary>
public FilterSentenceOperator SentenceOperator
{
get{return l_Operator;}
set{l_Operator = value;}
}
public void Clear()
{
l_filters.Clear();
l_Sentences.Clear();
}
#region IDisposable Members
public void Dispose()
{
l_filters.Clear();
l_filters = null;
l_Sentences.Dispose();
l_Sentences = null;
}
#endregion
}
/// <summary>
/// Stores a collection of filters to be used in order to generate a select command
/// </summary>
public class FilterSentenceCollection : ICollection, IEnumerable , ICloneable,IDisposable
{
private ArrayList l_Sentences;
public FilterSentenceCollection()
{
l_Sentences = new ArrayList(2);
}
public FilterSentenceCollection(int InitialCapacity)
{
l_Sentences = new ArrayList(InitialCapacity);
}
public FilterSentenceCollection(FilterSentence [] initProp)
{
if(initProp == null)
throw new Exceptions.DataHolderPropertyException("FilterSentenceCollection Constructor parameter Error, Properties are not set");
l_Sentences = new ArrayList(initProp.Length);
for(int i = 0; i < initProp.Length; i++)
l_Sentences[i] = initProp[i];
}
public void Add(FilterSentence cfi)
{
l_Sentences.Add(cfi);
}
public void Add(FilterSentenceCollection cficoll)
{
foreach(FilterSentence cfi in cficoll)
l_Sentences.Add(cfi);
}
public void Remove(FilterSentence cfi)
{
l_Sentences.Remove(cfi);
}
public void RemoveAt(int i)
{
l_Sentences.RemoveAt(i);
}
public void Clear()
{
l_Sentences.Clear();
}
#region ICollection Members
public bool IsSynchronized
{
get
{
return false;
}
}
public int Count
{
get
{
if(l_Sentences == null)
return 0;
else
return l_Sentences.Count;
}
}
public void CopyTo(Array array, int index)
{
if(l_Sentences == null)
return;
l_Sentences.CopyTo(array, index);
}
public object SyncRoot
{
get
{
if(l_Sentences == null)
return null;
else
return l_Sentences.SyncRoot;
}
}
#endregion
#region IEnumerable Members
public IEnumerator GetEnumerator()
{
return l_Sentences.GetEnumerator();
}
#endregion
#region List Members
public FilterSentence this[int index]
{
get
{
return (FilterSentence)l_Sentences[index];
}
set
{
l_Sentences[index] = value;
}
}
#endregion
#region ICloneable Members
public object Clone()
{
FilterSentenceCollection newPropColl = new FilterSentenceCollection();
for(int i = 0; i < l_Sentences.Count; i++)
newPropColl.l_Sentences.Add(l_Sentences[i]);
return newPropColl;
}
#endregion
#region IDisposable Members
public void Dispose()
{
for(int i = 0; i < this.Count; i++)
this[i].Dispose();
this.Clear();
}
#endregion
}
}
|