BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl Struct Reference
Collaboration diagram for ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl:
[legend]

Public Member Functions

 JsonItemContainerConverterImpl (ConverterCallbacks callbacks={})
 
std::unique_ptr< SessionItemcreate_item (const QJsonObject &json)
 
void create_items (const QJsonObject &json, SessionItemContainer &container)
 
QJsonObject create_json (const SessionItem &item)
 
void populate_container (const QJsonObject &json, SessionItemContainer &container)
 Populates container with content reconstructed from JSON object. Container must be empty. More...
 
void update_container (const QJsonObject &json, SessionItemContainer &container)
 Update container with content reconstructed from JSON object. More...
 
void update_item (const QJsonObject &json, SessionItem *item)
 
void update_items (const QJsonObject &json, SessionItemContainer &container)
 Update container from json content. More...
 

Public Attributes

ConverterCallbacks m_converter_callbacks
 
std::unique_ptr< JsonTagInfoConverterInterfacem_taginfo_converter
 

Detailed Description

Definition at line 29 of file jsonitemcontainerconverter.cpp.

Constructor & Destructor Documentation

◆ JsonItemContainerConverterImpl()

ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::JsonItemContainerConverterImpl ( ConverterCallbacks  callbacks = {})
inline

Definition at line 33 of file jsonitemcontainerconverter.cpp.

33  {})
34  : m_converter_callbacks(std::move(callbacks))
35  {
36  m_taginfo_converter = std::make_unique<JsonTagInfoConverter>();
37  }

Member Function Documentation

◆ create_item()

std::unique_ptr<SessionItem> ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::create_item ( const QJsonObject &  json)
inline

◆ create_items()

void ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::create_items ( const QJsonObject &  json,
SessionItemContainer container 
)
inline

Definition at line 69 of file jsonitemcontainerconverter.cpp.

70  {
71  for (const auto obj : json[JsonItemFormatAssistant::itemsKey].toArray()) {
72  if (auto item = create_item(obj.toObject()); item)
73  container.insertItem(item.release(), container.itemCount());
74  }
75  }
bool insertItem(SessionItem *item, int index)
Inserts item in a vector of children at given index, returns true in the case of success.
int itemCount() const
Returns number of items in given tag.
std::unique_ptr< SessionItem > create_item(const QJsonObject &json)

References ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::create_item(), ModelView::SessionItemContainer::insertItem(), ModelView::SessionItemContainer::itemCount(), and ModelView::JsonItemFormatAssistant::itemsKey.

Referenced by ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::populate_container(), and ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_container().

Here is the call graph for this function:

◆ create_json()

QJsonObject ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::create_json ( const SessionItem item)
inline

◆ populate_container()

void ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::populate_container ( const QJsonObject &  json,
SessionItemContainer container 
)
inline

Populates container with content reconstructed from JSON object. Container must be empty.

Definition at line 79 of file jsonitemcontainerconverter.cpp.

80  {
81  if (!container.empty())
82  throw std::runtime_error(
83  "Error in JsonItemContainerConverter: container is not empty.");
84 
85  create_items(json, container);
86  }
void create_items(const QJsonObject &json, SessionItemContainer &container)

References ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::create_items(), and ModelView::SessionItemContainer::empty().

Here is the call graph for this function:

◆ update_container()

void ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_container ( const QJsonObject &  json,
SessionItemContainer container 
)
inline

Update container with content reconstructed from JSON object.

It is assumed, that container has some items already created.

Definition at line 91 of file jsonitemcontainerconverter.cpp.

92  {
93  TagInfo tagInfo =
94  m_taginfo_converter->from_json(json[JsonItemFormatAssistant::tagInfoKey].toObject());
95 
96  if (Compatibility::IsCompatibleSinglePropertyTag(container, tagInfo))
97  update_items(json, container);
98 
99  else if (Compatibility::IsCompatibleGroupTag(container, tagInfo))
100  update_items(json, container);
101 
102  else if (Compatibility::IsCompatibleUniversalTag(container, tagInfo))
103  create_items(json, container);
104 
105  else
106  throw std::runtime_error("Error in JsonItemContainerConverter: can't convert json");
107  }
Holds info about single tag for SessionItem.
Definition: taginfo.h:28
bool IsCompatibleUniversalTag(const SessionItemContainer &container, const TagInfo &taginfo)
bool IsCompatibleSinglePropertyTag(const SessionItemContainer &container, const TagInfo &taginfo)
bool IsCompatibleGroupTag(const SessionItemContainer &container, const TagInfo &taginfo)
void update_items(const QJsonObject &json, SessionItemContainer &container)
Update container from json content.

References ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::create_items(), ModelView::Compatibility::IsCompatibleGroupTag(), ModelView::Compatibility::IsCompatibleSinglePropertyTag(), ModelView::Compatibility::IsCompatibleUniversalTag(), ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::m_taginfo_converter, ModelView::JsonItemFormatAssistant::tagInfoKey, and ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_items().

Here is the call graph for this function:

◆ update_item()

void ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_item ( const QJsonObject &  json,
SessionItem item 
)
inline

◆ update_items()

void ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_items ( const QJsonObject &  json,
SessionItemContainer container 
)
inline

Update container from json content.

Number of existing container items should match size of json array.

Definition at line 59 of file jsonitemcontainerconverter.cpp.

60  {
61  auto array = json[JsonItemFormatAssistant::itemsKey].toArray();
62  if (array.size() != container.itemCount())
63  throw std::runtime_error("Error in JsonItemContainerConverter: size is different");
64  int index{0};
65  for (const auto obj : array)
66  update_item(obj.toObject(), container.itemAt(index++));
67  }
SessionItem * itemAt(int index) const
Returns item at given index. Returns nullptr if index is invalid.

References ModelView::SessionItemContainer::itemAt(), ModelView::SessionItemContainer::itemCount(), ModelView::JsonItemFormatAssistant::itemsKey, and ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_item().

Referenced by ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_container().

Here is the call graph for this function:

Member Data Documentation

◆ m_converter_callbacks

◆ m_taginfo_converter

std::unique_ptr<JsonTagInfoConverterInterface> ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::m_taginfo_converter

The documentation for this struct was generated from the following file: