/// <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);
        }
Example #5
0
        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);
        }
Example #7
0
        /// <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);
            }
        }
Example #8
0
        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));
        }