public static void AlterPartDefinition(this IContentDefinitionManager manager, string name, Action<ContentPartDefinitionBuilder> alteration)
 {
     var partDefinition = manager.GetPartDefinition(name) ?? new ContentPartDefinition(name);
     var builder = new ContentPartDefinitionBuilder(partDefinition);
     alteration(builder);
     manager.StorePartDefinition(builder.Build());
 }
        public void ShouldReturnInfosetWhenNullEmptyMissingOrInvalid()
        {
            var part1Definition = new ContentPartDefinitionBuilder()
                .WithField("Hello", fb => fb.OfType("Text").WithSetting("Storage", null))
                .Build();
            var part2Definition = new ContentPartDefinitionBuilder()
                .WithField("World", fb => fb.OfType("Text").WithSetting("Storage", ""))
                .Build();
            var part3Definition = new ContentPartDefinitionBuilder()
                .WithField("World", fb => fb.OfType("Text"))
                .Build();
            var part4Definition = new ContentPartDefinitionBuilder()
                .WithField("World", fb => fb.OfType("Text").WithSetting("Storage", "NoSuchName"))
                .Build();

            var provider1 = _selector.GetProvider(part1Definition.Fields.Single());
            var provider2 = _selector.GetProvider(part2Definition.Fields.Single());
            var provider3 = _selector.GetProvider(part3Definition.Fields.Single());
            var provider4 = _selector.GetProvider(part4Definition.Fields.Single());

            Assert.That(provider1.ProviderName, Is.EqualTo("Infoset"));
            Assert.That(provider2.ProviderName, Is.EqualTo("Infoset"));
            Assert.That(provider3.ProviderName, Is.EqualTo("Infoset"));
            Assert.That(provider4.ProviderName, Is.EqualTo("Infoset"));
        }
 public static ContentPartDefinitionBuilder WithLocation(this ContentPartDefinitionBuilder obj, IDictionary <string, ContentLocation> settings)
 {
     foreach (var entry in GetSettingEntries(settings))
     {
         obj = obj.WithSetting(entry.Key, entry.Value);
     }
     return(obj);
 }
        public void ShouldReturnProviderByName()
        {
            var part1Definition = new ContentPartDefinitionBuilder()
                .WithField("Hello", fb => fb.OfType("Text").WithSetting("Storage", "TestProvName"))
                .Build();
            var part2Definition = new ContentPartDefinitionBuilder()
                .WithField("World", fb => fb.OfType("Text").WithSetting("Storage", "Infoset"))
                .Build();

            var provider1 = _selector.GetProvider(part1Definition.Fields.Single());
            var provider2 = _selector.GetProvider(part2Definition.Fields.Single());

            Assert.That(provider1.ProviderName, Is.EqualTo("TestProvName"));
            Assert.That(provider2.ProviderName, Is.EqualTo("Infoset"));
        }
        /// <summary>
        /// Merges a given content part definition provided in a XML format into a content part definition builder.
        /// </summary>
        /// <param name="element">The XML content type definition.</param>
        /// <param name="contentPartDefinitionBuilder">The content part definition builder.</param>
        public void Merge(XElement element, ContentPartDefinitionBuilder contentPartDefinitionBuilder)
        {
            Argument.ThrowIfNull(element, "element");
            Argument.ThrowIfNull(contentPartDefinitionBuilder, "contentPartDefinitionBuilder");

            // Merge name
            contentPartDefinitionBuilder.Named(XmlConvert.DecodeName(element.Name.LocalName));

            // Merge settings
            foreach (var setting in _settingsFormatter.Map(element)) {
                contentPartDefinitionBuilder.WithSetting(setting.Key, setting.Value);
            }

            // Merge fields
            foreach (var iter in element.Elements()) {
                var fieldElement = iter;
                var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split(new[] { '.' }, 2);
                var fieldName = fieldParameters.FirstOrDefault();
                var fieldType = fieldParameters.Skip(1).FirstOrDefault();
                if (fieldName == "remove") {
                    var nameAttribute = fieldElement.Attribute("name");
                    if (nameAttribute != null) {
                        contentPartDefinitionBuilder.RemoveField(nameAttribute.Value);
                    }
                }
                else {
                    contentPartDefinitionBuilder.WithField(
                        fieldName,
                        fieldBuilder => {
                            fieldBuilder.OfType(fieldType);
                            foreach (var setting in _settingsFormatter.Map(fieldElement)) {
                                fieldBuilder.WithSetting(setting.Key, setting.Value);
                            }
                        });
                }
            }
        }