public async Task <IReadOnlyList <IConfigurationEntry> > GetEntries(string component, ConfigurationPath pathPrefix, bool forPages = false, bool recursive = true)
        {
            var filterBuilder = new FilterDefinitionBuilder <MongoDbConfigurationDocument>();

            if (string.IsNullOrWhiteSpace(component))
            {
                component = "root";
            }
            var filter = filterBuilder.Eq(a => a.Component, component);

            if (!ConfigurationPath.IsNullOrEmpty(pathPrefix))
            {
                filter = recursive ? filterBuilder.Regex(a => a.Path, new Regex(pathPrefix.ToString(asPrefix: true))) : filterBuilder.Eq(a => a.Path, pathPrefix.ToString());
            }
            if (forPages)
            {
                filter = filter & filterBuilder.Eq(a => a.VisibleToPages, true);
            }

            var results = await settingsCollectionData.FindAsync(filter);

            var records = await results.ToListAsync();

            return(records.Select(doc => RebuildConfigurationEntry(doc)).ToList());
        }
        public async Task <IConfigurationEntry> GetEntry(string component, ConfigurationPath path)
        {
            var filterBuilder = new FilterDefinitionBuilder <MongoDbConfigurationDocument>();
            var filter        = filterBuilder.Eq(a => a.Path, path.ToString());

            if (string.IsNullOrWhiteSpace(component))
            {
                component = RootComponentName;
            }
            filter &= filterBuilder.Eq(a => a.Component, component);
            var entries = await settingsCollectionData.FindAsync(filter);

            var result = await entries.FirstOrDefaultAsync();

            return(result == null ? default : RebuildConfigurationEntry(result));
        }
Пример #3
0
        private static IEnumerable <string> ExtractLocationFragments(ConfigurationPath path)
        {
            var fragments = path.ToString().Split('/');

            return(fragments.Take(fragments.Length - 1).SkipWhile(x => x == ""));
        }
        public async Task <IConfigurationEntry> EnsureForEntry(string component, ConfigurationPath path, ConfigurationValue value, ConfigurationValueMeaning?meaning = null, string label = null, bool?visibleForPages = null)
        {
            var filterBuilder = new FilterDefinitionBuilder <MongoDbConfigurationDocument>();

            if (string.IsNullOrWhiteSpace(component))
            {
                component = RootComponentName;
            }
            var pathFilter = filterBuilder.Eq(a => a.Path, path.ToString()) & filterBuilder.Eq(a => a.Component, component);
            var entries    = await settingsCollectionData.FindAsync(pathFilter);

            bool creatingNow = false;
            var  entry       = await entries.FirstOrDefaultAsync();

            if (entry == null)
            {
                if (value == null)
                {
                    throw new ArgumentNullException(nameof(value), "Value is mandatory in EnsureForEntity operation when no configuration value found in database");
                }
                creatingNow = true;
                entry       = new MongoDbConfigurationDocument
                {
                    Component = string.IsNullOrWhiteSpace(component) ? null : component,
                    Path      = path,
                    ValueType = value.Type.ToString()
                };
            }
            if (meaning.HasValue)
            {
                entry.Meaning = meaning.Value.ToString();
            }
            if (label != null)
            {
                entry.Label = label;
            }
            if (visibleForPages.HasValue)
            {
                entry.VisibleToPages = visibleForPages.Value;
            }
            if (creatingNow)
            {
                ApplyValueToConfigurationEntry(entry, value);
                await settingsCollectionData.InsertOneAsync(entry);
            }
            else
            {
                var updateBuilder = new UpdateDefinitionBuilder <MongoDbConfigurationDocument>();
                List <UpdateDefinition <MongoDbConfigurationDocument> > updates = new List <UpdateDefinition <MongoDbConfigurationDocument> >();
                if (visibleForPages.HasValue)
                {
                    entry.VisibleToPages = visibleForPages.Value;
                    updates.Add(updateBuilder.Set(a => a.VisibleToPages, entry.VisibleToPages));
                }
                if (!string.IsNullOrWhiteSpace(label))
                {
                    entry.Label = label;
                    updates.Add(updateBuilder.Set(a => a.Label, label));
                }
                if (meaning.HasValue)
                {
                    entry.Meaning = meaning.Value.ToString();
                    updates.Add(updateBuilder.Set(a => a.Meaning, meaning.ToString()));
                }
                if (value != null)
                {
                    ApplyValueToConfigurationEntry(entry, value);
                    updates.Add(updateBuilder.Set(a => a.ValueType, entry.ValueType));
                    updates.Add(updateBuilder.Set(a => a.StringValue, entry.StringValue));
                    updates.Add(updateBuilder.Set(a => a.BooleanValue, entry.BooleanValue));
                    updates.Add(updateBuilder.Set(a => a.LongValue, entry.LongValue));
                    updates.Add(updateBuilder.Set(a => a.DoubleValue, entry.DoubleValue));
                    updates.Add(updateBuilder.Set(a => a.BytesValue, entry.BytesValue));
                }
                var builder = new FilterDefinitionBuilder <MongoDbConfigurationDocument>();
                var filter  = builder.Eq(a => a.Id, entry.Id);
                await settingsCollectionData.UpdateOneAsync(filter, updateBuilder.Combine(updates));

                foreach (var change in updates)
                {
                }
            }
            return(RebuildConfigurationEntry(entry));
        }