refs #288, improved validation in some value objects

This commit is contained in:
Klaus Basan
2014-11-15 01:20:31 +01:00
committed by Roland Winklmeier
parent 5ff28cb3a1
commit d1d02d6c3c
8 changed files with 85 additions and 7 deletions

View File

@@ -128,5 +128,25 @@ namespace BlackMisc
return (regexp.match(designator).hasMatch()); return (regexp.match(designator).hasMatch());
} }
/*
* Valid combined type
*/
bool CAircraftIcao::isValidCombinedType(const QString &combinedType)
{
static QRegularExpression regexp("^[A-Z][0-9][A-Z]$");
if (combinedType.length() != 3) return false;
return (regexp.match(combinedType).hasMatch());
}
/*
* Valid airline designator
*/
bool CAircraftIcao::isValidAirlineDesignator(const QString &airline)
{
static QRegularExpression regexp("^[A-Z]+[A-Z0-9]*$");
if (airline.length() < 2 || airline.length() > 5) return false;
return (regexp.match(airline).hasMatch());
}
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -138,6 +138,12 @@ namespace BlackMisc
//! Valid designator? //! Valid designator?
static bool isValidDesignator(const QString &designator); static bool isValidDesignator(const QString &designator);
//! Valid combined type
static bool isValidCombinedType(const QString &combinedType);
//! Valid designator?
static bool isValidAirlineDesignator(const QString &airline);
protected: protected:
//! \copydoc CValueObject::convertToQString //! \copydoc CValueObject::convertToQString
virtual QString convertToQString(bool i18n = false) const override; virtual QString convertToQString(bool i18n = false) const override;

View File

@@ -126,5 +126,15 @@ namespace BlackMisc
} }
} }
/*
* Valid callsign?
*/
bool CCallsign::isValidCallsign(const QString &callsign)
{
static QRegularExpression regexp("^[A-Z]+[A-Z0-9]*$");
if (callsign.length() < 2 || callsign.length() > 10) return false;
return (regexp.match(callsign).hasMatch());
}
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -75,6 +75,9 @@ namespace BlackMisc
//! \copydoc CValueObject::setPropertyByIndex(variant, index) //! \copydoc CValueObject::setPropertyByIndex(variant, index)
virtual void setPropertyByIndex(const QVariant &variant, const BlackMisc::CPropertyIndex &index) override; virtual void setPropertyByIndex(const QVariant &variant, const BlackMisc::CPropertyIndex &index) override;
//! Valid callsign?
static bool isValidCallsign(const QString &callsign);
protected: protected:
//! \copydoc CValueObject::convertToQString() //! \copydoc CValueObject::convertToQString()
virtual QString convertToQString(bool i18n = false) const override; virtual QString convertToQString(bool i18n = false) const override;

View File

