Ejemplo n.º 1
0
        /// <summary>
        /// Вспомогательный метод для поиска словаря указанного без версии
        /// </summary>
        /// <param name="tempRecord"></param>
        /// <param name="vocabularySets"></param>
        /// <returns></returns>
        public static List <VocabularyInfo> FindVocabWhenVersionNotDefined(BreRecord tempRecord,
                                                                           VocabularyInfo[] vocabularySets)
        {
            var searchedVocab = vocabularySets.Where(_ => _.Name.Equals(tempRecord.Name)).ToList();

            return(searchedVocab.Count == 0 ? null : searchedVocab);
        }
Ejemplo n.º 2
0
        } //List<BreRecord> records-заполненяется rule/vocab из БД

        /// <summary>
        /// Создает инстанс BreRecord на основе ruleNames из CMD.Далее этот инстанс используется для поиска и создания RuleRecord или VocabRecord в методе CreateFileForWriteList()
        /// </summary>
        /// <param name="ruleName"></param>
        /// <returns></returns>
        public static BreRecord CreateRecord(string ruleName)
        {
            var nameAndVersion = ruleName.Split(',');

            if (nameAndVersion.Length == 1)
            {
                var tempBreRecord = new BreRecord()
                {
                    Name          = ruleName,
                    UseMaxVersion = true
                };
                return(tempBreRecord);
            }
            else
            {
                var version       = nameAndVersion[1].Split('.');
                var tempBreRecord = new BreRecord() //version[0]-majorVersion,[1]-minorVersion
                {
                    Name          = nameAndVersion[0],
                    MajorRevision = int.Parse(version[0]), //TODO поверять валидность версий
                    MinorRevision = int.Parse(version[1]),
                    FullFileName  = $"{nameAndVersion[0]}-{version[0]}.{version[1]}.xml"
                };
                return(tempBreRecord);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Вспомогательный метод для поиска правила максимальной версии
        /// </summary>
        /// <param name="tempRecord"></param>
        /// <param name="ruleSetsFromDb"></param>
        /// <returns></returns>
        public static RuleSetInfo FindMaxVersionForRule(BreRecord tempRecord, RuleSetInfo[] ruleSetsFromDb)
        {
            var subset =
                ruleSetsFromDb
                .Where(_ => _.Name == tempRecord.Name)
                .OrderByDescending(_ => _.MajorRevision)
                .ThenByDescending(_ => _.MinorRevision)
                .FirstOrDefault();     //если не нашел вернется null

            return(subset);
        }
Ejemplo n.º 4
0
        public void TestCommandLineParserUsingMaxVersion()
        {
            var args   = new[] { "--mode", "export-list", "--db-server", "name", "--rule-names", "rName1" };
            var result = CmdParser.Parse(args);
            var same   = new Args
            {
                Mode       = Mode.ExportList,
                BreRecords = new List <BreRecord>()
            };
            var rule = new BreRecord()
            {
                UseMaxVersion = true
            };

            same.RuleNames.Add(rule);
            Assert.AreEqual(result.Mode, same.Mode);
            for (var i = 0; i < result.RuleNames.Count; i++)
            {
                Assert.AreEqual(result.RuleNames[i].UseMaxVersion, same.RuleNames[i].UseMaxVersion);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        ///При Export List находит rule или vocab В БД.Возвращает инстанс BreRecord предсятавляющий найденый rule/vocab
        /// </summary>
        /// <param name="serverName"></param>
        /// <param name="dbName"></param>
        /// <param name="tempRecord"></param>
        public static List <BreRecord> CreateFileForWriteList(string serverName, string dbName, BreRecord tempRecord) // заполняет lIst рапарсенных rule-names
        {
            var foundedRuleOrVocab   = new List <BreRecord>();
            var ruleSetsFromDb       = RuleAndVocabDbAdapter.GetRuleSetInfo(serverName, dbName);
            var vocabularySetsFromDb = RuleAndVocabDbAdapter.GetVocabularyInfoSet(serverName, dbName);

            if (tempRecord.UseMaxVersion)                                     //для rule ведется поиск максимальной версии на основе переданного имени(версия не указана).При удачном поиске из БД вернется единственная запись-макс.версия для этого правила.
            {                                                                 //Для vocab ведется поиск  на основе переданного имени, не макс.версии,а всех версий этого vocab.При удачном поиске из БД вернется от 1 до n версий данного словаря
                var rule = FindMaxVersionForRule(tempRecord, ruleSetsFromDb); //сначала ищем совпадение имени переданного в ЦМД в массиве rule из БД.Совпалений нет?return null
                if (rule == null)
                {
                    var searchedVocab = FindVocabWhenVersionNotDefined(tempRecord, vocabularySetsFromDb); // продолжаем поиск в списке vocab из БД.Совпадений нет?Error
                    if (searchedVocab == null)
                    {
                        Error?.Invoke(
                            $@"rule/vocab переданное в CMD {tempRecord.Name} не найдено в БД"); //либо правило\словарь реально отсутствует, либо введено с ошибками
                    }
                    foreach (var file in searchedVocab)
                    {
                        foundedRuleOrVocab.Add(new VocabRecord(file));
                    }
                }
                else
                {
                    foundedRuleOrVocab.Add(new RuleRecord(rule)); //совпадения есть-запись  записываем rule в List
                }
            }

            else //для rule и vocab ведестся поиск конкретной записи по имени и версии.
            {
                var fileIsFound = false;
                foreach (var rule in ruleSetsFromDb)
                {
                    var fullRuleName =
                        $"{rule.Name}-{rule.MajorRevision}.{rule.MinorRevision}.xml";
                    if (fullRuleName == tempRecord.FullFileName) //сравниваются имена из БД с именами из ЦМД
                    {
                        foundedRuleOrVocab.Add(new RuleRecord(rule));
                        fileIsFound = true;
                        break;
                    }

                    foreach (var vocab in vocabularySetsFromDb)
                    {
                        var fullVocabName =
                            $"{vocab.Name}-{vocab.MajorRevision}.{vocab.MinorRevision}.xml";
                        if (fullVocabName == tempRecord.FullFileName)
                        {
                            foundedRuleOrVocab.Add(new VocabRecord(vocab));
                            fileIsFound = true;
                            break;
                        }
                    }
                }

                if (!fileIsFound)
                {
                    Error?.Invoke($@"rule/vocab переданное в CMD {tempRecord.Name} не найдено в БД");
                }
            }
            return(foundedRuleOrVocab);
        }