/// <summary> /// Converts an ODataBatchOperation to the corresponding IMimePart. /// </summary> /// <param name="operation">The operation to convert.</param> /// <returns>The converted operation.</returns> private IMimePart ConvertBatchOperation(ODataBatchOperation operation) { ODataPayloadElement payloadElement = operation.Payload == null ? null : this.Visit(operation.Payload); if (this.response) { ODataBatchResponseOperation responseOperation = (ODataBatchResponseOperation)operation; HttpResponseData httpResponse = new HttpResponseData { StatusCode = (HttpStatusCode)responseOperation.StatusCode, }; if (responseOperation.Headers != null) { foreach (var kvp in responseOperation.Headers) { httpResponse.Headers.Add(kvp.Key, kvp.Value); } } ; return(new ODataResponse(httpResponse) { RootElement = payloadElement }); } ODataBatchRequestOperation requestOperation = (ODataBatchRequestOperation)operation; // NOTE: this is abusing the ODataUriBuilder but is sufficient for our purposes // We use Unrecognized because the request URI may be relative (in the case of a reference) ODataUri requestUri = new ODataUri(ODataUriBuilder.Unrecognized(requestOperation.Url.OriginalString)); ODataRequest request = this.requestManager.BuildRequest( requestUri, (HttpVerb)Enum.Parse(typeof(HttpVerb), requestOperation.HttpMethod, /*ignoreCase*/ true), requestOperation.Headers); if (payloadElement != null) { string contentType; if (!request.Headers.TryGetValue(Microsoft.OData.ODataConstants.ContentTypeHeader, out contentType)) { throw new InvalidOperationException("ContentType header not found."); } request.Body = this.requestManager.BuildBody(contentType, requestUri, payloadElement); } return(request); }
/// <summary> /// Visits an ODataBatchRequestOperation. /// </summary> /// <param name="requestOperation">The request operation to visit.</param> protected virtual void VisitBatchRequestOperation(ODataBatchRequestOperation requestOperation) { }
/// <summary> /// Visits an item in the object model. /// </summary> /// <param name="objectModelItem">The item to visit.</param> public virtual void Visit(object objectModelItem) { ODataResourceSet resourceCollection = objectModelItem as ODataResourceSet; if (resourceCollection != null) { this.VisitFeed(resourceCollection); return; } ODataResource entry = objectModelItem as ODataResource; if (entry != null) { this.VisitEntry(entry); return; } ODataProperty property = objectModelItem as ODataProperty; if (property != null) { this.VisitProperty(property); return; } ODataNestedResourceInfo navigationLink = objectModelItem as ODataNestedResourceInfo; if (navigationLink != null) { this.VisitNavigationLink(navigationLink); return; } ODataResourceValue resourceValue = objectModelItem as ODataResourceValue; if (resourceValue != null) { this.VisitResourceValue(resourceValue); return; } ODataCollectionValue collectionValue = objectModelItem as ODataCollectionValue; if (collectionValue != null) { this.VisitCollectionValue(collectionValue); return; } ODataStreamReferenceValue streamReferenceValue = objectModelItem as ODataStreamReferenceValue; if (streamReferenceValue != null) { this.VisitStreamReferenceValue(streamReferenceValue); return; } ODataCollectionStart collectionStart = objectModelItem as ODataCollectionStart; if (collectionStart != null) { this.VisitCollectionStart(collectionStart); return; } ODataServiceDocument serviceDocument = objectModelItem as ODataServiceDocument; if (serviceDocument != null) { this.VisitServiceDocument(serviceDocument); return; } ODataEntitySetInfo entitySetInfo = objectModelItem as ODataEntitySetInfo; if (entitySetInfo != null) { this.VisitEntitySet(entitySetInfo); return; } ODataError error = objectModelItem as ODataError; if (error != null) { this.VisitError(error); return; } ODataInnerError innerError = objectModelItem as ODataInnerError; if (innerError != null) { this.VisitInnerError(innerError); return; } ODataEntityReferenceLinks entityReferenceLinks = objectModelItem as ODataEntityReferenceLinks; if (entityReferenceLinks != null) { this.VisitEntityReferenceLinks(entityReferenceLinks); return; } ODataEntityReferenceLink entityReferenceLink = objectModelItem as ODataEntityReferenceLink; if (entityReferenceLink != null) { this.VisitEntityReferenceLink(entityReferenceLink); return; } ODataAction action = objectModelItem as ODataAction; if (action != null) { this.VisitODataOperation(action); return; } ODataFunction function = objectModelItem as ODataFunction; if (function != null) { this.VisitODataOperation(function); return; } ODataParameters parameters = objectModelItem as ODataParameters; if (parameters != null) { this.VisitParameters(parameters); return; } ODataBatch batch = objectModelItem as ODataBatch; if (batch != null) { this.VisitBatch(batch); return; } ODataBatchChangeset batchChangeset = objectModelItem as ODataBatchChangeset; if (batchChangeset != null) { this.VisitBatchChangeset(batchChangeset); return; } ODataBatchRequestOperation batchRequestOperation = objectModelItem as ODataBatchRequestOperation; if (batchRequestOperation != null) { this.VisitBatchRequestOperation(batchRequestOperation); return; } ODataBatchResponseOperation batchResponseOperation = objectModelItem as ODataBatchResponseOperation; if (batchResponseOperation != null) { this.VisitBatchResponseOperation(batchResponseOperation); return; } if (objectModelItem == null || objectModelItem.GetType().IsValueType || objectModelItem is string || objectModelItem is byte[] || objectModelItem is ISpatial) { this.VisitPrimitiveValue(objectModelItem); return; } if (objectModelItem is ODataUntypedValue) { this.VisitPrimitiveValue(ParseJsonToPrimitiveValue((objectModelItem as ODataUntypedValue).RawValue)); return; } this.VisitUnsupportedValue(objectModelItem); }