lbajardsilogic@15: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@15: lbajardsilogic@15: /* Sound Access lbajardsilogic@15: EASAIER client application. lbajardsilogic@15: Silogic 2007. Laure Bajard. lbajardsilogic@15: lbajardsilogic@15: This program is free software; you can redistribute it and/or lbajardsilogic@15: modify it under the terms of the GNU General Public License as lbajardsilogic@15: published by the Free Software Foundation; either version 2 of the lbajardsilogic@15: License, or (at your option) any later version. See the file lbajardsilogic@15: COPYING included with this distribution for more information. lbajardsilogic@15: */ lbajardsilogic@15: lbajardsilogic@15: #include "AudioSourceInfoReader.h" lbajardsilogic@15: lbajardsilogic@15: lbajardsilogic@15: #include lbajardsilogic@15: lbajardsilogic@15: AudioSourceInfoReader::AudioSourceInfoReader(AudioSourceInfoModel* model) lbajardsilogic@15: { lbajardsilogic@15: m_model = model; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: bool AudioSourceInfoReader::parse(const QString & filename) lbajardsilogic@15: { lbajardsilogic@15: AudioSourceInfoHandler handler(m_model); lbajardsilogic@15: QXmlSimpleReader reader; lbajardsilogic@15: reader.setContentHandler(&handler); lbajardsilogic@15: reader.setErrorHandler(&handler); lbajardsilogic@15: lbajardsilogic@15: QFile file(filename); lbajardsilogic@15: lbajardsilogic@15: if (!file.open(QFile::ReadOnly | QFile::Text)) { lbajardsilogic@15: return false; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: QXmlInputSource xmlInputSource(&file); lbajardsilogic@15: if (reader.parse(xmlInputSource)) lbajardsilogic@15: { lbajardsilogic@15: return true; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: return false; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@90: AudioSourceInfoHandler::AudioSourceInfoHandler(AudioSourceInfoModel* model) : QXmlDefaultHandler(), lbajardsilogic@90: m_model(model), lbajardsilogic@90: m_inBinding(false), lbajardsilogic@90: m_curBindingName("") lbajardsilogic@90: {} lbajardsilogic@15: lbajardsilogic@15: bool AudioSourceInfoHandler::startElement(const QString &namespaceURI, const QString &localName, lbajardsilogic@15: const QString &qName, const QXmlAttributes &attributes) lbajardsilogic@15: { lbajardsilogic@90: /*QString name = qName.toLower(); lbajardsilogic@15: bool ok = false; lbajardsilogic@15: lbajardsilogic@15: // Valid element names: lbajardsilogic@15: // easaierResource lbajardsilogic@15: // dc:identifier lbajardsilogic@15: // dc:title lbajardsilogic@15: // dc:creator... lbajardsilogic@15: lbajardsilogic@15: if (name == "easaierresource") { lbajardsilogic@15: // nothing needed lbajardsilogic@15: ok = true; lbajardsilogic@15: lbajardsilogic@15: } else { lbajardsilogic@15: ok = true; lbajardsilogic@15: QString id = attributes.value("id"); lbajardsilogic@15: name.append(id); lbajardsilogic@15: m_model->addInfo(name, attributes.value("value")); lbajardsilogic@15: lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: if (!ok) { lbajardsilogic@15: std::cerr << "WARNING: connexion config-XML: Failed to completely process element \"" lbajardsilogic@15: << name.toLocal8Bit().data() << "\"" << std::endl; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@90: return true;*/ lbajardsilogic@90: QString name = qName.toLower(); lbajardsilogic@90: lbajardsilogic@90: bool ok = false; lbajardsilogic@90: lbajardsilogic@90: // Valid element names: lbajardsilogic@90: // lbajardsilogic@90: // sparql lbajardsilogic@90: // head lbajardsilogic@90: // variable lbajardsilogic@90: // results lbajardsilogic@90: // result lbajardsilogic@90: // binding lbajardsilogic@90: lbajardsilogic@90: if (name == "sparql") { lbajardsilogic@90: lbajardsilogic@90: // nothing needed lbajardsilogic@90: ok = true; lbajardsilogic@90: lbajardsilogic@90: } else if (name == "head") { lbajardsilogic@90: lbajardsilogic@90: // nothing needed lbajardsilogic@90: ok = true; lbajardsilogic@90: lbajardsilogic@90: } else if (name == "variable") { lbajardsilogic@90: lbajardsilogic@90: // nothing needed lbajardsilogic@90: ok = true; lbajardsilogic@90: lbajardsilogic@90: } else if (name == "results") { lbajardsilogic@90: lbajardsilogic@90: // nothing needed lbajardsilogic@90: ok = true; lbajardsilogic@90: lbajardsilogic@90: } else if (name == "result") { lbajardsilogic@90: lbajardsilogic@90: ok = true; lbajardsilogic@90: lbajardsilogic@90: } else if (name == "binding") { lbajardsilogic@90: lbajardsilogic@90: m_curBindingName = attributes.value("name"); lbajardsilogic@90: ok = true; lbajardsilogic@90: lbajardsilogic@90: } else if ( (name == "uri") || (name == "literal") ) { lbajardsilogic@90: m_inBinding = true; lbajardsilogic@90: ok = true; lbajardsilogic@90: } lbajardsilogic@90: lbajardsilogic@90: if (!ok) { lbajardsilogic@244: std::cerr << "WARNING: AudioSourceInfoHandler-XML: Failed to completely process element \"" lbajardsilogic@90: << name.toLocal8Bit().data() << "\"" << std::endl; lbajardsilogic@90: } lbajardsilogic@90: lbajardsilogic@15: return true; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: bool AudioSourceInfoHandler::endElement(const QString &namespaceURI, const QString &localName, lbajardsilogic@15: const QString &qName) lbajardsilogic@15: { lbajardsilogic@90: QString name = qName.toLower(); lbajardsilogic@90: lbajardsilogic@90: if ( (name == "uri") || (name == "literal") ) lbajardsilogic@90: { lbajardsilogic@90: m_inBinding = false; lbajardsilogic@90: m_curBindingName = ""; lbajardsilogic@90: lbajardsilogic@90: } else if (name == "result") lbajardsilogic@90: { lbajardsilogic@251: /*m_model->addInfo("composer", m_composer); lbajardsilogic@244: m_model->addInfo("arranger", m_arranger); lbajardsilogic@244: m_composer.clear(); lbajardsilogic@244: m_arranger.clear(); lbajardsilogic@244: m_composer.append(" -"); lbajardsilogic@251: m_arranger.append(" -");*/ lbajardsilogic@90: } lbajardsilogic@90: lbajardsilogic@15: return true; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: bool AudioSourceInfoHandler::characters(const QString &str) lbajardsilogic@15: { lbajardsilogic@90: if (m_inBinding) lbajardsilogic@90: { lbajardsilogic@244: if (m_curBindingName.contains("composer")) lbajardsilogic@90: { lbajardsilogic@244: m_composer.append(" " + str); lbajardsilogic@90: } lbajardsilogic@244: else if (m_curBindingName.contains("arranger")) lbajardsilogic@90: { lbajardsilogic@244: m_arranger.append(" " + str); lbajardsilogic@90: } lbajardsilogic@90: else lbajardsilogic@90: { lbajardsilogic@90: m_model->addInfo(m_curBindingName, str); lbajardsilogic@90: } lbajardsilogic@90: } lbajardsilogic@90: lbajardsilogic@90: return true; lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: bool AudioSourceInfoHandler::error(const QXmlParseException &exception) lbajardsilogic@15: { lbajardsilogic@15: QString errorString; lbajardsilogic@244: errorString += QString("ERROR: connexion AudioSourceInfoHandler-XML: %1 at line %2, column %3") lbajardsilogic@15: .arg(exception.message()) lbajardsilogic@15: .arg(exception.lineNumber()) lbajardsilogic@15: .arg(exception.columnNumber()); lbajardsilogic@15: std::cerr << errorString.toLocal8Bit().data() << std::endl; lbajardsilogic@15: return QXmlDefaultHandler::error(exception); lbajardsilogic@15: } lbajardsilogic@15: lbajardsilogic@15: bool AudioSourceInfoHandler::fatalError(const QXmlParseException &exception) lbajardsilogic@15: { lbajardsilogic@15: QString errorString; lbajardsilogic@244: errorString += QString("FATAL ERROR: connexion AudioSourceInfoHandler-XML: %1 at line %2, column %3") lbajardsilogic@15: .arg(exception.message()) lbajardsilogic@15: .arg(exception.lineNumber()) lbajardsilogic@15: .arg(exception.columnNumber()); lbajardsilogic@15: std::cerr << errorString.toLocal8Bit().data() << std::endl; lbajardsilogic@15: return QXmlDefaultHandler::fatalError(exception); lbajardsilogic@15: }