annotate data/fileio/QueryConfigReader.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 59d84a8bb76c
children
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@227 49 m_inBinding(false),
lbajardsilogic@227 50 m_propertyName(""),
lbajardsilogic@15 51 m_queryModel(queryModel)
lbajardsilogic@15 52 {}
lbajardsilogic@15 53
lbajardsilogic@15 54 bool QueryConfigHandler::startElement(const QString &namespaceURI, const QString &localName,
lbajardsilogic@15 55 const QString &qName, const QXmlAttributes &attributes)
lbajardsilogic@15 56 {
lbajardsilogic@15 57
lbajardsilogic@15 58 QString name = qName.toLower();
lbajardsilogic@15 59
lbajardsilogic@15 60 bool ok = false;
lbajardsilogic@15 61
lbajardsilogic@15 62 // Valid element names:
lbajardsilogic@15 63 //
lbajardsilogic@15 64 // easaierquery
lbajardsilogic@15 65 // theme
lbajardsilogic@15 66 // fieldgroup
lbajardsilogic@15 67 // field
lbajardsilogic@15 68
lbajardsilogic@15 69 if (name == "easaierquery") {
lbajardsilogic@15 70
lbajardsilogic@15 71 // nothing needed
lbajardsilogic@15 72 ok = true;
lbajardsilogic@15 73
lbajardsilogic@15 74 } else if (name == "theme") {
lbajardsilogic@15 75
lbajardsilogic@15 76 m_inTheme = true;
lbajardsilogic@15 77 m_queryModel->addTheme(attributes.value("name"), attributes.value("label"));
lbajardsilogic@15 78 ok = true;
lbajardsilogic@15 79
lbajardsilogic@15 80 } else if (name == "fieldgroup") {
lbajardsilogic@15 81
lbajardsilogic@15 82 m_inFieldGroup = true;
lbajardsilogic@15 83 m_queryModel->newGroup(attributes.value("name"), attributes.value("label"));
lbajardsilogic@15 84 ok = true;
lbajardsilogic@15 85
lbajardsilogic@15 86 } else if (name == "field") {
lbajardsilogic@15 87
lbajardsilogic@15 88 ok = true;
lbajardsilogic@227 89 m_propertyName = attributes.value("name");
lbajardsilogic@15 90 QString label = attributes.value("label");
lbajardsilogic@15 91 QString type = attributes.value("xsi:type");
lbajardsilogic@15 92 QString range = attributes.value("range");
lbajardsilogic@15 93 QString unit = attributes.value("unit");
lbajardsilogic@15 94 QString comment = attributes.value("comment");
lbajardsilogic@227 95 m_queryModel->addProperty(m_propertyName, label, type, range, unit, comment);
lbajardsilogic@15 96
lbajardsilogic@227 97 } else if (name == "range") {
lbajardsilogic@227 98
lbajardsilogic@227 99 m_inBinding = true;
lbajardsilogic@227 100 ok = true;
lbajardsilogic@227 101 }
lbajardsilogic@15 102
lbajardsilogic@15 103 if (!ok) {
lbajardsilogic@15 104 std::cerr << "WARNING: QueryConfigReader-XML: Failed to completely process element \""
lbajardsilogic@15 105 << name.toLocal8Bit().data() << "\"" << std::endl;
lbajardsilogic@15 106 }
lbajardsilogic@15 107
lbajardsilogic@15 108 return true;
lbajardsilogic@15 109 }
lbajardsilogic@15 110
lbajardsilogic@15 111 bool QueryConfigHandler::endElement(const QString &namespaceURI, const QString &localName,
lbajardsilogic@15 112 const QString &qName)
lbajardsilogic@15 113 {
lbajardsilogic@15 114 QString name = qName.toLower();
lbajardsilogic@15 115
lbajardsilogic@15 116 if (name == "theme")
lbajardsilogic@15 117 {
lbajardsilogic@15 118 m_inTheme = false;
lbajardsilogic@15 119 }
lbajardsilogic@15 120 else if (name == "fieldgroup")
lbajardsilogic@15 121 {
lbajardsilogic@15 122 m_inFieldGroup = false;
lbajardsilogic@15 123 }
lbajardsilogic@227 124 else if (name == "range")
lbajardsilogic@227 125 {
lbajardsilogic@227 126 m_inBinding = false;
lbajardsilogic@227 127 }
lbajardsilogic@15 128
lbajardsilogic@15 129 return true;
lbajardsilogic@15 130 }
lbajardsilogic@15 131
lbajardsilogic@15 132 bool QueryConfigHandler::characters(const QString &str)
lbajardsilogic@15 133 {
lbajardsilogic@15 134 bool ok = false;
lbajardsilogic@15 135
lbajardsilogic@227 136 if (m_inBinding)
lbajardsilogic@227 137 {
lbajardsilogic@227 138 m_queryModel->addRange(m_propertyName, str);
lbajardsilogic@227 139 }
lbajardsilogic@227 140
lbajardsilogic@15 141 return true;
lbajardsilogic@15 142 }
lbajardsilogic@15 143
lbajardsilogic@15 144 bool QueryConfigHandler::error(const QXmlParseException &exception)
lbajardsilogic@15 145 {
lbajardsilogic@15 146 QString errorString;
lbajardsilogic@15 147 errorString += QString("ERROR: QueryConfigReader-XML: %1 at line %2, column %3")
lbajardsilogic@15 148 .arg(exception.message())
lbajardsilogic@15 149 .arg(exception.lineNumber())
lbajardsilogic@15 150 .arg(exception.columnNumber());
lbajardsilogic@15 151 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 152 return QXmlDefaultHandler::error(exception);
lbajardsilogic@15 153 }
lbajardsilogic@15 154
lbajardsilogic@15 155 bool QueryConfigHandler::fatalError(const QXmlParseException &exception)
lbajardsilogic@15 156 {
lbajardsilogic@15 157 QString errorString;
lbajardsilogic@15 158 errorString += QString("FATAL ERROR: QueryConfigReader-XML: %1 at line %2, column %3")
lbajardsilogic@15 159 .arg(exception.message())
lbajardsilogic@15 160 .arg(exception.lineNumber())
lbajardsilogic@15 161 .arg(exception.columnNumber());
lbajardsilogic@15 162 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 163 return QXmlDefaultHandler::fatalError(exception);
lbajardsilogic@15 164 }