/// <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))); }