public void MergeEmptyLists() { var sut = new ResourceSynchronizer(); var result = sut.MergeLists(Enumerable.Empty <LocalizationResource>(), null, null); Assert.Empty(result); }
/// <summary> /// An IApplicationBuilder extension method that use database localization provider. /// </summary> /// <param name="builder"> The builder to act on. </param> /// <returns> An IApplicationBuilder. </returns> public static IApplicationBuilder UseDbLocalizationProvider(this IApplicationBuilder builder) { var synchronizer = new ResourceSynchronizer(builder.ApplicationServices.GetService <ILocalizationDataService>()); synchronizer.DiscoverAndRegister(); // in cases when there has been already a call to LoclaizationProvider.Current (some static weird things) // and only then setup configuration is ran - here we need to reset instance once again with new settings LocalizationProvider.Initialize(); return(builder); }
public static IApplicationBuilder UseDbLocalizationProvider(this IApplicationBuilder builder) { // create db schema using (var ctx = new LanguageEntities()) ctx.Database.Migrate(); var synchronizer = new ResourceSynchronizer(); synchronizer.DiscoverAndRegister(); // in cases when there has been already a call to LocalizationProvider.Current (some static weird things) // and only then setup configuration is ran - here we need to reset instance once again with new settings LocalizationProvider.Initialize(); return(builder); }
public static void UseDbLocalizationProvider(this IAppBuilder builder, Action <ConfigurationContext> setup = null) { // setup default implementations ConfigurationContext.Current.TypeFactory.ForQuery <AvailableLanguages.Query>().SetHandler <AvailableLanguages.Handler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetTranslation.Query>().SetHandler <GetTranslation.Handler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler <GetAllResources.Handler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetAllTranslations.Query>().SetHandler <GetAllTranslations.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <CreateNewResource.Command>().SetHandler <CreateNewResource.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <DeleteResource.Command>().SetHandler <DeleteResource.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <CreateOrUpdateTranslation.Command>().SetHandler <CreateOrUpdateTranslation.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <ClearCache.Command>().SetHandler <ClearCache.Handler>(); if (setup != null) { ConfigurationContext.Setup(setup); } var synchronizer = new ResourceSynchronizer(); synchronizer.DiscoverAndRegister(); }
public void Merge_AllDifferentResources_ShouldKeepAll() { var sut = new ResourceSynchronizer(); var db = new List <LocalizationResource> { new LocalizationResource("key-from-db") { Translations = new List <LocalizationResourceTranslation>() { new LocalizationResourceTranslation { Language = "en", Value = "English from DB" } } } }; var resources = new List <DiscoveredResource> { new DiscoveredResource(null, "discovered-resource", new List <DiscoveredTranslation> { new DiscoveredTranslation("English discovered resource", "en") }, "", null, null, false, false) }; var models = new List <DiscoveredResource> { new DiscoveredResource(null, "discovered-model", new List <DiscoveredTranslation> { new DiscoveredTranslation("English discovered model", "en") }, "", null, null, false, false) }; var result = sut.MergeLists(db, resources, models); Assert.NotEmpty(result); Assert.Equal(3, result.Count()); }
public void Merge_DatabaseContainsDiscoveredResource_NotModified_ShouldOverwrite_IncludingInvariant() { var sut = new ResourceSynchronizer(); var db = new List <LocalizationResource> { new LocalizationResource("resource-key-1") { Translations = new List <LocalizationResourceTranslation> { new LocalizationResourceTranslation { Language = string.Empty, Value = "Resource-1 INVARIANT from DB" }, new LocalizationResourceTranslation { Language = "en", Value = "Resource-1 English from DB" } } }, new LocalizationResource("resource-key-2") { Translations = new List <LocalizationResourceTranslation> { new LocalizationResourceTranslation { Language = string.Empty, Value = "Resource-2 INVARIANT from DB" }, new LocalizationResourceTranslation { Language = "en", Value = "Resource-2 English from DB" } } } }; var resources = new List <DiscoveredResource> { new DiscoveredResource(null, "resource-key-1", new List <DiscoveredTranslation> { new DiscoveredTranslation("Resource-1 INVARIANT from Discovery", string.Empty), new DiscoveredTranslation("Resource-1 English from Discovery", "en") }, "", null, null, false, false), new DiscoveredResource(null, "discovered-resource", new List <DiscoveredTranslation> { new DiscoveredTranslation("English discovered resource", "en") }, "", null, null, false, false) }; var models = new List <DiscoveredResource> { new DiscoveredResource(null, "discovered-model", new List <DiscoveredTranslation> { new DiscoveredTranslation("English discovered model", "en") }, "", null, null, false, false), new DiscoveredResource(null, "resource-key-2", new List <DiscoveredTranslation> { new DiscoveredTranslation("Resource-2 INVARIANT from Discovery", string.Empty), new DiscoveredTranslation("Resource-2 English from Discovery", "en") }, "", null, null, false, false) }; var result = sut.MergeLists(db, resources, models); Assert.NotEmpty(result); Assert.Equal(4, result.Count()); Assert.Equal("Resource-1 INVARIANT from Discovery", result.First(r => r.ResourceKey == "resource-key-1").Translations.ByLanguage(CultureInfo.InvariantCulture)); Assert.Equal("Resource-1 English from Discovery", result.First(r => r.ResourceKey == "resource-key-1").Translations.ByLanguage("en")); Assert.Equal("Resource-2 INVARIANT from Discovery", result.First(r => r.ResourceKey == "resource-key-2").Translations.ByLanguage(CultureInfo.InvariantCulture)); Assert.Equal("Resource-2 English from Discovery", result.First(r => r.ResourceKey == "resource-key-2").Translations.ByLanguage("en")); }
public static IAppBuilder UseDbLocalizationProvider(this IAppBuilder builder, Action <ConfigurationContext> setup = null) { // setup default implementations ConfigurationContext.Current.TypeFactory.ForQuery <AvailableLanguages.Query>().SetHandler <AvailableLanguages.Handler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetTranslation.Query>().SetHandler <GetTranslation.Handler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler <GetAllResources.Handler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetAllTranslations.Query>().SetHandler <GetAllTranslations.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <CreateNewResource.Command>().SetHandler <CreateNewResource.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <DeleteResource.Command>().SetHandler <DeleteResource.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <CreateOrUpdateTranslation.Command>().SetHandler <CreateOrUpdateTranslation.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <ClearCache.Command>().SetHandler <ClearCache.Handler>(); if (setup != null) { ConfigurationContext.Setup(setup); } var synchronizer = new ResourceSynchronizer(); synchronizer.DiscoverAndRegister(); // set model metadata providers if (ConfigurationContext.Current.ModelMetadataProviders.ReplaceProviders) { // set current provider if (ModelMetadataProviders.Current == null) { if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { ModelMetadataProviders.Current = new CachedLocalizedMetadataProvider(); } else { ModelMetadataProviders.Current = new LocalizedMetadataProvider(); } } else { if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { ModelMetadataProviders.Current = new CompositeModelMetadataProvider <CachedLocalizedMetadataProvider>(ModelMetadataProviders.Current); } else { ModelMetadataProviders.Current = new CompositeModelMetadataProvider <LocalizedMetadataProvider>(ModelMetadataProviders.Current); } } for (var i = 0; i < ModelValidatorProviders.Providers.Count; i++) { var provider = ModelValidatorProviders.Providers[i]; if (!(provider is DataAnnotationsModelValidatorProvider)) { continue; } ModelValidatorProviders.Providers.RemoveAt(i); ModelValidatorProviders.Providers.Insert(i, new LocalizedModelValidatorProvider()); break; } } return(builder); }
private void DiscoverAndRegister(object sender, EventArgs eventArgs) { ConfigurationContext.Setup(ctx => { ctx.CacheManager = new EPiServerCacheManager(); ctx.TypeScanners.Insert(0, new LocalizedCategoryScanner()); ctx.TypeFactory.ForQuery <AvailableLanguages.Query>().SetHandler <EPiServerAvailableLanguages.Handler>(); ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <EPiServerDetermineDefaultCulture.Handler>(); ctx.TypeFactory.ForQuery <GetTranslation.Query>().SetHandler <EPiServerGetTranslation.Handler>(); ctx.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler <GetAllResourcesHandler>(); ctx.TypeFactory.ForQuery <GetAllResources.Query>().DecorateWith <CachedGetAllResourcesHandler>(); ctx.TypeFactory.ForQuery <GetResource.Query>().SetHandler <GetResourceHandler>(); ctx.TypeFactory.ForQuery <GetAllTranslations.Query>().SetHandler <GetAllTranslationsHandler>(); ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <EPiServerDetermineDefaultCulture.Handler>(); ctx.TypeFactory.ForCommand <CreateNewResource.Command>().SetHandler <CreateNewResourceHandler>(); ctx.TypeFactory.ForCommand <DeleteResource.Command>().SetHandler <DeleteResourceHandler>(); ctx.TypeFactory.ForCommand <RemoveTranslation.Command>().SetHandler <RemoveTranslationHandler>(); ctx.TypeFactory.ForCommand <CreateOrUpdateTranslation.Command>().SetHandler <CreateOrUpdateTranslationHandler>(); ctx.TypeFactory.ForCommand <ClearCache.Command>().SetHandler <ClearCacheHandler>(); }); ConfigurationContext.Current.DbContextConnectionString = ConfigurationManager.ConnectionStrings[ConfigurationContext.Current.Connection].ConnectionString; // we have to run resource sync *only* if database is not set in read-only mode // information about database mood at this current moment will give us IDatabaseMode var dbMode = _engine.Locate.Advanced.GetInstance <IDatabaseMode>().DatabaseMode; if (dbMode != DatabaseMode.ReadOnly) { try { // let's try to sync and fail softly var synchronizer = new ResourceSynchronizer(); synchronizer.DiscoverAndRegister(); } catch (Exception e) { _logger.Error("An error occurred while synchronizing resources.", e); } } else { _logger.Information("Skipped resource synchronization due to database being in low mood (ReadOnly)."); } if (ConfigurationContext.Current.ModelMetadataProviders.ReplaceProviders) { if (!_context.Services.Contains(typeof(ModelMetadataProvider))) { // set new provider if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { _context.Services.AddSingleton <ModelMetadataProvider, CachedLocalizedMetadataProvider>(); } else { _context.Services.AddSingleton <ModelMetadataProvider, LocalizedMetadataProvider>(); } } else { var currentProvider = ServiceLocator.Current.GetInstance <ModelMetadataProvider>(); // decorate existing provider if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { _context.Services.AddSingleton <ModelMetadataProvider>( new CompositeModelMetadataProvider <CachedLocalizedMetadataProvider>(currentProvider)); } else { _context.Services.AddSingleton <ModelMetadataProvider>( new CompositeModelMetadataProvider <LocalizedMetadataProvider>(currentProvider)); } } for (var i = 0; i < ModelValidatorProviders.Providers.Count; i++) { var provider = ModelValidatorProviders.Providers[i]; if (!(provider is DataAnnotationsModelValidatorProvider)) { continue; } ModelValidatorProviders.Providers.RemoveAt(i); ModelValidatorProviders.Providers.Insert(i, new LocalizedModelValidatorProvider()); break; } } // in cases when there has been already a call to LocalizationProvider.Current (some static weird things) // and only then setup configuration is ran - here we need to reset instance once again with new settings LocalizationProvider.Initialize(); _context.Services.AddSingleton(LocalizationProvider.Current); }
private void DiscoverAndRegister(object sender, EventArgs eventArgs) { ConfigurationContext.Setup(ctx => { ctx.CacheManager = new EPiServerCacheManager(); ctx.TypeScanners.Insert(0, new LocalizedCategoryScanner()); ctx.TypeFactory.ForQuery <AvailableLanguages.Query>().SetHandler <EPiServerAvailableLanguages.Handler>(); ctx.TypeFactory.ForQuery <GetTranslation.Query>().SetHandler <EPiServerGetTranslation.Handler>(); ctx.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler <GetAllResourcesHandler>(); ctx.TypeFactory.ForQuery <GetAllTranslations.Query>().SetHandler <GetAllTranslationsHandler>(); ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <EPiServerDetermineDefaultCulture.Handler>(); ctx.TypeFactory.ForCommand <CreateNewResource.Command>().SetHandler <CreateNewResourceHandler>(); ctx.TypeFactory.ForCommand <DeleteResource.Command>().SetHandler <DeleteResourceHandler>(); ctx.TypeFactory.ForCommand <CreateOrUpdateTranslation.Command>().SetHandler <CreateOrUpdateTranslationHandler>(); ctx.TypeFactory.ForCommand <ClearCache.Command>().SetHandler <ClearCacheHandler>(); }); ConfigurationContext.Current.DbContextConnectionString = ConfigurationManager.ConnectionStrings[ConfigurationContext.Current.Connection].ConnectionString; var synchronizer = new ResourceSynchronizer(); synchronizer.DiscoverAndRegister(); if (ConfigurationContext.Current.ModelMetadataProviders.ReplaceProviders) { if (!_context.Services.Contains(typeof(ModelMetadataProvider))) { // set new provider if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { _context.Services.AddSingleton <ModelMetadataProvider, CachedLocalizedMetadataProvider>(); } else { _context.Services.AddSingleton <ModelMetadataProvider, LocalizedMetadataProvider>(); } } else { var currentProvider = ServiceLocator.Current.GetInstance <ModelMetadataProvider>(); // decorate existing provider if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { _context.Services.AddSingleton <ModelMetadataProvider>( new CompositeModelMetadataProvider <CachedLocalizedMetadataProvider>(currentProvider)); } else { _context.Services.AddSingleton <ModelMetadataProvider>( new CompositeModelMetadataProvider <LocalizedMetadataProvider>(currentProvider)); } } for (var i = 0; i < ModelValidatorProviders.Providers.Count; i++) { var provider = ModelValidatorProviders.Providers[i]; if (!(provider is DataAnnotationsModelValidatorProvider)) { continue; } ModelValidatorProviders.Providers.RemoveAt(i); ModelValidatorProviders.Providers.Insert(i, new LocalizedModelValidatorProvider()); break; } } // in cases when there has been already a call to LocalizationProvider.Current (some static weird things) // and only then setup configuration is ran - here we need to reset instance once again with new settings LocalizationProvider.Initialize(); _context.Services.AddSingleton(LocalizationProvider.Current); }
public static IAppBuilder UseDbLocalizationProvider(this IAppBuilder builder, Action <ConfigurationContext> setup = null) { // setup default implementations ConfigurationContext.Current.TypeFactory.ForQuery <AvailableLanguages.Query>().SetHandler <AvailableLanguagesHandler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetTranslation.Query>().SetHandler <GetTranslationHandler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler <GetAllResourcesHandler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetAllResources.Query>().DecorateWith <CachedGetAllResourcesHandler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetResource.Query>().SetHandler <GetResourceHandler>(); ConfigurationContext.Current.TypeFactory.ForQuery <GetAllTranslations.Query>().SetHandler <GetAllTranslationsHandler>(); ConfigurationContext.Current.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>(); ConfigurationContext.Current.TypeFactory.ForCommand <CreateNewResource.Command>().SetHandler <CreateNewResourceHandler>(); ConfigurationContext.Current.TypeFactory.ForCommand <DeleteResource.Command>().SetHandler <DeleteResourceHandler>(); ConfigurationContext.Current.TypeFactory.ForCommand <RemoveTranslation.Command>().SetHandler <RemoveTranslationHandler>(); ConfigurationContext.Current.TypeFactory.ForCommand <CreateOrUpdateTranslation.Command>().SetHandler <CreateOrUpdateTranslationHandler>(); ConfigurationContext.Current.TypeFactory.ForCommand <ClearCache.Command>().SetHandler <ClearCacheHandler>(); ConfigurationContext.Current.CacheManager = new HttpCacheManager(); if (setup != null) { ConfigurationContext.Setup(setup); } ConfigurationContext.Current.DbContextConnectionString = ConfigurationManager.ConnectionStrings[ConfigurationContext.Current.Connection].ConnectionString; var synchronizer = new ResourceSynchronizer(); synchronizer.DiscoverAndRegister(); // set model metadata providers if (ConfigurationContext.Current.ModelMetadataProviders.ReplaceProviders) { // set current provider if (ModelMetadataProviders.Current == null) { if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { ModelMetadataProviders.Current = new CachedLocalizedMetadataProvider(); } else { ModelMetadataProviders.Current = new LocalizedMetadataProvider(); } } else { if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { ModelMetadataProviders.Current = new CompositeModelMetadataProvider <CachedLocalizedMetadataProvider>(ModelMetadataProviders.Current); } else { ModelMetadataProviders.Current = new CompositeModelMetadataProvider <LocalizedMetadataProvider>(ModelMetadataProviders.Current); } } for (var i = 0; i < ModelValidatorProviders.Providers.Count; i++) { var provider = ModelValidatorProviders.Providers[i]; if (!(provider is DataAnnotationsModelValidatorProvider)) { continue; } ModelValidatorProviders.Providers.RemoveAt(i); ModelValidatorProviders.Providers.Insert(i, new LocalizedModelValidatorProvider()); break; } } // in cases when there has been already a call to LoclaizationProvider.Current (some static weird things) // and only then setup configuration is ran - here we need to reset instance once again with new settings LocalizationProvider.Initialize(); return(builder); }
public Tests() { var ctx = new ConfigurationContext(); _sut = new ResourceSynchronizer(ctx, new QueryExecutor(ctx), new NullLogger()); }
private void DiscoverAndRegister(object sender, EventArgs eventArgs) { ConfigurationContext.Setup(ctx => { ctx.ConnectionName = "EPiServerDB"; ctx.CacheManager = new EPiServerCacheManager(); ctx.TypeFactory.ForQuery <AvailableLanguages.Query>().SetHandler <EPiServerAvailableLanguages.Handler>(); ctx.TypeFactory.ForQuery <GetTranslation.Query>().SetHandler <EPiServerGetTranslation.Handler>(); ctx.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler <GetAllResources.Handler>(); ctx.TypeFactory.ForQuery <GetAllTranslations.Query>().SetHandler <GetAllTranslations.Handler>(); ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <EPiServerDetermineDefaultCulture.Handler>(); ctx.TypeFactory.ForCommand <CreateNewResource.Command>().SetHandler <CreateNewResource.Handler>(); ctx.TypeFactory.ForCommand <DeleteResource.Command>().SetHandler <DeleteResource.Handler>(); ctx.TypeFactory.ForCommand <CreateOrUpdateTranslation.Command>().SetHandler <CreateOrUpdateTranslation.Handler>(); ctx.TypeFactory.ForCommand <ClearCache.Command>().SetHandler <ClearCache.Handler>(); }); var synchronizer = new ResourceSynchronizer(); synchronizer.DiscoverAndRegister(); if (!ConfigurationContext.Current.ModelMetadataProviders.ReplaceProviders) { return; } var currentProvider = _container.TryGetInstance <ModelMetadataProvider>(); if (currentProvider == null) { // set current provider if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { _container.Configure(ctx => ctx.For <ModelMetadataProvider>().Use <CachedLocalizedMetadataProvider>()); } else { _container.Configure(ctx => ctx.For <ModelMetadataProvider>().Use <LocalizedMetadataProvider>()); } } else { // decorate existing provider if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders) { _container.Configure(ctx => ctx.For <ModelMetadataProvider>(Lifecycles.Singleton) .Use(() => new CompositeModelMetadataProvider <CachedLocalizedMetadataProvider>(currentProvider))); } else { _container.Configure(ctx => ctx.For <ModelMetadataProvider>(Lifecycles.Singleton) .Use(() => new CompositeModelMetadataProvider <LocalizedMetadataProvider>(currentProvider))); } } for (var i = 0; i < ModelValidatorProviders.Providers.Count; i++) { var provider = ModelValidatorProviders.Providers[i]; if (!(provider is DataAnnotationsModelValidatorProvider)) { continue; } ModelValidatorProviders.Providers.RemoveAt(i); ModelValidatorProviders.Providers.Insert(i, new LocalizedModelValidatorProvider()); break; } }