diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index a6d86ac831c049164329cd9bb75536dad57115cf..9b97c417be21c473c82514d9ae093afafb3154cf 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -249,6 +249,7 @@ HEADERS += \ src/HomePositionManager.h \ src/Joystick/Joystick.h \ src/Joystick/JoystickManager.h \ + src/JsonHelper.h \ src/LogCompressor.h \ src/MG.h \ src/MissionManager/MissionCommandList.h \ @@ -373,6 +374,7 @@ SOURCES += \ src/HomePositionManager.cc \ src/Joystick/Joystick.cc \ src/Joystick/JoystickManager.cc \ + src/JsonHelper.cc \ src/LogCompressor.cc \ src/main.cc \ src/MissionManager/MissionCommandList.cc \ diff --git a/src/JsonHelper.cc b/src/JsonHelper.cc new file mode 100644 index 0000000000000000000000000000000000000000..2d927cc12e8acdbc9f72c20e9ba9b912bce16305 --- /dev/null +++ b/src/JsonHelper.cc @@ -0,0 +1,73 @@ +/*=================================================================== +QGroundControl Open Source Ground Control Station + +(c) 2009, 2010 QGROUNDCONTROL PROJECT + +This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + +======================================================================*/ + +#include "JsonHelper.h" + +#include + +bool JsonHelper::validateRequiredKeys(const QJsonObject& jsonObject, const QStringList& keys, QString& errorString) +{ + QString missingKeys; + + foreach(const QString& key, keys) { + if (!jsonObject.contains(key)) { + if (!missingKeys.isEmpty()) { + missingKeys += QStringLiteral(", "); + } + missingKeys += key; + } + } + + if (missingKeys.count() != 0) { + errorString = QString("The following required keys are missing: %1").arg(missingKeys); + return false; + } + + return true; +} + +bool JsonHelper::toQGeoCoordinate(const QJsonValue& jsonValue, QGeoCoordinate& coordinate, bool altitudeRequired, QString& errorString) +{ + if (!jsonValue.isArray()) { + errorString = QStringLiteral("JSon value for coordinate is not array"); + return false; + } + + QJsonArray coordinateArray = jsonValue.toArray(); + int requiredCount = altitudeRequired ? 3 : 2; + if (coordinateArray.count() != requiredCount) { + errorString = QString("Json array must contains %1 values").arg(requiredCount); + return false; + } + + coordinate = QGeoCoordinate(coordinateArray[0].toDouble(), coordinateArray[1].toDouble()); + if (altitudeRequired) { + coordinate.setAltitude(coordinateArray[2].toDouble()); + } + + if (!coordinate.isValid()) { + errorString = QString("Coordinate is invalid: %1").arg(coordinate.toString()); + return false; + } + + return true; +} diff --git a/src/JsonHelper.h b/src/JsonHelper.h new file mode 100644 index 0000000000000000000000000000000000000000..3c9c76acca7c0a6732227e9a0043ef84a722deaf --- /dev/null +++ b/src/JsonHelper.h @@ -0,0 +1,37 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2014 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +#ifndef JsonHelper_H +#define JsonHelper_H + +#include +#include + +class JsonHelper +{ +public: + static bool validateRequiredKeys(const QJsonObject& jsonObject, const QStringList& keys, QString& errorString); + static bool toQGeoCoordinate(const QJsonValue& jsonValue, QGeoCoordinate& coordinate, bool altitudeRequired, QString& errorString); +}; + +#endif