BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SessionXML Namespace Reference

Functions

const QString BinaryData ("BinaryData")
 
const QString DisplayNameAttribute ("DisplayName")
 
const QString DocumentModelTag ("DocumentModel")
 
const QString ExternalPropertyColorAtt ("Color")
 
const QString ExternalPropertyIdentifierAtt ("Identifier")
 
const QString ExternalPropertyTextAtt ("Text")
 
const QString InstrumentModelTag ("InstrumentModel")
 
const QString ItemTag ("Item")
 
const QString JobModelTag ("JobModel")
 
const QString MaterialModelTag ("MaterialModel")
 
const QString ModelNameAttribute ("Name")
 
const QString ModelTypeAttribute ("ModelType")
 
const QString ParameterExtAttribute ("ParExt")
 
const QString ParameterNameAttribute ("ParName")
 
const QString ParameterRoleAttribute ("ParRole")
 
const QString ParameterTag ("Parameter")
 
const QString ParameterTypeAttribute ("ParType")
 
const QString ParameterValueAttribute ("ParValue")
 
void readItems (QXmlStreamReader *reader, SessionItem *parent, QString topTag="", MessageService *messageService=nullptr)
 
QString readProperty (QXmlStreamReader *reader, SessionItem *item, MessageService *messageService=nullptr)
 
const QString RealDataModelTag ("RealDataModel")
 
const QString SampleModelTag ("SampleModel")
 
const QString TagAttribute ("Tag")
 
const QString Version ("Version")
 
void writeItemAndChildItems (QXmlStreamWriter *writer, const SessionItem *item)
 
void writeTo (QXmlStreamWriter *writer, SessionItem *parent)
 
void writeVariant (QXmlStreamWriter *writer, QVariant variant, int role)
 

Variables

const QString ItemMimeType = "application/org.bornagainproject.xml.item.z"
 
const QString LinkMimeType = "application/org.bornagainproject.fittinglink"
 

Function Documentation

◆ BinaryData()

const QString SessionXML::BinaryData ( "BinaryData"  )

◆ DisplayNameAttribute()

const QString SessionXML::DisplayNameAttribute ( "DisplayName"  )

◆ DocumentModelTag()

const QString SessionXML::DocumentModelTag ( "DocumentModel"  )

◆ ExternalPropertyColorAtt()

const QString SessionXML::ExternalPropertyColorAtt ( "Color"  )

Referenced by readProperty(), and writeVariant().

◆ ExternalPropertyIdentifierAtt()

const QString SessionXML::ExternalPropertyIdentifierAtt ( "Identifier"  )

Referenced by readProperty(), and writeVariant().

◆ ExternalPropertyTextAtt()

const QString SessionXML::ExternalPropertyTextAtt ( "Text"  )

Referenced by readProperty(), and writeVariant().

◆ InstrumentModelTag()

const QString SessionXML::InstrumentModelTag ( "InstrumentModel"  )

◆ ItemTag()

const QString SessionXML::ItemTag ( "Item"  )

◆ JobModelTag()

const QString SessionXML::JobModelTag ( "JobModel"  )

Referenced by JobModel::JobModel().

◆ MaterialModelTag()

const QString SessionXML::MaterialModelTag ( "MaterialModel"  )

◆ ModelNameAttribute()

const QString SessionXML::ModelNameAttribute ( "Name"  )

Referenced by SessionModel::readFrom(), and writeTo().

◆ ModelTypeAttribute()

const QString SessionXML::ModelTypeAttribute ( "ModelType"  )

◆ ParameterExtAttribute()

const QString SessionXML::ParameterExtAttribute ( "ParExt"  )

Referenced by readProperty(), and writeVariant().

◆ ParameterNameAttribute()

const QString SessionXML::ParameterNameAttribute ( "ParName"  )

Referenced by readProperty().

◆ ParameterRoleAttribute()

const QString SessionXML::ParameterRoleAttribute ( "ParRole"  )

Referenced by readProperty(), and writeVariant().

◆ ParameterTag()

