/// <summary> /// Visits an ODataBatch. /// </summary> /// <param name="batch">The batch to visit.</param> protected override ODataPayloadElement VisitBatch(ODataBatch batch) { List <IMimePart> parts = new List <IMimePart>(); if (batch.Parts != null) { foreach (ODataBatchPart part in batch.Parts) { ODataBatchChangeset changeset = part as ODataBatchChangeset; if (changeset == null) { parts.Add(this.ConvertBatchOperation((ODataBatchOperation)part)); } else { List <IMimePart> changeSetOperations = new List <IMimePart>(); if (changeset.Operations != null) { foreach (ODataBatchOperation batchOperation in changeset.Operations) { changeSetOperations.Add(this.ConvertBatchOperation(batchOperation)); } } // TODO: the ODataBatchReader does not expose boundary strings or encodings; should it? if (this.response) { BatchResponseChangeset responseChangeset = BatchPayloadBuilder.ResponseChangeset(/*boundary*/ null, /*charset*/ null, changeSetOperations.ToArray()); parts.Add(responseChangeset); } else { BatchRequestChangeset requestChangeset = BatchPayloadBuilder.RequestChangeset(/*boundary*/ null, /*charset*/ null, changeSetOperations.ToArray()); parts.Add(requestChangeset); } } } } return(this.response ? (ODataPayloadElement)PayloadBuilder.BatchResponsePayload(parts.ToArray()) : (ODataPayloadElement)PayloadBuilder.BatchRequestPayload(parts.ToArray())); }
/// <summary> /// Visits an ODataBatchChangeset. /// </summary> /// <param name="changeset">The changeset to visit.</param> protected virtual void VisitBatchChangeset(ODataBatchChangeset changeset) { }
/// <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); }