/// <summary> /// Executes an action on default culture text if it does not exist. Actions include - nothing, create empty string, copy current culture text /// </summary> /// <param name="actionForDefaultCulture">Specific action</param> /// <param name="dynamicText">Current dynamic text entity</param> /// <param name="currentCulture">Current culture entity</param> /// <param name="dictionaryScope">Current dictionary scope entity</param> /// <param name="dbContext">Database context</param> /// <param name="dao">DAO of static text entity</param> private void ExecuteDefaultCultureAction(IfDefaultNotExistAction actionForDefaultCulture, DynamicText dynamicText, Culture currentCulture, DictionaryScope dictionaryScope, IDatabaseStaticTextContext dbContext, StaticTextDao dao) { var defaultCulture = GetDefaultCulture(dbContext); if (currentCulture == defaultCulture) { return; } var defaultText = dao.FindByNameAndCultureAndScope( dynamicText.Name, defaultCulture, dictionaryScope, dbContext.CultureHierarchy ); if (defaultText != null) { return; } defaultText = new StaticText { Format = dynamicText.Format, ModificationTime = DateTime.UtcNow, ModificationUser = dynamicText.ModificationUser, Name = dynamicText.Name, Culture = defaultCulture, DictionaryScope = dictionaryScope, }; switch (actionForDefaultCulture) { case IfDefaultNotExistAction.DoNothing: return; case IfDefaultNotExistAction.CreateEmpty: defaultText.Text = string.Empty; dao.Create(defaultText); break; case IfDefaultNotExistAction.CreateTextCopy: defaultText.Text = dynamicText.Text; dao.Create(defaultText); break; default: throw new ArgumentOutOfRangeException(nameof(actionForDefaultCulture), actionForDefaultCulture, "Invalid default language save action"); } }
public DynamicText SaveDynamicText(DynamicText dynamicText, IfDefaultNotExistAction actionForDefaultCulture = IfDefaultNotExistAction.DoNothing) { using (var dbContext = m_dbContextFunc.Invoke()) { var dao = new StaticTextDao(dbContext.StaticText); var dictionaryScope = GetDictionaryScope(dbContext, dynamicText.DictionaryScope); if (dictionaryScope.Name != dynamicText.DictionaryScope) { dictionaryScope = CreateDictionaryScope(dbContext, dynamicText.DictionaryScope); } var culture = GetCultureByNameOrGetDefault(dbContext, dynamicText.Culture); var existsInCulture = culture.Name == dynamicText.Culture; if (!existsInCulture) { culture = CreateCulture(dbContext, dynamicText.Culture); CreateCultureHierarchy(dbContext, culture); } var staticText = dao.FindByNameAndCultureAndScope( dynamicText.Name, culture, dictionaryScope, dbContext.CultureHierarchy ); if (staticText == null || !existsInCulture || staticText.CultureId != culture.Id) { staticText = new StaticText { Format = dynamicText.Format, ModificationTime = DateTime.UtcNow, ModificationUser = dynamicText.ModificationUser, Name = dynamicText.Name, Text = dynamicText.Text, Culture = culture, DictionaryScope = dictionaryScope }; dao.Create(staticText); } else { staticText.Format = dynamicText.Format; staticText.ModificationTime = DateTime.UtcNow; staticText.ModificationUser = dynamicText.ModificationUser; staticText.Name = dynamicText.Name; staticText.Text = dynamicText.Text; dao.Update(staticText); } ExecuteDefaultCultureAction(actionForDefaultCulture, dynamicText, culture, dictionaryScope, dbContext, dao); dbContext.SaveChanges(); return(dynamicText); } }