Skip to content
Snippets Groups Projects
ConfigObserver.cpp 1.95 KiB
Newer Older
#include "MantidKernel/ConfigObserver.h"
#include "MantidKernel/ConfigService.h"
#include <iostream>

namespace Mantid {
namespace Kernel {
ConfigObserver::ConfigObserver()
    : m_valueChangeListener(*this, &ConfigObserver::notifyValueChanged) {
  ConfigService::Instance().addObserver(m_valueChangeListener);
}

ConfigObserver::ConfigObserver(const ConfigObserver &other)
    : m_valueChangeListener(other.m_valueChangeListener) {
  ConfigService::Instance().addObserver(m_valueChangeListener);
}

ConfigObserver::ConfigObserver(
    ConfigObserver &&other) noexcept
    : m_valueChangeListener(other.m_valueChangeListener) {
  ConfigService::Instance().removeObserver(other.m_valueChangeListener);
  ConfigService::Instance().addObserver(m_valueChangeListener);
}

ConfigObserver &ConfigObserver::
operator=(const ConfigObserver &other) {
  m_valueChangeListener = other.m_valueChangeListener;
  ConfigService::Instance().addObserver(m_valueChangeListener);
  return *this;
}

ConfigObserver &ConfigObserver::
operator=(ConfigObserver &&other) noexcept {
  m_valueChangeListener = other.m_valueChangeListener;
  ConfigService::Instance().removeObserver(other.m_valueChangeListener);
  ConfigService::Instance().addObserver(m_valueChangeListener);
  return *this;
}

ConfigObserver::~ConfigObserver() noexcept {
  ConfigService::Instance().removeObserver(m_valueChangeListener);
}

void ConfigObserver::notifyValueChanged(
    const std::string &name, const std::string &newValue,
    const std::string &prevValue) {
  onValueChanged(name, newValue, prevValue);
}

void ConfigObserver::onValueChanged(const std::string &name,
                                           const std::string &newValue,
                                           const std::string &prevValue) {}

void ConfigObserver::notifyValueChanged(
    ConfigValChangeNotification_ptr notification) {
  notifyValueChanged(notification->key(), notification->curValue(),
                     notification->preValue());
}
}
}