Files
itc_pressure_optimizer/src/device/handlers/SettingsHandler.cpp
T

125 lines
4.8 KiB
C++

#include "SettingsHandler.h"
#include "../itc_pressure_optimizer.h"
#include "SettingsHandlerConfig.h"
#include <string>
using namespace SettingsHandlerConfig;
void SettingsHandler::pullEquipmentName() {
midas::odb o(this->path);
std::string equipmentName = o[SettingsHandlerConfig::EQUIPMENT_NAME];
Event event = {EventType::EQUIPMENT_NAME, equipmentName};
eventBus.publish(event);
}
void SettingsHandler::pullOutputPressureSPIndex() {
midas::odb o(this->path);
int outputPressureSPIndex =
o[SettingsHandlerConfig::OUTPUT_PRESSURE_SP_INDEX];
Event event = {EventType::OUTPUT_PRESSURE_SP_INDEX, outputPressureSPIndex};
eventBus.publish(event);
}
void SettingsHandler::pullInputSPIndex() {
midas::odb o(this->path);
int inputSPIndex = o[SettingsHandlerConfig::INPUT_SP_INDEX];
Event event = {EventType::INPUT_SP_INDEX, inputSPIndex};
eventBus.publish(event);
}
void SettingsHandler::pullInputTemperatureIndex() {
midas::odb o(this->path);
int temperatureIndex = o[SettingsHandlerConfig::INPUT_TEMPERATURE_INDEX];
Event event = {EventType::INPUT_TEMPERATURE_INDEX, temperatureIndex};
eventBus.publish(event);
}
void SettingsHandler::pullInputPowerIndex() {
midas::odb o(this->path);
int powerIndex = o[SettingsHandlerConfig::INPUT_POWER_INDEX];
Event event = {EventType::INPUT_POWER_INDEX, powerIndex};
eventBus.publish(event);
}
SettingsHandler::SettingsHandler(EventBus &eventBusReference,
std::string equipmentName)
: path(SettingsHandlerConfig::PATH_PREFIX + equipmentName +
SettingsHandlerConfig::PATH_SUFFIX),
eventBus(eventBusReference) {
eventBus.subscribe<itcPressureOptimizer::EquipmentInitEvent>(
[this](const itcPressureOptimizer::EquipmentInitEvent &e) {
this->init();
});
}
bool SettingsHandler::init() {
midas::odb o(this->path);
bool areKeysValids = true;
if (!midas::odb::exists(path + SettingsHandlerConfig::EQUIPMENT_NAME)) {
TMFE::Instance()->Msg(MERROR, __FUNCTION__,
"Key at %s%s doesn't exists", path.c_str(),
SettingsHandlerConfig::EQUIPMENT_NAME.c_str());
areKeysValids = false;
}
if (!midas::odb::exists(path +
SettingsHandlerConfig::OUTPUT_PRESSURE_SP_INDEX)) {
TMFE::Instance()->Msg(
MERROR, __FUNCTION__, "Key at %s%s doesn't exists", path.c_str(),
SettingsHandlerConfig::OUTPUT_PRESSURE_SP_INDEX.c_str());
areKeysValids = false;
}
if (!midas::odb::exists(path + SettingsHandlerConfig::INPUT_SP_INDEX)) {
TMFE::Instance()->Msg(MERROR, __FUNCTION__,
"Key at %s%s doesn't exists", path.c_str(),
SettingsHandlerConfig::INPUT_SP_INDEX.c_str());
areKeysValids = false;
}
if (!midas::odb::exists(path +
SettingsHandlerConfig::INPUT_TEMPERATURE_INDEX)) {
TMFE::Instance()->Msg(
MERROR, __FUNCTION__, "Key at %s%s doesn't exists", path.c_str(),
SettingsHandlerConfig::INPUT_TEMPERATURE_INDEX.c_str());
areKeysValids = false;
}
if (!midas::odb::exists(path + SettingsHandlerConfig::INPUT_POWER_INDEX)) {
TMFE::Instance()->Msg(MERROR, __FUNCTION__,
"Key at %s%s doesn't exists", path.c_str(),
SettingsHandlerConfig::INPUT_POWER_INDEX.c_str());
areKeysValids = false;
}
if (!areKeysValids) {
midas::odb o = {
{SettingsHandlerConfig::EQUIPMENT_NAME.c_str(),
{SettingsHandlerConfig::DEFAULT_EQUIPMENT_NAME.c_str()}},
{SettingsHandlerConfig::OUTPUT_PRESSURE_SP_INDEX.c_str(),
{SettingsHandlerConfig::DEFAULT_INDEX_VALUE}},
{SettingsHandlerConfig::INPUT_SP_INDEX.c_str(),
{SettingsHandlerConfig::DEFAULT_INDEX_VALUE}},
{SettingsHandlerConfig::INPUT_TEMPERATURE_INDEX.c_str(),
{SettingsHandlerConfig::DEFAULT_INDEX_VALUE}},
{SettingsHandlerConfig::INPUT_POWER_INDEX.c_str(),
{SettingsHandlerConfig::DEFAULT_INDEX_VALUE}},
{SettingsHandlerConfig::TIME_WINDOW.c_str(),
{SettingsHandlerConfig::DEFAULT_TIME_WINDOWS_SIZE}}};
TMFE::Instance()->Msg(
MERROR, __FUNCTION__,
"Some keys are missing at %s. Please fill the generated template.",
path.c_str());
o.connect(this->path);
throw std::runtime_error("SettinsHandler init failed - see MIDAS "
"console and take care of all the errors\n");
}
this->pullEquipmentName();
this->pullOutputPressureSPIndex();
this->pullInputSPIndex();
this->pullInputTemperatureIndex();
this->pullInputPowerIndex();
return true;
}