using System.Collections.Generic; using System.Linq; using System.Globalization; using Globalization; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.LastModified; using Sony.Filtr.DistributedCaching; using Sony.Filtr.ErrorLogging; namespace Sony.Filtr.Globalization { public class GlobalizationHandler { private readonly GlobalizationFactory _factory; private readonly LastModifiedManager _lastModifiedManager; private readonly DistributedCacheHandler _cacheHandler; public GlobalizationHandler(GlobalizationFactory globalizationFactory, DistributedCacheHandler distributedCacheHandler, LastModifiedManager lastModifiedManager) { _factory = globalizationFactory; _lastModifiedManager = lastModifiedManager; _cacheHandler = distributedCacheHandler; } private Dictionary> GetTranslations() { var translations = (Dictionary>)_cacheHandler.Get(GetCacheKey()); if (translations == null) { translations = _factory.GetTranslations(); _cacheHandler.Put(GetCacheKey(), translations); } return translations; } public void SetTranslation(string key, Application application, string value) { _factory.SetTranslation(key, application, value); _lastModifiedManager.SetLastModifyDate(application, EntityType.Globalizations); ClearCache(); } public Dictionary GetTranslations(CultureInfo culture) { var cultureTranslations = new Dictionary(); foreach (var tran in GetTranslations()) { var cultureTran = tran.Value.FirstOrDefault(c => c.Key.Name == culture.Name); string value = string.Empty; if (cultureTran.Key != null) value = cultureTran.Value; cultureTranslations.Add(tran.Key, value); } return cultureTranslations; } public Dictionary GetTranslations(Application application) { return GetTranslations(application.CultureInfo); } private string GetCacheKey() { return "Translations:"; } private void ClearCache() { _cacheHandler.Remove(GetCacheKey()); } } }