Advertisement
Doomer3D

Generated class for test data generation

Jan 28th, 2014
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 35.01 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////
  2. //                                                            //
  3. //   ◘◘◘◘    ◘◘◘    ◘◘◘    ◘◘◘   ◘◘◘◘    ◘◘◘   ◘◘◘◘   ◘◘◘◘◘   //
  4. //   ◘   ◘  ◘   ◘  ◘   ◘  ◘   ◘  ◘   ◘  ◘   ◘  ◘   ◘    ◘     //
  5. //   ◘   ◘  ◘   ◘  ◘      ◘      ◘   ◘  ◘   ◘  ◘   ◘    ◘     //
  6. //   ◘◘◘◘   ◘◘◘◘◘   ◘◘◘    ◘◘◘   ◘◘◘◘   ◘   ◘  ◘◘◘◘     ◘     //
  7. //   ◘      ◘   ◘      ◘      ◘  ◘      ◘   ◘  ◘   ◘    ◘     //
  8. //   ◘      ◘   ◘  ◘   ◘  ◘   ◘  ◘      ◘   ◘  ◘   ◘    ◘     //
  9. //   ◘      ◘   ◘   ◘◘◘    ◘◘◘   ◘       ◘◘◘   ◘   ◘    ◘     //
  10. //                                                            //
  11. //  Federal Service                                           //
  12. //                                                            //
  13. ////////////////////////////////////////////////////////////////
  14. // Generated                                                  //
  15. ////////////////////////////////////////////////////////////////
  16. //                                                            //
  17. // Authors:         -                                         //
  18. //                                                            //
  19. // Date created:    29.01.2014                                //
  20. // Date modified:   29.01.2014                                //
  21. // Version:         -                                         //
  22. //                                                            //
  23. // Generated by:    -                                         //
  24. //                                                            //
  25. ////////////////////////////////////////////////////////////////
  26.  
  27. using System;
  28. using System.Collections;
  29. using System.Collections.Generic;
  30. using System.IO;
  31. using System.Linq;
  32. using System.Text;
  33. using Passport.MZ.Domain;
  34. using Passport.MZ.Domain.CoreAdmin;
  35.  
  36. namespace Passport.MZ.Testing
  37. {
  38.     /// <summary>
  39.     /// генератор тестовых данных
  40.     /// </summary>
  41.     public class TestDataBuilder
  42.     {
  43.         #region Declarations
  44.        
  45.         /// <summary>
  46.         /// генератор случайных чисел
  47.         /// </summary>
  48.         private Random _rnd;
  49.  
  50.         /// <summary>
  51.         /// зерно генератора случайных чисел
  52.         /// </summary>
  53.         private int _seed;
  54.  
  55.         /// <summary>
  56.         /// хеш делегатов генерации
  57.         /// </summary>
  58.         private Hashtable _hash;
  59.  
  60.         /// <summary>
  61.         /// путь к словарям
  62.         /// </summary>
  63.         private static string _dictionaryPath;
  64.  
  65.         /// <summary>
  66.         /// словарь слов
  67.         /// </summary>
  68.         private static List<string> _words;
  69.  
  70.         /// <summary>
  71.         /// адреса почтовых серверов
  72.         /// </summary>
  73.         private static List<string> dicEMail;
  74.  
  75.         private static List<string> dicMale_Surnames;
  76.  
  77.         private static List<string> dicMale_Names;
  78.  
  79.         private static List<string> dicMale_Patronymics;
  80.  
  81.         private static List<string> dicFemale_Surnames;
  82.  
  83.         private static List<string> dicFemale_Names;
  84.  
  85.         private static List<string> dicFemale_Patronymics;
  86.  
  87.         /// <summary>
  88.         /// Контейнер справочников
  89.         /// </summary>
  90.         private static DictionaryContainer dicContainer;
  91.  
  92.         private static List<string> dicKladr_57;
  93.        
  94.         #endregion
  95.        
  96.         #region Properties
  97.        
  98.         /// <summary>
  99.         /// генератор случайных чисел
  100.         /// </summary>
  101.         public Random Random { get { return _rnd; } }
  102.  
  103.         /// <summary>
  104.         /// зерно генератора случайных чисел
  105.         /// </summary>
  106.         public int Seed
  107.         {
  108.             get
  109.             {
  110.                 return _seed;
  111.             }
  112.             set
  113.             {
  114.                 _seed = value;
  115.                 _rnd = new Random(value);
  116.             }
  117.         }
  118.  
  119.         /// <summary>
  120.         /// путь к словарям
  121.         /// </summary>
  122.         public static string DictionaryPath { get { return _dictionaryPath; } set { _dictionaryPath = value; } }
  123.        
  124.         #endregion
  125.        
  126.         #region Constructors
  127.        
  128.         /// <summary>
  129.         /// конструктор
  130.         /// </summary>
  131.         public TestDataBuilder()
  132.         {
  133.             _hash = new System.Collections.Hashtable(7);
  134.  
  135.             _hash.Add(typeof(PersonAccountain), new GenerateDelegate<PersonAccountain>(Generate_PersonAccountain));
  136.             _hash.Add(typeof(PersonCEO), new GenerateDelegate<PersonCEO>(Generate_PersonCEO));
  137.             _hash.Add(typeof(Classification), new GenerateDelegate<Classification>(Generate_Classification));
  138.             _hash.Add(typeof(Kladr), new GenerateDelegate<Kladr>(Generate_Kladr));
  139.             _hash.Add(typeof(Address), new GenerateDelegate<Address>(Generate_Address));
  140.             _hash.Add(typeof(Registration), new GenerateDelegate<Registration>(Generate_Registration));
  141.             _hash.Add(typeof(PassportLpu), new GenerateDelegate<PassportLpu>(Generate_PassportLpu));
  142.  
  143.             // инициализируем генератор случайных чисел
  144.             _rnd = new Random();
  145.         }
  146.  
  147.         /// <summary>
  148.         /// статический конструктор
  149.         /// </summary>
  150.         static TestDataBuilder()
  151.         {
  152.             // задаем путь к файлам словарей
  153.             _dictionaryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestData");
  154.  
  155.             // инициализируем словари
  156.             _words = LoadDictionary("Words.txt");
  157.             dicEMail = LoadDictionary("Mail.txt");
  158.             dicMale_Surnames = LoadDictionary("Male_Surnames.txt");
  159.             dicMale_Names = LoadDictionary("Male_Names.txt");
  160.             dicMale_Patronymics = LoadDictionary("Male_Patronymics.txt");
  161.             dicFemale_Surnames = LoadDictionary("Female_Surnames.txt");
  162.             dicFemale_Names = LoadDictionary("Female_Names.txt");
  163.             dicFemale_Patronymics = LoadDictionary("Female_Patronymics.txt");
  164.  
  165.             // загружаем справочники
  166.             dicContainer = new DictionaryContainer();
  167.             dicContainer.DictionaryPath = Path.Combine(DictionaryPath, "Dictionaries");
  168.             dicContainer.Load();
  169.             dicKladr_57 = LoadDictionary("Kladr_57.txt");
  170.         }
  171.        
  172.         #endregion
  173.        
  174.         #region Private methods
  175.        
  176.         /// <summary>
  177.         /// делегат генерации
  178.         /// </summary>
  179.         /// <typeparam name="T"> тип </typeparam>
  180.         /// <param name="args"> аргументы </param>
  181.         /// <returns></returns>
  182.         private delegate T GenerateDelegate<T>(params object[] args)
  183.             where T : class;
  184.  
  185.         /// <summary>
  186.         /// получить случайное слово
  187.         /// </summary>
  188.         /// <returns></returns>
  189.         private string GetRandomWord()
  190.         {
  191.             return _words.Count == 0 ? null : _words[_rnd.Next(_words.Count)];
  192.         }
  193.  
  194.         /// <summary>
  195.         /// генерировать адрес электронной почты
  196.         /// </summary>
  197.         /// <returns></returns>
  198.         private string GenerateEMail()
  199.         {
  200.             if (_rnd.NextDouble() > 0.2)
  201.             {
  202.                 return string.Format("{0}@{1}", GetRandomWord(), dicEMail.Count == 0 ? null : dicEMail[_rnd.Next(dicEMail.Count)]);
  203.             }
  204.             else
  205.             {
  206.                 return string.Format("{0}-{1}@{2}", GetRandomWord(), GetRandomWord(), dicEMail.Count == 0 ? null : dicEMail[_rnd.Next(dicEMail.Count)]);
  207.             }
  208.         }
  209.  
  210.         /// <summary>
  211.         /// генерировать номер телефона
  212.         /// </summary>
  213.         /// <returns></returns>
  214.         private string GeneratePhoneNumber()
  215.         {
  216.             return string.Format("+7({0}){1}", _rnd.Next(100, 999), _rnd.Next(1000000, 9999999));
  217.         }
  218.  
  219.         /// <summary>
  220.         /// генерировать класс 'PersonAccountain'
  221.         /// </summary>
  222.         /// <param name="args"> аргументы </param>
  223.         /// <returns></returns>
  224.         private PersonAccountain Generate_PersonAccountain(params object[] args)
  225.         {
  226.             // генерация класса 'PersonAccountain'
  227.             PersonAccountain res = new PersonAccountain();
  228.  
  229.             // генерация поля 'Адрес электронной почты'
  230.             res.Email = GenerateEMail();
  231.  
  232.             // генерация поля 'Факс'
  233.             res.Fax = GeneratePhoneNumber();
  234.  
  235.             // генерация поля 'Должность'
  236.             res.Post = "Главный бухгалтер";
  237.  
  238.             // генерация поля 'Дата назначения на должность'
  239.             res.PostBeginDate = new DateTime((long)Math.Round((double)624511296000000000 + _rnd.NextDouble() * ((double)DateTime.Now.Ticks - (double)624511296000000000))).Date;
  240.  
  241.             // генерация поля 'Номер телефона'
  242.             res.Telephone = GeneratePhoneNumber();
  243.  
  244.             // генерируем ФИО
  245.             if (_rnd.Next(2) == 0)
  246.             {
  247.                 ////////////////////////////////////////////////////////////////
  248.                 // мужской пол
  249.                 ////////////////////////////////////////////////////////////////
  250.                
  251.                 // генериуем фамилию
  252.                 res.LastName = dicMale_Surnames.Count == 0 ? null : dicMale_Surnames[_rnd.Next(dicMale_Surnames.Count)];
  253.                
  254.                 // генериуем имя
  255.                 res.FirstName = dicMale_Names.Count == 0 ? null : dicMale_Names[_rnd.Next(dicMale_Names.Count)];
  256.                
  257.                 // генериуем отчество
  258.                 res.PatroName = dicMale_Patronymics.Count == 0 ? null : dicMale_Patronymics[_rnd.Next(dicMale_Patronymics.Count)];
  259.             }
  260.             else
  261.             {
  262.                 ////////////////////////////////////////////////////////////////
  263.                 // женский пол
  264.                 ////////////////////////////////////////////////////////////////
  265.                
  266.                 // генериуем фамилию
  267.                 res.LastName = dicFemale_Surnames.Count == 0 ? null : dicFemale_Surnames[_rnd.Next(dicFemale_Surnames.Count)];
  268.                
  269.                 // генериуем имя
  270.                 res.FirstName = dicFemale_Names.Count == 0 ? null : dicFemale_Names[_rnd.Next(dicFemale_Names.Count)];
  271.                
  272.                 // генериуем отчество
  273.                 res.PatroName = dicFemale_Patronymics.Count == 0 ? null : dicFemale_Patronymics[_rnd.Next(dicFemale_Patronymics.Count)];
  274.             }
  275.  
  276.             // возвращаем результат
  277.             return res;
  278.         }
  279.  
  280.         /// <summary>
  281.         /// генерировать класс 'PersonCEO'
  282.         /// </summary>
  283.         /// <param name="args"> аргументы </param>
  284.         /// <returns></returns>
  285.         private PersonCEO Generate_PersonCEO(params object[] args)
  286.         {
  287.             // генерация класса 'PersonCEO'
  288.             PersonCEO res = new PersonCEO();
  289.  
  290.             // генерация поля 'Адрес электронной почты'
  291.             res.Email = GenerateEMail();
  292.  
  293.             // генерация поля 'Факс'
  294.             res.Fax = GeneratePhoneNumber();
  295.  
  296.             // генерация поля 'Должность'
  297.             res.Post = "Главный врач";
  298.  
  299.             // генерация поля 'Дата назначения на должность'
  300.             res.PostBeginDate = new DateTime((long)Math.Round((double)624511296000000000 + _rnd.NextDouble() * ((double)DateTime.Now.Ticks - (double)624511296000000000))).Date;
  301.  
  302.             // генерация поля 'Номер телефона'
  303.             res.Telephone = GeneratePhoneNumber();
  304.  
  305.             // генерируем ФИО
  306.             if (_rnd.Next(2) == 0)
  307.             {
  308.                 ////////////////////////////////////////////////////////////////
  309.                 // мужской пол
  310.                 ////////////////////////////////////////////////////////////////
  311.                
  312.                 // генериуем фамилию
  313.                 res.LastName = dicMale_Surnames.Count == 0 ? null : dicMale_Surnames[_rnd.Next(dicMale_Surnames.Count)];
  314.                
  315.                 // генериуем имя
  316.                 res.FirstName = dicMale_Names.Count == 0 ? null : dicMale_Names[_rnd.Next(dicMale_Names.Count)];
  317.                
  318.                 // генериуем отчество
  319.                 res.PatroName = dicMale_Patronymics.Count == 0 ? null : dicMale_Patronymics[_rnd.Next(dicMale_Patronymics.Count)];
  320.             }
  321.             else
  322.             {
  323.                 ////////////////////////////////////////////////////////////////
  324.                 // женский пол
  325.                 ////////////////////////////////////////////////////////////////
  326.                
  327.                 // генериуем фамилию
  328.                 res.LastName = dicFemale_Surnames.Count == 0 ? null : dicFemale_Surnames[_rnd.Next(dicFemale_Surnames.Count)];
  329.                
  330.                 // генериуем имя
  331.                 res.FirstName = dicFemale_Names.Count == 0 ? null : dicFemale_Names[_rnd.Next(dicFemale_Names.Count)];
  332.                
  333.                 // генериуем отчество
  334.                 res.PatroName = dicFemale_Patronymics.Count == 0 ? null : dicFemale_Patronymics[_rnd.Next(dicFemale_Patronymics.Count)];
  335.             }
  336.  
  337.             // возвращаем результат
  338.             return res;
  339.         }
  340.  
  341.         /// <summary>
  342.         /// генерировать ИНН
  343.         /// </summary>
  344.         /// <param name="codeLength"> длина кода </param>
  345.         /// <returns></returns>
  346.         private string GenerateINN(int codeLength)
  347.         {
  348.             if (codeLength == 10)
  349.             {
  350.                 // 10-значный ИНН (для юридических лиц)
  351.                 int[] MUL = new int[] { 2, 4, 10, 3, 5, 9, 4, 6, 8 };
  352.                
  353.                 int sum = 0;
  354.                
  355.                 int[] digits = new int[10];
  356.                 for (int i = 0; i < 9; i++)
  357.                 {
  358.                     digits[i] = _rnd.Next(0, 9);
  359.                     sum += digits[i] * MUL[i];
  360.                 }
  361.                
  362.                 digits[9] = (sum % 11) % 10;
  363.                
  364.                 return string.Join("", digits);
  365.             }
  366.             else
  367.             {
  368.                 // 12-значный ИНН (для физических лиц)
  369.                 int[] MUL_1 = new int[] { 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
  370.                 int[] MUL_2 = new int[] { 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
  371.                
  372.                 int sum10 = 0;
  373.                 int sum11 = 0;
  374.                
  375.                 int[] digits = new int[12];
  376.                 for (int i = 0; i < 10; i++)
  377.                 {
  378.                     digits[i] = _rnd.Next(0, 9);
  379.                     sum10 += digits[i] * MUL_1[i];
  380.                     sum11 += digits[i] * MUL_2[i];
  381.                 }
  382.                
  383.                 digits[10] = (sum10 % 11) % 10;
  384.                 digits[11] = ((sum11 + (digits[10] * MUL_2[10])) % 11) % 10;
  385.                
  386.                 return string.Join("", digits);
  387.             }
  388.         }
  389.  
  390.         /// <summary>
  391.         /// генерировать ОГРН
  392.         /// </summary>
  393.         /// <param name="codeLength"> длина кода </param>
  394.         /// <returns></returns>
  395.         private string GenerateOGRN(int codeLength)
  396.         {
  397.             int total = codeLength == 13 ? 13 : 15;
  398.             int[] digits = new int[total];
  399.             int count = total - 1;
  400.             int sum = 0;
  401.             for (int i = 0; i < count; i++)
  402.             {
  403.                 sum += digits[i] = _rnd.Next(0, 9);
  404.             }
  405.             digits[count] = (sum % (total - 2)) % 10;
  406.             return string.Join("", digits);
  407.         }
  408.  
  409.         /// <summary>
  410.         /// генерировать адрес сайта
  411.         /// </summary>
  412.         /// <returns></returns>
  413.         private string GenerateURL()
  414.         {
  415.             double value = _rnd.NextDouble();
  416.             if (value > 0.4)
  417.             {
  418.                 return string.Format("www.{0}.ru", GetRandomWord());
  419.             }
  420.             else if (value > 0.2)
  421.             {
  422.                 return string.Format("www.{0}-{1}.ru", GetRandomWord(), GetRandomWord());
  423.             }
  424.             else
  425.             {
  426.                 return string.Format("www.{0}.{1}.ru", GetRandomWord(), GetRandomWord());
  427.             }
  428.         }
  429.  
  430.         /// <summary>
  431.         /// генерировать класс 'Classification'
  432.         /// </summary>
  433.         /// <param name="args"> аргументы </param>
  434.         /// <returns></returns>
  435.         private Classification Generate_Classification(params object[] args)
  436.         {
  437.             // генерация класса 'Classification'
  438.             Classification res = new Classification();
  439.  
  440.             // генерация поля 'ОКАТО'
  441.             res.OKATO = _rnd.Next(100000000, 999999999).ToString();
  442.  
  443.             // генерация поля 'ОКДП'
  444.             res.OKDP = _rnd.Next(100000000, 999999999).ToString();
  445.  
  446.             // генерация поля 'ОКФС'
  447.             res.OKFS = _rnd.Next(100000000, 999999999).ToString();
  448.  
  449.             // генерация поля 'ОКОГУ'
  450.             res.OKOGU = _rnd.Next(100000000, 999999999).ToString();
  451.  
  452.             // генерация поля 'ОКОНХ'
  453.             res.OKONX = _rnd.Next(100000000, 999999999).ToString();
  454.  
  455.             // генерация поля 'ОКОПФ'
  456.             res.OKOPF = _rnd.Next(100000000, 999999999).ToString();
  457.  
  458.             // генерация поля 'ОКПО'
  459.             res.OKPO = _rnd.Next(100000000, 999999999).ToString();
  460.  
  461.             // генерация поля 'ОКУН'
  462.             res.OKUN = _rnd.Next(100000000, 999999999).ToString();
  463.  
  464.             // генерация поля 'ОКВЭД'
  465.             res.OKVED = _rnd.Next(100000000, 999999999).ToString();
  466.  
  467.             // генерация поля 'ПФР'
  468.             res.PFR = _rnd.Next(100000000, 999999999).ToString();
  469.  
  470.             // возвращаем результат
  471.             return res;
  472.         }
  473.  
  474.         /// <summary>
  475.         /// генерировать класс 'Kladr'
  476.         /// </summary>
  477.         /// <param name="args"> аргументы </param>
  478.         /// <returns></returns>
  479.         private Kladr Generate_Kladr(params object[] args)
  480.         {
  481.             // генерация класса 'Kladr'
  482.             Kladr res = new Kladr();
  483.  
  484.             // генерация поля 'Идентификатор'
  485.             res.ID = long.Parse(dicKladr_57.Count == 0 ? null : dicKladr_57[_rnd.Next(dicKladr_57.Count)]);
  486.  
  487.             // возвращаем результат
  488.             return res;
  489.         }
  490.  
  491.         /// <summary>
  492.         /// генерировать класс 'Address'
  493.         /// </summary>
  494.         /// <param name="args"> аргументы </param>
  495.         /// <returns></returns>
  496.         private Address Generate_Address(params object[] args)
  497.         {
  498.             // генерация класса 'Address'
  499.             Address res = new Address();
  500.  
  501.             // генерация поля 'Тип адреса'
  502.             res.AddressType = GetRandomDictionaryEntry<DAddressType>();
  503.  
  504.             // генерация поля 'КЛАДР'
  505.             res.KladrExport = Generate_Kladr();
  506.  
  507.             // генерация поля 'Почтовый индекс'
  508.             res.PostIndex = _rnd.Next(614000, 619999);
  509.  
  510.             // генерация поля 'Квартира'
  511.             res.Appartment = _rnd.Next(1, 128).ToString();
  512.  
  513.             // генерация поля 'Строение'
  514.             {
  515.                 double w = _rnd.NextDouble();
  516.                 if (w < 0.571428571428571)
  517.                 {
  518.                 }
  519.                 else if (w < 0.857142857142857)
  520.                 {
  521.                     res.Building = "А";
  522.                 }
  523.                 else
  524.                 {
  525.                     res.Building = "Б";
  526.                 }
  527.             }
  528.  
  529.             // генерация поля 'Дом'
  530.             res.Home = _rnd.Next(1, 99).ToString();
  531.  
  532.             // возвращаем результат
  533.             return res;
  534.         }
  535.  
  536.         /// <summary>
  537.         /// генерировать класс 'Registration'
  538.         /// </summary>
  539.         /// <param name="args"> аргументы </param>
  540.         /// <returns></returns>
  541.         private Registration Generate_Registration(params object[] args)
  542.         {
  543.             // генерация класса 'Registration'
  544.             Registration res = new Registration();
  545.  
  546.             // генерация поля 'Дата регистрации'
  547.             res.RegDate = new DateTime((long)Math.Round((double)615044448000000000 + _rnd.NextDouble() * ((double)DateTime.Now.Ticks - (double)615044448000000000))).Date;
  548.  
  549.             // генерация поля 'Документ о регистрации'
  550.             res.RegDoc = "Свидетельство о государственной регистрации юридического лица";
  551.  
  552.             // генерация поля 'Регистрационный номер'
  553.             res.RegNumber = _rnd.Next(100, 8000).ToString();
  554.  
  555.             // генерация поля 'Наименование регистрирующего органа'
  556.             res.RegOrgName = "<Регистрирующий орган>";
  557.  
  558.             // возвращаем результат
  559.             return res;
  560.         }
  561.  
  562.         /// <summary>
  563.         /// генерировать класс 'PassportLpu'
  564.         /// </summary>
  565.         /// <param name="args"> аргументы </param>
  566.         /// <returns></returns>
  567.         private PassportLpu Generate_PassportLpu(params object[] args)
  568.         {
  569.             // генерация класса 'PassportLpu'
  570.             PassportLpu res = new PassportLpu();
  571.  
  572.             // генерация поля 'ИНН'
  573.             res.Inn = GenerateINN(10);
  574.  
  575.             // генерация поля 'Учреждение (городское/сельское)'
  576.             res.IsCityInstitution = _rnd.Next(2) == 0;
  577.  
  578.             // генерация поля 'Применение стандартов медицинской помощи'
  579.             switch (_rnd.Next(3))
  580.             {
  581.                 case 0:
  582.                     res.IsMedHelp = true;
  583.                     break;
  584.                 case 1:
  585.                     res.IsMedHelp = false;
  586.                     break;
  587.                 default:
  588.                     res.IsMedHelp = null;
  589.                     break;
  590.             }
  591.  
  592.             // генерация поля 'Признак участия учреждения в ДЛО'
  593.             res.IsParticDlo = _rnd.Next(2) == 0;
  594.  
  595.             // генерация поля 'Участие учреждения в работе по системе ОМС'
  596.             res.IsParticOms = _rnd.Next(2) == 0;
  597.  
  598.             // генерация поля 'КПФ'
  599.             res.Kpf = _rnd.Next(10000000, 99999999).ToString();
  600.  
  601.             // генерация поля 'КПП'
  602.             res.Kpp = _rnd.Next(0, 999999999).ToString("000000000");
  603.  
  604.             // генерация поля 'ОГРН'
  605.             res.Ogrn = GenerateOGRN(13);
  606.  
  607.             // генерация поля 'Количество подчиненных учреждений'
  608.             res.SubLpuAmt = _rnd.Next(0, 5);
  609.  
  610.             // генерация поля 'Адрес электронной почты'
  611.             res.SEmail = GenerateEMail();
  612.  
  613.             // генерация поля 'Адрес сайта в интернете'
  614.             res.SSite = GenerateURL();
  615.  
  616.             // генерация поля 'Номер телефона справочной'
  617.             res.STelHelp = GeneratePhoneNumber();
  618.  
  619.             // генерация поля 'Номер телефона регистратуры'
  620.             res.STelReg = GeneratePhoneNumber();
  621.  
  622.             // генерация поля 'Городское, чел.'
  623.             res.CityPopul = _rnd.Next(100, 1000);
  624.  
  625.             // генерация поля 'Сельское, чел.'
  626.             res.CountryPopul = _rnd.Next(100, 1000);
  627.  
  628.             // генерация поля 'Расстояние до наиболее удаленной точки территориального обслуживания'
  629.             res.Distance = _rnd.Next(0, 50);
  630.  
  631.             // генерация поля 'Население, чел.'
  632.             res.Population = res.CityPopul + res.CountryPopul;
  633.  
  634.             // генерация поля 'Количество участков'
  635.             res.UnitQuantity = _rnd.Next(0, 20);
  636.  
  637.             // генерация поля 'Проживание сопровождающих лиц'
  638.             res.IsCare = _rnd.Next(2) == 0;
  639.  
  640.             // генерация поля 'Ограждение территории'
  641.             res.IsFence = _rnd.Next(2) == 0;
  642.  
  643.             // генерация поля 'Приспособленность территории для пациентов с ограниченными возможностями'
  644.             res.IsForInvalidMan = _rnd.Next(2) == 0;
  645.  
  646.             // генерация поля 'Наличие металлических входных дверей в здание'
  647.             res.IsMetallDoor = _rnd.Next(2) == 0;
  648.  
  649.             // генерация поля 'Наличие охраны'
  650.             res.IsProtection = _rnd.Next(2) == 0;
  651.  
  652.             // генерация поля 'Видеонаблюдение территорий и помещений для здания'
  653.             res.IsSurveillance = _rnd.Next(2) == 0;
  654.  
  655.             // генерация поля 'Местоположение учреждения'
  656.             res.Location = GetRandomDictionaryEntry<DLocationLpu>();
  657.  
  658.             // генерация поля 'Расположение учреждения'
  659.             res.Territory = GetRandomDictionaryEntry<DRaspolojLpu>();
  660.  
  661.             // генерация поля 'Главный бухгалтер учреждения'
  662.             res.Accountain = Generate_PersonAccountain();
  663.  
  664.             // генерация поля 'Руководитель учреждения'
  665.             res.CEO = Generate_PersonCEO();
  666.  
  667.             // генерация поля 'Классификационные данные'
  668.             res.Classification = Generate_Classification();
  669.  
  670.             // генерация поля 'Адреса учреждения'
  671.             {
  672.                 int count = _rnd.Next(1, 5);
  673.                 res.LpuAddressList = new List<Address>(count);
  674.                 for (int i = 0; i < count; i++)
  675.                 {
  676.                     res.LpuAddressList.Add(Generate_Address());
  677.                 }
  678.             }
  679.  
  680.             // генерация поля 'Регистрационные данные'
  681.             {
  682.                 int count = _rnd.Next(1, 2);
  683.                 res.RegistrationList = new List<Registration>(count);
  684.                 for (int i = 0; i < count; i++)
  685.                 {
  686.                     res.RegistrationList.Add(Generate_Registration());
  687.                 }
  688.             }
  689.  
  690.             // генерация поля 'Уровень учреждения в иерархии сети'
  691.             res.InstLevels = GetRandomDictionaryEntry<DInstLevels>();
  692.  
  693.             // генерация поля 'Тип учреждения'
  694.             res.InstType = GetRandomDictionaryEntry<DInsTypeNew>();
  695.  
  696.             // генерация поля 'Ведомственная принадлежность'
  697.             res.LpuOwnership = GetRandomDictionaryEntry<DFoiv>();
  698.  
  699.             // генерация поля 'Категория подчиненности учреждения'
  700.             res.LpuSubCategory = GetRandomDictionaryEntry<DSubcategory>();
  701.  
  702.             // генерация поля 'Организационно-правовая форма'
  703.             res.OrgPravForm = GetRandomDictionaryEntry<DOfps>();
  704.  
  705.             // генерация поля 'Форма собственности'
  706.             res.SobstvForm = GetRandomDictionaryEntry<DVidSobstv>();
  707.  
  708.             // возвращаем результат
  709.             return res;
  710.         }
  711.        
  712.         #endregion
  713.        
  714.         #region Public methods
  715.        
  716.         /// <summary>
  717.         /// генерировать сущность
  718.         /// </summary>
  719.         /// <param name="type"> тип </param>
  720.         /// <returns></returns>
  721.         public object Generate(Type type)
  722.         {
  723.             Delegate res = _hash[type] as Delegate;
  724.             if (res == null)
  725.             {
  726.                 throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", type.FullName));
  727.             }
  728.             else
  729.             {
  730.                 return res.DynamicInvoke();
  731.             }
  732.         }
  733.  
  734.         /// <summary>
  735.         /// генерировать сущность
  736.         /// </summary>
  737.         /// <param name="type"> тип </param>
  738.         /// <param name="seed"> зерно генератора случайных чисел </param>
  739.         /// <returns></returns>
  740.         public object Generate(Type type, int seed)
  741.         {
  742.             Delegate res = _hash[type] as Delegate;
  743.             if (res == null)
  744.             {
  745.                 throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", type.FullName));
  746.             }
  747.             else
  748.             {
  749.                 return res.DynamicInvoke();
  750.             }
  751.         }
  752.  
  753.         /// <summary>
  754.         /// генерировать сущность
  755.         /// </summary>
  756.         /// <typeparam name="T"> тип возвращаемого значения </typeparam>
  757.         /// <returns></returns>
  758.         public T Generate<T>()
  759.             where T : class
  760.         {
  761.             GenerateDelegate<T> res = _hash[typeof(T)] as GenerateDelegate<T>;
  762.             if (res == null)
  763.             {
  764.                 throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", typeof(T).FullName));
  765.             }
  766.             else
  767.             {
  768.                 return res();
  769.             }
  770.         }
  771.  
  772.         /// <summary>
  773.         /// генерировать сущность
  774.         /// </summary>
  775.         /// <typeparam name="T"> тип возвращаемого значения </typeparam>
  776.         /// <param name="seed"> зерно генератора случайных чисел </param>
  777.         /// <returns></returns>
  778.         public T Generate<T>(int seed)
  779.             where T : class
  780.         {
  781.             GenerateDelegate<T> res = _hash[typeof(T)] as GenerateDelegate<T>;
  782.             if (res == null)
  783.             {
  784.                 throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", typeof(T).FullName));
  785.             }
  786.             else
  787.             {
  788.                 return res();
  789.             }
  790.         }
  791.  
  792.         /// <summary>
  793.         /// генерировать сущность
  794.         /// </summary>
  795.         /// <param name="type"> тип </param>
  796.         /// <param name="seed"> зерно генератора случайных чисел </param>
  797.         /// <param name="args"> аргументы </param>
  798.         /// <returns></returns>
  799.         public object Generate(Type type, Nullable<int> seed, params object[] args)
  800.         {
  801.             Delegate res = _hash[type] as Delegate;
  802.             if (res == null)
  803.             {
  804.                 throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", type.FullName));
  805.             }
  806.             else
  807.             {
  808.                 return res.DynamicInvoke(args);
  809.             }
  810.         }
  811.  
  812.         /// <summary>
  813.         /// генерировать сущность
  814.         /// </summary>
  815.         /// <typeparam name="T"> тип возвращаемого значения </typeparam>
  816.         /// <param name="seed"> зерно генератора случайных чисел </param>
  817.         /// <param name="args"> аргументы </param>
  818.         /// <returns></returns>
  819.         public T Generate<T>(Nullable<int> seed, params object[] args)
  820.             where T : class
  821.         {
  822.             GenerateDelegate<T> res = _hash[typeof(T)] as GenerateDelegate<T>;
  823.             if (res == null)
  824.             {
  825.                 throw new NotImplementedException(string.Format("Генератор для класса '{0}' не реализован", typeof(T).FullName));
  826.             }
  827.             else
  828.             {
  829.                 return res(args);
  830.             }
  831.         }
  832.  
  833.         /// <summary>
  834.         /// получить случайное значение из справочника
  835.         /// </summary>
  836.         /// <typeparam name="T"> тип справочника </typeparam>
  837.         /// <returns></returns>
  838.         public T GetRandomDictionaryEntry<T>()
  839.             where T : class
  840.         {
  841.             var list = dicContainer[typeof(T)];
  842.             if (list.Count == 0)
  843.             {
  844.                 return null;
  845.             }
  846.             else
  847.             {
  848.                 return list[_rnd.Next(list.Count)] as T;
  849.             }
  850.         }
  851.        
  852.         #endregion
  853.        
  854.         #region Static methods
  855.        
  856.         /// <summary>
  857.         /// загрузить словарь
  858.         /// </summary>
  859.         /// <param name="filename"> имя файла </param>
  860.         /// <returns></returns>
  861.         private static List<string> LoadDictionary(string filename)
  862.         {
  863.             return (from e in File.ReadAllLines(Path.Combine(_dictionaryPath, filename), Encoding.UTF8) let w = e.Trim() where w.Length != 0 select w).ToList();
  864.         }
  865.        
  866.         #endregion
  867.        
  868.     }
  869. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement