diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp index 7796b3ab1c06a18e36a9f4d455bca8f5d09766c3..90df6955523c3e83b4307d5ce0f27930e556ec9f 100644 --- a/GUI/Model/Job/JobItem.cpp +++ b/GUI/Model/Job/JobItem.cpp @@ -26,9 +26,13 @@ #include "GUI/Model/Material/MaterialItemContainer.h" #include "GUI/Model/Sample/ItemWithMaterial.h" #include "GUI/Model/Sample/MultiLayerItem.h" +#include "GUI/Model/Session/SessionXML.h" #include "GUI/Model/Session/SimulationOptionsItem.h" +#include "GUI/Util/DeserializationException.h" #include "GUI/Util/Error.h" +using namespace GUI::Session::XML; + namespace { const QString SimulationOptionsTag("SimulationOptions"); } // namespace @@ -392,6 +396,8 @@ void JobItem::setPresentationType(const QString& type) void JobItem::writeNonSessionItems(QXmlStreamWriter* writer) const { + writeAttribute(writer, GUI::Session::XML::Version, int(1)); + writer->writeStartElement(SimulationOptionsTag); m_simulationOptionsItem.writeContentTo(writer); writer->writeEndElement(); @@ -399,10 +405,19 @@ void JobItem::writeNonSessionItems(QXmlStreamWriter* writer) const void JobItem::readNonSessionItems(QXmlStreamReader* reader) { - reader->readNextStartElement(); - if (reader->name() == SimulationOptionsTag) { - m_simulationOptionsItem.readContentFrom(reader); - reader->skipCurrentElement(); + const int version = reader->attributes().value(GUI::Session::XML::Version).toInt(); + + if (version < 1) + throw DeserializationException::tooOld(); + + if (version > 1) + throw DeserializationException::tooNew(); + + while (reader->readNextStartElement()) { + if (reader->name() == SimulationOptionsTag) { + m_simulationOptionsItem.readContentFrom(reader); + reader->skipCurrentElement(); + } } }