protected override DriverResult Editor(FeedSyncProfilePart part, dynamic shapeHelper)
        {
            return(Combined(
                       ContentShape(
                           "Parts_FeedSyncProfile_ContentType_Edit",
                           () =>
            {
                var compatibleContentTypes =
                    GetTypesWithFeedSyncProfileItemPart()
                    .Select(item =>
                            new SelectListItem {
                    Text = item, Value = item, Selected = item == part.ContentType
                });

                return shapeHelper.EditorTemplate(
                    TemplateName: "Parts.FeedSyncProfile.ContentType",
                    Model: new FeedSyncProfilePartContentTypeEditorViewModel
                {
                    FeedSyncProfilePart = part,
                    CompatibleContentTypes = compatibleContentTypes
                },
                    Prefix: Prefix);
            }),
                       ContentShape(
                           "Parts_FeedSyncProfile_NumberOfItemsToSyncDuringInit_Edit",
                           () =>
            {
                return shapeHelper.EditorTemplate(
                    TemplateName: "Parts.FeedSyncProfile.NumberOfItemsToSyncDuringInit",
                    Model: part,
                    Prefix: Prefix);
            }),
                       ContentShape(
                           "Parts_FeedSyncProfile_FeedUrl_Edit",
                           () =>
            {
                return shapeHelper.EditorTemplate(
                    TemplateName: "Parts.FeedSyncProfile.FeedUrl",
                    Model: part,
                    Prefix: Prefix);
            }),
                       ContentShape(
                           "Parts_FeedSyncProfile_Repopulate_Edit",
                           () =>
            {
                return shapeHelper.EditorTemplate(
                    TemplateName: "Parts.FeedSyncProfile.Repopulate",
                    Model: part,
                    Prefix: Prefix);
            }),
                       ContentShape(
                           "Parts_FeedSyncProfile_Mappings_Edit",
                           () =>
            {
                var compatibleContentItemStorageNames = _feedManager
                                                        .GetCompatibleContentItemStorageNames(part.ContentType);

                // Setting the smart defaults.
                if (!part.Mappings.Any())
                {
                    if (compatibleContentItemStorageNames.Contains("TitlePart"))
                    {
                        part.Mappings.Add(new Mapping {
                            FeedMapping = "title", ContentItemStorageMapping = "TitlePart"
                        });
                    }

                    if (compatibleContentItemStorageNames.Contains("BodyPart"))
                    {
                        part.Mappings.Add(new Mapping {
                            FeedMapping = "description", ContentItemStorageMapping = "BodyPart"
                        });
                    }

                    if (part.FeedType == "Rss")
                    {
                        if (compatibleContentItemStorageNames.Contains("CommonPart.CreatedUtc"))
                        {
                            part.Mappings.Add(new Mapping {
                                FeedMapping = "pubDate", ContentItemStorageMapping = "CommonPart.CreatedUtc"
                            });
                        }
                    }
                }

                // If a mapping data storage is no longer available or the feed node field is empty,
                // then delete it from the mappings.
                part
                .Mappings
                .RemoveAll(mapping =>
                           !compatibleContentItemStorageNames.Contains(mapping.ContentItemStorageMapping) ||
                           string.IsNullOrEmpty(mapping.FeedMapping));

                var mappingViewModel = new List <MappingViewModel>();
                var contentItemStorageMappings = part
                                                 .Mappings
                                                 .Select(mapping => mapping.ContentItemStorageMapping);

                // Adding as many empty fields as many can be created.
                foreach (var compatibleContentItemStorageName in compatibleContentItemStorageNames)
                {
                    if (!contentItemStorageMappings.Contains(compatibleContentItemStorageName))
                    {
                        part
                        .Mappings
                        .Add(
                            new Mapping
                        {
                            ContentItemStorageMapping = "",
                            FeedMapping = ""
                        });
                    }
                }

                // Constructing data sources for the dropdowns.
                foreach (var mapping in part.Mappings)
                {
                    var selectList = new List <SelectListItem>();
                    selectList.Add(
                        new SelectListItem
                    {
                        Text = T("Select an Option Below").Text,
                        Value = "",
                        Selected = string.IsNullOrEmpty(mapping.ContentItemStorageMapping)
                    });

                    selectList
                    .AddRange(
                        compatibleContentItemStorageNames
                        .Select(item =>
                                new SelectListItem
                    {
                        Text = item,
                        Value = item,
                        Selected = item == mapping.ContentItemStorageMapping
                    }));

                    mappingViewModel.Add(
                        new MappingViewModel
                    {
                        FeedMapping = mapping.FeedMapping,
                        ContentItemStorageMappingSelectList = selectList
                    });
                }

                return shapeHelper.EditorTemplate(
                    TemplateName: "Parts.FeedSyncProfile.Mappings",
                    Model: new FeedSyncProfilePartMappingsEditorViewModel
                {
                    FeedSyncProfilePart = part,
                    MappingViewModel = mappingViewModel
                },
                    Prefix: Prefix);
            })));
        }