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

add - EasaierSessionManager - Easaier menus - Interval model
author lbajardsilogic
date Mon, 14 May 2007 13:10:49 +0000
parents
children 59d84a8bb76c
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 "QueryConfigReader.h"
15
16 #include <iostream>
17
18 #include "model/QueryModel.h"
19
20 QueryConfigReader::QueryConfigReader(QueryModel * queryModel) :
21 m_queryModel(queryModel)
22 {}
23
24 bool QueryConfigReader::parse(const QString & filename)
25 {
26 QueryConfigHandler handler(m_queryModel);
27 QXmlSimpleReader reader;
28 reader.setContentHandler(&handler);
29 reader.setErrorHandler(&handler);
30
31 QFile file(filename);
32
33 if (!file.open(QFile::ReadOnly | QFile::Text)) {
34 return false;
35 }
36
37 QXmlInputSource xmlInputSource(&file);
38 if (reader.parse(xmlInputSource))
39 {
40 return true;
41 }
42
43 return false;
44 }
45
46 QueryConfigHandler::QueryConfigHandler(QueryModel * queryModel) : QXmlDefaultHandler(),
47 m_inTheme(false),
48 m_inFieldGroup(false),
49 m_queryModel(queryModel)
50 {}
51
52 bool QueryConfigHandler::startElement(const QString &namespaceURI, const QString &localName,
53 const QString &qName, const QXmlAttributes &attributes)
54 {
55
56 QString name = qName.toLower();
57
58 bool ok = false;
59
60 // Valid element names:
61 //
62 // easaierquery
63 // theme
64 // fieldgroup
65 // field
66
67 if (name == "easaierquery") {
68
69 // nothing needed
70 ok = true;
71
72 } else if (name == "theme") {
73
74 m_inTheme = true;
75 m_queryModel->addTheme(attributes.value("name"), attributes.value("label"));
76 ok = true;
77
78 } else if (name == "fieldgroup") {
79
80 m_inFieldGroup = true;
81 m_queryModel->newGroup(attributes.value("name"), attributes.value("label"));
82 ok = true;
83
84 } else if (name == "field") {
85
86 ok = true;
87 QString name = attributes.value("name");
88 QString label = attributes.value("label");
89 QString type = attributes.value("xsi:type");
90 QString range = attributes.value("range");
91 QString unit = attributes.value("unit");
92 QString comment = attributes.value("comment");
93 m_queryModel->addProperty(name, label, type, range, unit, comment);
94
95 }
96
97 if (!ok) {
98 std::cerr << "WARNING: QueryConfigReader-XML: Failed to completely process element \""
99 << name.toLocal8Bit().data() << "\"" << std::endl;
100 }
101
102 return true;
103 }
104
105 bool QueryConfigHandler::endElement(const QString &namespaceURI, const QString &localName,
106 const QString &qName)
107 {
108 QString name = qName.toLower();
109
110 if (name == "theme")
111 {
112 m_inTheme = false;
113 }
114 else if (name == "fieldgroup")
115 {
116 m_inFieldGroup = false;
117 }
118
119 return true;
120 }
121
122 bool QueryConfigHandler::characters(const QString &str)
123 {
124 bool ok = false;
125
126 return true;
127 }
128
129 bool QueryConfigHandler::error(const QXmlParseException &exception)
130 {
131 QString errorString;
132 errorString += QString("ERROR: QueryConfigReader-XML: %1 at line %2, column %3")
133 .arg(exception.message())
134 .arg(exception.lineNumber())
135 .arg(exception.columnNumber());
136 std::cerr << errorString.toLocal8Bit().data() << std::endl;
137 return QXmlDefaultHandler::error(exception);
138 }
139
140 bool QueryConfigHandler::fatalError(const QXmlParseException &exception)
141 {
142 QString errorString;
143 errorString += QString("FATAL ERROR: QueryConfigReader-XML: %1 at line %2, column %3")
144 .arg(exception.message())
145 .arg(exception.lineNumber())
146 .arg(exception.columnNumber());
147 std::cerr << errorString.toLocal8Bit().data() << std::endl;
148 return QXmlDefaultHandler::fatalError(exception);
149 }