From daef1799ab8202c305eb99c46fcc6b00325dea7e Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 1 Oct 2020 19:09:05 +0300 Subject: [PATCH] New format version. Basic implementation. --- src/libs/ifc/schema.qrc | 1 + .../schema/standard_measurements/v0.5.0.xsd | 95 +++++++++++++++++++ src/libs/ifc/xml/vvstconverter.cpp | 77 +++++++++------ src/libs/ifc/xml/vvstconverter.h | 5 +- 4 files changed, 145 insertions(+), 33 deletions(-) create mode 100644 src/libs/ifc/schema/standard_measurements/v0.5.0.xsd diff --git a/src/libs/ifc/schema.qrc b/src/libs/ifc/schema.qrc index 5d41d6883..c98ebbe84 100644 --- a/src/libs/ifc/schema.qrc +++ b/src/libs/ifc/schema.qrc @@ -65,6 +65,7 @@ schema/standard_measurements/v0.4.2.xsd schema/standard_measurements/v0.4.3.xsd schema/standard_measurements/v0.4.4.xsd + schema/standard_measurements/v0.5.0.xsd schema/individual_measurements/v0.2.0.xsd schema/individual_measurements/v0.3.0.xsd schema/individual_measurements/v0.3.1.xsd diff --git a/src/libs/ifc/schema/standard_measurements/v0.5.0.xsd b/src/libs/ifc/schema/standard_measurements/v0.5.0.xsd new file mode 100644 index 000000000..00a520ec5 --- /dev/null +++ b/src/libs/ifc/schema/standard_measurements/v0.5.0.xsd @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/ifc/xml/vvstconverter.cpp b/src/libs/ifc/xml/vvstconverter.cpp index e6bc9c2d9..4de64c117 100644 --- a/src/libs/ifc/xml/vvstconverter.cpp +++ b/src/libs/ifc/xml/vvstconverter.cpp @@ -54,8 +54,8 @@ */ const QString VVSTConverter::MeasurementMinVerStr = QStringLiteral("0.3.0"); -const QString VVSTConverter::MeasurementMaxVerStr = QStringLiteral("0.4.4"); -const QString VVSTConverter::CurrentSchema = QStringLiteral("://schema/standard_measurements/v0.4.4.xsd"); +const QString VVSTConverter::MeasurementMaxVerStr = QStringLiteral("0.5.0"); +const QString VVSTConverter::CurrentSchema = QStringLiteral("://schema/standard_measurements/v0.5.0.xsd"); //VVSTConverter::MeasurementMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! //VVSTConverter::MeasurementMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!! @@ -75,25 +75,25 @@ VVSTConverter::VVSTConverter(const QString &fileName) //--------------------------------------------------------------------------------------------------------------------- QString VVSTConverter::XSDSchema(int ver) const { - switch (ver) + QHash schemas = { - case (0x000300): - return QStringLiteral("://schema/standard_measurements/v0.3.0.xsd"); - case (0x000400): - return QStringLiteral("://schema/standard_measurements/v0.4.0.xsd"); - case (0x000401): - return QStringLiteral("://schema/standard_measurements/v0.4.1.xsd"); - case (0x000402): - return QStringLiteral("://schema/standard_measurements/v0.4.2.xsd"); - case (0x000403): - return QStringLiteral("://schema/standard_measurements/v0.4.3.xsd"); - case (0x000404): - return CurrentSchema; - default: - InvalidVersion(ver); - break; + std::make_pair(FORMAT_VERSION(0, 3, 0), QStringLiteral("://schema/standard_measurements/v0.3.0.xsd")), + std::make_pair(FORMAT_VERSION(0, 4, 0), QStringLiteral("://schema/standard_measurements/v0.4.0.xsd")), + std::make_pair(FORMAT_VERSION(0, 4, 1), QStringLiteral("://schema/standard_measurements/v0.4.1.xsd")), + std::make_pair(FORMAT_VERSION(0, 4, 2), QStringLiteral("://schema/standard_measurements/v0.4.2.xsd")), + std::make_pair(FORMAT_VERSION(0, 4, 3), QStringLiteral("://schema/standard_measurements/v0.4.3.xsd")), + std::make_pair(FORMAT_VERSION(0, 4, 4), QStringLiteral("://schema/standard_measurements/v0.4.4.xsd")), + std::make_pair(FORMAT_VERSION(0, 5, 0), CurrentSchema), + }; + + if (schemas.contains(ver)) + { + return schemas.value(ver); + } + else + { + InvalidVersion(ver); } - return QString();//unreachable code } //--------------------------------------------------------------------------------------------------------------------- @@ -101,27 +101,31 @@ void VVSTConverter::ApplyPatches() { switch (m_ver) { - case (0x000300): + case (FORMAT_VERSION(0, 3, 0)): ToV0_4_0(); - ValidateXML(XSDSchema(0x000400)); + ValidateXML(XSDSchema(FORMAT_VERSION(0, 4, 0))); Q_FALLTHROUGH(); - case (0x000400): + case (FORMAT_VERSION(0, 4, 0)): ToV0_4_1(); - ValidateXML(XSDSchema(0x000401)); + ValidateXML(XSDSchema(FORMAT_VERSION(0, 4, 1))); Q_FALLTHROUGH(); - case (0x000401): + case (FORMAT_VERSION(0, 4, 1)): ToV0_4_2(); - ValidateXML(XSDSchema(0x000402)); + ValidateXML(XSDSchema(FORMAT_VERSION(0, 4, 2))); Q_FALLTHROUGH(); - case (0x000402): + case (FORMAT_VERSION(0, 4, 2)): ToV0_4_3(); - ValidateXML(XSDSchema(0x000403)); + ValidateXML(XSDSchema(FORMAT_VERSION(0, 4, 3))); Q_FALLTHROUGH(); - case (0x000403): + case (FORMAT_VERSION(0, 4, 3)): ToV0_4_4(); - ValidateXML(XSDSchema(0x000404)); + ValidateXML(XSDSchema(FORMAT_VERSION(0, 4, 4))); Q_FALLTHROUGH(); - case (0x000404): + case (FORMAT_VERSION(0, 4, 4)): + ToV0_5_0(); + ValidateXML(XSDSchema(FORMAT_VERSION(0, 5, 0))); + Q_FALLTHROUGH(); + case (FORMAT_VERSION(0, 5, 0)): break; default: InvalidVersion(m_ver); @@ -140,7 +144,7 @@ void VVSTConverter::DowngradeToCurrentMaxVersion() bool VVSTConverter::IsReadOnly() const { // Check if attribute read-only was not changed in file format - Q_STATIC_ASSERT_X(VVSTConverter::MeasurementMaxVer == FORMAT_VERSION(0, 4, 4), + Q_STATIC_ASSERT_X(VVSTConverter::MeasurementMaxVer == FORMAT_VERSION(0, 5, 0), "Check attribute read-only."); // Possibly in future attribute read-only will change position etc. @@ -368,3 +372,14 @@ void VVSTConverter::ToV0_4_4() SetVersion(QStringLiteral("0.4.4")); Save(); } + +//--------------------------------------------------------------------------------------------------------------------- +void VVSTConverter::ToV0_5_0() +{ + // TODO. Delete if minimal supported version is 0.5.0 + Q_STATIC_ASSERT_X(VVSTConverter::MeasurementMinVer < FORMAT_VERSION(0, 5, 0), + "Time to refactor the code."); + + SetVersion(QStringLiteral("0.5.0")); + Save(); +} diff --git a/src/libs/ifc/xml/vvstconverter.h b/src/libs/ifc/xml/vvstconverter.h index e7daed282..907b4d421 100644 --- a/src/libs/ifc/xml/vvstconverter.h +++ b/src/libs/ifc/xml/vvstconverter.h @@ -51,10 +51,10 @@ public: // GCC 4.6 doesn't allow constexpr and const together #if !defined(__INTEL_COMPILER) && !defined(__clang__) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) <= 406 static Q_DECL_CONSTEXPR int MeasurementMinVer = FORMAT_VERSION(0, 3, 0); - static Q_DECL_CONSTEXPR int MeasurementMaxVer = FORMAT_VERSION(0, 4, 4); + static Q_DECL_CONSTEXPR int MeasurementMaxVer = FORMAT_VERSION(0, 5, 0); #else static Q_DECL_CONSTEXPR const int MeasurementMinVer = FORMAT_VERSION(0, 3, 0); - static Q_DECL_CONSTEXPR const int MeasurementMaxVer = FORMAT_VERSION(0, 4, 4); + static Q_DECL_CONSTEXPR const int MeasurementMaxVer = FORMAT_VERSION(0, 5, 0); #endif protected: @@ -85,6 +85,7 @@ private: void ToV0_4_2(); void ToV0_4_3(); void ToV0_4_4(); + void ToV0_5_0(); }; //---------------------------------------------------------------------------------------------------------------------