/** * @RDE_HEADER@ * ScheduleStatusManager / Manages the state of an exercise * $Id$ * $HeadURL$ * $Author$ * * Created by Iuliana Ojog, SLTE */ #include "schedule_status_manager.h" #include "object_main_schedule.h" #include "logger.h" namespace InfrastructureManagement { ScheduleStatusManager::ScheduleStatusManager(ObjectMainSchedule *objSchedule, QObject *parent) : QObject(parent) , m_ScheduleStatus(ScheduleStatus::Unknown) , m_schedule(objSchedule) , m_logger(getLogger("ScheduleStatusManager")) { m_stateSignals[ScheduleStatus::Unknown] = [&]() { emit stateUnknown(); }; m_stateSignals[ScheduleStatus::Created] = [&]() { emit stateCreated(); }; m_stateSignals[ScheduleStatus::Prepared] = [&]() { emit statePrepared(); }; m_stateSignals[ScheduleStatus::Activated] = [&]() { emit stateActivated(); }; m_stateSignals[ScheduleStatus::Expired] = [&]() { emit stateExpired(); }; m_stateSignals[ScheduleStatus::Removed] = [&]() { emit stateRemoved(); }; } bool ScheduleStatusManager::triggerSwitchState(InfrastructureManagement::ScheduleStatus state) { INFO_LOG(m_logger) << "Schedule " << scheduleId() << ": Trying to switch to state " << toString(state); std::function f = m_stateSignals.value(state); if (f) { //DEBUG_LOG(m_logger) << "function: emit signal"; emit f(); } return (f != nullptr); } bool ScheduleStatusManager::isValid(InfrastructureManagement::ScheduleStatus state) const { return m_stateSignals.contains(state); } void ScheduleStatusManager::setCurrent(InfrastructureManagement::ScheduleStatus state) { setStateInternal(state); } void ScheduleStatusManager::setInitial(InfrastructureManagement::ScheduleStatus state) { setStateInternal(state); } QString ScheduleStatusManager::toString(InfrastructureManagement::ScheduleStatus state) { switch (state.underlying()) { case ScheduleStatus::Unknown: return tr("UNKNOWN"); case ScheduleStatus::Created: return tr("CREATED"); case ScheduleStatus::Prepared: return tr("PREPARED"); case ScheduleStatus::Activated: return tr("ACTIVATED"); case ScheduleStatus::Expired: return tr("EXPIRED"); case ScheduleStatus::Removed: return tr("REMOVED"); } return tr("Unknown State: (%1)").arg(state.underlying()); } void ScheduleStatusManager::setStateInternal(InfrastructureManagement::ScheduleStatus state) { INFO_LOG(m_logger) << "Schedule " << scheduleId() << ": In setStateInternal: new state " << toString(state); if(m_ScheduleStatus == state) return; m_ScheduleStatus = state; INFO_LOG(m_logger) << "Schedule " << scheduleId() << ": Changed schedule state to " << toString(state); } int ScheduleStatusManager::scheduleId() const { return m_schedule ? m_schedule->getId() : -1; } } // namespace InfrastructureManagement