/// <summary> /// Verify that the transition from the current state into new state is valid. /// </summary> /// <param name="newState">The new writer state to transition into.</param> private void ValidateTransition(ParameterWriterState newState) { if (this.State != ParameterWriterState.Error && newState == ParameterWriterState.Error) { // we can always transition into an error state if we are not already in an error state return; } switch (this.State) { case ParameterWriterState.Start: if (newState != ParameterWriterState.CanWriteParameter && newState != ParameterWriterState.Completed) { throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromStart)); } break; case ParameterWriterState.CanWriteParameter: if (newState != ParameterWriterState.CanWriteParameter && newState != ParameterWriterState.ActiveSubWriter && newState != ParameterWriterState.Completed) { throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromCanWriteParameter)); } break; case ParameterWriterState.ActiveSubWriter: if (newState != ParameterWriterState.CanWriteParameter) { throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromActiveSubWriter)); } break; case ParameterWriterState.Completed: // we should never see a state transition when in state 'Completed' throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromCompleted)); case ParameterWriterState.Error: if (newState != ParameterWriterState.Error) { // No more state transitions once we are in error state throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromError)); } break; default: throw new ODataException(Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_UnreachableCodePath)); } }
private void ValidateTransition(ParameterWriterState newState) { if ((this.State == ParameterWriterState.Error) || (newState != ParameterWriterState.Error)) { switch (this.State) { case ParameterWriterState.Start: if ((newState != ParameterWriterState.CanWriteParameter) && (newState != ParameterWriterState.Completed)) { throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromStart)); } break; case ParameterWriterState.CanWriteParameter: if (((newState != ParameterWriterState.CanWriteParameter) && (newState != ParameterWriterState.ActiveSubWriter)) && (newState != ParameterWriterState.Completed)) { throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromCanWriteParameter)); } break; case ParameterWriterState.ActiveSubWriter: if (newState != ParameterWriterState.CanWriteParameter) { throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromActiveSubWriter)); } break; case ParameterWriterState.Completed: throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromCompleted)); case ParameterWriterState.Error: if (newState != ParameterWriterState.Error) { throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_InvalidTransitionFromError)); } break; default: throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodes.ODataParameterWriterCore_ValidateTransition_UnreachableCodePath)); } } }
private void EnterScope(ParameterWriterState newState) { this.ValidateTransition(newState); this.scopes.Push(newState); }