private void SetState(BatchWriterState newState) { this.InterceptException(() => this.ValidateTransition(newState)); switch (newState) { case BatchWriterState.ChangeSetStarted: this.changeSetBoundary = ODataBatchWriterUtils.CreateChangeSetBoundary(this.rawOutputContext.WritingResponse); break; case BatchWriterState.ChangeSetCompleted: this.changeSetBoundary = null; break; } this.state = newState; }
/// <summary> /// Sets a new writer state; verifies that the transition from the current state into new state is valid. /// </summary> /// <param name="newState">The writer state to transition into.</param> private void SetState(BatchWriterState newState) { this.InterceptException(() => this.ValidateTransition(newState)); switch (newState) { case BatchWriterState.BatchStarted: Debug.Assert(!this.batchStartBoundaryWritten, "The batch boundary must not be written before calling WriteStartBatch."); break; case BatchWriterState.ChangeSetStarted: Debug.Assert(this.changeSetBoundary == null, "this.changeSetBoundary == null"); this.changeSetBoundary = ODataBatchWriterUtils.CreateChangeSetBoundary(this.writingResponse); break; case BatchWriterState.ChangeSetCompleted: Debug.Assert(this.changeSetBoundary != null, "this.changeSetBoundary != null"); this.changeSetBoundary = null; break; } this.state = newState; }
private void ValidateTransition(BatchWriterState newState) { if (IsErrorState(this.state) || !IsErrorState(newState)) { if ((newState == BatchWriterState.ChangeSetStarted) && (this.changeSetBoundary != null)) { throw new ODataException(Strings.ODataBatchWriter_CannotStartChangeSetWithActiveChangeSet); } if ((newState == BatchWriterState.ChangeSetCompleted) && (this.changeSetBoundary == null)) { throw new ODataException(Strings.ODataBatchWriter_CannotCompleteChangeSetWithoutActiveChangeSet); } if ((newState == BatchWriterState.BatchCompleted) && (this.changeSetBoundary != null)) { throw new ODataException(Strings.ODataBatchWriter_CannotCompleteBatchWithActiveChangeSet); } switch (this.state) { case BatchWriterState.Start: if (newState != BatchWriterState.BatchStarted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromStart); } break; case BatchWriterState.BatchStarted: if (((newState != BatchWriterState.ChangeSetStarted) && (newState != BatchWriterState.OperationCreated)) && (newState != BatchWriterState.BatchCompleted)) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromBatchStarted); } break; case BatchWriterState.ChangeSetStarted: if ((newState != BatchWriterState.OperationCreated) && (newState != BatchWriterState.ChangeSetCompleted)) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromChangeSetStarted); } break; case BatchWriterState.OperationCreated: if ((((newState != BatchWriterState.OperationCreated) && (newState != BatchWriterState.OperationStreamRequested)) && ((newState != BatchWriterState.ChangeSetStarted) && (newState != BatchWriterState.ChangeSetCompleted))) && (newState != BatchWriterState.BatchCompleted)) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationCreated); } break; case BatchWriterState.OperationStreamRequested: if (newState != BatchWriterState.OperationStreamDisposed) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationContentStreamRequested); } break; case BatchWriterState.OperationStreamDisposed: if (((newState != BatchWriterState.OperationCreated) && (newState != BatchWriterState.ChangeSetStarted)) && ((newState != BatchWriterState.ChangeSetCompleted) && (newState != BatchWriterState.BatchCompleted))) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationContentStreamDisposed); } break; case BatchWriterState.ChangeSetCompleted: if (((newState != BatchWriterState.BatchCompleted) && (newState != BatchWriterState.ChangeSetStarted)) && (newState != BatchWriterState.OperationCreated)) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromChangeSetCompleted); } break; case BatchWriterState.BatchCompleted: throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromBatchCompleted); case BatchWriterState.Error: if (newState != BatchWriterState.Error) { throw new ODataException(Strings.ODataWriterCore_InvalidTransitionFromError(this.state.ToString(), newState.ToString())); } break; default: throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataBatchWriter_ValidateTransition_UnreachableCodePath)); } } }
private static bool IsErrorState(BatchWriterState state) { return (state == BatchWriterState.Error); }
private static bool IsErrorState(BatchWriterState state) { return(state == BatchWriterState.Error); }
private void ValidateTransition(BatchWriterState newState) { if (!IsErrorState(this.state) && IsErrorState(newState)) { // we can always transition into an error state if we are not already in an error state return; } // make sure that we are not starting a changeset when one is already active if (newState == BatchWriterState.ChangeSetStarted) { if (this.changeSetBoundary != null) { throw new ODataException(Strings.ODataBatchWriter_CannotStartChangeSetWithActiveChangeSet); } } // make sure that we are not completing a changeset without an active changeset if (newState == BatchWriterState.ChangeSetCompleted) { if (this.changeSetBoundary == null) { throw new ODataException(Strings.ODataBatchWriter_CannotCompleteChangeSetWithoutActiveChangeSet); } } // make sure that we are not completing a batch while a changeset is still active if (newState == BatchWriterState.BatchCompleted) { if (this.changeSetBoundary != null) { throw new ODataException(Strings.ODataBatchWriter_CannotCompleteBatchWithActiveChangeSet); } } switch (this.state) { case BatchWriterState.Start: if (newState != BatchWriterState.BatchStarted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromStart); } break; case BatchWriterState.BatchStarted: if (newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.OperationCreated && newState != BatchWriterState.BatchCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromBatchStarted); } break; case BatchWriterState.ChangeSetStarted: if (newState != BatchWriterState.OperationCreated && newState != BatchWriterState.ChangeSetCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromChangeSetStarted); } break; case BatchWriterState.OperationCreated: if (newState != BatchWriterState.OperationCreated && newState != BatchWriterState.OperationStreamRequested && newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.ChangeSetCompleted && newState != BatchWriterState.BatchCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationCreated); } Debug.Assert(newState != BatchWriterState.OperationStreamDisposed, "newState != BatchWriterState.OperationStreamDisposed"); break; case BatchWriterState.OperationStreamRequested: if (newState != BatchWriterState.OperationStreamDisposed) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationContentStreamRequested); } break; case BatchWriterState.OperationStreamDisposed: if (newState != BatchWriterState.OperationCreated && newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.ChangeSetCompleted && newState != BatchWriterState.BatchCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationContentStreamDisposed); } break; case BatchWriterState.ChangeSetCompleted: if (newState != BatchWriterState.BatchCompleted && newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.OperationCreated) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromChangeSetCompleted); } break; case BatchWriterState.BatchCompleted: // no more state transitions should happen once in completed state throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromBatchCompleted); case BatchWriterState.Error: if (newState != BatchWriterState.Error) { // No more state transitions once we are in error state except for the fatal error throw new ODataException(Strings.ODataWriterCore_InvalidTransitionFromError(this.state.ToString(), newState.ToString())); } break; default: throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataBatchWriter_ValidateTransition_UnreachableCodePath)); } }
/// <summary> /// Sets a new writer state; verifies that the transition from the current state into new state is valid. /// </summary> /// <param name="newState">The writer state to transition into.</param> private void SetState(BatchWriterState newState) { this.InterceptException(() => this.ValidateTransition(newState)); switch (newState) { case BatchWriterState.BatchStarted: Debug.Assert(!this.batchStartBoundaryWritten, "The batch boundary must not be written before calling WriteStartBatch."); break; case BatchWriterState.ChangeSetStarted: Debug.Assert(this.changeSetBoundary == null, "this.changeSetBoundary == null"); this.changeSetBoundary = ODataBatchWriterUtils.CreateChangeSetBoundary(this.rawOutputContext.WritingResponse); break; case BatchWriterState.ChangeSetCompleted: Debug.Assert(this.changeSetBoundary != null, "this.changeSetBoundary != null"); this.changeSetBoundary = null; break; } this.state = newState; }
private void ValidateTransition(BatchWriterState newState) { if (!IsErrorState(this.state) && IsErrorState(newState)) { // we can always transition into an error state if we are not already in an error state return; } // make sure that we are not starting a changeset when one is already active if (newState == BatchWriterState.ChangeSetStarted) { if (this.changeSetBoundary != null) { throw new ODataException(Strings.ODataBatchWriter_CannotStartChangeSetWithActiveChangeSet); } } // make sure that we are not completing a changeset without an active changeset if (newState == BatchWriterState.ChangeSetCompleted) { if (this.changeSetBoundary == null) { throw new ODataException(Strings.ODataBatchWriter_CannotCompleteChangeSetWithoutActiveChangeSet); } } // make sure that we are not completing a batch while a changeset is still active if (newState == BatchWriterState.BatchCompleted) { if (this.changeSetBoundary != null) { throw new ODataException(Strings.ODataBatchWriter_CannotCompleteBatchWithActiveChangeSet); } } switch (this.state) { case BatchWriterState.Start: if (newState != BatchWriterState.BatchStarted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromStart); } break; case BatchWriterState.BatchStarted: if (newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.OperationCreated && newState != BatchWriterState.BatchCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromBatchStarted); } break; case BatchWriterState.ChangeSetStarted: if (newState != BatchWriterState.OperationCreated && newState != BatchWriterState.ChangeSetCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromChangeSetStarted); } break; case BatchWriterState.OperationCreated: if (newState != BatchWriterState.OperationCreated && newState != BatchWriterState.OperationStreamRequested && newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.ChangeSetCompleted && newState != BatchWriterState.BatchCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationCreated); } Debug.Assert(newState != BatchWriterState.OperationStreamDisposed, "newState != BatchWriterState.OperationStreamDisposed"); break; case BatchWriterState.OperationStreamRequested: if (newState != BatchWriterState.OperationStreamDisposed) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationContentStreamRequested); } break; case BatchWriterState.OperationStreamDisposed: if (newState != BatchWriterState.OperationCreated && newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.ChangeSetCompleted && newState != BatchWriterState.BatchCompleted) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromOperationContentStreamDisposed); } break; case BatchWriterState.ChangeSetCompleted: if (newState != BatchWriterState.BatchCompleted && newState != BatchWriterState.ChangeSetStarted && newState != BatchWriterState.OperationCreated) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromChangeSetCompleted); } break; case BatchWriterState.BatchCompleted: // no more state transitions should happen once in completed state throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromBatchCompleted); case BatchWriterState.FatalExceptionThrown: if (newState != BatchWriterState.FatalExceptionThrown) { throw new ODataException(Strings.ODataBatchWriter_InvalidTransitionFromFatalExceptionThrown); } break; default: throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataBatchWriter_ValidateTransition_UnreachableCodePath)); } }
/// <summary> /// Determines whether a given writer state is considered an error state. /// </summary> /// <param name="state">The writer state to check.</param> /// <returns>True if the writer state is an error state; otherwise false.</returns> private static bool IsErrorState(BatchWriterState state) { return(state == BatchWriterState.FatalExceptionThrown); }
/// <summary> /// Determines whether a given writer state is considered an error state. /// </summary> /// <param name="state">The writer state to check.</param> /// <returns>True if the writer state is an error state; otherwise false.</returns> private static bool IsErrorState(BatchWriterState state) { return state == BatchWriterState.FatalExceptionThrown; }