annotate data/fileio/SparqlResultsReader.cpp @ 144:f3dce7a985cf

result display is better now.
author benoitrigolleau
date Tue, 13 Nov 2007 11:09:57 +0000
parents 11e298cdb9e7
children ec2ca3fbd957
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 "SparqlResultsReader.h"
lbajardsilogic@15 15
lbajardsilogic@15 16 #include <iostream>
lbajardsilogic@15 17
lbajardsilogic@15 18 SparqlResultsReader::SparqlResultsReader(QueryResultsWidget* resultsWidget) :
lbajardsilogic@15 19 m_resultsWidget(resultsWidget)
lbajardsilogic@15 20 {}
lbajardsilogic@15 21
lbajardsilogic@15 22 bool SparqlResultsReader::parse(const QString & filename)
lbajardsilogic@15 23 {
lbajardsilogic@15 24 SparqlResultsHandler handler(m_resultsWidget);
lbajardsilogic@15 25 QXmlSimpleReader reader;
lbajardsilogic@15 26 reader.setContentHandler(&handler);
lbajardsilogic@15 27 reader.setErrorHandler(&handler);
lbajardsilogic@15 28
lbajardsilogic@15 29 QFile file(filename);
lbajardsilogic@15 30
lbajardsilogic@15 31 if (!file.open(QFile::ReadOnly | QFile::Text)) {
lbajardsilogic@15 32 return false;
lbajardsilogic@15 33 }
lbajardsilogic@15 34
lbajardsilogic@15 35 QXmlInputSource xmlInputSource(&file);
lbajardsilogic@15 36 if (reader.parse(xmlInputSource))
lbajardsilogic@15 37 {
benoitrigolleau@144 38 m_resultsWidget->displayResult();
lbajardsilogic@15 39 return true;
lbajardsilogic@15 40 }
lbajardsilogic@15 41
lbajardsilogic@15 42 return false;
lbajardsilogic@15 43 }
lbajardsilogic@15 44
lbajardsilogic@15 45 SparqlResultsHandler::SparqlResultsHandler(QueryResultsWidget* resultsWidget) : QXmlDefaultHandler(),
lbajardsilogic@15 46 m_resultsWidget(resultsWidget),
lbajardsilogic@15 47 m_inBinding(false),
lbajardsilogic@15 48 m_curBindingName("")
lbajardsilogic@15 49 {}
lbajardsilogic@15 50
lbajardsilogic@15 51 bool SparqlResultsHandler::startElement(const QString &namespaceURI, const QString &localName,
lbajardsilogic@15 52 const QString &qName, const QXmlAttributes &attributes)
lbajardsilogic@15 53 {
lbajardsilogic@15 54
lbajardsilogic@15 55 QString name = qName.toLower();
lbajardsilogic@15 56
lbajardsilogic@15 57 bool ok = false;
lbajardsilogic@15 58
lbajardsilogic@15 59 // Valid element names:
lbajardsilogic@15 60 //
lbajardsilogic@15 61 // sparql
lbajardsilogic@15 62 // head
lbajardsilogic@15 63 // variable
lbajardsilogic@15 64 // results
lbajardsilogic@15 65 // result
lbajardsilogic@15 66 // binding
lbajardsilogic@15 67
lbajardsilogic@15 68 if (name == "sparql") {
lbajardsilogic@15 69
lbajardsilogic@15 70 // nothing needed
lbajardsilogic@15 71 ok = true;
lbajardsilogic@15 72
lbajardsilogic@15 73 } else if (name == "head") {
lbajardsilogic@15 74
lbajardsilogic@15 75 // nothing needed
lbajardsilogic@15 76 ok = true;
lbajardsilogic@15 77
lbajardsilogic@15 78 } else if (name == "variable") {
lbajardsilogic@15 79
lbajardsilogic@15 80 // nothing needed
lbajardsilogic@15 81 ok = true;
lbajardsilogic@15 82
lbajardsilogic@15 83 } else if (name == "results") {
lbajardsilogic@15 84
lbajardsilogic@15 85 // nothing needed
lbajardsilogic@15 86 ok = true;
lbajardsilogic@15 87
lbajardsilogic@15 88 } else if (name == "result") {
lbajardsilogic@15 89
lbajardsilogic@15 90 m_resultsWidget->newResult();
lbajardsilogic@15 91 ok = true;
lbajardsilogic@15 92
lbajardsilogic@15 93 } else if (name == "binding") {
lbajardsilogic@15 94
lbajardsilogic@15 95 m_curBindingName = attributes.value("name");
lbajardsilogic@15 96 ok = true;
lbajardsilogic@15 97
lbajardsilogic@15 98 } else if ( (name == "uri") || (name == "literal") ) {
lbajardsilogic@15 99 m_inBinding = true;
lbajardsilogic@15 100 ok = true;
lbajardsilogic@15 101 }
lbajardsilogic@15 102
lbajardsilogic@15 103 if (!ok) {
lbajardsilogic@15 104 std::cerr << "WARNING: SparqlResultsHandler-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 SparqlResultsHandler::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 == "uri") || (name == "literal") )
lbajardsilogic@15 117 {
lbajardsilogic@15 118 m_inBinding = false;
lbajardsilogic@15 119 m_curBindingName = "";
lbajardsilogic@15 120
lbajardsilogic@15 121 } else if (name == "result")
lbajardsilogic@15 122 {
benoitrigolleau@144 123 m_resultsWidget->saveCurResult();
lbajardsilogic@15 124 }
lbajardsilogic@15 125
lbajardsilogic@15 126 return true;
lbajardsilogic@15 127 }
lbajardsilogic@15 128
lbajardsilogic@15 129 bool SparqlResultsHandler::characters(const QString &str)
lbajardsilogic@15 130 {
lbajardsilogic@15 131 if (m_inBinding)
lbajardsilogic@15 132 {
lbajardsilogic@15 133 m_resultsWidget->addInfo(m_curBindingName, str);
lbajardsilogic@15 134 }
lbajardsilogic@15 135
lbajardsilogic@15 136 return true;
lbajardsilogic@15 137 }
lbajardsilogic@15 138
lbajardsilogic@15 139 bool SparqlResultsHandler::error(const QXmlParseException &exception)
lbajardsilogic@15 140 {
lbajardsilogic@15 141 QString errorString;
lbajardsilogic@15 142 errorString += QString("ERROR: SparqlResultsHandler-XML: %1 at line %2, column %3")
lbajardsilogic@15 143 .arg(exception.message())
lbajardsilogic@15 144 .arg(exception.lineNumber())
lbajardsilogic@15 145 .arg(exception.columnNumber());
lbajardsilogic@15 146 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 147 return QXmlDefaultHandler::error(exception);
lbajardsilogic@15 148 }
lbajardsilogic@15 149
lbajardsilogic@15 150 bool SparqlResultsHandler::fatalError(const QXmlParseException &exception)
lbajardsilogic@15 151 {
lbajardsilogic@15 152 QString errorString;
lbajardsilogic@15 153 errorString += QString("FATAL ERROR: SparqlResultsHandler-XML: %1 at line %2, column %3")
lbajardsilogic@15 154 .arg(exception.message())
lbajardsilogic@15 155 .arg(exception.lineNumber())
lbajardsilogic@15 156 .arg(exception.columnNumber());
lbajardsilogic@15 157 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 158 return QXmlDefaultHandler::fatalError(exception);
lbajardsilogic@15 159 }