const QString SessionXML::ParameterTag ( "Parameter"  )

Referenced by readItems(), and writeVariant().

◆ ParameterTypeAttribute()

const QString SessionXML::ParameterTypeAttribute ( "ParType"  )

Referenced by readProperty(), and writeVariant().

◆ ParameterValueAttribute()

const QString SessionXML::ParameterValueAttribute ( "ParValue"  )

Referenced by readProperty(), and writeVariant().

◆ readItems()

void SessionXML::readItems ( QXmlStreamReader *  reader,
SessionItem parent,
QString  topTag = "",
MessageService messageService = nullptr 
)

Definition at line 122 of file SessionXML.cpp.

124 {
125  ASSERT(parent);
126  const QString start_type = parent->model()->getModelTag();
127  while (!reader->atEnd()) {
128  reader->readNext();
129  if (reader->isStartElement()) {
130  if (reader->name() == SessionXML::ItemTag) {
131  const QString model_type =
132  reader->attributes().value(SessionXML::ModelTypeAttribute).toString();
133  QString tag = reader->attributes().value(SessionXML::TagAttribute).toString();
134  QString displayName =
135  reader->attributes().value(SessionXML::DisplayNameAttribute).toString();
136 
137  if (!topTag.isEmpty()) {
138  // to handle copying of item to another parent
139  tag = topTag;
140  topTag.clear();
141  }
142  auto newItem = createItem(parent, model_type, tag);
143  if (!newItem) {
144  QString message = QString("Error while parsing XML. Can't create item of "
145  "modelType '%1' for tag '%2', parent '%3'")
146  .arg(model_type, tag, parent->P_NAME);
147  report_error(messageService, parent, message);
148  // risky attempt to recover the rest of the project
149  reader->skipCurrentElement();
150  } else {
151  parent = newItem;
152  parent->setDisplayName(displayName);
153  }
154  } else if (reader->name() == SessionXML::ParameterTag) {
155  SessionXML::readProperty(reader, parent, messageService);
156  } else if (reader->name() == SessionXML::BinaryData) {
157  if (reader->attributes().value(SessionXML::Version).toInt() == 1) {
158  QString valueAsBase64 =
159  reader->readElementText(QXmlStreamReader::SkipChildElements);
160  const auto data = QByteArray::fromBase64(
161  valueAsBase64.toLatin1()); // #baimport add a unit test for this!
162  parent->deserializeBinaryData(data);
163  } else
165  }
166  } else if (reader->isEndElement()) {
167  if (reader->name() == SessionXML::ItemTag && parent)
168  parent = parent->parent();
169 
170  if (reader->name() == start_type)
171  break;
172  }
173  }
174 }
#define ASSERT(condition)
Definition: Assert.h:31
static DeserializationException tooNew()
static const QString P_NAME
Definition: SessionItem.h:37
void setDisplayName(const QString &display_name)
Set display name.
SessionItem * parent() const
Returns parent of this item.
Definition: SessionItem.cpp:73
virtual void deserializeBinaryData(const QByteArray &data)
SessionModel * model() const
Returns model of this item.
Definition: SessionItem.cpp:66
QString getModelTag() const
Definition: SessionModel.h:191
std::string model_type
Definition: types.h:23
const QString Version("Version")
const QString BinaryData("BinaryData")
const QString TagAttribute("Tag")
const QString ParameterTag("Parameter")
const QString ModelTypeAttribute("ModelType")
QString readProperty(QXmlStreamReader *reader, SessionItem *item, MessageService *messageService=nullptr)
Definition: SessionXML.cpp:176
const QString DisplayNameAttribute("DisplayName")
const QString ItemTag("Item")

References ASSERT, BinaryData(), SessionItem::deserializeBinaryData(), DisplayNameAttribute(), SessionModel::getModelTag(), ItemTag(), SessionItem::model(), ModelTypeAttribute(), SessionItem::P_NAME, ParameterTag(), SessionItem::parent(), readProperty(), SessionItem::setDisplayName(), TagAttribute(), DeserializationException::tooNew(), and Version().

