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 }