示例#1
0
        /// <summary>
        /// Deserializes a <see cref="string" /> to a list of <see cref="ReferenceItem" />s.
        /// </summary>
        /// <param name="references">The references to deserialize.</param>
        /// <returns>
        /// A list of <see cref="ReferenceItem" />s.
        /// </returns>
        /// <exception cref="System.ArgumentNullException"></exception>
        /// <exception cref="System.NotImplementedException"></exception>
        public static ImmutableArray <ReferenceItem> Deserialize(string references)
        {
            if (references == null)
            {
                throw new ArgumentNullException(nameof(references));
            }

            var xReferences = XElement.Parse(references);

            if (xReferences.IsEmpty)
            {
                return(ImmutableArray <ReferenceItem> .Empty);
            }

            var referenceList = ImmutableArray.CreateBuilder <ReferenceItem>();

            // This method is perfomance-critical so we avoid using LINQ or
            // other built-in serialization mechanism.

            foreach (var xReference in xReferences.Elements(ItemElementName))
            {
                referenceList.Add(ReferenceItem.Create(
                                      type: (string)xReference.Attribute("type"),
                                      uri: (string)xReference.Attribute("uri")));
            }

            return(referenceList.ToImmutable());
        }
        public override DataItem CreateData(UndoRedoManager undoRedo)
        {
            var item = new ReferenceItem(this, undoRedo);

            if (Definitions.Count == 1 && !IsNullable)
            {
                item.ChosenDefinition = Definitions.Values.First();
                item.Create();
            }

            foreach (var att in Attributes)
            {
                var attItem = att.CreateData(undoRedo);
                item.Attributes.Add(attItem);
            }

            return(item);
        }
        public async Task <IHttpActionResult> PostReferencesAsync(string portalUri, string pageUri, [FromBody] IEnumerable <ReferenceItemDto> model, CancellationToken cancellationToken)
        {
            if (model == null || !ModelState.IsValid)
            {
                return(BadRequest());
            }
            var portal = await _portalManager.FindByUriAsync(portalUri, cancellationToken);

            await ApiSecurity.AuthorizeAsync(portal, AccessPermission.CanEdit, cancellationToken);

            var page = await _portalManager.GetPageByUriAsync(portal, pageUri, cancellationToken);

            if (page == null)
            {
                return(NotFound());
            }
            var validationResult = await _portalManager.SetPageReferencesAsync(portal, page, model.Select(r => ReferenceItem.Create(r.Type, r.Uri)), cancellationToken);

            if (!validationResult.Succeeded)
            {
                return(this.ValidationContent(validationResult));
            }
            return(Ok(ModelMapper.ToPageDto(page)));
        }