Skip to content
Snippets Groups Projects
MetadataJsonManager.cpp 2.29 KiB
Newer Older
#include "MantidVatesAPI/MetadataJsonManager.h"
#include <json/json.h>
#include <json/writer.h>
#include <json/reader.h>
namespace Mantid {
namespace VATES {
// Note that we need to have a non-empty default string
MetadataJsonManager::MetadataJsonManager()
    : instrument("_EMPTY_"), specialCoordinates(-1) {}

MetadataJsonManager::~MetadataJsonManager() {}

/**
 * Get the serialized JSON container as a string
 * @return The Json container in string format.
 */
std::string MetadataJsonManager::getSerializedJson() {
  Json::FastWriter writer;
  metadataContainer.clear();

  metadataContainer["instrument"] = instrument;
  metadataContainer["specialCoordinates"] = specialCoordinates;

  return writer.write(metadataContainer);
}

/**
 * Read in the serialized JSON data and opulate the JSON container
 * @param serializedJson The serialized JSON string.
 */
void MetadataJsonManager::readInSerializedJson(
    const std::string &serializedJson) {
  Json::Reader reader;
  metadataContainer.clear();

  bool parseSuccess = reader.parse(serializedJson, metadataContainer, false);

  if (parseSuccess) {
    // Set the instrument
    if (metadataContainer.isObject() &&
        metadataContainer.isMember("instrument")) {
      instrument = metadataContainer["instrument"].asString();
    } else {
      instrument = "_EMPTY_";
    // Set the instrument
    if (metadataContainer.isObject() &&
        metadataContainer.isMember("specialCoordinates")) {
      specialCoordinates = metadataContainer["specialCoordinates"].asInt();
    } else {
      specialCoordinates = -1;
}

/**
 * Set the instrument.
 * @param instrument The instrument associated with the workspace.
 */
void MetadataJsonManager::setInstrument(const std::string &instrument) {
  this->instrument = instrument;
}

/**
 * Get the instrument.
 * @returns The stored instrument or the an empty string.
 */
std::string &MetadataJsonManager::getInstrument() { return instrument; }

/**
 * Set the special coordinates.
 * @param specialCoordinates The special coordinates.
 */
void MetadataJsonManager::setSpecialCoordinates(int specialCoordinates) {
  this->specialCoordinates = specialCoordinates;
}

/**
 * Get the special coordinates
 * @returns The special coordinates.
 */
int MetadataJsonManager::getSpecialCoordinates() { return specialCoordinates; }
}