Referenced by SessionModel::copy(), SessionModel::load(), and SessionModel::readFrom().

Here is the call graph for this function:

◆ readProperty()

QString SessionXML::readProperty ( QXmlStreamReader *  reader,
SessionItem item,
MessageService messageService = nullptr 
)

Definition at line 176 of file SessionXML.cpp.

178 {
179  const QString parameter_name =
180  reader->attributes().value(SessionXML::ParameterNameAttribute).toString();
181  const QString parameter_type =
182  reader->attributes().value(SessionXML::ParameterTypeAttribute).toString();
183  const int role = reader->attributes().value(SessionXML::ParameterRoleAttribute).toInt();
184 
185  if (!item) {
186  QString message =
187  QString("Attempt to set property '%1' for non existing item").arg(parameter_name);
188  report_error(messageService, item, message);
189  return parameter_name;
190  }
191 
192  QVariant variant;
193  if (parameter_type == double_type_name) {
194  double parameter_value =
195  reader->attributes().value(SessionXML::ParameterValueAttribute).toDouble();
196  variant = parameter_value;
197  } else if (parameter_type == int_type_name) {
198  int parameter_value =
199  reader->attributes().value(SessionXML::ParameterValueAttribute).toInt();
200  variant = parameter_value;
201  } else if (parameter_type == uint_type_name) {
202  unsigned parameter_value =
203  reader->attributes().value(SessionXML::ParameterValueAttribute).toUInt();
204  variant = parameter_value;
205  } else if (parameter_type == bool_type_name) {
206  bool parameter_value =
207  reader->attributes().value(SessionXML::ParameterValueAttribute).toInt();
208  variant = parameter_value;
209  } else if (parameter_type == qstring_type_name) {
210  QString parameter_value =
211  reader->attributes().value(SessionXML::ParameterValueAttribute).toString();
212  variant = parameter_value;
213  } else if (parameter_type == "ExternalProperty") {
214  QString text = reader->attributes().value(SessionXML::ExternalPropertyTextAtt).toString();
215  QString colorName =
216  reader->attributes().value(SessionXML::ExternalPropertyColorAtt).toString();
217  QString identifier =
218  reader->attributes().value(SessionXML::ExternalPropertyIdentifierAtt).toString();
219 
220  ExternalProperty property;
221  property.setText(text);
222  property.setColor(QColor(colorName));
223  property.setIdentifier(identifier);
224  variant = property.variant();
225  } else if (parameter_type == "ComboProperty") {
226  QString selections =
227  reader->attributes().value(SessionXML::ParameterValueAttribute).toString();
228  QString values = reader->attributes().value(SessionXML::ParameterExtAttribute).toString();
229 
230  ComboProperty combo_property;
231  combo_property.setStringOfValues(values);
232  combo_property.setStringOfSelections(selections);
233 
234  variant = combo_property.variant();
235  } else {
236  QString message = QString("SessionModel::readProperty: parameter type not supported '"
237  + parameter_type + "'");
238  throw GUIHelpers::Error(message);
239  }
240 
241  if (variant.isValid()) {
242  item->setRoleProperty(role, variant);
243  }
244 
245  return parameter_name;
246 }
Custom property to define list of string values with multiple selections.
Definition: ComboProperty.h:25
void setStringOfValues(const QString &values)
Sets values from the string containing delimeter ';'.
void setStringOfSelections(const QString &values)
Sets selected indices from string.
QVariant variant() const
Constructs variant enclosing given ComboProperty.
The ExternalProperty class defines custom QVariant property to carry the text, color and an identifie...
void setText(const QString &name)
bool setRoleProperty(int role, const QVariant &value)
Set variant to role, create role if not present yet.
const std::string bool_type_name
const std::string double_type_name
const std::string int_type_name
const QString ParameterValueAttribute("ParValue")
const QString ParameterNameAttribute("ParName")
const QString ParameterExtAttribute("ParExt")
const QString ExternalPropertyColorAtt("Color")
const QString ParameterRoleAttribute("ParRole")
const QString ParameterTypeAttribute("ParType")
const QString ExternalPropertyIdentifierAtt("Identifier")
const QString ExternalPropertyTextAtt("Text")

