From 1c4af06343f16b8f86fb76be918fc7043cd2ff77 Mon Sep 17 00:00:00 2001 From: dismine Date: Thu, 11 Dec 2014 21:44:48 +0200 Subject: [PATCH] Check version number. --HG-- branch : feature --- src/app/xml/vpattern.cpp | 7 +++--- src/app/xml/vpattern.h | 10 -------- src/libs/ifc/xml/vabstractconverter.cpp | 33 +++++++++++++++++++------ src/libs/ifc/xml/vabstractconverter.h | 15 ++++++++--- src/libs/ifc/xml/vpatternconverter.cpp | 31 +++++++++++++++++++++++ src/libs/ifc/xml/vpatternconverter.h | 12 +++++++++ 6 files changed, 84 insertions(+), 24 deletions(-) diff --git a/src/app/xml/vpattern.cpp b/src/app/xml/vpattern.cpp index 39ec6cca3..ed8efa99e 100644 --- a/src/app/xml/vpattern.cpp +++ b/src/app/xml/vpattern.cpp @@ -37,6 +37,7 @@ #include "../libs/ifc/exception/vexceptionconversionerror.h" #include "../libs/ifc/exception/vexceptionemptyparameter.h" #include "../libs/ifc/exception/vexceptionundo.h" +#include "../libs/ifc/xml/vpatternconverter.h" #include "../core/undoevent.h" #include "../core/vsettings.h" #include "vstandardmeasurements.h" @@ -146,7 +147,7 @@ void VPattern::CreateEmptyFile(const QString &tablePath) patternElement.appendChild(createComment("Valentina pattern format.")); QDomElement version = createElement(TagVersion); - QDomText newNodeText = createTextNode(VAL_STR_VERSION); + QDomText newNodeText = createTextNode(VPatternConverter::PatternMaxVerStr); version.appendChild(newNodeText); patternElement.appendChild(version); @@ -2431,13 +2432,13 @@ void VPattern::SetNotes(const QString &text) //--------------------------------------------------------------------------------------------------------------------- QString VPattern::GetVersion() const { - return UniqueTagText(TagVersion, VAL_STR_VERSION); + return UniqueTagText(TagVersion, VPatternConverter::PatternMaxVerStr); } //--------------------------------------------------------------------------------------------------------------------- void VPattern::SetVersion() { - setTagText(TagVersion, VAL_STR_VERSION); + setTagText(TagVersion, VPatternConverter::PatternMaxVerStr); emit patternChanged(false); } diff --git a/src/app/xml/vpattern.h b/src/app/xml/vpattern.h index ee2c8e469..0765ae62f 100644 --- a/src/app/xml/vpattern.h +++ b/src/app/xml/vpattern.h @@ -39,16 +39,6 @@ class VMainGraphicsScene; enum class Document : char { LiteParse, LitePPParse, FullParse }; enum class LabelType : char {NewPatternPiece, NewLabel}; -/* - VAL_VERSION is (major << 16) + (minor << 8) + patch. -*/ -// version without patch part -#define VAL_MIN_VERSION 0x000100 -// max support version of format -#define VAL_VERSION 0x000101 - -#define VAL_STR_VERSION "0.1.1" - /** * @brief The VPattern class working with pattern file. */ diff --git a/src/libs/ifc/xml/vabstractconverter.cpp b/src/libs/ifc/xml/vabstractconverter.cpp index 67a7ef749..66b964aa2 100644 --- a/src/libs/ifc/xml/vabstractconverter.cpp +++ b/src/libs/ifc/xml/vabstractconverter.cpp @@ -29,17 +29,20 @@ #include "vabstractconverter.h" #include "exception/vexception.h" -#include - //--------------------------------------------------------------------------------------------------------------------- VAbstractConverter::VAbstractConverter(const QString &fileName) :VDomDocument(), fileName(fileName) { this->setXMLContent(fileName); - QString version = GetVersionStr(); + const QString version = GetVersionStr(); int ver = GetVersion(version); + CheckVersion(ver); } +//--------------------------------------------------------------------------------------------------------------------- +VAbstractConverter::~VAbstractConverter() +{} + //--------------------------------------------------------------------------------------------------------------------- QString VAbstractConverter::GetVersionStr() const { @@ -69,7 +72,7 @@ QString VAbstractConverter::GetVersionStr() const } //--------------------------------------------------------------------------------------------------------------------- -int VAbstractConverter::GetVersion(QString &version) const +int VAbstractConverter::GetVersion(const QString &version) const { ValidateVersion(version); @@ -100,13 +103,11 @@ int VAbstractConverter::GetVersion(QString &version) const } //--------------------------------------------------------------------------------------------------------------------- -void VAbstractConverter::ValidateVersion(QString &version) const +void VAbstractConverter::ValidateVersion(const QString &version) const { - int pos = 0; QRegExp rx(QStringLiteral("^(0|([1-9][0-9]*)).(0|([1-9][0-9]*)).(0|([1-9][0-9]*))$")); - QRegExpValidator v(rx, 0); - if (v.validate(version, pos) != QValidator::Acceptable) + if (rx.exactMatch(version) == false) { const QString errorMsg(tr("Version \"%1\" invalid.").arg(version)); throw VException(errorMsg); @@ -118,3 +119,19 @@ void VAbstractConverter::ValidateVersion(QString &version) const throw VException(errorMsg); } } + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractConverter::CheckVersion(int ver) const +{ + if (ver < MinVer()) + { + const QString errorMsg(tr("Invalid version. Minimum supported version is %1").arg(MinVerStr())); + throw VException(errorMsg); + } + + if (ver > MaxVer()) + { + const QString errorMsg(tr("Invalid version. Maximum supported version is %1").arg(MaxVerStr())); + throw VException(errorMsg); + } +} diff --git a/src/libs/ifc/xml/vabstractconverter.h b/src/libs/ifc/xml/vabstractconverter.h index eddef1d97..70cfd9879 100644 --- a/src/libs/ifc/xml/vabstractconverter.h +++ b/src/libs/ifc/xml/vabstractconverter.h @@ -36,16 +36,25 @@ class VAbstractConverter :public VDomDocument public: VAbstractConverter(const QString &fileName); - virtual ~VAbstractConverter(){} + virtual ~VAbstractConverter(); + +protected: + int GetVersion(const QString &version) const; + + virtual int MinVer() const =0; + virtual int MaxVer() const =0; + + virtual QString MinVerStr() const =0; + virtual QString MaxVerStr() const =0; private: Q_DISABLE_COPY(VAbstractConverter) QString fileName; QString GetVersionStr() const; - int GetVersion(QString &version) const; - void ValidateVersion(QString &version) const; + void ValidateVersion(const QString &version) const; + void CheckVersion(int ver) const; }; #endif // VABSTRACTCONVERTER_H diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index c763499a4..76bc6d9d6 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -28,14 +28,45 @@ #include "vpatternconverter.h" +const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.1"); +const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.1.1"); + //--------------------------------------------------------------------------------------------------------------------- VPatternConverter::VPatternConverter(const QString &fileName) :VAbstractConverter(fileName) { } +//--------------------------------------------------------------------------------------------------------------------- +VPatternConverter::~VPatternConverter() +{} + //--------------------------------------------------------------------------------------------------------------------- QString VPatternConverter::CurrentSchema() { return QStringLiteral("://schema/pattern/v0.1.1.xsd"); } + +//--------------------------------------------------------------------------------------------------------------------- +int VPatternConverter::MinVer() const +{ + return GetVersion(PatternMinVerStr); +} + +//--------------------------------------------------------------------------------------------------------------------- +int VPatternConverter::MaxVer() const +{ + return GetVersion(PatternMaxVerStr); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VPatternConverter::MinVerStr() const +{ + return PatternMinVerStr; +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VPatternConverter::MaxVerStr() const +{ + return PatternMaxVerStr; +} diff --git a/src/libs/ifc/xml/vpatternconverter.h b/src/libs/ifc/xml/vpatternconverter.h index 435c8e1e7..abd7bb203 100644 --- a/src/libs/ifc/xml/vpatternconverter.h +++ b/src/libs/ifc/xml/vpatternconverter.h @@ -35,8 +35,20 @@ class VPatternConverter : public VAbstractConverter { public: VPatternConverter(const QString &fileName); + virtual ~VPatternConverter(); static QString CurrentSchema(); + static const QString PatternMaxVerStr; + +protected: + virtual int MinVer() const; + virtual int MaxVer() const; + + virtual QString MinVerStr() const; + virtual QString MaxVerStr() const; +private: + Q_DISABLE_COPY(VPatternConverter) + static const QString PatternMinVerStr; }; #endif // VPATTERNCONVERTER_H