Пример #1
0
        /// <summary>
        /// Export из БД
        /// </summary>
        /// <param name="serverName"></param>
        /// <param name="dbName"></param>
        /// <param name="records"></param>
        /// <param name="path"></param>
        /// <param name="isOverwrite"></param>
        public static void Write(string serverName, string dbName, List <BreRecord> records, string path, bool isOverwrite)
        {
            var deploymentDriver = RuleAndVocabDbAdapter.GetDeploymentDriver(serverName, dbName);

            foreach (var record in records) //если флаг isOverwrite = false, проверяем на сущ-ие фаила на диске
            {
                if (!isOverwrite)
                {
                    if (File.Exists(Path.Combine(path, $"{record.Name}-{record.MajorRevision}.{record.MinorRevision}.xml")))
                    {
                        Error?.Invoke($@"фаил {record.Name}-{record.MajorRevision}.{record.MinorRevision} уже существует");
                    }
                }
            }

            foreach (var record in records)
            {
                if (record is RuleRecord)
                {
                    var rule = (RuleRecord)record;
                    deploymentDriver.ExportRuleSetToFileRuleStore(rule.RuleSetInfo, Path.Combine(path, $"{record.Name}-{record.MajorRevision}.{record.MinorRevision}.xml"));
                }

                else
                {
                    var vocab = (VocabRecord)record;
                    deploymentDriver.ExportVocabularyToFileRuleStore(vocab.VocabularyRecord, Path.Combine(path, $"{record.Name}-{record.MajorRevision}.{record.MinorRevision}.xml"));
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Import в БД
        /// </summary>
        /// <param name="serverName"></param>
        /// <param name="dbName"></param>
        /// <param name="records"></param>
        public static void Read(string serverName, string dbName, List <BreRecord> records)
        {
            var deploymentDriver = RuleAndVocabDbAdapter.GetDeploymentDriver(serverName, dbName);

            foreach (var record in records) //при записи в БД необходимо сначала записывать vocab. List<BreRecord> records - это parsed.BreRecods
            {
                if (record is VocabRecord)
                {
                    deploymentDriver.ImportAndPublishFileRuleStore(record.FullFileName);
                }
            }
            foreach (var record in records)
            {
                if (record is RuleRecord)
                {
                    deploymentDriver.ImportAndPublishFileRuleStore(record.FullFileName);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Заполняет  List BreRecords при Export All
        /// </summary>
        /// <param name="serverName"></param>
        /// <param name="dbName"></param>
        /// <returns></returns>
        public static List <BreRecord> CreateFileForWriteAll(string serverName, string dbName)
        {
            var records        = new List <BreRecord>();
            var ruleSetsFromDb = RuleAndVocabDbAdapter.GetRuleSetInfo(serverName, dbName);

            foreach (var rule in ruleSetsFromDb)
            {
                records.Add(new RuleRecord(rule));
            }

            var vocabularySetsFromDb = RuleAndVocabDbAdapter.GetVocabularyInfoSet(serverName, dbName);

            foreach (var vocabulary in vocabularySetsFromDb)
            {
                if (IsIgnorVocab(vocabulary))
                {
                    continue;
                }
                records.Add(new VocabRecord(vocabulary));
            }

            return(records);
        } //List<BreRecord> records-заполненяется rule/vocab из БД
Пример #4
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);
        }