Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        /*================================================================================= 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);
        }