using System;
using System.Collections;
using System.Collections.Specialized;
using System.Xml.Serialization;
using System.Collections.Generic;
///
/// Serializable object that holds collection of
/// parameters and methods to manipulate them
///
public class ExtensionSettings
{
#region Private members
string _extensionName = string.Empty;
string _settingsHelp = string.Empty;
char[] _delimiter = null;
List _params = null;
string _keyField = string.Empty;
bool _isScalar = false;
StringCollection _requiredFields = new StringCollection();
#endregion
#region Constructors
///
/// Default constructor requried for serialization
///
public ExtensionSettings() { }
///
/// Constructor
///
/// Extension Name
public ExtensionSettings(string extensionName)
{
_extensionName = extensionName;
_delimiter = ",".ToCharArray();
}
#endregion
#region Public members
///
/// Extension name, same as class name
///
[XmlElement]
public string ExtensionName { get { return _extensionName; } }
///
/// Stores information extension author can save to describe
/// settings usage. If set, shows up in the settings page
///
[XmlElement]
public string Help { get { return _settingsHelp; } set { _settingsHelp = value; } }
///
/// Used to split string into string array, comma by default
///
[XmlElement]
public char[] Delimiter { get { return _delimiter; } set { _delimiter = value; } }
///
/// Collection of parameters defined by extension writer.
///
[XmlElement(IsNullable = true)]
public List Parameters { get { return _params; } set { _params = value; } }
///
/// Field used as primary key for settings.
/// If not defined, first parameter in the collection
/// set as key field. Unique and required by default.
///
[XmlElement]
public string KeyField
{
get
{
string rval = string.Empty;
foreach (ExtensionParameter par in _params)
{
if (par.KeyField == true)
{
rval = par.Name;
break;
}
}
if (string.IsNullOrEmpty(rval))
{
rval = _params[0].Name;
}
return rval;
}
set
{
_keyField = value;
}
}
///
/// Returns collection of required parameters
///
[XmlIgnore]
public StringCollection RequiredFields
{
get
{
foreach (ExtensionParameter par in _params)
{
if (par.Required == true && !_requiredFields.Contains(par.Name))
_requiredFields.Add(par.Name);
}
// key field is required by default
if (!_requiredFields.Contains(KeyField))
_requiredFields.Add(KeyField);
return _requiredFields;
}
}
///
/// If true, grid view will not show for settings
/// and only single text box per parameter will
/// be added to the form to update and store input
///
[XmlElement]
public bool IsScalar { get { return _isScalar; } set { _isScalar = value; } }
#endregion
#region Parameter methods
///
/// Add parameter to settings object by name
/// rest of the attributes will be set to defaults
///
/// Parameter Name
public void AddParameter(string name)
{
AddParameter(name, name);
}
///
/// Add Parameter to settings
///
/// Parameter Name
/// Parameter Label, used in the UI
public void AddParameter(string name, string label)
{
AddParameter(name, label, 100);
}
///
/// Add Parameter to settings
///
/// Parameter Name
/// Parameter Label
/// Maximum number of chars values will hold
public void AddParameter(string name, string label, int maxLength)
{
AddParameter(name, label, maxLength, false);
}
///
/// Add Parameter to settings
///
/// Parameter Name
/// Parameter Label
/// Maximum Length
/// Set if value in the parameter required when added/apdated
public void AddParameter(string name, string label, int maxLength, bool required)
{
AddParameter(name, label, maxLength, required, false);
}
///
/// Add Parameter
///
/// Parameter Name
/// Parameter Label
/// Maximum Length
/// Set if value in the parameter required when added/apdated
/// Mark field as primary key, unique and required
public void AddParameter(string name, string label, int maxLength, bool required, bool keyfield)
{
if (_params == null)
_params = new List();
ExtensionParameter par = new ExtensionParameter(name);
par.Label = label;
par.MaxLength = maxLength;
par.Required = required;
par.KeyField = keyfield;
_params.Add(par);
}
///
/// Returns true if values in the parameter required
///
/// Parameter Name
///
public bool IsRequiredParameter(string paramName)
{
if (RequiredFields.Contains(paramName))
{
return true;
}
return false;
}
///
/// Returns true if value that user entered
/// exists in the parameter used as primary key
///
/// Value entered
/// True if value exists
public bool IsKeyValueExists(string newVal)
{
foreach (ExtensionParameter par in _params)
{
if (par.Name == KeyField)
{
foreach (string val in par.Values)
{
if (val == newVal)
{
return true;
}
}
}
}
return false;
}
///
/// Compare value in the parameters collection
/// with one in the grid. Return true if value
/// in the grid is the same (old value).
///
/// Parameter Name
/// Value in the grid view
/// Row in the grid view
///
public bool IsOldValue(string parName, string val, int rowIndex)
{
string oldVal = string.Empty;
foreach (ExtensionParameter par in _params)
{
if (par.Name.ToLower() == parName.ToLower())
{
if (par.Values != null)
if (rowIndex <= par.Values.Count)
oldVal = par.Values[rowIndex];
if (oldVal == val)
{
return true;
}
}
}
return false;
}
///
/// Method to get description of the parameter
///
/// Parameter Name
/// Parameter Description(label)
public string GetLabel(string parameterName)
{
foreach (ExtensionParameter par in _params)
{
if (par.Name.ToLower() == parameterName.ToLower())
{
return par.Label;
}
}
return string.Empty;
}
#endregion
#region Values Methods
///
/// Appends value to parameter value collection
///
/// Parameter Name
/// Value
public void AddValue(string parameterName, string val)
{
foreach (ExtensionParameter par in _params)
{
if (par.Name == parameterName)
{
par.AddValue(val);
break;
}
}
}
///
/// Update parameter that has only one value
///
/// Parameter Name
/// Value
public void UpdateScalarValue(string parameterName, string val)
{
foreach (ExtensionParameter par in _params)
{
if (par.Name == parameterName)
{
par.UpdateScalarValue(val);
break;
}
}
}
///
/// Add values to parameter value collection
///
/// Values as array of strings
public void AddValues(string[] values)
{
if (_params.Count > 0)
{
for (int i = 0; i < _params.Count; i++)
{
_params[i].AddValue(values[i]);
}
}
}
///
/// Add values to parameter value collection
///
/// String collection of values
public void AddValues(StringCollection values)
{
if (_params.Count > 0)
{
for (int i = 0; i < _params.Count; i++)
{
_params[i].AddValue(values[i]);
}
}
}
///
/// Parameters with multiple values formatted
/// as data table where column names are parameter
/// names and collection of values are data rows.
/// In the UI bound to the data grid view
///
/// Data table
public System.Data.DataTable GetDataTable()
{
System.Data.DataTable objDataTable = new System.Data.DataTable();
foreach (ExtensionParameter p in _params)
{
objDataTable.Columns.Add(p.Name, string.Empty.GetType());
}
if (_params[0].Values != null)
{
for (int i = 0; i < _params[0].Values.Count; i++)
{
string[] row = new string[_params.Count];
for (int j = 0; j < _params.Count; j++)
{
row[j] = _params[j].Values[i];
}
objDataTable.Rows.Add(row);
}
}
return objDataTable;
}
///
/// Method to get vaule for scalar parameter
///
/// Parameter Name
/// First value in the values collection
public string GetSingleValue(string parameterName)
{
foreach (ExtensionParameter par in _params)
{
if (par.Name.ToLower() == parameterName.ToLower())
{
if (par.Values != null)
return par.Values[0];
}
}
return string.Empty;
}
#endregion
}