예제 #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);
            }
        }
예제 #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);
            }
        }