コード例 #1
0
        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;
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
ファイル: ODataBatchWriter.cs プロジェクト: nickchal/pash
        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));
                }
            }
        }
コード例 #4
0
ファイル: ODataBatchWriter.cs プロジェクト: nickchal/pash
        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;
        }
コード例 #5
0
ファイル: ODataBatchWriter.cs プロジェクト: nickchal/pash
 private static bool IsErrorState(BatchWriterState state)
 {
     return (state == BatchWriterState.Error);
 }
コード例 #6
0
        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));
                }
            }
        }
コード例 #7
0
 private static bool IsErrorState(BatchWriterState state)
 {
     return(state == BatchWriterState.Error);
 }
コード例 #8
0
        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));
            }
        }
コード例 #9
0
        /// <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;
        }
コード例 #10
0
        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));
            }
        }
コード例 #11
0
 /// <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);
 }
コード例 #12
0
 /// <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;
 }