BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ModelView::JsonVariantConverter Class Reference

Default converter between supported variants and json objects. More...

Inheritance diagram for ModelView::JsonVariantConverter:
[legend]
Collaboration diagram for ModelView::JsonVariantConverter:
[legend]

Classes

struct  Converters
 

Public Member Functions

 JsonVariantConverter ()
 
QJsonObject get_json (const Variant &variant) override
 
Variant get_variant (const QJsonObject &object) override
 
bool isVariant (const QJsonObject &object) const
 Returns true if given json object represents variant. More...
 

Private Attributes

std::map< std::string, Convertersm_converters
 

Detailed Description

Default converter between supported variants and json objects.

Definition at line 31 of file jsonvariantconverter.h.

Constructor & Destructor Documentation

◆ JsonVariantConverter()

JsonVariantConverter::JsonVariantConverter ( )

Definition at line 75 of file jsonvariantconverter.cpp.

76 {
77  m_converters[Constants::invalid_type_name] = {from_invalid, to_invalid};
78  m_converters[Constants::bool_type_name] = {from_bool, to_bool};
79  m_converters[Constants::int_type_name] = {from_int, to_int};
80  m_converters[Constants::string_type_name] = {from_string, to_string};
81  m_converters[Constants::double_type_name] = {from_double, to_double};
82  m_converters[Constants::vector_double_type_name] = {from_vector_double, to_vector_double};
83  m_converters[Constants::comboproperty_type_name] = {from_comboproperty, to_comboproperty};
84  m_converters[Constants::qcolor_type_name] = {from_qcolor, to_qcolor};
85  m_converters[Constants::extproperty_type_name] = {from_extproperty, to_extproperty};
86  m_converters[Constants::reallimits_type_name] = {from_reallimits, to_reallimits};
87 }
std::map< std::string, Converters > m_converters
const std::string string_type_name
const std::string bool_type_name
const std::string reallimits_type_name
const std::string comboproperty_type_name
const std::string double_type_name
const std::string extproperty_type_name
const std::string vector_double_type_name
const std::string invalid_type_name
const std::string qcolor_type_name
const std::string int_type_name

References ModelView::Constants::bool_type_name, ModelView::Constants::comboproperty_type_name, ModelView::Constants::double_type_name, ModelView::Constants::extproperty_type_name, ModelView::Constants::int_type_name, ModelView::Constants::invalid_type_name, m_converters, ModelView::Constants::qcolor_type_name, ModelView::Constants::reallimits_type_name, ModelView::Constants::string_type_name, and ModelView::Constants::vector_double_type_name.

Member Function Documentation

◆ get_json()

QJsonObject JsonVariantConverter::get_json ( const Variant variant)
overridevirtual

Implements ModelView::JsonVariantConverterInterface.

Definition at line 89 of file jsonvariantconverter.cpp.

90 {
91  const std::string type_name = Utils::VariantName(variant);
92 
93  if (m_converters.find(type_name) == m_converters.end())
94  throw std::runtime_error("json::get_json() -> Error. Unknown variant type '" + type_name
95  + "'.");
96 
97  return m_converters[type_name].variant_to_json(variant);
98 }
MVVM_MODEL_EXPORT std::string VariantName(const Variant &variant)
Returns name of variant.

References m_converters, and ModelView::Utils::VariantName().

Referenced by TEST_F(), and JsonVariantConverterTest::ToJsonAndBack().

Here is the call graph for this function:

◆ get_variant()

Variant JsonVariantConverter::get_variant ( const QJsonObject &  object)
overridevirtual

Implements ModelView::JsonVariantConverterInterface.

Definition at line 100 of file jsonvariantconverter.cpp.

101 {
102  if (!isVariant(object))
103  throw std::runtime_error("json::get_variant() -> Error. Invalid json object");
104 
105  const auto type_name = object[variantTypeKey].toString().toStdString();
106  if (m_converters.find(type_name) == m_converters.end())
107  throw std::runtime_error("json::get_variant() -> Error. Unknown variant type '" + type_name
108  + "' in json object.");
109 
110  return m_converters[type_name].json_to_variant(object);
111 }
bool isVariant(const QJsonObject &object) const
Returns true if given json object represents variant.

References isVariant(), and m_converters.

Referenced by TEST_F(), and JsonVariantConverterTest::ToJsonAndBack().

Here is the call graph for this function:

◆ isVariant()

bool JsonVariantConverter::isVariant ( const QJsonObject &  object) const

Returns true if given json object represents variant.

Definition at line 115 of file jsonvariantconverter.cpp.

116 {
117  static const QStringList expected = expected_variant_keys();
118  return object.keys() == expected;
119 }

Referenced by get_variant(), and TEST_F().

Member Data Documentation

◆ m_converters

std::map<std::string, Converters> ModelView::JsonVariantConverter::m_converters
private

Definition at line 47 of file jsonvariantconverter.h.

Referenced by JsonVariantConverter(), get_json(), and get_variant().


The documentation for this class was generated from the following files: