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

Converter between SessionItemContainer and JSON object. More...

Classes

struct  JsonItemContainerConverterImpl
 

Public Member Functions

 JsonItemContainerConverter (ConverterCallbacks callbacks)
 
 ~JsonItemContainerConverter ()
 
void from_json (const QJsonObject &json, SessionItemContainer &container)
 Reconstructs SessionItemContainer from the content of JSON object. More...
 
QJsonObject to_json (const SessionItemContainer &container)
 

Private Attributes

std::unique_ptr< JsonItemContainerConverterImplp_impl
 

Detailed Description

Converter between SessionItemContainer and JSON object.

Definition at line 32 of file jsonitemcontainerconverter.h.

Constructor & Destructor Documentation

◆ JsonItemContainerConverter()

JsonItemContainerConverter::JsonItemContainerConverter ( ConverterCallbacks  callbacks)

Definition at line 110 of file jsonitemcontainerconverter.cpp.

111  : p_impl(std::make_unique<JsonItemContainerConverterImpl>(std::move(callbacks)))
112 {
113 }
std::unique_ptr< JsonItemContainerConverterImpl > p_impl

◆ ~JsonItemContainerConverter()

JsonItemContainerConverter::~JsonItemContainerConverter ( )
default

Member Function Documentation

◆ from_json()

void JsonItemContainerConverter::from_json ( const QJsonObject &  json,
SessionItemContainer container 
)

Reconstructs SessionItemContainer from the content of JSON object.

Can work in two modes:

  • If SessionItemContainer is empty, the content will be reconstructed from JSON
  • If SessionItemContainer contains some items already, they will be populated from JSON. Second mode is used when loading project from disk to allow back compatibility.

Definition at line 136 of file jsonitemcontainerconverter.cpp.

137 {
138  static JsonItemFormatAssistant assistant;
139 
140  if (!assistant.isSessionItemContainer(json))
141  throw std::runtime_error("Error in JsonItemContainerConverter: given JSON can't represent "
142  "SessionItemContainer.");
143 
144  TagInfo tagInfo = p_impl->m_taginfo_converter->from_json(
145  json[JsonItemFormatAssistant::tagInfoKey].toObject());
146 
147  if (tagInfo.name() != container.tagInfo().name())
148  throw std::runtime_error("Error in JsonItemContainerConverter: attempt to update "
149  "container from JSON representing another container.");
150 
151  if (container.empty())
152  p_impl->populate_container(json, container);
153  else
154  p_impl->update_container(json, container);
155 }
Utility class to determine, whether given JSON object can represent various parts of SessionModel.
bool isSessionItemContainer(const QJsonObject &json) const
Returns true if given json object represents SessionItemContainer.
Holds info about single tag for SessionItem.
Definition: taginfo.h:28
std::string name() const
Definition: taginfo.cpp:45

References ModelView::SessionItemContainer::empty(), ModelView::JsonItemFormatAssistant::isSessionItemContainer(), ModelView::TagInfo::name(), p_impl, ModelView::SessionItemContainer::tagInfo(), and ModelView::JsonItemFormatAssistant::tagInfoKey.

Here is the call graph for this function:

◆ to_json()

QJsonObject JsonItemContainerConverter::to_json ( const SessionItemContainer container)

Definition at line 117 of file jsonitemcontainerconverter.cpp.

118 {
119  QJsonObject result;
121  p_impl->m_taginfo_converter->to_json(container.tagInfo());
122 
123  QJsonArray itemArray;
124  for (auto item : container)
125  itemArray.append(p_impl->create_json(*item));
126  result[JsonItemFormatAssistant::itemsKey] = itemArray;
127 
128  return result;
129 }

References ModelView::JsonItemFormatAssistant::itemsKey, p_impl, ModelView::SessionItemContainer::tagInfo(), and ModelView::JsonItemFormatAssistant::tagInfoKey.

Here is the call graph for this function:

Member Data Documentation

◆ p_impl

std::unique_ptr<JsonItemContainerConverterImpl> ModelView::JsonItemContainerConverter::p_impl
private

Definition at line 43 of file jsonitemcontainerconverter.h.

Referenced by from_json(), and to_json().


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