/*
* 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 FilterOperator {Custom = 1, In = 2, CaseSensitiveLike = 3, CaseInsensitiveLike = 4, Equal = 5,
GraterOrEqual = 6, Grater = 7, LessOrEqual = 8, Less = 9, IsNull = 10, IsNotNull = 11}
/// <summary>
/// keeps the information for a single filter
/// </summary>
public class ColumnFilterInfo
{
private string _ColumnName;
private string _CustomOperator;
private object _ColumnValue;
private FilterOperator _Operator;
public ColumnFilterInfo(string p_ColumnName, string p_Operator, object p_ColumnValue)
{
_ColumnName = p_ColumnName;
_CustomOperator = p_Operator;
_ColumnValue = p_ColumnValue;
_Operator = FilterOperator.Custom;
}
public ColumnFilterInfo(string p_ColumnName, FilterOperator p_Operator, object p_ColumnValue)
{
_ColumnName = p_ColumnName;
_ColumnValue = p_ColumnValue;
_Operator = p_Operator;
}
public string ColumnName
{
get{return _ColumnName;}
set{_ColumnName = value;}
}
public FilterOperator Operator
{
get{return _Operator;}
set{_Operator = value;}
}
public string CustomOperator
{
get{return _CustomOperator;}
set{_CustomOperator = value;}
}
public object ColumnValue
{
get{return _ColumnValue;}
set{_ColumnValue = value;}
}
}
/// <summary>
/// Stores a collection of filters to be used in order to generate a select command
/// </summary>
public class ColumnFilterInfoCollection : ICollection, IEnumerable , ICloneable
{
private ArrayList l_Filters;
public ColumnFilterInfoCollection()
{
l_Filters = new ArrayList(2);
}
public ColumnFilterInfoCollection(int InitialCapacity)
{
l_Filters = new ArrayList(InitialCapacity);
}
public ColumnFilterInfoCollection(ColumnFilterInfo [] initProp)
{
if(initProp == null)
throw new Exceptions.DataHolderPropertyException("ColumnFilterInfoCollection Constructor parameter Error, Properties are not set");
l_Filters = new ArrayList(initProp.Length);
for(int i = 0; i < initProp.Length; i++)
l_Filters[i] = initProp[i];
}
public void Add(ColumnFilterInfo cfi)
{
l_Filters.Add(cfi);
}
public void Add(ColumnFilterInfoCollection cficoll)
{
foreach(ColumnFilterInfo cfi in cficoll)
l_Filters.Add(cfi);
}
/// <summary>
/// Add filters for each not null property with the values from it
/// </summary>
/// <param name="ge">The genericData from which the properties will be processed</param>
public void Add(DataHolder.Containers.GenericData ge)
{
for(int i = 0; i < ge.Properties.Count; i++)
{
ColumnFilterInfo cfi = null;
if(ge[i] != DBNull.Value)
{
if(ge.Properties[i].PropertyType == typeof(string))
{
if(((string)ge[i]).Trim().Length > 0)
cfi = new ColumnFilterInfo(ge.Properties[i].PropertyName, FilterOperator.CaseInsensitiveLike , ((string)ge[i]).Trim() + "%");
}
else
cfi = new ColumnFilterInfo(ge.Properties[i].PropertyName,FilterOperator.Equal , ge[i]);
}
if(cfi != null)
this.Add(cfi);
}
}
public void Remove(ColumnFilterInfo cfi)
{
l_Filters.Remove(cfi);
}
public void RemoveAt(int i)
{
l_Filters.RemoveAt(i);
}
public void Clear()
{
l_Filters.Clear();
}
#region ICollection Members
public bool IsSynchronized
{
get
{
return false;
}
}
public int Count
{
get
{
if(l_Filters == null)
return 0;
else
return l_Filters.Count;
}
}
public void CopyTo(Array array, int index)
{
if(l_Filters == null)
return;
l_Filters.CopyTo(array, index);
}
public object SyncRoot
{
get
{
if(l_Filters == null)
return null;
else
return l_Filters.SyncRoot;
}
}
#endregion
#region IEnumerable Members
public IEnumerator GetEnumerator()
{
return l_Filters.GetEnumerator();
}
#endregion
#region List Members
public ColumnFilterInfo this[int index]
{
get
{
return (ColumnFilterInfo)l_Filters[index];
}
set
{
l_Filters[index] = value;
}
}
#endregion
#region ICloneable Members
public object Clone()
{
ColumnFilterInfoCollection newPropColl = new ColumnFilterInfoCollection();
for(int i = 0; i < l_Filters.Count; i++)
newPropColl.l_Filters.Add(l_Filters[i]);
return newPropColl;
}
#endregion
}
}
|