diff --git a/GUI/Model/Data/RealItem.cpp b/GUI/Model/Data/RealItem.cpp index 64dff323bbfbc318b3aea5cf2374e194cb110811..260b7145ae6e1388318829d792f6956449663b9b 100644 --- a/GUI/Model/Data/RealItem.cpp +++ b/GUI/Model/Data/RealItem.cpp @@ -30,7 +30,6 @@ #include "GUI/Util/Error.h" namespace { - namespace Tag { const QString InstrumentId("InstrumentId"); @@ -41,14 +40,6 @@ const QString BinaryData("BinaryData"); const QString NativeDataUnits("NativeDataUnits"); } // namespace Tag - -namespace Attrib { - -const QString version("version"); -const QString value("value"); - -} // namespace Attrib - } // namespace @@ -343,46 +334,48 @@ void RealItem::deserializeBinaryData(const QByteArray& data) throw DeserializationException::streamError(); } -void RealItem::writeTo(QXmlStreamWriter* writer) const +void RealItem::writeTo(QXmlStreamWriter* w) const { + XML::writeAttribute(w, XML::Attrib::version, uint(1)); + // NOTE: The ordering of the XML elements is important in initialization // binary data QByteArray a = serializeBinaryData(); if (!a.isEmpty()) { - writer->writeStartElement(Tag::BinaryData); - writer->writeAttribute(Attrib::version, "1"); - writer->writeCharacters(a.toBase64()); - writer->writeEndElement(); + w->writeStartElement(Tag::BinaryData); + XML::writeAttribute(w, XML::Attrib::binary_version, uint(1)); + w->writeCharacters(a.toBase64()); + w->writeEndElement(); } // instrument id - writer->writeStartElement(Tag::InstrumentId); - XML::writeAttribute(writer, Attrib::value, m_instrumentId); - writer->writeEndElement(); + w->writeStartElement(Tag::InstrumentId); + XML::writeAttribute(w, XML::Attrib::value, m_instrumentId); + w->writeEndElement(); // name - writer->writeStartElement(Tag::Name); - XML::writeAttribute(writer, Attrib::value, m_name); - writer->writeEndElement(); + w->writeStartElement(Tag::Name); + XML::writeAttribute(w, XML::Attrib::value, m_name); + w->writeEndElement(); // native data units - writer->writeStartElement(Tag::NativeDataUnits); - XML::writeAttribute(writer, Attrib::value, m_nativeDataUnits); - writer->writeEndElement(); + w->writeStartElement(Tag::NativeDataUnits); + XML::writeAttribute(w, XML::Attrib::value, m_nativeDataUnits); + w->writeEndElement(); // data if (m_dataItem) { - writer->writeStartElement(Tag::Data); - XML::writeItemAndChildItems(writer, m_dataItem.get()); - writer->writeEndElement(); + w->writeStartElement(Tag::Data); + XML::writeItemAndChildItems(w, m_dataItem.get()); + w->writeEndElement(); } // native data if (m_nativeDataItem) { - writer->writeStartElement(Tag::NativeData); - XML::writeItemAndChildItems(writer, m_nativeDataItem.get()); - writer->writeEndElement(); + w->writeStartElement(Tag::NativeData); + XML::writeItemAndChildItems(w, m_nativeDataItem.get()); + w->writeEndElement(); } } @@ -394,46 +387,51 @@ inline T* readItemToEnd(QXmlStreamReader* reader, SessionItem* parent_item, cons return item; } -void RealItem::readFrom(QXmlStreamReader* reader) +void RealItem::readFrom(QXmlStreamReader* r) { - while (reader->readNextStartElement()) { + const uint version = XML::readUIntAttribute(r, XML::Attrib::version); + Q_UNUSED(version) + + while (r->readNextStartElement()) { + QString tag = r->name().toString(); // binary data - if (reader->name() == Tag::BinaryData) { - if (reader->attributes().value(Attrib::version).toInt() == 1) { + if (tag == Tag::BinaryData) { + const uint binary_version = XML::readUIntAttribute(r, XML::Attrib::binary_version); + if (binary_version == 1) { QString valueAsBase64 = - reader->readElementText(QXmlStreamReader::SkipChildElements); + r->readElementText(QXmlStreamReader::SkipChildElements); const auto data = QByteArray::fromBase64( valueAsBase64.toLatin1()); // #baimport add a unit test for this! deserializeBinaryData(data); } - XML::gotoEndElementOfTag(reader, Tag::BinaryData); + XML::gotoEndElementOfTag(r, tag); // instrument id - } else if (reader->name() == Tag::InstrumentId) { - XML::readAttribute(reader, Attrib::value, &m_instrumentId); - XML::gotoEndElementOfTag(reader, Tag::InstrumentId); + } else if (tag == Tag::InstrumentId) { + XML::readAttribute(r, XML::Attrib::value, &m_instrumentId); + XML::gotoEndElementOfTag(r, Tag::InstrumentId); // name - } else if (reader->name() == Tag::Name) { - XML::readAttribute(reader, Attrib::value, &m_name); - XML::gotoEndElementOfTag(reader, Tag::Name); + } else if (tag == Tag::Name) { + XML::readAttribute(r, XML::Attrib::value, &m_name); + XML::gotoEndElementOfTag(r, tag); // data - } else if (reader->name() == Tag::Data) { - m_dataItem.reset(readItemToEnd<DataItem>(reader, this, Tag::Data)); + } else if (tag == Tag::Data) { + m_dataItem.reset(readItemToEnd<DataItem>(r, this, tag)); // native data - } else if (reader->name() == Tag::NativeData) { - m_nativeDataItem.reset(readItemToEnd<DataItem>(reader, this, Tag::NativeData)); + } else if (tag == Tag::NativeData) { + m_nativeDataItem.reset(readItemToEnd<DataItem>(r, this, tag)); // native data - } else if (reader->name() == Tag::NativeDataUnits) { - XML::readAttribute(reader, Attrib::value, &m_nativeDataUnits); - XML::gotoEndElementOfTag(reader, Tag::NativeDataUnits); + } else if (tag == Tag::NativeDataUnits) { + XML::readAttribute(r, XML::Attrib::value, &m_nativeDataUnits); + XML::gotoEndElementOfTag(r, tag); } else - reader->skipCurrentElement(); + r->skipCurrentElement(); } } diff --git a/GUI/Model/Data/RealItem.h b/GUI/Model/Data/RealItem.h index d679503f17a53d75c6e567be55c348edbfd8fc86..50f20abca92cdf2556baf8f0ca2caed6b3eaf5a3 100644 --- a/GUI/Model/Data/RealItem.h +++ b/GUI/Model/Data/RealItem.h @@ -101,8 +101,8 @@ public: QByteArray serializeBinaryData() const override; void deserializeBinaryData(const QByteArray& data) override; - void writeTo(QXmlStreamWriter* writer) const; - void readFrom(QXmlStreamReader* reader); + void writeTo(QXmlStreamWriter* w) const; + void readFrom(QXmlStreamReader* r); // other diff --git a/GUI/Support/XML/UtilXML.h b/GUI/Support/XML/UtilXML.h index fcfde631516cc1722aec989c27331c6690e654bf..2b131fd4b7486d1c9495ac76aeca8cb9f736a212 100644 --- a/GUI/Support/XML/UtilXML.h +++ b/GUI/Support/XML/UtilXML.h @@ -25,6 +25,7 @@ namespace Attrib { const QString version("version"); const QString selection_version("selection_version"); +const QString binary_version("binary_version"); const QString value("value"); const QString BA_Version("BA_Version"); const QString projectName("projectName");