#include "stdafx.h" #include "ExamHandlerManager.h" #include "IExamHandler.h" #include "IExamHandlerFactory.h" using namespace DIOS::Dev::Detail::MachineryECOM; ExamHandlerManager *ExamHandlerManager::m_instance = nullptr; ExamHandlerManager::ExamHandlerManager() :m_currentHandler(nullptr) { } ExamHandlerManager::~ExamHandlerManager() { } ExamHandlerManager *ExamHandlerManager::Instance() { if (m_instance == nullptr) { m_instance = new ExamHandlerManager(); } return m_instance; } void ExamHandlerManager::Initialize( IExamHandlerFactory *factory, IPositionManager *positionManager, IMotionModelManager *modelManager, const std::map &handlerList) { IExamHandler *nothing = factory->CreateExamHandler(EXAM_HANDLER_NONE); if (nothing) { nothing->SetName(DONOTHING_EXAMHANDLER); nothing->OnModelLoaded(modelManager); nothing->OnCoordinatesLoaded(positionManager); m_handlers[DONOTHING_EXAMHANDLER] = nothing; m_currentHandler = m_handlers[DONOTHING_EXAMHANDLER]; } auto it = handlerList.begin(); for (; it != handlerList.end();++it) { auto handler = factory->CreateExamHandler((EXAM_HANDLER_TYPE)it->second); if (handler) { handler->SetName(it->first); handler->OnModelLoaded(modelManager); handler->OnCoordinatesLoaded(positionManager); m_handlers[it->first] = handler; } } } void ExamHandlerManager::RegisterHandler(const std::string &name, IExamHandler *handler) { if (name == "" || !handler) { return; } handler->SetName(name); m_handlers[name] = handler; } IExamHandler *ExamHandlerManager::GetHandler(const std::string &name) { IExamHandler *handler = nullptr; if (m_handlers.find(name) != m_handlers.end()) { handler = m_handlers[name]; } return handler; } IExamHandler *ExamHandlerManager::ChangeCurrentHandler(const std::string &name) { if (m_handlers.find(name) != m_handlers.end()) { m_currentHandler = m_handlers[name]; } return m_currentHandler; } IExamHandler *ExamHandlerManager::GetCurrentHandler() { return m_currentHandler; }