summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorAndrew O'Doherty <andrew.odoherty@qt.io>2018-04-30 11:35:32 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2018-05-24 20:19:28 +0000
commitc3ce7375e0da44f70c373ea0acca31fa6552743f (patch)
tree3649af0f4cddd99932bb38800010c78173a36b69 /examples
parent2b7ee7a35e08adddad97b5532c63a9f75827099d (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.pro2
-rw-r--r--examples/knx/knxproj/main.cpp118
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;
};