@@ -38,6 +38,17 @@ namespace BlackMisc
return this->m_user.hasValidCredentials() && this->m_port > 0 && !this->m_address.isEmpty() && this->isAcceptingConnections(); return this->m_user.hasValidCredentials() && this->m_port > 0 && !this->m_address.isEmpty() && this->isAcceptingConnections();
} }
CStatusMessageList CServer::validate() const
{
CStatusMessageList msgs;
if (this->getName().isEmpty()) { msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Missing name")); }
if (this->getAddress().isEmpty()) { msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Missing address")); }
if (this->getDescription().isEmpty()) { msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Missing description")); }
if (this->getPort() < 1 || this->getPort() > 65535) { msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Wrong port")); }
msgs.push_back(this->getUser().validate());
return msgs;
}
/* /*
* Property by index * Property by index
*/ */

View File

@@ -11,7 +11,9 @@
#ifndef BLACKMISC_SERVER_H #ifndef BLACKMISC_SERVER_H
#define BLACKMISC_SERVER_H #define BLACKMISC_SERVER_H
#include "nwuser.h" #include "nwuser.h"
#include "statusmessagelist.h"
#include "valueobject.h" #include "valueobject.h"
namespace BlackMisc namespace BlackMisc
@@ -46,7 +48,7 @@ namespace BlackMisc
const QString &getAddress() const { return m_address; } const QString &getAddress() const { return m_address; }
//! Set address (e.g. myserver.foo.com) //! Set address (e.g. myserver.foo.com)
void setAddress(const QString &address) { m_address = address; } void setAddress(const QString &address) { m_address = address.trimmed(); }
//! Get user //! Get user
const CUser &getUser() const { return m_user; } const CUser &getUser() const { return m_user; }
@@ -58,13 +60,13 @@ namespace BlackMisc
const QString &getName() const { return m_name; } const QString &getName() const { return m_name; }
//! Set name //! Set name
void setName(const QString &name) { m_name = name; } void setName(const QString &name) { m_name = name.trimmed(); }
//! Get description //! Get description
const QString &getDescription() const { return m_description; } const QString &getDescription() const { return m_description; }
//! Set description //! Set description
void setDescription(const QString &description) { m_description = description; } void setDescription(const QString &description) { m_description = description.trimmed().simplified(); }
//! Get port //! Get port
qint32 getPort() const { return m_port; } qint32 getPort() const { return m_port; }
@@ -81,6 +83,9 @@ namespace BlackMisc
//! Is valid for login? //! Is valid for login?
bool isValidForLogin() const; bool isValidForLogin() const;
//! Validate, provide details about issues
BlackMisc::CStatusMessageList validate() const;
//! \copydoc CValueObject::propertyByIndex(int) //! \copydoc CValueObject::propertyByIndex(int)
virtual QVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const override; virtual QVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const override;

View File

@@ -17,9 +17,6 @@ namespace BlackMisc
{ {
namespace Network namespace Network
{ {
/*
* Convert to string
*/
QString CUser::convertToQString(bool /** i18n **/) const QString CUser::convertToQString(bool /** i18n **/) const
{ {
if (this->m_realname.isEmpty()) return "<no realname>"; if (this->m_realname.isEmpty()) return "<no realname>";
@@ -35,6 +32,16 @@ namespace BlackMisc
return s; return s;
} }
CStatusMessageList CUser::validate() const
{
CStatusMessageList msgs;
// callsign optional
if (!this->hasValidId()) { msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Invalid id"));}
if (!this->hasValidRealName()) { msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Invalid real name"));}
if (!this->hasValidCredentials()) { msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Invalid credentials"));}
return msgs;
}
/* /*
* Exchange data * Exchange data
*/ */
@@ -63,6 +70,15 @@ namespace BlackMisc
this->setCallsign(otherUser.getCallsign()); this->setCallsign(otherUser.getCallsign());
} }
bool CUser::isValidVatsimId(const QString &id)
{
if (id.isEmpty()) { return false; }
bool ok;
int i = id.toInt(&ok);
if (!ok) { return false; }
return i >= 100000 && i <= 9999999;
}
/* /*
* Property by index * Property by index
*/ */

View File

@@ -15,6 +15,7 @@
#include "avcallsign.h" #include "avcallsign.h"
#include "avairporticao.h" #include "avairporticao.h"
#include "propertyindex.h" #include "propertyindex.h"
#include "statusmessagelist.h"
namespace BlackMisc namespace BlackMisc
{ {
@@ -60,7 +61,7 @@ namespace BlackMisc
QString getRealName() const { return m_realname; } QString getRealName() const { return m_realname; }
//! setRealName //! setRealName
void setRealName(const QString &realname) { m_realname = realname.trimmed(); } void setRealName(const QString &realname) { m_realname = realname.trimmed().simplified(); }
//! Get password //! Get password
QString getPassword() const { return m_password; } QString getPassword() const { return m_password; }
@@ -83,6 +84,9 @@ namespace BlackMisc
//! Has associated callsign? //! Has associated callsign?
bool hasValidCallsign() const { return !m_callsign.isEmpty(); } bool hasValidCallsign() const { return !m_callsign.isEmpty(); }
//! Validate, provide details about issues
BlackMisc::CStatusMessageList validate() const;
//! Get email. //! Get email.
QString getEmail() const { return m_email; } QString getEmail() const { return m_email; }
@@ -125,6 +129,9 @@ namespace BlackMisc
*/ */
void syncronizeData(CUser &otherUser); void syncronizeData(CUser &otherUser);
//! Valid VATSIM id
static bool isValidVatsimId(const QString &id);
protected: protected:
//! \copydoc CValueObject::convertToQString //! \copydoc CValueObject::convertToQString
virtual QString convertToQString(bool i18n = false) const override; virtual QString convertToQString(bool i18n = false) const override;