private static bool WrapItems(ContentArea contentArea, ContentSerializerSettings contentSerializerSettings)
        {
            var wrapItemsAttribute = contentArea.GetType().GetCustomAttribute <ContentSerializerWrapItemsAttribute>(false);
            var wrapItems          = wrapItemsAttribute?.WrapItems ?? contentSerializerSettings.GlobalWrapContentAreaItems;

            return(wrapItems);
        }
        public void ShouldUsePassedInContentSerializerSettings()
        {
            var pageReference    = new PageReference(3000);
            var page             = new StandardPageBuilder().WithPageReference(pageReference).Build();
            var serviceLocator   = Substitute.For <IServiceLocator>();
            var urlHelper        = Substitute.For <IUrlHelper>();
            var pageReferenceUrl = "https://josefottosson.se/some-path";
            var contentReferencePropertyHandler = new ContentReferencePropertyHandler(urlHelper, this._contentSerializerSettings);

            urlHelper.ContentUrl(pageReference, Arg.Any <IUrlSettings>()).Returns(pageReferenceUrl);
            serviceLocator.TryGetExistingInstance(typeof(IPropertyHandler <PageReference>), out var _).Returns(x =>
            {
                x[1] = new PageReferencePropertyHandler(contentReferencePropertyHandler, _contentSerializerSettings);
                return(true);
            });
            ServiceLocator.SetLocator(serviceLocator);
            var customContentSerializerSettings = new ContentSerializerSettings
            {
                UrlSettings = new UrlSettings
                {
                    UseAbsoluteUrls = false
                }
            };

            var result = this._sut.GetStructuredData(page, customContentSerializerSettings);

            result.ShouldContainKey("PageReference");
            result["PageReference"].ShouldBe("/some-path");
        }
Ejemplo n.º 3
0
        private string Execute(IContentData contentData, ContentSerializerSettings settings)
        {
            var result = this._propertyManager.GetStructuredData(contentData, settings);

            return(JsonConvert.SerializeObject(result, new JsonSerializerSettings
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }));
        }
Ejemplo n.º 4
0
        public IEnumerable <object> GetValue(ContentArea contentArea, ContentSerializerSettings settings)
        {
            if (contentArea?.Items == null || !contentArea.Items.Any())
            {
                return(Enumerable.Empty <IContentData>());
            }

            var content = new List <IContentData>();

            foreach (var contentAreaItem in contentArea.Items)
            {
                var loadedContent = this._contentLoader.Get <ContentData>(contentAreaItem.ContentLink);
                if (loadedContent != null)
                {
                    content.Add(loadedContent);
                }
            }

            return(content);
        }
Ejemplo n.º 5
0
 public object GetStructuredData(IContentData contentData, ContentSerializerSettings settings)
 {
     return(this._propertyManager.GetStructuredData(contentData, settings));
 }
Ejemplo n.º 6
0
 public string Serialize(IContentData contentData, ContentSerializerSettings settings)
 {
     return(Execute(contentData, settings));
 }
        public Dictionary <string, object> GetStructuredData(
            IContentData contentData,
            ContentSerializerSettings settings)
        {
            var properties     = this._propertyResolver.GetProperties(contentData);
            var structuredData = new Dictionary <string, object>();

            foreach (var property in properties)
            {
                var key = this._propertyNameStrategy.GetPropertyName(property);
                if (property.PropertyType.IsValueType)
                {
                    structuredData.Add(key, this._valueTypePropertyHandler.GetValue(contentData, property));
                    continue;
                }

                var value = property.GetValue(contentData);

                switch (value)
                {
                case string _:
                    var stringValue = this._stringPropertyHandler.GetValue(contentData, property);
                    AddItem(key, stringValue, structuredData, settings.ThrowOnDuplicate);
                    break;

                case ContentArea c:
                    var contentAreaItems = this._contentAreaPropertyHandler.GetValue(c, settings);
                    if (WrapItems(c, settings))
                    {
                        var items = new Dictionary <string, List <object> >();
                        foreach (var item in contentAreaItems)
                        {
                            var result   = GetStructuredData((IContentData)item, settings);
                            var typeName = item.GetOriginalType().Name;
                            if (items.ContainsKey(typeName))
                            {
                                items[typeName].Add(result);
                            }
                            else
                            {
                                items[typeName] = new List <object> {
                                    result
                                };
                            }
                        }
                        AddItem(key, items, structuredData, settings.ThrowOnDuplicate);
                    }
                    else
                    {
                        var items = new List <object>();
                        foreach (var item in contentAreaItems)
                        {
                            var result = GetStructuredData((IContentData)item, settings);
                            items.Add(result);
                        }

                        AddItem(key, items, structuredData, settings.ThrowOnDuplicate);
                    }
                    break;

                case Url url:
                    var urlValue = this._urlPropertyHandler.GetValue(url, settings.UrlSettings);
                    AddItem(key, urlValue, structuredData, settings.ThrowOnDuplicate);
                    break;

                case string[] _:
                    var       strings = this._stringArrayPropertyHandler.GetValue(contentData, property);
                    AddItem(key, strings, structuredData, settings.ThrowOnDuplicate);
                    break;

                case BlockData b:
                    var blockDataResult = GetStructuredData(b, settings);
                    AddItem(key, blockDataResult, structuredData, settings.ThrowOnDuplicate);
                    break;

                case ContentReference c:
                    var contentReferenceResult =
                        this._contentReferencePropertyHandler.GetValue(c, settings.ContentReferenceSettings);
                    AddItem(key, contentReferenceResult, structuredData, settings.ThrowOnDuplicate);
                    break;

                case PageType pt:
                    var pageTypeResult = this._pageTypePropertyHandler.GetValue(pt);
                    AddItem(key, pageTypeResult, structuredData, settings.ThrowOnDuplicate);
                    break;

                case IList <ContentReference> contentReferenceList:
                    var contentReferenceListResult =
                        this._contentReferenceListPropertyHandler.GetValue(contentReferenceList,
                                                                           settings.ContentReferenceSettings);
                    AddItem(key, contentReferenceListResult, structuredData, settings.ThrowOnDuplicate);
                    break;

                case XhtmlString x:
                    var xhtmlStringResult = this._xhtmlStringPropertyHandler.GetValue(x);
                    AddItem(key, xhtmlStringResult, structuredData, settings.ThrowOnDuplicate);
                    break;

                case LinkItemCollection linkItemCollection:
                    var linkItemCollectionResult =
                        this._linkItemCollectionPropertyHandler.GetValue(linkItemCollection, settings.UrlSettings);
                    AddItem(key, linkItemCollectionResult, structuredData, settings.ThrowOnDuplicate);
                    break;

                default:
                    if (settings.UseCustomPropertiesHandler && value != null)
                    {
                        var customPropertyResult = this._customPropertiesHandler.GetValue(value);
                        if (customPropertyResult != null)
                        {
                            AddItem(key, customPropertyResult, structuredData, settings.ThrowOnDuplicate);
                        }
                    }
                    break;
                }
            }
            return(structuredData);
        }