// Menu -> AddPhrase_LanguageSelection -> AddPhrase private IUserInterface BuildAddPhraseSection <T>() where T : PhraseAndTranslation { string sectionName = "add_phrase"; string textForPhrase, textForTranslation; if (typeof(T) == typeof(RuPhraseAndTranslation)) { textForPhrase = $"{localization[$"{sectionName}:phrase_in_russian"]} ({localization[$"{sectionName}:info_1"]}):"; textForTranslation = $"{localization[$"{sectionName}:phrase_in_english"]} ({localization[$"{sectionName}:info_2"]}):"; } else { textForPhrase = $"{localization[$"{sectionName}:phrase_in_english"]} ({localization[$"{sectionName}:info_1"]}):"; textForTranslation = $"{localization[$"{sectionName}:phrase_in_russian"]} ({localization[$"{sectionName}:info_2"]}):"; } string successAdded = $"{localization[$"{sectionName}:phrase_added"]}. {localization[$"common:press_any_key_to_continue"]}"; TextInputtingInterface.VariableInfoPair[] pairs = new[] { new TextInputtingInterface.VariableInfoPair { Info = textForPhrase }, new TextInputtingInterface.VariableInfoPair { Info = textForTranslation } }; TextInputtingInterface addPhraseInterface = new TextInputtingInterface(pairs, successAdded, () => $"{programName} - {localization[$"{sectionName}:section_name"]}"); addPhraseInterface.OnGettingData += (data) => { string phrase = data.ElementAt(0); string translation = data.ElementAt(1); try { if (typeof(T) == typeof(RuPhraseAndTranslation)) { RuPhraseAndTranslation.Create(phrase, translation, dataContainer.RuPhrasesDb, dataContainer.EnPhrasesDb); } else { EnPhraseAndTranslation.Create(phrase, translation, dataContainer.EnPhrasesDb, dataContainer.RuPhrasesDb); } } catch (PhraseExistsException exception) { exception.Phrase.AddTranslation(translation); } SerializeDataContainer(); }; return(addPhraseInterface); }
public override void AddTranslation(string translation) { int translationListOldCount = Translations.Count(); // В этом методе происходит связывание только с теми объектами, которые содержатся в БД base.AddTranslation(translation); if (translationListOldCount == Translations.Count()) { // Если перевод не добавился, тогда проверяем содержался ли он уже в коллекции Translations if (ContainsTranslation(translation)) { return; } // Если перевода нет в Translations, значит этого объекта нет в translationsDb, поэтому необходимо создать его RuPhraseAndTranslation ruPhrase = new RuPhraseAndTranslation(translation, this, RuPhrasesDb, EnPhrasesDb); Translations.AddLast(ruPhrase); } }
// Нет проверки наличия translation в БД, так как, если был передан объект translation, то он уже добавлен в БД // Если же объект translation был удален из БД, тогда будет брошено исключение ArgumentException public EnPhraseAndTranslation(string phrase, RuPhraseAndTranslation translation, LinkedList <EnPhraseAndTranslation> enPhrasesDb, LinkedList <RuPhraseAndTranslation> ruPhrasesDb) : base(phrase, translation, enPhrasesDb, ruPhrasesDb) { enPhrasesDb.AddLast(this); }
public static EnPhraseAndTranslation Create(string phrase, RuPhraseAndTranslation translation, LinkedList <EnPhraseAndTranslation> enPhrasesDb, LinkedList <RuPhraseAndTranslation> ruPhrasesDb) { return(new EnPhraseAndTranslation(phrase, translation, enPhrasesDb, ruPhrasesDb)); }