ISiteConfigEntry ISiteConfigProvider.GetEntry(string key) { ISiteConfigEntry item = null; items.TryGetValue(key, out item); return(item); }
private static object ParseValueFromEntry(PropertyDescriptor pd, ISiteConfigEntry entry) { if (pd.PropertyType == typeof(SecureString) && entry is ISecureSiteConfigEntry) { return(((ISecureSiteConfigEntry)entry).SecureValue); } return(ParseValue(pd, entry.Value)); }
void ISiteConfigProvider.CreateEntry(ISiteConfigEntry entry) { SiteConfigEntry item = manager.Create <SiteConfigEntry>(); item.Key = entry.Key; item.Value = entry.Value; item.UseDefaultValue = entry.UseDefaultValue; item.Category = entry.Category; item.Description = entry.Description; if (entry is ISecureSiteConfigEntry) { item.SecureValue = ((ISecureSiteConfigEntry)entry).SecureValue; } }
private static T LoadInternal(Guid siteId) { T config = new T(); config.siteId = siteId; using (SPSite elevatedSite = new SPSite(siteId, SPUserToken.SystemAccount)) { SiteConfigProviderAttribute attribute = typeof(T).GetCustomAttribute <SiteConfigProviderAttribute>(false); ISiteConfigProvider provider; if (attribute == null) { provider = new SiteConfigProvider(); } else { provider = (ISiteConfigProvider)attribute.ProviderType.CreateInstance(); } provider.Initialize(elevatedSite); foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(config)) { ISiteConfigEntry entry = provider.GetEntry(pd.Name); bool needUpdate = false; bool needCreate = false; if (entry == null || entry.UseDefaultValue) { string defaultValueString = String.Empty; try { pd.ResetValue(config); defaultValueString = Convert.ToString(pd.GetValue(config)); } catch (ArgumentException) { DefaultValueAttribute defaultValueAttribute = (DefaultValueAttribute)pd.Attributes[typeof(DefaultValueAttribute)]; if (defaultValueAttribute != null && defaultValueAttribute.Value != null) { object defaultValue = ParseValue(pd, defaultValueAttribute.Value); pd.SetValue(config, defaultValue); defaultValueString = Convert.ToString(defaultValueAttribute.Value); } } if (entry == null) { needCreate = true; entry = (pd.PropertyType == typeof(SecureString)) ? new SecureEntry() { Key = pd.Name } : new Entry() { Key = pd.Name }; } if (!CompareString(entry.Value, defaultValueString)) { entry.Value = defaultValueString; needUpdate |= CompareString(entry.Value, defaultValueString); } } else { object typedValue = ParseValueFromEntry(pd, entry); pd.SetValue(config, typedValue); } if (!CompareString(entry.Category, pd.Category)) { entry.Category = pd.Category; needUpdate |= CompareString(entry.Category, pd.Category); } if (!CompareString(entry.Description, pd.Description)) { entry.Description = pd.Description; needUpdate |= CompareString(entry.Description, pd.Description); } if (needCreate) { provider.CreateEntry(entry); } else if (needUpdate) { provider.UpdateEntry(entry); } if (pd.GetValue(config) == null && pd.PropertyType.GetConstructor(new Type[0]) != null) { pd.SetValue(config, Activator.CreateInstance(pd.PropertyType)); } } provider.CommitChanges(); if (HttpContext.Current != null) { CacheDependency cacheDependency = provider.GetCacheDependency(); if (cacheDependency != null) { HttpContext.Current.Cache.Add(cacheDependency.GetUniqueID(), new object(), cacheDependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, (k, v, r) => { Logger.Info("Site config ({0}) flushed due to cache dependency.", typeof(T).FullName); Invalidate(siteId); }); } } } return(config); }
void ISiteConfigProvider.UpdateEntry(ISiteConfigEntry entry) { }