annotate data/fileio/QueryConfigReader.cpp @ 15:11e298cdb9e7

add - EasaierSessionManager - Easaier menus - Interval model
author lbajardsilogic
date Mon, 14 May 2007 13:10:49 +0000
parents
children 59d84a8bb76c
rev   line source
lbajardsilogic@15 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@15 2
lbajardsilogic@15 3 /* Sound Access
lbajardsilogic@15 4 EASAIER client application.
lbajardsilogic@15 5 Silogic 2007. Laure Bajard.
lbajardsilogic@15 6
lbajardsilogic@15 7 This program is free software; you can redistribute it and/or
lbajardsilogic@15 8 modify it under the terms of the GNU General Public License as
lbajardsilogic@15 9 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@15 10 License, or (at your option) any later version. See the file
lbajardsilogic@15 11 COPYING included with this distribution for more information.
lbajardsilogic@15 12 */
lbajardsilogic@15 13
lbajardsilogic@15 14 #include "QueryConfigReader.h"
lbajardsilogic@15 15
lbajardsilogic@15 16 #include <iostream>
lbajardsilogic@15 17
lbajardsilogic@15 18 #include "model/QueryModel.h"
lbajardsilogic@15 19
lbajardsilogic@15 20 QueryConfigReader::QueryConfigReader(QueryModel * queryModel) :
lbajardsilogic@15 21 m_queryModel(queryModel)
lbajardsilogic@15 22 {}
lbajardsilogic@15 23
lbajardsilogic@15 24 bool QueryConfigReader::parse(const QString & filename)
lbajardsilogic@15 25 {
lbajardsilogic@15 26 QueryConfigHandler handler(m_queryModel);
lbajardsilogic@15 27 QXmlSimpleReader reader;
lbajardsilogic@15 28 reader.setContentHandler(&handler);
lbajardsilogic@15 29 reader.setErrorHandler(&handler);
lbajardsilogic@15 30
lbajardsilogic@15 31 QFile file(filename);
lbajardsilogic@15 32
lbajardsilogic@15 33 if (!file.open(QFile::ReadOnly | QFile::Text)) {
lbajardsilogic@15 34 return false;
lbajardsilogic@15 35 }
lbajardsilogic@15 36
lbajardsilogic@15 37 QXmlInputSource xmlInputSource(&file);
lbajardsilogic@15 38 if (reader.parse(xmlInputSource))
lbajardsilogic@15 39 {
lbajardsilogic@15 40 return true;
lbajardsilogic@15 41 }
lbajardsilogic@15 42
lbajardsilogic@15 43 return false;
lbajardsilogic@15 44 }
lbajardsilogic@15 45
lbajardsilogic@15 46 QueryConfigHandler::QueryConfigHandler(QueryModel * queryModel) : QXmlDefaultHandler(),
lbajardsilogic@15 47 m_inTheme(false),
lbajardsilogic@15 48 m_inFieldGroup(false),
lbajardsilogic@15 49 m_queryModel(queryModel)
lbajardsilogic@15 50 {}
lbajardsilogic@15 51
lbajardsilogic@15 52 bool QueryConfigHandler::startElement(const QString &namespaceURI, const QString &localName,
lbajardsilogic@15 53 const QString &qName, const QXmlAttributes &attributes)
lbajardsilogic@15 54 {
lbajardsilogic@15 55
lbajardsilogic@15 56 QString name = qName.toLower();
lbajardsilogic@15 57
lbajardsilogic@15 58 bool ok = false;
lbajardsilogic@15 59
lbajardsilogic@15 60 // Valid element names:
lbajardsilogic@15 61 //
lbajardsilogic@15 62 // easaierquery
lbajardsilogic@15 63 // theme
lbajardsilogic@15 64 // fieldgroup
lbajardsilogic@15 65 // field
lbajardsilogic@15 66
lbajardsilogic@15 67 if (name == "easaierquery") {
lbajardsilogic@15 68
lbajardsilogic@15 69 // nothing needed
lbajardsilogic@15 70 ok = true;
lbajardsilogic@15 71
lbajardsilogic@15 72 } else if (name == "theme") {
lbajardsilogic@15 73
lbajardsilogic@15 74 m_inTheme = true;
lbajardsilogic@15 75 m_queryModel->addTheme(attributes.value("name"), attributes.value("label"));
lbajardsilogic@15 76 ok = true;
lbajardsilogic@15 77
lbajardsilogic@15 78 } else if (name == "fieldgroup") {
lbajardsilogic@15 79
lbajardsilogic@15 80 m_inFieldGroup = true;
lbajardsilogic@15 81 m_queryModel->newGroup(attributes.value("name"), attributes.value("label"));
lbajardsilogic@15 82 ok = true;
lbajardsilogic@15 83
lbajardsilogic@15 84 } else if (name == "field") {
lbajardsilogic@15 85
lbajardsilogic@15 86 ok = true;
lbajardsilogic@15 87 QString name = attributes.value("name");
lbajardsilogic@15 88 QString label = attributes.value("label");
lbajardsilogic@15 89 QString type = attributes.value("xsi:type");
lbajardsilogic@15 90 QString range = attributes.value("range");
lbajardsilogic@15 91 QString unit = attributes.value("unit");
lbajardsilogic@15 92 QString comment = attributes.value("comment");
lbajardsilogic@15 93 m_queryModel->addProperty(name, label, type, range, unit, comment);
lbajardsilogic@15 94
lbajardsilogic@15 95 }
lbajardsilogic@15 96
lbajardsilogic@15 97 if (!ok) {
lbajardsilogic@15 98 std::cerr << "WARNING: QueryConfigReader-XML: Failed to completely process element \""
lbajardsilogic@15 99 << name.toLocal8Bit().data() << "\"" << std::endl;
lbajardsilogic@15 100 }
lbajardsilogic@15 101
lbajardsilogic@15 102 return true;
lbajardsilogic@15 103 }
lbajardsilogic@15 104
lbajardsilogic@15 105 bool QueryConfigHandler::endElement(const QString &namespaceURI, const QString &localName,
lbajardsilogic@15 106 const QString &qName)
lbajardsilogic@15 107 {
lbajardsilogic@15 108 QString name = qName.toLower();
lbajardsilogic@15 109
lbajardsilogic@15 110 if (name == "theme")
lbajardsilogic@15 111 {
lbajardsilogic@15 112 m_inTheme = false;
lbajardsilogic@15 113 }
lbajardsilogic@15 114 else if (name == "fieldgroup")
lbajardsilogic@15 115 {
lbajardsilogic@15 116 m_inFieldGroup = false;
lbajardsilogic@15 117 }
lbajardsilogic@15 118
lbajardsilogic@15 119 return true;
lbajardsilogic@15 120 }
lbajardsilogic@15 121
lbajardsilogic@15 122 bool QueryConfigHandler::characters(const QString &str)
lbajardsilogic@15 123 {
lbajardsilogic@15 124 bool ok = false;
lbajardsilogic@15 125
lbajardsilogic@15 126 return true;
lbajardsilogic@15 127 }
lbajardsilogic@15 128
lbajardsilogic@15 129 bool QueryConfigHandler::error(const QXmlParseException &exception)
lbajardsilogic@15 130 {
lbajardsilogic@15 131 QString errorString;
lbajardsilogic@15 132 errorString += QString("ERROR: QueryConfigReader-XML: %1 at line %2, column %3")
lbajardsilogic@15 133 .arg(exception.message())
lbajardsilogic@15 134 .arg(exception.lineNumber())
lbajardsilogic@15 135 .arg(exception.columnNumber());
lbajardsilogic@15 136 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 137 return QXmlDefaultHandler::error(exception);
lbajardsilogic@15 138 }
lbajardsilogic@15 139
lbajardsilogic@15 140 bool QueryConfigHandler::fatalError(const QXmlParseException &exception)
lbajardsilogic@15 141 {
lbajardsilogic@15 142 QString errorString;
lbajardsilogic@15 143 errorString += QString("FATAL ERROR: QueryConfigReader-XML: %1 at line %2, column %3")
lbajardsilogic@15 144 .arg(exception.message())
lbajardsilogic@15 145 .arg(exception.lineNumber())
lbajardsilogic@15 146 .arg(exception.columnNumber());
lbajardsilogic@15 147 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 148 return QXmlDefaultHandler::fatalError(exception);
lbajardsilogic@15 149 }