//////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 1999-2000 Microsoft Corporation
//
//  Module Name:
//      CAction.cpp
//
//  Description:
//      Contains the definition of the CAction class.
//
//  Documentation:
//      TODO: Add pointer to external documentation later.
//
//  Maintained By:
//      Vij Vasu (Vvasu) 25-APR-2000
//
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// Include Files
//////////////////////////////////////////////////////////////////////////////

// The precompiled header.
#include "pch.h"

// For the CAction class
#include "CAction.h"


//////////////////////////////////////////////////////////////////////////////
//++
//
//  void
//  CAction::Commit( void )
//
//  Description:
//      This function just checks to make sure that this action has not already
//      been commmitted.
//
//  Arguments:
//      None.
//
//  Return Value:
//      None. 
//
//  Exceptions Thrown:
//      CAssert
//          If the action has already been committed.
//
//--
//////////////////////////////////////////////////////////////////////////////
void
CAction::Commit( void )
{
    BCATraceScope( "" );

    // Has this action already been committed?
    if ( FIsCommitComplete() )
    {
        BCATraceMsg( "This action has already been committed. Throwing exception." );
        THROW_ASSERT( E_UNEXPECTED, "This action has already been committed." );
    } // if: already committed.

} //*** CAction::Commit()


//////////////////////////////////////////////////////////////////////////////
//++
//
//  void
//  CAction::Rollback( void )
//
//  Description:
//      Since the Commit() of this class does nothing, rollback does nothing
//      too. However, it checks to make sure that this action can indeed be
//      rolled back.
//
//  Arguments:
//      None.
//
//  Return Value:
//      None. 
//
//  Exceptions Thrown:
//      CAssert
//          If this action has not been committed yet or if rollback is not
//          possible.
//
//--
//////////////////////////////////////////////////////////////////////////////
void
CAction::Rollback( void )
{
    BCATraceScope( "" );

    // Check if this action list has completed successfully.
    if ( !FIsCommitComplete() )
    {
        // Cannot rollback an incomplete action.
        BCATraceMsg( "Cannot rollback - this action has not been committed. Throwing exception." );
        THROW_ASSERT( E_UNEXPECTED, "Cannot rollback - this action has been committed." );
    } // if: this action was not completed successfully

    // Check if this list can be rolled back.
    if ( !FIsRollbackPossible() )
    {
        // Cannot rollback an incompleted action.
        BCATraceMsg( "This action list cannot be rolled back." );
        THROW_ASSERT( E_UNEXPECTED, "This action does not allow rollbacks." );
    } // if: this action was not completed successfully

} //*** CAction::Rollback()