comparison data/fileio/SparqlResultsReader.cpp @ 15:11e298cdb9e7

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