diff options
author | Andrew O'Doherty <andrew.odoherty@qt.io> | 2018-04-30 11:35:32 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-05-24 20:19:28 +0000 |
commit | c3ce7375e0da44f70c373ea0acca31fa6552743f (patch) | |
tree | 3649af0f4cddd99932bb38800010c78173a36b69 /examples | |
parent | 2b7ee7a35e08adddad97b5532c63a9f75827099d (diff) |
Rewrite the knxproj example to not use private API
Change-Id: I4796fd6f8a5a2c4bcefe93ec693db3dd9c81b098
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/knx/knxproj/knxproj.pro | 2 | ||||
-rw-r--r-- | examples/knx/knxproj/main.cpp | 118 |
2 files changed, 57 insertions, 63 deletions
diff --git a/examples/knx/knxproj/knxproj.pro b/examples/knx/knxproj/knxproj.pro index 2725ecb..af13a69 100644 --- a/examples/knx/knxproj/knxproj.pro +++ b/examples/knx/knxproj/knxproj.pro @@ -2,7 +2,7 @@ TEMPLATE = app TARGET = knxproj CONFIG += c++11 console -QT = core knx knx-private +QT = core knx INCLUDEPATH += . SOURCES += main.cpp diff --git a/examples/knx/knxproj/main.cpp b/examples/knx/knxproj/main.cpp index d14e5cf..d838bbf 100644 --- a/examples/knx/knxproj/main.cpp +++ b/examples/knx/knxproj/main.cpp @@ -27,81 +27,75 @@ ** ******************************************************************************/ +#include <QtCore/QCommandLineParser> #include <QtCore/qdebug.h> #include <QtCore/qvector.h> #include <QtCore/qversionnumber.h> #include <QtCore/qxmlstream.h> -#include <QtKnx/private/qknxinstallation_p.h> -#include <QtKnx/private/qknxprojectroot_p.h> -#include <QtKnx/private/qknxprojectinformation_p.h> - -#include <QtKnx/private/qzipreader_p.h> -#include <QtKnx/private/qzipwriter_p.h> +#include <QtKnx/qknxgroupaddressinfos.h> int main(int argc, char *argv[]) { - if (argc < 2) - return EXIT_FAILURE; - - QZipReader zipReader(argv[1]); - if (!zipReader.isReadable() || zipReader.status() != QZipReader::NoError) - return EXIT_FAILURE; - - int projectId = -1, nullXmlId = -1; - auto fileInfos = zipReader.fileInfoList(); - for (int i = 0; i < fileInfos.count(); ++i) { - if (fileInfos[i].filePath.endsWith(QStringLiteral("project.xml"))) { - projectId = i; - if (projectId >= 0 && nullXmlId >= 0) - break; - } - - if (fileInfos[i].filePath.endsWith(QStringLiteral("0.xml"))) { - nullXmlId = i; - if (projectId >= 0 && nullXmlId >= 0) - break; - } + QCoreApplication app(argc, argv); + QCoreApplication::setApplicationName("knxproj"); + + QCommandLineParser cliParser; + cliParser.setApplicationDescription("KNX Project file parser"); + cliParser.addHelpOption(); + QCommandLineOption verboseOption({"v","verbose"}, + QCoreApplication::translate( + "main", "Show more details of the project file.")); + cliParser.addOption(verboseOption); + QCommandLineOption projFilePathOption(QStringList() << "p" << "project", + QCoreApplication::translate("main", "Path to the project file to parse."), + QCoreApplication::translate("main", "path")); + cliParser.addOption(projFilePathOption); + cliParser.process(app); + + bool verbose = cliParser.isSet(verboseOption); + + if (!cliParser.isSet(projFilePathOption)) { + qInfo() << "Error: Missing project file name" << endl; + cliParser.showHelp(EXIT_FAILURE); } - if (projectId < 0 || nullXmlId < 0) - return EXIT_FAILURE; - - QXmlStreamReader xmlReader(zipReader.fileData(fileInfos[projectId].filePath)); - struct Trace { - Trace(QXmlStreamReader *xmlReader) - : reader(xmlReader) - {} - ~Trace() - { - if (reader->hasError()) - qDebug() << reader->errorString(); - } + QKnxGroupAddressInfos infos(cliParser.value(projFilePathOption)); + infos.parse(); - private: - QXmlStreamReader *reader; - } tracer(&xmlReader); + qInfo().noquote() << QString::fromLatin1("Opening project file: %1") + .arg(infos.projectFile()); + QString status = infos.errorString().isEmpty() ? "No errors" : infos.errorString(); + qInfo().noquote() << QString::fromLatin1("Status parsing project: %1") + .arg(status); + qInfo().noquote() << QString::fromLatin1("Project ids found: %1") + .arg(infos.projectIds().size()); - if (!xmlReader.readNextStartElement()) - return EXIT_FAILURE; - - QKnxProjectRoot projectXml; - if (!projectXml.parseElement(&xmlReader, true)) - return EXIT_FAILURE; - - xmlReader.clear(); - xmlReader.addData(zipReader.fileData(fileInfos[nullXmlId].filePath)); - - if (!xmlReader.readNextStartElement()) - return EXIT_FAILURE; - - QKnxProjectRoot nullXml; - if (!nullXml.parseElement(&xmlReader, true)) + if (infos.status() != QKnxGroupAddressInfos::Status::NoError) { + qInfo() << "ERROR:" << infos; return EXIT_FAILURE; + } - auto project = nullXml.Project.value(0); - auto installation = project.Installations.value(0); - auto groupAddresses = installation.GroupAddresses.value(0); - auto groupRanges = groupAddresses.GroupRanges.value(0); + for (const auto &projId: infos.projectIds()) { + auto installations = infos.installations(projId); + qInfo()<< " # project"<<infos.projectName(projId); + qInfo().noquote() << QString::fromLatin1(" found %1 installation(s)") + .arg(installations.size()); + for (const QString &installation: installations) { + auto groupAddresses = infos.addressInfos(projId, installation); + qInfo().noquote() << QString::fromLatin1(" - Installation \"%1\"") + .arg(installation); + qInfo().noquote() << QString::fromLatin1(" found %1 Group address(es)") + .arg(groupAddresses.size()); + for (const QKnxGroupAddressInfo &addInfo: groupAddresses) { + if (!addInfo.isValid()) + return EXIT_FAILURE; + if (verbose) + qInfo().noquote() << QString::fromLatin1(" %1: %2") + .arg(addInfo.name()).arg(addInfo.address().toString()); + } + qInfo() << endl; + } + } return EXIT_SUCCESS; }; |