private void BuildDynamicFieldMetadata() { var cachedMetadata = this.GetCachedData(DYNAMICMETADATA_CACHEKEY) as IDictionary <string, FieldMetadata>; if (cachedMetadata != null) { _dynamicFieldMetadata = cachedMetadata; } else { if (BinaryAsJObject != null) { var meta = new Dictionary <string, FieldMetadata>(); if (!this.IsNew) { // Find inherited settings files var chain = Settings.GetAllSettingsByName <Settings>(this.GetSettingName(), this.Path).ToList(); // Workaround in case the current item was not yet loaded into the settings cache: the // first element in this chain should always be the current settings file. if (chain.Count == 0 || chain[0].Id != this.Id) { chain.Insert(0, this); } // Get metadata from inherited settings files var fieldDictionaries = chain.Select(x => JsonDynamicFieldHelper.BuildDynamicFieldMetadata(x.BinaryAsJObject)).ToList(); // The result should be composed in a way that the inheritor's metadata always overrides the original metadata fieldDictionaries.Reverse(); foreach (var dict in fieldDictionaries) { foreach (var k in dict.Keys) { meta[k] = dict[k]; } } } _dynamicFieldMetadata = meta; } else { _dynamicFieldMetadata = new Dictionary <string, FieldMetadata>(); } this.SetCachedData(DYNAMICMETADATA_CACHEKEY, _dynamicFieldMetadata); } }
void BuildDynamicFieldMetadata() { var cachedMetadata = this.GetCachedData(DYNAMICMETADATA_CACHEKEY) as IDictionary <string, FieldMetadata>; if (cachedMetadata != null) { _dynamicFieldMetadata = cachedMetadata; } else { if (BinaryAsJObject != null) { var meta = new Dictionary <string, FieldMetadata>(); if (!this.IsNew) { // Find inherited settings files var chain = Settings.GetAllSettingsByName <Settings>(this.GetSettingName(), this.Path); // Get metadata from inherited settings files var fieldDictionaries = chain.Select(x => JsonDynamicFieldHelper.BuildDynamicFieldMetadata(x.BinaryAsJObject)).ToList(); // The result should be composed in a way that the inheritor's metadata always overrides the original metadata fieldDictionaries.Reverse(); foreach (var dict in fieldDictionaries) { foreach (var k in dict.Keys) { meta[k] = dict[k]; } } } _dynamicFieldMetadata = meta; } else { _dynamicFieldMetadata = new Dictionary <string, FieldMetadata>(); } this.SetCachedData(DYNAMICMETADATA_CACHEKEY, _dynamicFieldMetadata); } }
/*================================================================================= Custom methods */ protected void BuildFieldMetadata() { using (var stream = this.Binary.GetStream()) { _jObject = null; if (stream != null && stream.Length > 0) { try { using (var streamReader = new System.IO.StreamReader(stream)) using (var jsonReader = new JsonTextReader(streamReader)) { var token = JObject.ReadFrom(jsonReader); if (!(token is JObject)) { throw new Exception("Binary content of this settings file should be a JSON object."); } _jObject = (JObject)token; } } catch (Exception exc) { SenseNet.Diagnostics.Logger.WriteException(exc); } } if (_jObject == null) { _jObject = new JObject(); } } _dynamicFieldMetadata = JsonDynamicFieldHelper.BuildDynamicFieldMetadata(_jObject); }