Mercurial > pub > bltoolkit
diff Tools/BLTgen/StringListMapper.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Tools/BLTgen/StringListMapper.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,75 @@ +using System; + +using BLToolkit.Mapping; + +namespace BLTgen +{ + public class StringListMapper : MapDataSourceBase + { + string[] _list; + + public StringListMapper(string[] list) + { + _list = list; + } + + #region IMapDataSource + + public override int Count + { + get { return _list.Length; } + } + + public override Type GetFieldType(int index) + { + return (index > 0 && index < _list.Length)? typeof(string): null; + } + + public override string GetName(int index) + { + return GetNameOrValue(_list[index], true); + } + + public override int GetOrdinal(string name) + { + throw new InvalidOperationException("IMapDataSource.GetOrdinal(string)"); + } + + public override object GetValue(object o, int index) + { + return GetNameOrValue(_list[index], false); + } + + public override object GetValue(object o, string name) + { + throw new InvalidOperationException("IMapDataSource.GetValue(object, string)"); + } + + #endregion + + #region Implementation + + private static string GetNameOrValue(string str, bool name) + { + if (str.StartsWith("\"") && str.EndsWith("\"")) + str = str.Substring(1, str.Length - 2); + + // Option + // + if (str.StartsWith("-") || str.StartsWith("/")) + { + int colon = str.IndexOfAny(new char[] { ':', '=' }, 1); + if (colon > 0) + return name ? str.Substring(1, colon - 1) : str.Substring(colon + 1); + + return name ? str.Substring(1) : string.Empty; + } + + // Default parameter + // + return name ? string.Empty : str; + } + + #endregion + } +}