References ModelView::Constants::bool_type_name, ModelView::Constants::double_type_name, ExternalPropertyColorAtt(), ExternalPropertyIdentifierAtt(), ExternalPropertyTextAtt(), ModelView::Constants::int_type_name, ParameterExtAttribute(), ParameterNameAttribute(), ParameterRoleAttribute(), ParameterTypeAttribute(), ParameterValueAttribute(), SessionItem::setRoleProperty(), ComboProperty::setStringOfSelections(), ComboProperty::setStringOfValues(), ExternalProperty::setText(), and ComboProperty::variant().

Referenced by readItems().

Here is the call graph for this function:

◆ RealDataModelTag()

const QString SessionXML::RealDataModelTag ( "RealDataModel"  )

◆ SampleModelTag()

const QString SessionXML::SampleModelTag ( "SampleModel"  )

◆ TagAttribute()

const QString SessionXML::TagAttribute ( "Tag"  )

◆ Version()

const QString SessionXML::Version ( "Version"  )

◆ writeItemAndChildItems()

void SessionXML::writeItemAndChildItems ( QXmlStreamWriter *  writer,
const SessionItem item 
)

Definition at line 49 of file SessionXML.cpp.

50 {
51  if (item->parent()) {
52  writer->writeStartElement(SessionXML::ItemTag);
53  writer->writeAttribute(SessionXML::ModelTypeAttribute, item->modelType());
54  QString tag = item->parent()->tagFromItem(item);
55  writer->writeAttribute(SessionXML::TagAttribute, tag);
56  writer->writeAttribute(SessionXML::DisplayNameAttribute,
58  for (int role : item->getRoles()) {
59  if (role == Qt::DisplayRole || role == Qt::EditRole)
60  SessionXML::writeVariant(writer, item->value(), role);
61  }
62  }
63 
64  for (auto child : item->children())
65  writeItemAndChildItems(writer, child);
66 
67  QByteArray a = item->serializeBinaryData();
68  if (!a.isEmpty()) {
69  writer->writeStartElement(SessionXML::BinaryData);
70  writer->writeAttribute(SessionXML::Version, "1");
71  writer->writeCharacters(a.toBase64());
72  writer->writeEndElement();
73  }
74 
75  if (item->parent())
76  writer->writeEndElement(); // ItemTag
77 }
QVariant value() const
Get value.
QVector< int > getRoles() const
Returns vector of all present roles.
virtual QByteArray serializeBinaryData() const
QVariant roleProperty(int role) const
Returns corresponding variant under given role, invalid variant when role is not present.
QVector< SessionItem * > children() const
Returns vector of all children.
QString modelType() const
Get model type.
QString tagFromItem(const SessionItem *item) const
Returns the tag name of given item when existing.
void writeVariant(QXmlStreamWriter *writer, QVariant variant, int role)
Definition: SessionXML.cpp:79
void writeItemAndChildItems(QXmlStreamWriter *writer, const SessionItem *item)
Definition: SessionXML.cpp:49

References BinaryData(), SessionItem::children(), DisplayNameAttribute(), SessionFlags::DisplayNameRole, SessionItem::getRoles(), ItemTag(), SessionItem::modelType(), ModelTypeAttribute(), SessionItem::parent(), SessionItem::roleProperty(), SessionItem::serializeBinaryData(), TagAttribute(), SessionItem::tagFromItem(), SessionItem::value(), Version(), and writeVariant().

Referenced by SessionModel::copy(), SessionModel::mimeData(), SessionModel::save(), and writeTo().

Here is the call graph for this function:

◆ writeTo()

void SessionXML::writeTo ( QXmlStreamWriter *  writer,
SessionItem parent 
)

Definition at line 39 of file SessionXML.cpp.

40 {
41  writer->writeStartElement(parent->model()->getModelTag());
42  writer->writeAttribute(SessionXML::ModelNameAttribute, parent->model()->getModelName());
43 
44  writeItemAndChildItems(writer, parent);
45 
46  writer->writeEndElement(); // m_model_tag
47 }
QString getModelName() const
Definition: SessionModel.h:196
const QString ModelNameAttribute("Name")

References SessionModel::getModelName(), SessionModel::getModelTag(), SessionItem::model(), ModelNameAttribute(), and writeItemAndChildItems().

Referenced by SessionModel::writeTo().

Here is the call graph for this function:

◆ writeVariant()

void SessionXML::writeVariant ( QXmlStreamWriter *  writer,
QVariant  variant,
int  role 
)

Definition at line 79 of file SessionXML.cpp.

80 {
81  if (variant.isValid()) {
82  writer->writeStartElement(SessionXML::ParameterTag);
83  QString type_name = variant.typeName();
84  writer->writeAttribute(SessionXML::ParameterTypeAttribute, type_name);
85  writer->writeAttribute(SessionXML::ParameterRoleAttribute, QString::number(role));
86 
87  if (type_name == double_type_name) {
88  writer->writeAttribute(SessionXML::ParameterValueAttribute,
89  QString::number(variant.toDouble(), 'e', 12));
90  } else if (type_name == int_type_name) {
91  writer->writeAttribute(SessionXML::ParameterValueAttribute,
92  QString::number(variant.toInt()));
93  } else if (type_name == uint_type_name) {
94  writer->writeAttribute(SessionXML::ParameterValueAttribute,
95  QString::number(variant.toUInt()));
96  } else if (type_name == bool_type_name) {
97  writer->writeAttribute(SessionXML::ParameterValueAttribute,
98  QString::number(variant.toBool()));
99  } else if (type_name == qstring_type_name) {
100  writer->writeAttribute(SessionXML::ParameterValueAttribute, variant.toString());
101  } else if (type_name == "ExternalProperty") {
102  ExternalProperty prop = variant.value<ExternalProperty>();
103  writer->writeAttribute(SessionXML::ExternalPropertyTextAtt, prop.text());
104 
105  QString tcol = prop.color().isValid() ? prop.color().name(QColor::HexArgb) : "";
106  writer->writeAttribute(SessionXML::ExternalPropertyColorAtt, tcol);
107  writer->writeAttribute(SessionXML::ExternalPropertyIdentifierAtt, prop.identifier());
108  } else if (type_name == "ComboProperty") {
109  ComboProperty combo = variant.value<ComboProperty>();
110  writer->writeAttribute(SessionXML::ParameterValueAttribute, combo.stringOfSelections());
111  writer->writeAttribute(SessionXML::ParameterExtAttribute, combo.stringOfValues());
112 
113  } else {
114  throw GUIHelpers::Error("SessionXML::writeVariant: Parameter type not supported "
115  + type_name);
116  }
117 
118  writer->writeEndElement(); // end ParameterTag
119  }
120 }
QString stringOfSelections() const
Return string with coma separated list of selected indices.
QString stringOfValues() const
Returns a single string containing values delimited with ';'.
QString identifier() const
QString text() const
QColor color() const

References ModelView::Constants::bool_type_name, ExternalProperty::color(), ModelView::Constants::double_type_name, ExternalPropertyColorAtt(), ExternalPropertyIdentifierAtt(), ExternalPropertyTextAtt(), ExternalProperty::identifier(), ModelView::Constants::int_type_name, ParameterExtAttribute(), ParameterRoleAttribute(), ParameterTag(), ParameterTypeAttribute(), ParameterValueAttribute(), ComboProperty::stringOfSelections(), ComboProperty::stringOfValues(), and ExternalProperty::text().

Referenced by writeItemAndChildItems().

Here is the call graph for this function:

Variable Documentation

◆ ItemMimeType

const QString SessionXML::ItemMimeType = "application/org.bornagainproject.xml.item.z"

◆ LinkMimeType

const QString SessionXML::LinkMimeType = "application/org.bornagainproject.fittinglink"