/** \file
 *
 *  Contains the StopMission class implementation.
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#include "StopMission.h"
#include "StopMissionIF.h"

#include "supervisor/CommandExec.h"

StopMission::StopMission( const Str& prefix, const Module* module )
    : Behavior( prefix + StopMissionIF::NAME, module, true, true ),
      stopMission_( false )
{
    logger_.syslog( "Construct StopMission." );
}

StopMission::~StopMission()
{}

/// Initialize function
void StopMission::initialize( void )
{
    logger_.syslog( "Initialize StopMissionComponent." );
    stopMission_ = false;
}

void StopMission::run()
{
    runIfUnsatisfied();
}

/// The actual "payload" of the component
bool StopMission::runIfUnsatisfied()
{
    if( !stopMission_ )
    {
        CommandExec::DoCommand( "stop", false );
        stopMission_ = true;
    }
    return true;
}

bool StopMission::isSatisfied()
{
    return stopMission_;
}

/// Uninit function
void StopMission::uninitialize( void )
{
    logger_.syslog( "Uninitialize StopMissionComponent." );
}

/// Mission Component factory interface
Behavior* StopMission::CreateBehavior( const Str& prefix, const Module* module )
{
    return new StopMission( prefix, module );
}
