From 72b7fdb38352ea28fd386938a97e6f06cfc3fefe Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 8 Dec 2022 17:28:01 +0100 Subject: [PATCH] DataItems: serialization refactored --- GUI/Model/Data/DataItem.cpp | 39 ++++++++++--------- GUI/Model/Data/DataItem.h | 2 +- GUI/Model/Data/IntensityDataItem.cpp | 3 +- GUI/Model/Data/SpecularDataItem.cpp | 57 +++++++++++++--------------- GUI/Support/XML/UtilXML.cpp | 12 +----- GUI/Support/XML/UtilXML.h | 11 +----- 6 files changed, 50 insertions(+), 74 deletions(-) diff --git a/GUI/Model/Data/DataItem.cpp b/GUI/Model/Data/DataItem.cpp index 9fea9ff55af..17f7f6429b4 100644 --- a/GUI/Model/Data/DataItem.cpp +++ b/GUI/Model/Data/DataItem.cpp @@ -19,7 +19,6 @@ #include "GUI/Util/Error.h" namespace { - namespace Tag { const QString FileName("FileName"); @@ -28,13 +27,6 @@ const QString XAxis("XAxis"); const QString YAxis("YAxis"); } // namespace Tag - -namespace Attrib { - -const QString value("value"); - -} // namespace Attrib - } // namespace const QString x_axis_default_name = "X [nbins]"; @@ -267,11 +259,13 @@ void DataItem::setAxesRangeToData() setUpperY(yMax()); } -void DataItem::writeBaseData(QXmlStreamWriter *writer) const +void DataItem::writeBaseData(QXmlStreamWriter* writer) const { + // In case of changes here update "version" of SpecularDataItem and IntensityDataitem! + // file name writer->writeStartElement(Tag::FileName); - XML::writeAttribute(writer, Attrib::value, m_fileName); + XML::writeAttribute(writer, XML::Attrib::value, m_fileName); writer->writeEndElement(); // axes units @@ -290,28 +284,33 @@ void DataItem::writeBaseData(QXmlStreamWriter *writer) const writer->writeEndElement(); } -void DataItem::readBaseData(QXmlStreamReader* reader) +void DataItem::readBaseData(QXmlStreamReader* reader, uint version) { + Q_UNUSED(version) + QString name = reader->name().toString(); + // file name - if (reader->name() == Tag::FileName) { - XML::readAttribute(reader, Attrib::value, &m_fileName); - XML::gotoEndElementOfTag(reader, Tag::FileName); + if (name == Tag::FileName) { + XML::readAttribute(reader, XML::Attrib::value, &m_fileName); + XML::gotoEndElementOfTag(reader, name); // axes units - } else if (reader->name() == Tag::AxesUnits) { + } else if (name == Tag::AxesUnits) { m_axesUnits.readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::AxesUnits); + XML::gotoEndElementOfTag(reader, name); // x axis - } else if (reader->name() == Tag::XAxis) { + } else if (name == Tag::XAxis) { m_xAxis->readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::XAxis); + XML::gotoEndElementOfTag(reader, name); // y axis - } else if (reader->name() == Tag::YAxis) { + } else if (name == Tag::YAxis) { m_yAxis->readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::YAxis); + XML::gotoEndElementOfTag(reader, name); } else reader->skipCurrentElement(); + + XML::gotoEndElementOfTag(reader, name); } diff --git a/GUI/Model/Data/DataItem.h b/GUI/Model/Data/DataItem.h index e220ee1693a..3d089f21ff1 100644 --- a/GUI/Model/Data/DataItem.h +++ b/GUI/Model/Data/DataItem.h @@ -126,7 +126,7 @@ protected: virtual void writeTo(QXmlStreamWriter* writer) const = 0; virtual void readFrom(QXmlStreamReader* reader) = 0; void writeBaseData(QXmlStreamWriter* writer) const; - void readBaseData(QXmlStreamReader* reader); + void readBaseData(QXmlStreamReader* reader, uint version); signals: void datafieldChanged(); diff --git a/GUI/Model/Data/IntensityDataItem.cpp b/GUI/Model/Data/IntensityDataItem.cpp index edf7c52b87c..a9762aa87d5 100644 --- a/GUI/Model/Data/IntensityDataItem.cpp +++ b/GUI/Model/Data/IntensityDataItem.cpp @@ -338,7 +338,6 @@ void IntensityDataItem::writeTo(QXmlStreamWriter* writer) const void IntensityDataItem::readFrom(QXmlStreamReader* reader) { uint version = XML::readUIntAttribute(reader, XML::Attrib::version); - Q_UNUSED(version) while (reader->readNextStartElement()) { QString name = reader->name().toString(); @@ -359,7 +358,7 @@ void IntensityDataItem::readFrom(QXmlStreamReader* reader) XML::gotoEndElementOfTag(reader, name); } else - DataItem::readBaseData(reader); + DataItem::readBaseData(reader, version); } } diff --git a/GUI/Model/Data/SpecularDataItem.cpp b/GUI/Model/Data/SpecularDataItem.cpp index 852217314bc..14aeebd9bc8 100644 --- a/GUI/Model/Data/SpecularDataItem.cpp +++ b/GUI/Model/Data/SpecularDataItem.cpp @@ -21,7 +21,6 @@ #include "GUI/Util/Error.h" namespace { - namespace Tag { const QString LineType("LineType"); @@ -32,12 +31,6 @@ const QString ScatterSize("ScatterSize"); } // namespace Tag -namespace Attrib { - -const QString value("value"); - -} // namespace Attrib - // scatters for representation of 1D graphs const QMap<QString, QCPScatterStyle::ScatterShape> scatter_map = { {"None", QCPScatterStyle::ScatterShape::ssNone}, @@ -215,69 +208,73 @@ void SpecularDataItem::setRealPlotStyle() void SpecularDataItem::writeTo(QXmlStreamWriter* writer) const { + XML::writeAttribute(writer, XML::Attrib::version, uint(1)); + DataItem::writeBaseData(writer); // line type writer->writeStartElement(Tag::LineType); - XML::writeAttribute(writer, Attrib::value, m_lineType); + XML::writeAttribute(writer, XML::Attrib::value, m_lineType); writer->writeEndElement(); // color writer->writeStartElement(Tag::Color); - XML::writeAttribute(writer, Attrib::value, m_color.name(QColor::HexArgb)); + XML::writeAttribute(writer, XML::Attrib::value, m_color.name(QColor::HexArgb)); writer->writeEndElement(); // thickness writer->writeStartElement(Tag::Thickness); - XML::writeAttribute(writer, Attrib::value, m_thickness); + XML::writeAttribute(writer, XML::Attrib::value, m_thickness); writer->writeEndElement(); // scatter type writer->writeStartElement(Tag::ScatterType); - XML::writeAttribute(writer, Attrib::value, m_scatterType); + XML::writeAttribute(writer, XML::Attrib::value, m_scatterType); writer->writeEndElement(); // scatter size writer->writeStartElement(Tag::ScatterSize); - XML::writeAttribute(writer, Attrib::value, m_scatterSize); + XML::writeAttribute(writer, XML::Attrib::value, m_scatterSize); writer->writeEndElement(); } void SpecularDataItem::readFrom(QXmlStreamReader* reader) { + uint version = XML::readUIntAttribute(reader, XML::Attrib::version); + while (reader->readNextStartElement()) { + QString name = reader->name().toString(); // line type - if (reader->name() == Tag::LineType) { - XML::readAttribute(reader, Attrib::value, &m_lineType); - XML::gotoEndElementOfTag(reader, Tag::LineType); + if (name == Tag::LineType) { + XML::readAttribute(reader, XML::Attrib::value, &m_lineType); + XML::gotoEndElementOfTag(reader, name); // color - } else if (reader->name() == Tag::Color) { + } else if (name == Tag::Color) { QString col; - XML::readAttribute(reader, Attrib::value, &col); + XML::readAttribute(reader, XML::Attrib::value, &col); m_color = QColor(col); - XML::gotoEndElementOfTag(reader, Tag::Color); + XML::gotoEndElementOfTag(reader, name); // thickness - } else if (reader->name() == Tag::Thickness) { - XML::readAttribute(reader, Attrib::value, &m_thickness); - XML::gotoEndElementOfTag(reader, Tag::Thickness); + } else if (name == Tag::Thickness) { + XML::readAttribute(reader, XML::Attrib::value, &m_thickness); + XML::gotoEndElementOfTag(reader, name); // scatter type - } else if (reader->name() == Tag::ScatterType) { - XML::readAttribute(reader, Attrib::value, &m_scatterType); - XML::gotoEndElementOfTag(reader, Tag::ScatterType); + } else if (name == Tag::ScatterType) { + XML::readAttribute(reader, XML::Attrib::value, &m_scatterType); + XML::gotoEndElementOfTag(reader, name); // scatter size - } else if (reader->name() == Tag::ScatterSize) { - XML::readAttribute(reader, Attrib::value, &m_scatterSize); - XML::gotoEndElementOfTag(reader, Tag::ScatterSize); + } else if (name == Tag::ScatterSize) { + XML::readAttribute(reader, XML::Attrib::value, &m_scatterSize); + XML::gotoEndElementOfTag(reader, name); // types from base class - } else { - DataItem::readBaseData(reader); - } + } else + DataItem::readBaseData(reader, version); } } diff --git a/GUI/Support/XML/UtilXML.cpp b/GUI/Support/XML/UtilXML.cpp index 6592d5970de..511cbd1e82b 100644 --- a/GUI/Support/XML/UtilXML.cpp +++ b/GUI/Support/XML/UtilXML.cpp @@ -126,16 +126,6 @@ void XML::writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, writer->writeAttribute(attributeName, QString::number(d)); } -void XML::writeUid(QXmlStreamWriter* writer, const QString& id) -{ - writer->writeAttribute(Tags::Id, id); -} - -void XML::writeUid(QXmlStreamWriter* writer, const QUuid& id) -{ - writer->writeAttribute(Tags::Id, id.toString()); -} - void XML::writeVariant(QXmlStreamWriter* writer, QVariant variant, int role) { ASSERT(writer); @@ -144,7 +134,7 @@ void XML::writeVariant(QXmlStreamWriter* writer, QVariant variant, int role) writer->writeAttribute(Tags::ParameterTypeAttribute, variant.typeName()); writer->writeAttribute(Tags::ParameterRoleAttribute, QString::number(role)); writeAttribute(writer, Tags::ParameterValueAttribute, variant); - writer->writeEndElement(); // end ParameterTag + writer->writeEndElement(); } } diff --git a/GUI/Support/XML/UtilXML.h b/GUI/Support/XML/UtilXML.h index 33c380db881..b7b2e1f9f21 100644 --- a/GUI/Support/XML/UtilXML.h +++ b/GUI/Support/XML/UtilXML.h @@ -20,22 +20,15 @@ #include <heinz/Complex.h> #include <heinz/Vectors3D.h> -class QXmlStreamReader; -class MessageService; -class QUuid; - - namespace XML { - namespace Attrib { -const QString value("value"); const QString version("version"); +const QString value("value"); } // namespace Attrib namespace Tags { -constexpr auto Id("id"); constexpr auto TagAttribute("Tag"); constexpr auto ModelTypeAttribute("ModelType"); constexpr auto DisplayNameAttribute("DisplayName"); @@ -63,8 +56,6 @@ void writeVariant(QXmlStreamWriter* writer, QVariant variant, int role); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, const QVariant& variant); -void writeUid(QXmlStreamWriter* writer, const QString& id); -void writeUid(QXmlStreamWriter* writer, const QUuid& id); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, int d); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, bool b); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, unsigned d); -- GitLab