Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ReflMeasureTransferStrategy.cpp 5.46 KiB
#include "ReflMeasureTransferStrategy.h"
#include "MantidKernel/ICatalogInfo.h"
#include "MantidKernel/ProgressBase.h"
#include "MantidKernel/UserCatalogInfo.h"
#include "ReflMeasurementItemSource.h"
#include "ReflTableSchema.h"
#include <boost/regex.hpp>
#include <limits>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <utility>
#include <vector>

using namespace Mantid::Kernel;

namespace MantidQt {
namespace CustomInterfaces {

//----------------------------------------------------------------------------------------------
/** Constructor
 */
ReflMeasureTransferStrategy::ReflMeasureTransferStrategy(
    std::unique_ptr<ICatalogInfo> catInfo,
    std::unique_ptr<ReflMeasurementItemSource> measurementItemSource)
    : m_catInfo(std::move(catInfo)),
      m_measurementItemSource(std::move(measurementItemSource)) {}

ReflMeasureTransferStrategy::ReflMeasureTransferStrategy(
    const ReflMeasureTransferStrategy &other)
    : m_catInfo(other.m_catInfo->clone()),
      m_measurementItemSource(other.m_measurementItemSource->clone())

{}

//----------------------------------------------------------------------------------------------
/** Destructor
 */
ReflMeasureTransferStrategy::~ReflMeasureTransferStrategy() {}

TransferResults
MantidQt::CustomInterfaces::ReflMeasureTransferStrategy::transferRuns(
    SearchResultMap &searchResults, Mantid::Kernel::ProgressBase &progress) {

  using VecSameMeasurement = std::vector<MeasurementItem>;
  using MapGroupedMeasurement =
      std::map<MeasurementItem::IDType, VecSameMeasurement>;

  // table-like output for successful runs
  std::vector<std::map<std::string, std::string>> runs;
  // table-like output for unsuccessful runs containing
  // row number and reason why unsuccessful.
  // This will be used mainly for highlighting unsuccessful runs
  // in a tooltip.
  std::vector<std::map<std::string, std::string>> errors;

  // Create TransferResults as a holder for both successful/unsuccessful
  // runs.
  TransferResults results(runs, errors);
  MapGroupedMeasurement mapOfMeasurements;
  for (auto it = searchResults.begin(); it != searchResults.end(); ++it) {
    const auto location = it->second.location;
    const auto fuzzyName = it->first;

    const auto definedPath = m_catInfo->transformArchivePath(location);

    // This is where we read the meta data.
    MeasurementItem metaData =
        m_measurementItemSource->obtain(definedPath, fuzzyName);