Mercurial > hg > easaier-soundaccess
comparison data/fileio/SparqlRelatedMediaReader.cpp @ 143:97fd6148fb8e
support related media display and loading
author | lbajardsilogic |
---|---|
date | Tue, 13 Nov 2007 10:07:49 +0000 |
parents | |
children | 057856cf81a2 |
comparison
equal
deleted
inserted
replaced
142:c1ea7af931e7 | 143:97fd6148fb8e |
---|---|
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 "SparqlRelatedMediaReader.h" | |
15 | |
16 #include <iostream> | |
17 | |
18 SparqlRelatedMediaReader::SparqlRelatedMediaReader(std::list<QString> *relMediaList) : | |
19 m_relMediaList(relMediaList) | |
20 {} | |
21 | |
22 bool SparqlRelatedMediaReader::parse(const QString & filename) | |
23 { | |
24 SparqlRelatedMediaHandler handler(m_relMediaList); | |
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 SparqlRelatedMediaHandler::SparqlRelatedMediaHandler(std::list<QString> *relMediaList) : QXmlDefaultHandler(), | |
45 m_relMediaList(relMediaList), | |
46 m_inBinding(false), | |
47 m_curBindingName("") | |
48 {} | |
49 | |
50 bool SparqlRelatedMediaHandler::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 // nothing needed | |
90 ok = true; | |
91 | |
92 } else if (name == "binding") { | |
93 | |
94 // nothing needed | |
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 SparqlRelatedMediaHandler::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 } | |
119 | |
120 return true; | |
121 } | |
122 | |
123 bool SparqlRelatedMediaHandler::characters(const QString &str) | |
124 { | |
125 if (m_inBinding) | |
126 { | |
127 m_relMediaList->push_back(str); | |
128 } | |
129 | |
130 return true; | |
131 } | |
132 | |
133 bool SparqlRelatedMediaHandler::error(const QXmlParseException &exception) | |
134 { | |
135 QString errorString; | |
136 errorString += QString("ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3") | |
137 .arg(exception.message()) | |
138 .arg(exception.lineNumber()) | |
139 .arg(exception.columnNumber()); | |
140 std::cerr << errorString.toLocal8Bit().data() << std::endl; | |
141 return QXmlDefaultHandler::error(exception); | |
142 } | |
143 | |
144 bool SparqlRelatedMediaHandler::fatalError(const QXmlParseException &exception) | |
145 { | |
146 QString errorString; | |
147 errorString += QString("FATAL ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3") | |
148 .arg(exception.message()) | |
149 .arg(exception.lineNumber()) | |
150 .arg(exception.columnNumber()); | |
151 std::cerr << errorString.toLocal8Bit().data() << std::endl; | |
152 return QXmlDefaultHandler::fatalError(exception); | |
153 } |