~ubuntu-branches/ubuntu/saucy/merkaartor/saucy

« back to all changes in this revision

Viewing changes to NameFinder/xmlstreamreader.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Bernd Zeimetz
  • Date: 2009-09-13 00:52:12 UTC
  • mto: (1.2.7 upstream) (0.1.3 upstream) (3.1.7 sid)
  • mto: This revision was merged to the branch mainline in revision 10.
  • Revision ID: james.westby@ubuntu.com-20090913005212-pjecal8zxm07x0fj
Import upstream version 0.14+svnfixes~20090912

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************
2
 
 *   Copyright (C) 2008 by Łukasz Jernaś   *
3
 
 *   deejay1@srem.org   *
4
 
 *                                                                         *
5
 
 *   This program is free software; you can redistribute it and/or modify  *
6
 
 *   it under the terms of the GNU General Public License as published by  *
7
 
 *   the Free Software Foundation; either version 2 of the License, or     *
8
 
 *   (at your option) any later version.                                   *
9
 
 *                                                                         *
10
 
 *   This program is distributed in the hope that it will be useful,       *
11
 
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
 
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
 
 *   GNU General Public License for more details.                          *
14
 
 *                                                                         *
15
 
 *   You should have received a copy of the GNU General Public License     *
16
 
 *   along with this program; if not, write to the                         *
17
 
 *   Free Software Foundation, Inc.,                                       *
18
 
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
 
 ***************************************************************************/
20
 
#include "xmlstreamreader.h"
21
 
 
22
 
namespace NameFinder {
23
 
 
24
 
    XmlStreamReader::XmlStreamReader(QIODevice *device) {
25
 
        myDevice = device;
26
 
    }
27
 
 
28
 
 
29
 
    XmlStreamReader::~XmlStreamReader() {
30
 
    }
31
 
 
32
 
    bool XmlStreamReader::read() {
33
 
        myDevice->open(QIODevice::ReadOnly | QIODevice::Text);
34
 
        reader.setDevice(myDevice);
35
 
        reader.readNext();
36
 
        while (!reader.atEnd()) {
37
 
            if (reader.isStartElement()) {
38
 
                if (reader.name() == "searchresults") {
39
 
                    readSearchResultsElement();
40
 
                } else {
41
 
                    reader.raiseError(QObject::tr("Not a proper results stream!"));
42
 
                }
43
 
            } else {
44
 
                reader.readNext();
45
 
            }
46
 
        }
47
 
        myDevice->close();
48
 
// Implement error handling
49
 
        return true;
50
 
    }
51
 
    void XmlStreamReader::readSearchResultsElement() {
52
 
        reader.readNext();
53
 
        while (!reader.atEnd()) {
54
 
            if (reader.isEndElement()) {
55
 
                reader.readNext();
56
 
                break;
57
 
            }
58
 
 
59
 
            if (reader.isStartElement()) {
60
 
                if (reader.name() == "named") {
61
 
                    readNamedElement(&myResults);
62
 
                } else {
63
 
                    skipElement();
64
 
                }
65
 
            } else {
66
 
                reader.readNext();
67
 
            }
68
 
        }
69
 
 
70
 
    }
71
 
    void XmlStreamReader::readNamedElement(QList<NameFinderResult> *results) {
72
 
        NameFinderResult myResult;
73
 
        myResult.name = reader.attributes().value("name").toString();
74
 
        myResult.type = reader.attributes().value("type").toString();
75
 
        myResult.zoom = reader.attributes().value("zoom").toString().toInt();
76
 
        myResult.lon = reader.attributes().value("lon").toString().toDouble();
77
 
        myResult.lat = reader.attributes().value("lat").toString().toDouble();
78
 
        myResult.category = reader.attributes().value("category").toString();
79
 
        myResult.info = reader.attributes().value("info").toString();
80
 
 
81
 
        reader.readNext();
82
 
        while (!reader.atEnd()) {
83
 
            if (reader.isEndElement()) {
84
 
                reader.readNext();
85
 
                break;
86
 
            }
87
 
 
88
 
            if (reader.isStartElement()) {
89
 
                if (reader.name() == "named") {
90
 
                    readNamedElement(results);
91
 
                } else if (reader.name() == "description") {
92
 
                    readDescriptionElement(&myResult);
93
 
                } else if (reader.name() == "nearestplaces") {
94
 
                    readNearestPlacesElement(&myResult);
95
 
                } else {
96
 
                    skipElement();
97
 
                }
98
 
            } else {
99
 
                reader.readNext();
100
 
            }
101
 
 
102
 
        }
103
 
        results->append(myResult);
104
 
    }
105
 
 
106
 
    void XmlStreamReader::skipElement() {
107
 
        reader.readNext();
108
 
        while (!reader.atEnd()) {
109
 
            if (reader.isEndElement()) {
110
 
                reader.readNext();
111
 
                break;
112
 
            }
113
 
            if (reader.isStartElement()) {
114
 
                skipElement();
115
 
            } else {
116
 
                reader.readNext();
117
 
            }
118
 
        }
119
 
    }
120
 
 
121
 
    void XmlStreamReader::readDescriptionElement(NameFinderResult *result) {
122
 
        result->description = reader.readElementText();
123
 
        while (!reader.atEnd()) {
124
 
            if (reader.isEndElement()) {
125
 
                reader.readNext();
126
 
                break;
127
 
            } else {
128
 
                skipElement();
129
 
            }
130
 
        }
131
 
    }
132
 
 
133
 
    void XmlStreamReader::readNearestPlacesElement(NameFinderResult *result) {
134
 
        reader.readNext();
135
 
        while (!reader.atEnd()) {
136
 
            if (reader.isEndElement()) {
137
 
                reader.readNext();
138
 
                break;
139
 
            }
140
 
            if (reader.isStartElement()) {
141
 
                if (reader.name() == "named") {
142
 
                    QList<NameFinderResult> nearResults;
143
 
                    readNamedElement(&nearResults);
144
 
                    result->near = nearResults;
145
 
                } else {
146
 
                    skipElement();
147
 
                }
148
 
            } else {
149
 
                reader.readNext();
150
 
            }
151
 
        }
152
 
    }
153
 
 
154
 
    QList<NameFinderResult> XmlStreamReader::getResults() {
155
 
        return myResults;
156
 
    }
157
 
}