Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////
- // //
- // ◘◘◘◘ ◘◘◘ ◘◘◘ ◘◘◘ ◘◘◘◘ ◘◘◘ ◘◘◘◘ ◘◘◘◘◘ //
- // ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ //
- // ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ //
- // ◘◘◘◘ ◘◘◘◘◘ ◘◘◘ ◘◘◘ ◘◘◘◘ ◘ ◘ ◘◘◘◘ ◘ //
- // ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ //
- // ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ ◘ //
- // ◘ ◘ ◘ ◘◘◘ ◘◘◘ ◘ ◘◘◘ ◘ ◘ ◘ //
- // //
- // Federal Service //
- // //
- ////////////////////////////////////////////////////////////////
- // Generated //
- ////////////////////////////////////////////////////////////////
- // //
- // Authors: - //
- // //
- // Date created: 29.01.2014 //
- // Date modified: 29.01.2014 //
- // Version: - //
- // //
- // Generated by: - //
- // //
- ////////////////////////////////////////////////////////////////
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using Passport.MZ.Domain;
- using Passport.MZ.Domain.CoreAdmin;
- namespace Passport.MZ.Testing
- {
- /// <summary>
- /// генератор тестовых данных
- /// </summary>
- public class TestDataBuilder
- {
- #region Declarations
- /// <summary>
- /// генератор случайных чисел
- /// </summary>
- private Random _rnd;
- /// <summary>
- /// зерно генератора случайных чисел
- /// </summary>
- private int _seed;
- /// <summary>
- /// хеш делегатов генерации
- /// </summary>
- private Hashtable _hash;
- /// <summary>
- /// путь к словарям
- /// </summary>
- private static string _dictionaryPath;
- /// <summary>
- /// словарь слов
- /// </summary>
- private static List<string> _words;
- /// <summary>
- /// адреса почтовых серверов
- /// </summary>
- private static List<string> dicEMail;
- private static List<string> dicMale_Surnames;
- private static List<string> dicMale_Names;
- private static List<string> dicMale_Patronymics;
- private static List<string> dicFemale_Surnames;
- private static List<string> dicFemale_Names;
- private static List<string> dicFemale_Patronymics;
- /// <summary>
- /// Контейнер справочников
- /// </summary>
- private static DictionaryContainer dicContainer;
- private static List<string> dicKladr_57;
- #endregion
- #region Properties
- /// <summary>
- /// генератор случайных чисел
- /// </summary>
- public Random Random { get { return _rnd; } }
- /// <summary>
- /// зерно генератора случайных чисел
- /// </summary>
- public int Seed
- {
- get
- {
- return _seed;
- }
- set
- {
- _seed = value;
- _rnd = new Random(value);
- }
- }
- /// <summary>
- /// путь к словарям
- /// </summary>
- public static string DictionaryPath { get { return _dictionaryPath; } set { _dictionaryPath = value; } }
- #endregion
- #region Constructors
- /// <summary>
- /// конструктор
- /// </summary>
- public TestDataBuilder()
- {
- _hash = new System.Collections.Hashtable(7);
- _hash.Add(typeof(PersonAccountain), new GenerateDelegate<PersonAccountain>(Generate_PersonAccountain));
- _hash.Add(typeof(PersonCEO), new GenerateDelegate<PersonCEO>(Generate_PersonCEO));
- _hash.Add(typeof(Classification), new GenerateDelegate<Classification>(Generate_Classification));
- _hash.Add(typeof(Kladr), new GenerateDelegate<Kladr>(Generate_Kladr));
- _hash.Add(typeof(Address), new GenerateDelegate<Address>(Generate_Address));
- _hash.Add(typeof(Registration), new GenerateDelegate<Registration>(Generate_Registration));
- _hash.Add(typeof(PassportLpu), new GenerateDelegate<PassportLpu>(Generate_PassportLpu));
- // инициализируем генератор случайных чисел
- _rnd = new Random();
- }
- /// <summary>
- /// статический конструктор
- /// </summary>
- static TestDataBuilder()
- {
- // задаем путь к файлам словарей
- _dictionaryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestData");
- // инициализируем словари
- _words = LoadDictionary("Words.txt");
- dicEMail = LoadDictionary("Mail.txt");
- dicMale_Surnames = LoadDictionary("Male_Surnames.txt");
- dicMale_Names = LoadDictionary("Male_Names.txt");
- dicMale_Patronymics = LoadDictionary("Male_Patronymics.txt");
- dicFemale_Surnames = LoadDictionary("Female_Surnames.txt");
- dicFemale_Names = LoadDictionary("Female_Names.txt");
- dicFemale_Patronymics = LoadDictionary("Female_Patronymics.txt");
- // загружаем справочники
- dicContainer = new DictionaryContainer();
- dicContainer.DictionaryPath = Path.Combine(DictionaryPath, "Dictionaries");
- dicContainer.Load();
- dicKladr_57 = LoadDictionary("Kladr_57.txt");
- }
- #endregion
- #region Private methods
- /// <summary>
- /// делегат генерации
- /// </summary>
- /// <typeparam name="T"> тип </typeparam>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private delegate T GenerateDelegate<T>(params object[] args)
- where T : class;
- /// <summary>
- /// получить случайное слово
- /// </summary>
- /// <returns></returns>
- private string GetRandomWord()
- {
- return _words.Count == 0 ? null : _words[_rnd.Next(_words.Count)];
- }
- /// <summary>
- /// генерировать адрес электронной почты
- /// </summary>
- /// <returns></returns>
- private string GenerateEMail()
- {
- if (_rnd.NextDouble() > 0.2)
- {
- return string.Format("{0}@{1}", GetRandomWord(), dicEMail.Count == 0 ? null : dicEMail[_rnd.Next(dicEMail.Count)]);
- }
- else
- {
- return string.Format("{0}-{1}@{2}", GetRandomWord(), GetRandomWord(), dicEMail.Count == 0 ? null : dicEMail[_rnd.Next(dicEMail.Count)]);
- }
- }
- /// <summary>
- /// генерировать номер телефона
- /// </summary>
- /// <returns></returns>
- private string GeneratePhoneNumber()
- {
- return string.Format("+7({0}){1}", _rnd.Next(100, 999), _rnd.Next(1000000, 9999999));
- }
- /// <summary>
- /// генерировать класс 'PersonAccountain'
- /// </summary>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private PersonAccountain Generate_PersonAccountain(params object[] args)
- {
- // генерация класса 'PersonAccountain'
- PersonAccountain res = new PersonAccountain();
- // генерация поля 'Адрес электронной почты'
- res.Email = GenerateEMail();
- // генерация поля 'Факс'
- res.Fax = GeneratePhoneNumber();
- // генерация поля 'Должность'
- res.Post = "Главный бухгалтер";
- // генерация поля 'Дата назначения на должность'
- res.PostBeginDate = new DateTime((long)Math.Round((double)624511296000000000 + _rnd.NextDouble() * ((double)DateTime.Now.Ticks - (double)624511296000000000))).Date;
- // генерация поля 'Номер телефона'
- res.Telephone = GeneratePhoneNumber();
- // генерируем ФИО
- if (_rnd.Next(2) == 0)
- {
- ////////////////////////////////////////////////////////////////
- // мужской пол
- ////////////////////////////////////////////////////////////////
- // генериуем фамилию
- res.LastName = dicMale_Surnames.Count == 0 ? null : dicMale_Surnames[_rnd.Next(dicMale_Surnames.Count)];
- // генериуем имя
- res.FirstName = dicMale_Names.Count == 0 ? null : dicMale_Names[_rnd.Next(dicMale_Names.Count)];
- // генериуем отчество
- res.PatroName = dicMale_Patronymics.Count == 0 ? null : dicMale_Patronymics[_rnd.Next(dicMale_Patronymics.Count)];
- }
- else
- {
- ////////////////////////////////////////////////////////////////
- // женский пол
- ////////////////////////////////////////////////////////////////
- // генериуем фамилию
- res.LastName = dicFemale_Surnames.Count == 0 ? null : dicFemale_Surnames[_rnd.Next(dicFemale_Surnames.Count)];
- // генериуем имя
- res.FirstName = dicFemale_Names.Count == 0 ? null : dicFemale_Names[_rnd.Next(dicFemale_Names.Count)];
- // генериуем отчество
- res.PatroName = dicFemale_Patronymics.Count == 0 ? null : dicFemale_Patronymics[_rnd.Next(dicFemale_Patronymics.Count)];
- }
- // возвращаем результат
- return res;
- }
- /// <summary>
- /// генерировать класс 'PersonCEO'
- /// </summary>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private PersonCEO Generate_PersonCEO(params object[] args)
- {
- // генерация класса 'PersonCEO'
- PersonCEO res = new PersonCEO();
- // генерация поля 'Адрес электронной почты'
- res.Email = GenerateEMail();
- // генерация поля 'Факс'
- res.Fax = GeneratePhoneNumber();
- // генерация поля 'Должность'
- res.Post = "Главный врач";
- // генерация поля 'Дата назначения на должность'
- res.PostBeginDate = new DateTime((long)Math.Round((double)624511296000000000 + _rnd.NextDouble() * ((double)DateTime.Now.Ticks - (double)624511296000000000))).Date;
- // генерация поля 'Номер телефона'
- res.Telephone = GeneratePhoneNumber();
- // генерируем ФИО
- if (_rnd.Next(2) == 0)
- {
- ////////////////////////////////////////////////////////////////
- // мужской пол
- ////////////////////////////////////////////////////////////////
- // генериуем фамилию
- res.LastName = dicMale_Surnames.Count == 0 ? null : dicMale_Surnames[_rnd.Next(dicMale_Surnames.Count)];
- // генериуем имя
- res.FirstName = dicMale_Names.Count == 0 ? null : dicMale_Names[_rnd.Next(dicMale_Names.Count)];
- // генериуем отчество
- res.PatroName = dicMale_Patronymics.Count == 0 ? null : dicMale_Patronymics[_rnd.Next(dicMale_Patronymics.Count)];
- }
- else
- {
- ////////////////////////////////////////////////////////////////
- // женский пол
- ////////////////////////////////////////////////////////////////
- // генериуем фамилию
- res.LastName = dicFemale_Surnames.Count == 0 ? null : dicFemale_Surnames[_rnd.Next(dicFemale_Surnames.Count)];
- // генериуем имя
- res.FirstName = dicFemale_Names.Count == 0 ? null : dicFemale_Names[_rnd.Next(dicFemale_Names.Count)];
- // генериуем отчество
- res.PatroName = dicFemale_Patronymics.Count == 0 ? null : dicFemale_Patronymics[_rnd.Next(dicFemale_Patronymics.Count)];
- }
- // возвращаем результат
- return res;
- }
- /// <summary>
- /// генерировать ИНН
- /// </summary>
- /// <param name="codeLength"> длина кода </param>
- /// <returns></returns>
- private string GenerateINN(int codeLength)
- {
- if (codeLength == 10)
- {
- // 10-значный ИНН (для юридических лиц)
- int[] MUL = new int[] { 2, 4, 10, 3, 5, 9, 4, 6, 8 };
- int sum = 0;
- int[] digits = new int[10];
- for (int i = 0; i < 9; i++)
- {
- digits[i] = _rnd.Next(0, 9);
- sum += digits[i] * MUL[i];
- }
- digits[9] = (sum % 11) % 10;
- return string.Join("", digits);
- }
- else
- {
- // 12-значный ИНН (для физических лиц)
- int[] MUL_1 = new int[] { 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
- int[] MUL_2 = new int[] { 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
- int sum10 = 0;
- int sum11 = 0;
- int[] digits = new int[12];
- for (int i = 0; i < 10; i++)
- {
- digits[i] = _rnd.Next(0, 9);
- sum10 += digits[i] * MUL_1[i];
- sum11 += digits[i] * MUL_2[i];
- }
- digits[10] = (sum10 % 11) % 10;
- digits[11] = ((sum11 + (digits[10] * MUL_2[10])) % 11) % 10;
- return string.Join("", digits);
- }
- }
- /// <summary>
- /// генерировать ОГРН
- /// </summary>
- /// <param name="codeLength"> длина кода </param>
- /// <returns></returns>
- private string GenerateOGRN(int codeLength)
- {
- int total = codeLength == 13 ? 13 : 15;
- int[] digits = new int[total];
- int count = total - 1;
- int sum = 0;
- for (int i = 0; i < count; i++)
- {
- sum += digits[i] = _rnd.Next(0, 9);
- }
- digits[count] = (sum % (total - 2)) % 10;
- return string.Join("", digits);
- }
- /// <summary>
- /// генерировать адрес сайта
- /// </summary>
- /// <returns></returns>
- private string GenerateURL()
- {
- double value = _rnd.NextDouble();
- if (value > 0.4)
- {
- return string.Format("www.{0}.ru", GetRandomWord());
- }
- else if (value > 0.2)
- {
- return string.Format("www.{0}-{1}.ru", GetRandomWord(), GetRandomWord());
- }
- else
- {
- return string.Format("www.{0}.{1}.ru", GetRandomWord(), GetRandomWord());
- }
- }
- /// <summary>
- /// генерировать класс 'Classification'
- /// </summary>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private Classification Generate_Classification(params object[] args)
- {
- // генерация класса 'Classification'
- Classification res = new Classification();
- // генерация поля 'ОКАТО'
- res.OKATO = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКДП'
- res.OKDP = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКФС'
- res.OKFS = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКОГУ'
- res.OKOGU = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКОНХ'
- res.OKONX = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКОПФ'
- res.OKOPF = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКПО'
- res.OKPO = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКУН'
- res.OKUN = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ОКВЭД'
- res.OKVED = _rnd.Next(100000000, 999999999).ToString();
- // генерация поля 'ПФР'
- res.PFR = _rnd.Next(100000000, 999999999).ToString();
- // возвращаем результат
- return res;
- }
- /// <summary>
- /// генерировать класс 'Kladr'
- /// </summary>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private Kladr Generate_Kladr(params object[] args)
- {
- // генерация класса 'Kladr'
- Kladr res = new Kladr();
- // генерация поля 'Идентификатор'
- res.ID = long.Parse(dicKladr_57.Count == 0 ? null : dicKladr_57[_rnd.Next(dicKladr_57.Count)]);
- // возвращаем результат
- return res;
- }
- /// <summary>
- /// генерировать класс 'Address'
- /// </summary>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private Address Generate_Address(params object[] args)
- {
- // генерация класса 'Address'
- Address res = new Address();
- // генерация поля 'Тип адреса'
- res.AddressType = GetRandomDictionaryEntry<DAddressType>();
- // генерация поля 'КЛАДР'
- res.KladrExport = Generate_Kladr();
- // генерация поля 'Почтовый индекс'
- res.PostIndex = _rnd.Next(614000, 619999);
- // генерация поля 'Квартира'
- res.Appartment = _rnd.Next(1, 128).ToString();
- // генерация поля 'Строение'
- {
- double w = _rnd.NextDouble();
- if (w < 0.571428571428571)
- {
- }
- else if (w < 0.857142857142857)
- {
- res.Building = "А";
- }
- else
- {
- res.Building = "Б";
- }
- }
- // генерация поля 'Дом'
- res.Home = _rnd.Next(1, 99).ToString();
- // возвращаем результат
- return res;
- }
- /// <summary>
- /// генерировать класс 'Registration'
- /// </summary>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private Registration Generate_Registration(params object[] args)
- {
- // генерация класса 'Registration'
- Registration res = new Registration();
- // генерация поля 'Дата регистрации'
- res.RegDate = new DateTime((long)Math.Round((double)615044448000000000 + _rnd.NextDouble() * ((double)DateTime.Now.Ticks - (double)615044448000000000))).Date;
- // генерация поля 'Документ о регистрации'
- res.RegDoc = "Свидетельство о государственной регистрации юридического лица";
- // генерация поля 'Регистрационный номер'
- res.RegNumber = _rnd.Next(100, 8000).ToString();
- // генерация поля 'Наименование регистрирующего органа'
- res.RegOrgName = "<Регистрирующий орган>";
- // возвращаем результат
- return res;
- }
- /// <summary>
- /// генерировать класс 'PassportLpu'
- /// </summary>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- private PassportLpu Generate_PassportLpu(params object[] args)
- {
- // генерация класса 'PassportLpu'
- PassportLpu res = new PassportLpu();
- // генерация поля 'ИНН'
- res.Inn = GenerateINN(10);
- // генерация поля 'Учреждение (городское/сельское)'
- res.IsCityInstitution = _rnd.Next(2) == 0;
- // генерация поля 'Применение стандартов медицинской помощи'
- switch (_rnd.Next(3))
- {
- case 0:
- res.IsMedHelp = true;
- break;
- case 1:
- res.IsMedHelp = false;
- break;
- default:
- res.IsMedHelp = null;
- break;
- }
- // генерация поля 'Признак участия учреждения в ДЛО'
- res.IsParticDlo = _rnd.Next(2) == 0;
- // генерация поля 'Участие учреждения в работе по системе ОМС'
- res.IsParticOms = _rnd.Next(2) == 0;
- // генерация поля 'КПФ'
- res.Kpf = _rnd.Next(10000000, 99999999).ToString();
- // генерация поля 'КПП'
- res.Kpp = _rnd.Next(0, 999999999).ToString("000000000");
- // генерация поля 'ОГРН'
- res.Ogrn = GenerateOGRN(13);
- // генерация поля 'Количество подчиненных учреждений'
- res.SubLpuAmt = _rnd.Next(0, 5);
- // генерация поля 'Адрес электронной почты'
- res.SEmail = GenerateEMail();
- // генерация поля 'Адрес сайта в интернете'
- res.SSite = GenerateURL();
- // генерация поля 'Номер телефона справочной'
- res.STelHelp = GeneratePhoneNumber();
- // генерация поля 'Номер телефона регистратуры'
- res.STelReg = GeneratePhoneNumber();
- // генерация поля 'Городское, чел.'
- res.CityPopul = _rnd.Next(100, 1000);
- // генерация поля 'Сельское, чел.'
- res.CountryPopul = _rnd.Next(100, 1000);
- // генерация поля 'Расстояние до наиболее удаленной точки территориального обслуживания'
- res.Distance = _rnd.Next(0, 50);
- // генерация поля 'Население, чел.'
- res.Population = res.CityPopul + res.CountryPopul;
- // генерация поля 'Количество участков'
- res.UnitQuantity = _rnd.Next(0, 20);
- // генерация поля 'Проживание сопровождающих лиц'
- res.IsCare = _rnd.Next(2) == 0;
- // генерация поля 'Ограждение территории'
- res.IsFence = _rnd.Next(2) == 0;
- // генерация поля 'Приспособленность территории для пациентов с ограниченными возможностями'
- res.IsForInvalidMan = _rnd.Next(2) == 0;
- // генерация поля 'Наличие металлических входных дверей в здание'
- res.IsMetallDoor = _rnd.Next(2) == 0;
- // генерация поля 'Наличие охраны'
- res.IsProtection = _rnd.Next(2) == 0;
- // генерация поля 'Видеонаблюдение территорий и помещений для здания'
- res.IsSurveillance = _rnd.Next(2) == 0;
- // генерация поля 'Местоположение учреждения'
- res.Location = GetRandomDictionaryEntry<DLocationLpu>();
- // генерация поля 'Расположение учреждения'
- res.Territory = GetRandomDictionaryEntry<DRaspolojLpu>();
- // генерация поля 'Главный бухгалтер учреждения'
- res.Accountain = Generate_PersonAccountain();
- // генерация поля 'Руководитель учреждения'
- res.CEO = Generate_PersonCEO();
- // генерация поля 'Классификационные данные'
- res.Classification = Generate_Classification();
- // генерация поля 'Адреса учреждения'
- {
- int count = _rnd.Next(1, 5);
- res.LpuAddressList = new List<Address>(count);
- for (int i = 0; i < count; i++)
- {
- res.LpuAddressList.Add(Generate_Address());
- }
- }
- // генерация поля 'Регистрационные данные'
- {
- int count = _rnd.Next(1, 2);
- res.RegistrationList = new List<Registration>(count);
- for (int i = 0; i < count; i++)
- {
- res.RegistrationList.Add(Generate_Registration());
- }
- }
- // генерация поля 'Уровень учреждения в иерархии сети'
- res.InstLevels = GetRandomDictionaryEntry<DInstLevels>();
- // генерация поля 'Тип учреждения'
- res.InstType = GetRandomDictionaryEntry<DInsTypeNew>();
- // генерация поля 'Ведомственная принадлежность'
- res.LpuOwnership = GetRandomDictionaryEntry<DFoiv>();
- // генерация поля 'Категория подчиненности учреждения'
- res.LpuSubCategory = GetRandomDictionaryEntry<DSubcategory>();
- // генерация поля 'Организационно-правовая форма'
- res.OrgPravForm = GetRandomDictionaryEntry<DOfps>();
- // генерация поля 'Форма собственности'
- res.SobstvForm = GetRandomDictionaryEntry<DVidSobstv>();
- // возвращаем результат
- return res;
- }
- #endregion
- #region Public methods
- /// <summary>
- /// генерировать сущность
- /// </summary>
- /// <param name="type"> тип </param>
- /// <returns></returns>
- public object Generate(Type type)
- {
- Delegate res = _hash[type] as Delegate;
- if (res == null)
- {
- throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", type.FullName));
- }
- else
- {
- return res.DynamicInvoke();
- }
- }
- /// <summary>
- /// генерировать сущность
- /// </summary>
- /// <param name="type"> тип </param>
- /// <param name="seed"> зерно генератора случайных чисел </param>
- /// <returns></returns>
- public object Generate(Type type, int seed)
- {
- Delegate res = _hash[type] as Delegate;
- if (res == null)
- {
- throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", type.FullName));
- }
- else
- {
- return res.DynamicInvoke();
- }
- }
- /// <summary>
- /// генерировать сущность
- /// </summary>
- /// <typeparam name="T"> тип возвращаемого значения </typeparam>
- /// <returns></returns>
- public T Generate<T>()
- where T : class
- {
- GenerateDelegate<T> res = _hash[typeof(T)] as GenerateDelegate<T>;
- if (res == null)
- {
- throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", typeof(T).FullName));
- }
- else
- {
- return res();
- }
- }
- /// <summary>
- /// генерировать сущность
- /// </summary>
- /// <typeparam name="T"> тип возвращаемого значения </typeparam>
- /// <param name="seed"> зерно генератора случайных чисел </param>
- /// <returns></returns>
- public T Generate<T>(int seed)
- where T : class
- {
- GenerateDelegate<T> res = _hash[typeof(T)] as GenerateDelegate<T>;
- if (res == null)
- {
- throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", typeof(T).FullName));
- }
- else
- {
- return res();
- }
- }
- /// <summary>
- /// генерировать сущность
- /// </summary>
- /// <param name="type"> тип </param>
- /// <param name="seed"> зерно генератора случайных чисел </param>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- public object Generate(Type type, Nullable<int> seed, params object[] args)
- {
- Delegate res = _hash[type] as Delegate;
- if (res == null)
- {
- throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", type.FullName));
- }
- else
- {
- return res.DynamicInvoke(args);
- }
- }
- /// <summary>
- /// генерировать сущность
- /// </summary>
- /// <typeparam name="T"> тип возвращаемого значения </typeparam>
- /// <param name="seed"> зерно генератора случайных чисел </param>
- /// <param name="args"> аргументы </param>
- /// <returns></returns>
- public T Generate<T>(Nullable<int> seed, params object[] args)
- where T : class
- {
- GenerateDelegate<T> res = _hash[typeof(T)] as GenerateDelegate<T>;
- if (res == null)
- {
- throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", typeof(T).FullName));
- }
- else
- {
- return res(args);
- }
- }
- /// <summary>
- /// получить случайное значение из справочника
- /// </summary>
- /// <typeparam name="T"> тип справочника </typeparam>
- /// <returns></returns>
- public T GetRandomDictionaryEntry<T>()
- where T : class
- {
- var list = dicContainer[typeof(T)];
- if (list.Count == 0)
- {
- return null;
- }
- else
- {
- return list[_rnd.Next(list.Count)] as T;
- }
- }
- #endregion
- #region Static methods
- /// <summary>
- /// загрузить словарь
- /// </summary>
- /// <param name="filename"> имя файла </param>
- /// <returns></returns>
- private static List<string> LoadDictionary(string filename)
- {
- return (from e in File.ReadAllLines(Path.Combine(_dictionaryPath, filename), Encoding.UTF8) let w = e.Trim() where w.Length != 0 select w).ToList();
- }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement