/// <summary> /// Deserializes the given <paramref name="deletedLink"/> under the given <paramref name="readContext"/>. /// </summary> /// <param name="deletedLink">The given deleted link.</param> /// <param name="elementType">The element type.</param> /// <param name="readContext">The deserializer context.</param> /// <returns>The created object.</returns> public virtual object ReadDeltaDeletedLink(ODataDeltaDeletedLinkWrapper deletedLink, IEdmStructuredTypeReference elementType, ODataDeserializerContext readContext) { if (deletedLink == null) { throw Error.ArgumentNull(nameof(deletedLink)); } if (readContext == null) { throw Error.ArgumentNull(nameof(readContext)); } if (readContext.IsNoClrType) { EdmDeltaDeletedLink edmDeltaLink = new EdmDeltaDeletedLink(elementType?.Definition as IEdmEntityType); edmDeltaLink.Source = deletedLink.DeltaDeletedLink.Source; edmDeltaLink.Target = deletedLink.DeltaDeletedLink.Target; edmDeltaLink.Relationship = deletedLink.DeltaDeletedLink.Relationship; return(edmDeltaLink); } else { // refactor how to get the CLR type Type elementClrType = readContext.Model.GetClrType(elementType); Type deltaLinkType = typeof(DeltaDeletedLink <>).MakeGenericType(elementClrType); IDeltaDeletedLink deltaLink = Activator.CreateInstance(deltaLinkType) as IDeltaDeletedLink; deltaLink.Source = deletedLink.DeltaDeletedLink.Source; deltaLink.Target = deletedLink.DeltaDeletedLink.Target; deltaLink.Relationship = deletedLink.DeltaDeletedLink.Relationship; return(deltaLink); } }
/// <summary> /// Writes the given deltaDeletedLink specified by the parameter graph as a part of an existing OData message using the given /// messageWriter and the writeContext. /// </summary> /// <param name="graph">The object to be written.</param> /// <param name="writer">The <see cref="ODataDeltaWriter" /> to be used for writing.</param> /// <param name="writeContext">The <see cref="ODataSerializerContext"/>.</param> public virtual async Task WriteDeltaDeletedLinkAsync(object graph, ODataWriter writer, ODataSerializerContext writeContext) { if (writer == null) { throw Error.ArgumentNull(nameof(writer)); } EdmDeltaDeletedLink edmDeltaDeletedLink = graph as EdmDeltaDeletedLink; if (edmDeltaDeletedLink == null) { throw new SerializationException( Error.Format(SRResources.CannotWriteType, GetType().Name, graph?.GetType().FullName)); } ODataDeltaDeletedLink deltaDeletedLink = new ODataDeltaDeletedLink( edmDeltaDeletedLink.Source, edmDeltaDeletedLink.Target, edmDeltaDeletedLink.Relationship); if (deltaDeletedLink != null) { await writer.WriteDeltaDeletedLinkAsync(deltaDeletedLink).ConfigureAwait(false); } }
public void KindProperty_Returns_DeltaItemKind() { // Arrange & Act Mock <IEdmEntityTypeReference> mock = new Mock <IEdmEntityTypeReference>(); EdmDeltaDeletedLink edmDeletedLink = new EdmDeltaDeletedLink(mock.Object); // Assert Assert.Equal(DeltaItemKind.DeltaDeletedLink, edmDeletedLink.Kind); }
public void CtorEdmDeltaDeletedLink_Sets_PropertyValue() { // Arrange & Act Mock <IEdmEntityType> mock = new Mock <IEdmEntityType>(); EdmDeltaDeletedLink edmDeletedLink = new EdmDeltaDeletedLink(mock.Object, true); // Assert Assert.Same(mock.Object, edmDeletedLink.EntityType); Assert.Same(mock.Object, edmDeletedLink.GetEdmType().Definition); Assert.True(edmDeletedLink.IsNullable); }
public void ReadDeltaDeletedLink_Returns_DeletedDeltaLink(bool typed) { // Arrange Mock <IODataDeserializerProvider> deserializerProvider = new Mock <IODataDeserializerProvider>(); ODataDeltaResourceSetDeserializer deserializer = new ODataDeltaResourceSetDeserializer(deserializerProvider.Object); Uri source = new Uri("Customers(8)", UriKind.RelativeOrAbsolute); Uri target = new Uri("Orders(10645)", UriKind.RelativeOrAbsolute); ODataDeltaDeletedLink deletedLink = new ODataDeltaDeletedLink(source, target, "Orders"); ODataDeltaDeletedLinkWrapper wrapper = new ODataDeltaDeletedLinkWrapper(deletedLink); IEdmModel model = GetEdmModel(); IEdmEntityType customer = model.SchemaElements.OfType <IEdmEntityType>().First(c => c.Name == "Customer"); IEdmStructuredTypeReference elementType = new EdmEntityTypeReference(customer, true); ODataDeserializerContext context = new ODataDeserializerContext { Model = model, ResourceType = typeof(DeltaSet <>) }; if (typed) { context.ResourceType = typeof(DeltaSet <>); } else { context.ResourceType = typeof(EdmChangedObjectCollection); } // Act object deltaLinkObject = deserializer.ReadDeltaDeletedLink(wrapper, elementType, context); // Assert if (typed) { DeltaDeletedLink <Customer> deltaDeletedLink = Assert.IsType <DeltaDeletedLink <Customer> >(deltaLinkObject); Assert.Equal(source, deltaDeletedLink.Source); Assert.Equal(target, deltaDeletedLink.Target); Assert.Equal("Orders", deltaDeletedLink.Relationship); } else { EdmDeltaDeletedLink deltaDeletedLink = Assert.IsType <EdmDeltaDeletedLink>(deltaLinkObject); Assert.Equal(source, deltaDeletedLink.Source); Assert.Equal(target, deltaDeletedLink.Target); Assert.Equal("Orders", deltaDeletedLink.Relationship); } }
private ODataDeltaDeletedLink GetDeletedLink(object graph) { EdmDeltaDeletedLink edmDeltaDeletedLink = graph as EdmDeltaDeletedLink; if (edmDeltaDeletedLink == null) { throw new SerializationException(Error.Format(SRResources.CannotWriteType, GetType().Name, graph.GetType().FullName)); } ODataDeltaDeletedLink deltaDeletedLink = new ODataDeltaDeletedLink( edmDeltaDeletedLink.Source, edmDeltaDeletedLink.Target, edmDeltaDeletedLink.Relationship); return(deltaDeletedLink); }
/// <summary> /// Writes the given deltaDeletedLink specified by the parameter graph as a part of an existing OData message using the given /// messageWriter and the writeContext. /// </summary> /// <param name="graph">The object to be written.</param> /// <param name="writer">The <see cref="ODataDeltaWriter" /> to be used for writing.</param> /// <param name="writeContext">The <see cref="ODataSerializerContext"/>.</param> public virtual void WriteDeltaDeletedLink(object graph, ODataDeltaWriter writer, ODataSerializerContext writeContext) { EdmDeltaDeletedLink edmDeltaDeletedLink = graph as EdmDeltaDeletedLink; if (edmDeltaDeletedLink == null) { throw new SerializationException(Error.Format(SRResources.CannotWriteType, GetType().Name, graph.GetType().FullName)); } ODataDeltaDeletedLink deltaDeletedLink = new ODataDeltaDeletedLink( edmDeltaDeletedLink.Source, edmDeltaDeletedLink.Target, edmDeltaDeletedLink.Relationship); if (deltaDeletedLink != null) { writer.WriteDeltaDeletedLink(deltaDeletedLink); } }
public IHttpActionResult Get() { IEdmEntityType customerType = Request.GetModel().FindDeclaredType("WebStack.QA.Test.OData.TestCustomer") as IEdmEntityType; IEdmEntityType customerWithAddressType = Request.GetModel().FindDeclaredType("WebStack.QA.Test.OData.TestCustomerWithAddress") as IEdmEntityType; IEdmComplexType addressType = Request.GetModel().FindDeclaredType("WebStack.QA.Test.OData.TestAddress") as IEdmComplexType; IEdmEntityType orderType = Request.GetModel().FindDeclaredType("WebStack.QA.Test.OData.TestOrder") as IEdmEntityType; IEdmEntitySet ordersSet = Request.GetModel().FindDeclaredEntitySet("TestOrders") as IEdmEntitySet; EdmChangedObjectCollection changedObjects = new EdmChangedObjectCollection(customerType); EdmDeltaComplexObject a = new EdmDeltaComplexObject(addressType); a.TrySetPropertyValue("State", "State"); a.TrySetPropertyValue("ZipCode", null); EdmDeltaEntityObject changedEntity = new EdmDeltaEntityObject(customerWithAddressType); changedEntity.TrySetPropertyValue("Id", 1); changedEntity.TrySetPropertyValue("Name", "Name"); changedEntity.TrySetPropertyValue("Address", a); changedEntity.TrySetPropertyValue("PhoneNumbers", new List <String> { "123-4567", "765-4321" }); changedEntity.TrySetPropertyValue("OpenProperty", 10); changedEntity.TrySetPropertyValue("NullOpenProperty", null); changedObjects.Add(changedEntity); EdmComplexObjectCollection places = new EdmComplexObjectCollection(new EdmCollectionTypeReference(new EdmCollectionType(new EdmComplexTypeReference(addressType, true)))); EdmDeltaComplexObject b = new EdmDeltaComplexObject(addressType); b.TrySetPropertyValue("City", "City2"); b.TrySetPropertyValue("State", "State2"); b.TrySetPropertyValue("ZipCode", 12345); b.TrySetPropertyValue("OpenProperty", 10); b.TrySetPropertyValue("NullOpenProperty", null); places.Add(a); places.Add(b); var newCustomer = new EdmDeltaEntityObject(customerType); newCustomer.TrySetPropertyValue("Id", 10); newCustomer.TrySetPropertyValue("Name", "NewCustomer"); newCustomer.TrySetPropertyValue("FavoritePlaces", places); changedObjects.Add(newCustomer); var newOrder = new EdmDeltaEntityObject(orderType); newOrder.NavigationSource = ordersSet; newOrder.TrySetPropertyValue("Id", 27); newOrder.TrySetPropertyValue("Amount", 100); changedObjects.Add(newOrder); var deletedCustomer = new EdmDeltaDeletedEntityObject(customerType); deletedCustomer.Id = "7"; deletedCustomer.Reason = DeltaDeletedEntryReason.Changed; changedObjects.Add(deletedCustomer); var deletedOrder = new EdmDeltaDeletedEntityObject(orderType); deletedOrder.NavigationSource = ordersSet; deletedOrder.Id = "12"; deletedOrder.Reason = DeltaDeletedEntryReason.Deleted; changedObjects.Add(deletedOrder); var deletedLink = new EdmDeltaDeletedLink(customerType); deletedLink.Source = new Uri("http://localhost/odata/DeltaCustomers(1)"); deletedLink.Target = new Uri("http://localhost/odata/DeltaOrders(12)"); deletedLink.Relationship = "Orders"; changedObjects.Add(deletedLink); var addedLink = new EdmDeltaLink(customerType); addedLink.Source = new Uri("http://localhost/odata/DeltaCustomers(10)"); addedLink.Target = new Uri("http://localhost/odata/DeltaOrders(27)"); addedLink.Relationship = "Orders"; changedObjects.Add(addedLink); return(Ok(changedObjects)); }