  
/*
 * Copyright 2019-present Infosys Limited  
 *   
 * SPDX-License-Identifier: Apache-2.0    
 */
 
/**************************************
 * attachWfEsmInfoCheck.cpp
 * This is an auto generated file.
 * Please do not edit this file.
 * All edits to be made through template source file
 * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.cpp.tt>
 **************************************/

#include "smEnumTypes.h"
#include "actionTable.h"
#include "actionHandlers/actionHandlers.h"

#include "mmeStates/attachWfEsmInfoCheck.h"	
#include "mmeStates/attachWfEsmInfoResp.h"	
#include "mmeStates/attachWfUla.h"

using namespace mme;
using namespace SM;

/******************************************************************************
* Constructor
******************************************************************************/
AttachWfEsmInfoCheck::AttachWfEsmInfoCheck():State(State_e::attach_wf_esm_info_check)
{
}

/******************************************************************************
* Destructor
******************************************************************************/
AttachWfEsmInfoCheck::~AttachWfEsmInfoCheck()
{
}

/******************************************************************************
* creates and returns static instance
******************************************************************************/
AttachWfEsmInfoCheck* AttachWfEsmInfoCheck::Instance()
{
        static AttachWfEsmInfoCheck state;
        return &state;
}

/******************************************************************************
* initializes eventToActionsMap
******************************************************************************/
void AttachWfEsmInfoCheck::initialize()
{
        {
                ActionTable actionTable;
                actionTable.addAction(&ActionHandlers::send_esm_info_req_to_ue);
                actionTable.setNextState(AttachWfEsmInfoResp::Instance());
                eventToActionsMap.insert(pair<Event_e, ActionTable>(Event_e::ESM_INFO_REQUIRED, actionTable));
        }
        {
                ActionTable actionTable;
                actionTable.addAction(&ActionHandlers::send_ulr_to_hss);
                actionTable.setNextState(AttachWfUla::Instance());
                eventToActionsMap.insert(pair<Event_e, ActionTable>(Event_e::ESM_INFO_NOT_REQUIRED, actionTable));
        }
}
