Beispiel #1
0
        /// <summary>
        /// Parses a naming convention string.
        /// </summary>
        /// <param name="convention">The convention string like {[PropertyA.SubPropertyA...etc]}separator{[PropertyB.SubPropertyB...etc]}separator...{[PropertyN.SubPropertyN]}</param>
        /// <returns>Returns a naming convention structure.</returns>
        public static NamingConvention ParseNamingConvention(string convention)
        {
            var rx         = new Regex(@"\{\[?(\w+\.?)*(?:\(\d\))?\]?\}");
            var rxname     = new Regex(@"(\w+\.?)+");
            var rxoptional = new Regex(@"\[(\w+\.?)+(\(\d)?\)?\]");
            var rxpadding  = new Regex(@"\w+\((?<padding>\d)\)", RegexOptions.ExplicitCapture);

            var matches = rx.Matches(convention);

            NamingConvention nc = new NamingConvention();

            // build format pattern from convention
            var pattern = convention;

            for (int index = 0; index < matches.Count; index++)
            {
                var match = matches[index].Value;

                // get match property
                NamingConventionProperty ncp = new NamingConventionProperty()
                {
                    Name       = rxname.Match(match).Value,
                    IsOptional = rxoptional.IsMatch(match)
                };

                if (rxpadding.IsMatch(match)) // get padding
                {
                    Match paddingMatch = rxpadding.Match(match);
                    var   paddingstr   = paddingMatch.Groups["padding"] != null ? paddingMatch.Groups["padding"].Value : string.Empty;
                    int   padding;
                    int.TryParse(paddingstr, out padding);
                    ncp.Padding = padding;
                }

                nc.Properties.Add(ncp);

                // add match placeholder to pattern
                var mrx = new Regex(Regex.Escape(match));
                pattern = mrx.Replace(pattern, string.Format("{{{0}}}", index), 1);
            }

            nc.Pattern = pattern;

            return(nc);
        }
Beispiel #2
0
        private static string GetFormattedValue(object value, NamingConventionProperty property)
        {
            if (value != null)
            {
                if (property.Padding > 0) // apply padding if possible
                {
                    // check if number
                    if (!value.GetType().IsAssignableFrom(typeof(int)))
                    {
                        throw new BusinessException(
                                  string.Format(
                                      "Failed to apply padding for property {0} because it is not integer type. Property type:{1} ",
                                      property.Name, value.GetType().Name));
                    }
                    return(((int)value).ToString("D" + property.Padding.ToString()));
                }

                return(value.ToString());
            }

            return(string.Empty);
        }