Esempio n. 1
0
        /// <summary>
        /// merge the duplicate route infos
        /// </summary>
        /// <param name="infos"></param>
        /// <returns></returns>
        public static List <MailRouteInfo> Format(IEnumerable <MailRouteInfo> infos)
        {
            var dictUser2Info = new Dictionary <string, List <string> >();

            foreach (var info in infos)
            {
                if (dictUser2Info.ContainsKey(info.UserName))
                {
                    dictUser2Info[info.UserName].AddRange(info.EntityNames);
                }
                else
                {
                    var types = new List <string>(info.EntityNames);
                    dictUser2Info[info.UserName] = types;
                }
            }

            var list = new List <MailRouteInfo>(dictUser2Info.Count);

            foreach (var kv in dictUser2Info)
            {
                var info = new MailRouteInfo(kv.Key, kv.Value.Distinct().ToList());
                list.Add(info);
            }
            return(list);
        }
Esempio n. 2
0
        /// <summary>
        /// format: type1@Tom;type2@Marry;type3, type4@Jerry
        /// </summary>
        /// <param name="strInfo"></param>
        /// <returns></returns>
        public static List <MailRouteInfo> Parse(string strInfo)
        {
            var dictUser2Info = new Dictionary <string, MailRouteInfo>();
            var sb            = new StringBuilder(64);
            var entityNames   = new List <string>(10);
            var userNames     = new List <string>(10);
            var parsingList   = entityNames;

            for (var i = 0; i <= strInfo.Length; ++i)
            {
                var chr = i == strInfo.Length ? ';' : strInfo[i];  // sentinel

                switch (chr)
                {
                case ',':
                    if (sb.Length > 0)
                    {
                        parsingList.Add(sb.ToString());
                        sb.Clear();
                    }
                    break;

                case '@':      // entity@user
                    if (sb.Length > 0)
                    {
                        parsingList.Add(sb.ToString());
                        sb.Clear();
                    }

                    parsingList = userNames;      // switch to user-name mode
                    break;

                case ';':      // a set of route info
                    if (sb.Length > 0)
                    {
                        parsingList.Add(sb.ToString());
                        sb.Clear();
                    }

                    // create rotue infos
                    if (userNames.Count > 0 &&
                        entityNames.Count > 0)
                    {
                        foreach (var user in userNames)
                        {
                            if (dictUser2Info.ContainsKey(user))
                            {
                                dictUser2Info[user].EntityNames.AddRange(entityNames);
                            }
                            else
                            {
                                dictUser2Info[user] = new MailRouteInfo(user, entityNames);
                            }
                        }
                    }

                    userNames.Clear();         // reset
                    entityNames.Clear();       // reset
                    parsingList = entityNames; // switch to entity-name mode
                    break;

                case ' ':      // white chars
                case '\t':
                case '\r':
                case '\n':
                    break;      // ignore

                default:
                    sb.Append(chr);
                    break;
                }
            }

            var list = dictUser2Info.Values.ToList();

            foreach (var info in list)
            {
                info.EntityNames = info.EntityNames.Distinct().ToList();
            }

            return(list);
        }
Esempio n. 3
0
 public MailRouteInfo(MailRouteInfo copyFrom)
 {
     this.UserName    = copyFrom.UserName;
     this.EntityNames = new List <string>(copyFrom.EntityNames);
 }