Skip to content
Snippets Groups Projects

GUI: RealModel is refactored

Merged Mikhail Svechnikov requested to merge realModel into main
All threads resolved!
Files
16
+ 68
32
@@ -30,33 +30,40 @@
#include "GUI/Util/Error.h"
namespace {
namespace Tags {
const QString InstrumentId("InstrumentId");
const QString Data("Data");
const QString Name("Name");
const QString NativeData("NativeData");
const QString BinaryData("BinaryData");
const QString NativeDataUnits("NativeDataUnits");
const QString value("value");
} // namespace Tags
namespace Atts {
const QString version("version");
const QString value("value");
} // namespace Atts
} // namespace
RealItem::RealItem()
: JobRealBase(M_TYPE)
{
setItemName("undefined");
REFACTORED = true;
}
QString RealItem::dataName() const
QString RealItem::realItemName() const
{
return itemName();
return m_name;
}
void RealItem::setDataName(const QString& name)
void RealItem::setRealItemName(const QString& name)
{
setItemName(name);
m_name = name;
updateDataFileName();
}
@@ -277,10 +284,10 @@ void RealItem::rotateData()
void RealItem::updateDataFileName()
{
if (DataItem* item = dataItem())
item->setFileName(GUI::Model::FilenameUtils::realDataFileName(dataName()));
item->setFileName(GUI::Model::FilenameUtils::realDataFileName(realItemName()));
if (DataItem* item = nativeData())
item->setFileName(GUI::Model::FilenameUtils::nativeDataFileName(dataName()));
item->setFileName(GUI::Model::FilenameUtils::nativeDataFileName(realItemName()));
}
// serialization/deserialization
@@ -335,35 +342,47 @@ void RealItem::deserializeBinaryData(const QByteArray& data)
throw DeserializationException::streamError();
}
void RealItem::writeNonSessionItems(QXmlStreamWriter* writer) const
void RealItem::writeTo(QXmlStreamWriter* writer) const
{
GUI::Session::XML::writeAttribute(writer, GUI::Session::XML::Version, int(1));
// NOTE: The ordering of the XML elements are important in initialization
// data members
// binary data
QByteArray a = serializeBinaryData();
if (!a.isEmpty()) {
writer->writeStartElement(Tags::BinaryData);
writer->writeAttribute(Atts::version, "1");
writer->writeCharacters(a.toBase64());
writer->writeEndElement(); // BinaryData
}
// instrument id
writer->writeStartElement(Tags::InstrumentId);
GUI::Session::XML::writeAttribute(writer, Tags::value, m_instrumentId);
GUI::Session::XML::writeAttribute(writer, Atts::value, m_instrumentId);
writer->writeEndElement();
// name
writer->writeStartElement(Tags::Name);
GUI::Session::XML::writeAttribute(writer, Atts::value, m_name);
writer->writeEndElement();
// native data units
writer->writeStartElement(Tags::NativeDataUnits);
GUI::Session::XML::writeAttribute(writer, Atts::value, m_nativeDataUnits);
writer->writeEndElement();
// Data
// data
if (m_dataItem) {
writer->writeStartElement(Tags::Data);
GUI::Session::XML::writeItemAndChildItems(writer, m_dataItem.get());
writer->writeEndElement();
}
// Native Data
// native data
if (m_nativeDataItem) {
writer->writeStartElement(Tags::NativeData);
GUI::Session::XML::writeItemAndChildItems(writer, m_nativeDataItem.get());
writer->writeEndElement();
}
// Native Data Unit
writer->writeStartElement(Tags::NativeDataUnits);
GUI::Session::XML::writeAttribute(writer, Tags::value, m_nativeDataUnits);
writer->writeEndElement();
}
template <class T>
@@ -374,27 +393,44 @@ inline T* readItemToEnd(QXmlStreamReader* reader, SessionItem* parent_item, cons
return item;
}
void RealItem::readNonSessionItems(QXmlStreamReader* reader)
void RealItem::readFrom(QXmlStreamReader* reader)
{
const int version = reader->attributes().value(GUI::Session::XML::Version).toInt();
while (reader->readNextStartElement()) {
if (version < 1)
throw DeserializationException::tooOld();
// binary data
if (reader->name() == Tags::BinaryData) {
if (reader->attributes().value(Atts::version).toInt() == 1) {
QString valueAsBase64 =
reader->readElementText(QXmlStreamReader::SkipChildElements);
const auto data = QByteArray::fromBase64(
valueAsBase64.toLatin1()); // #baimport add a unit test for this!
deserializeBinaryData(data);
}
GUI::Session::XML::gotoEndElementOfTag(reader, GUI::Session::XML::Tags::BinaryData);
// instrument id
} else if (reader->name() == Tags::InstrumentId) {
GUI::Session::XML::readAttribute(reader, Atts::value, &m_instrumentId);
GUI::Session::XML::gotoEndElementOfTag(reader, Tags::InstrumentId);
if (version > 1)
throw DeserializationException::tooNew();
// name
} else if (reader->name() == Tags::Name) {
GUI::Session::XML::readAttribute(reader, Atts::value, &m_name);
GUI::Session::XML::gotoEndElementOfTag(reader, Tags::Name);
while (reader->readNextStartElement()) {
if (reader->name() == Tags::InstrumentId) {
GUI::Session::XML::readAttribute(reader, Tags::value, &m_instrumentId);
GUI::Session::XML::gotoEndElementOfTag(reader, Tags::InstrumentId);
// data
} else if (reader->name() == Tags::Data) {
m_dataItem.reset(readItemToEnd<DataItem>(reader, this, Tags::Data));
// native data
} else if (reader->name() == Tags::NativeData) {
m_nativeDataItem.reset(readItemToEnd<DataItem>(reader, this, Tags::NativeData));
// native data
} else if (reader->name() == Tags::NativeDataUnits) {
GUI::Session::XML::readAttribute(reader, Tags::value, &m_nativeDataUnits);
GUI::Session::XML::readAttribute(reader, Atts::value, &m_nativeDataUnits);
GUI::Session::XML::gotoEndElementOfTag(reader, Tags::NativeDataUnits);
} else {
reader->skipCurrentElement();
}
Loading