Exemplo n.º 1
0
        /// <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));
            }
        }
Exemplo n.º 2
0
        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));
                }
            }
        }
Exemplo n.º 3
0
 private void EnterScope(ParameterWriterState newState)
 {
     this.ValidateTransition(newState);
     this.scopes.Push(newState);
 }