From 6796b7a2144a833f1659aa48b2b8c950199826ba Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Tue, 9 Feb 2016 13:49:09 -0800 Subject: [PATCH] JSon helper routines --- qgroundcontrol.pro | 2 ++ src/JsonHelper.cc | 73 ++++++++++++++++++++++++++++++++++++++++++++++ src/JsonHelper.h | 37 +++++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 src/JsonHelper.cc create mode 100644 src/JsonHelper.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index a6d86ac83..9b97c417b 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 000000000..2d927cc12 --- /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 000000000..3c9c76acc --- /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 -- 2.22.0