/// <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")); } } }
/// <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); } } }
/// <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 из БД
/// <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); }