Mercurial > hg > easaier-soundaccess
view data/fileio/QueryConfigReader.cpp @ 227:59d84a8bb76c
compatibility with changes done for the web site:
- easaier servlet name changed
- new queryfield.xml ("range" attributes form)
author | lbajardsilogic |
---|---|
date | Wed, 27 Feb 2008 16:00:02 +0000 |
parents | 11e298cdb9e7 |
children |
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ /* Sound Access EASAIER client application. Silogic 2007. Laure Bajard. This program 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 2 of the License, or (at your option) any later version. See the file COPYING included with this distribution for more information. */ #include "QueryConfigReader.h" #include <iostream> #include "model/QueryModel.h" QueryConfigReader::QueryConfigReader(QueryModel * queryModel) : m_queryModel(queryModel) {} bool QueryConfigReader::parse(const QString & filename) { QueryConfigHandler handler(m_queryModel); QXmlSimpleReader reader; reader.setContentHandler(&handler); reader.setErrorHandler(&handler); QFile file(filename); if (!file.open(QFile::ReadOnly | QFile::Text)) { return false; } QXmlInputSource xmlInputSource(&file); if (reader.parse(xmlInputSource)) { return true; } return false; } QueryConfigHandler::QueryConfigHandler(QueryModel * queryModel) : QXmlDefaultHandler(), m_inTheme(false), m_inFieldGroup(false), m_inBinding(false), m_propertyName(""), m_queryModel(queryModel) {} bool QueryConfigHandler::startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes) { QString name = qName.toLower(); bool ok = false; // Valid element names: // // easaierquery // theme // fieldgroup // field if (name == "easaierquery") { // nothing needed ok = true; } else if (name == "theme") { m_inTheme = true; m_queryModel->addTheme(attributes.value("name"), attributes.value("label")); ok = true; } else if (name == "fieldgroup") { m_inFieldGroup = true; m_queryModel->newGroup(attributes.value("name"), attributes.value("label")); ok = true; } else if (name == "field") { ok = true; m_propertyName = attributes.value("name"); QString label = attributes.value("label"); QString type = attributes.value("xsi:type"); QString range = attributes.value("range"); QString unit = attributes.value("unit"); QString comment = attributes.value("comment"); m_queryModel->addProperty(m_propertyName, label, type, range, unit, comment); } else if (name == "range") { m_inBinding = true; ok = true; } if (!ok) { std::cerr << "WARNING: QueryConfigReader-XML: Failed to completely process element \"" << name.toLocal8Bit().data() << "\"" << std::endl; } return true; } bool QueryConfigHandler::endElement(const QString &namespaceURI, const QString &localName, const QString &qName) { QString name = qName.toLower(); if (name == "theme") { m_inTheme = false; } else if (name == "fieldgroup") { m_inFieldGroup = false; } else if (name == "range") { m_inBinding = false; } return true; } bool QueryConfigHandler::characters(const QString &str) { bool ok = false; if (m_inBinding) { m_queryModel->addRange(m_propertyName, str); } return true; } bool QueryConfigHandler::error(const QXmlParseException &exception) { QString errorString; errorString += QString("ERROR: QueryConfigReader-XML: %1 at line %2, column %3") .arg(exception.message()) .arg(exception.lineNumber()) .arg(exception.columnNumber()); std::cerr << errorString.toLocal8Bit().data() << std::endl; return QXmlDefaultHandler::error(exception); } bool QueryConfigHandler::fatalError(const QXmlParseException &exception) { QString errorString; errorString += QString("FATAL ERROR: QueryConfigReader-XML: %1 at line %2, column %3") .arg(exception.message()) .arg(exception.lineNumber()) .arg(exception.columnNumber()); std::cerr << errorString.toLocal8Bit().data() << std::endl; return QXmlDefaultHandler::fatalError(exception); }