using System; using System.Collections.Generic; using System.Linq; using System.Globalization; using Globalization; using Sony.Filtr.Core.LastModified; using Sony.Filtr.DistributedCaching; namespace Sony.Filtr.Globalization { public class GlobalizationHandler2 { private readonly GlobalizationFactory2 _factory; private readonly LastModifiedManager _lastModifiedManager; private readonly DistributedCacheHandler _cacheHandler; public GlobalizationHandler2(GlobalizationFactory2 globalizationFactory, DistributedCacheHandler distributedCacheHandler, LastModifiedManager lastModifiedManager) { _factory = globalizationFactory; _lastModifiedManager = lastModifiedManager; _cacheHandler = distributedCacheHandler; } public GlobalizationKey AddKey(string key) { ClearCache(); return _factory.AddKey(key); } public List GetKeys() { return _factory.GetKeys(); } private List GetTranslations() { var cacheKey = GetCacheKey(); var translations = _cacheHandler.Get(cacheKey) as List; if (translations == null) { translations = _factory.GetTranslations(); _cacheHandler.Put(cacheKey, translations); } return translations; } public List GetTranslatedLanguages() { return GetTranslations().GroupBy(t=> t.CultureInfo).Where(t=> t.Any(v=> !string.IsNullOrEmpty(v.Value))).Select(t => t.Key).Distinct().ToList(); } public void SetTranslation(GlobalizationKey key, CultureInfo culture, string value) { _factory.SetTranslation(key.Id, culture, value); //_lastModifiedManager.SetLastModifyDate(application, EntityType.Globalizations); ClearCache(); } public List GetTranslations(CultureInfo culture) { return GetTranslations().Where(c => c.CultureInfo.Equals(culture)).ToList(); } private string GetCacheKey() { return "Translations2:"; } private void ClearCache() { _cacheHandler.Remove(GetCacheKey()); } public GlobalizationKey GetKey(int keyId) { return GetKeys().Single(k => k.Id == keyId); } public void DeleteKey(GlobalizationKey key) { _factory.DeleteKey(key); ClearCache(); } } [Serializable] public class GlobalizationKey { public int Id { get; set; } public string Key { get; set; } } [Serializable] public class GlobalizationValue { public GlobalizationKey GlobalizationKey { get; set; } public CultureInfo CultureInfo { get; set; } public string Value { get; set; } } }