1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtLocation module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL3$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or later as published by the Free
28 ** Software Foundation and appearing in the file LICENSE.GPL included in
29 ** the packaging of this file. Please review the following information to
30 ** ensure the GNU General Public License version 2.0 requirements will be
31 ** met: http://www.gnu.org/licenses/gpl-2.0.html.
32 **
33 ** $QT_END_LICENSE$
34 **
35 ****************************************************************************/
36
37 #include "qplacematchrequest.h"
38
39 #include <QtCore/QSharedData>
40 #include <QtCore/QList>
41 #include <QtLocation/QPlaceResult>
42
43 QT_BEGIN_NAMESPACE
44
45 class QPlaceMatchRequestPrivate : public QSharedData
46 {
47 public:
48 QPlaceMatchRequestPrivate();
49 QPlaceMatchRequestPrivate(const QPlaceMatchRequestPrivate &other);
50 ~QPlaceMatchRequestPrivate();
51
52 QPlaceMatchRequestPrivate &operator=(const QPlaceMatchRequestPrivate &other);
53 bool operator==(const QPlaceMatchRequestPrivate &other) const;
54
55 void clear();
56
57 QList<QPlace> places;
58 QVariantMap parameters;
59 };
60
QPlaceMatchRequestPrivate()61 QPlaceMatchRequestPrivate::QPlaceMatchRequestPrivate()
62 : QSharedData()
63 {
64 }
65
QPlaceMatchRequestPrivate(const QPlaceMatchRequestPrivate & other)66 QPlaceMatchRequestPrivate::QPlaceMatchRequestPrivate(const QPlaceMatchRequestPrivate &other)
67 : QSharedData(other),
68 places(other.places),
69 parameters(other.parameters)
70 {
71 }
72
~QPlaceMatchRequestPrivate()73 QPlaceMatchRequestPrivate::~QPlaceMatchRequestPrivate()
74 {
75 }
76
operator =(const QPlaceMatchRequestPrivate & other)77 QPlaceMatchRequestPrivate &QPlaceMatchRequestPrivate::operator=(const QPlaceMatchRequestPrivate &other)
78 {
79 if (this != &other) {
80 places = other.places;
81 parameters = other.parameters;
82 }
83
84 return *this;
85 }
86
operator ==(const QPlaceMatchRequestPrivate & other) const87 bool QPlaceMatchRequestPrivate::operator==(const QPlaceMatchRequestPrivate &other) const
88 {
89 return (places == other.places
90 && parameters == other.parameters);
91 }
92
clear()93 void QPlaceMatchRequestPrivate::clear()
94 {
95 places.clear();
96 parameters.clear();
97 }
98
99 /*!
100 \class QPlaceMatchRequest
101 \inmodule QtLocation
102 \ingroup QtLocation-places
103 \ingroup QtLocation-places-requests
104 \since 5.6
105
106 \brief The QPlaceMatchRequest class is used to find places from one manager that match those from another. It represents
107 a set of request parameters.
108
109 Places from another manager that may have corresponding/matching places in the current manager are assigned using setPlaces() or setResults().
110 A set of further parameters are specified which determines the criteria for matching.
111
112 The typical key for matching is the QPlaceMatchRequest::AlternativeId, the value is an alternative identifier attribute type of the format
113 x_id_<provider name> for example x_id_here. The provider name is name supplied to the QGeoServiceProvider instance.
114
115 See \l {Matching places between managers} for an example on how to use a match request.
116
117 \sa QPlaceMatchReply, QPlaceManager
118 */
119
120 /*!
121 \variable QPlaceMatchRequest::AlternativeId
122 The key to specify that matching is to be accomplished via an alternative place identifier.
123 */
124 const QString QPlaceMatchRequest::AlternativeId(QLatin1String("alternativeId"));
125
126 /*!
127 Default constructor. Constructs a new request object.
128 */
QPlaceMatchRequest()129 QPlaceMatchRequest::QPlaceMatchRequest()
130 : d_ptr(new QPlaceMatchRequestPrivate())
131 {
132 }
133
134 /*!
135 Constructs a copy of \a other.
136 */
QPlaceMatchRequest(const QPlaceMatchRequest & other)137 QPlaceMatchRequest::QPlaceMatchRequest(const QPlaceMatchRequest &other)
138 : d_ptr(other.d_ptr)
139 {
140 }
141
142 /*!
143 Destroys the request object.
144 */
~QPlaceMatchRequest()145 QPlaceMatchRequest::~QPlaceMatchRequest()
146 {
147 }
148
149 /*!
150 Assigns \a other to this search request and returns a reference
151 to this match request.
152 */
operator =(const QPlaceMatchRequest & other)153 QPlaceMatchRequest &QPlaceMatchRequest::operator= (const QPlaceMatchRequest & other)
154 {
155 if (this == &other)
156 return *this;
157 d_ptr = other.d_ptr;
158 return *this;
159 }
160
161 /*!
162 Returns true if \a other is equal to this match request,
163 otherwise returns false.
164 */
operator ==(const QPlaceMatchRequest & other) const165 bool QPlaceMatchRequest::operator== (const QPlaceMatchRequest &other) const
166 {
167 Q_D(const QPlaceMatchRequest);
168 return *d == *other.d_func();
169 }
170
171 /*!
172 Returns true if \a other is not equal to this match request,
173 otherwise returns false.
174 */
operator !=(const QPlaceMatchRequest & other) const175 bool QPlaceMatchRequest::operator!= (const QPlaceMatchRequest &other) const
176 {
177 Q_D(const QPlaceMatchRequest);
178 return !(*d == *other.d_func());
179 }
180
181
182 /*!
183 Returns a list of places which are to be matched.
184 */
places() const185 QList<QPlace> QPlaceMatchRequest::places() const
186 {
187 Q_D(const QPlaceMatchRequest);
188 return d->places;
189 }
190
191 /*!
192 Sets a list of \a places which are to be matched.
193
194 \sa setResults()
195 */
setPlaces(const QList<QPlace> places)196 void QPlaceMatchRequest::setPlaces(const QList<QPlace> places)
197 {
198 Q_D(QPlaceMatchRequest);
199 d->places = places;
200 }
201
202 /*!
203 Convenience function which uses a set of search \a results to set
204 the places which should be matched.
205
206 \sa setPlaces()
207 */
setResults(const QList<QPlaceSearchResult> & results)208 void QPlaceMatchRequest::setResults(const QList<QPlaceSearchResult> &results)
209 {
210 Q_D(QPlaceMatchRequest);
211 QList<QPlace> places;
212 foreach (const QPlaceSearchResult &result, results) {
213 if (result.type() == QPlaceSearchResult::PlaceResult) {
214 QPlaceResult placeResult = result;
215 places.append(placeResult.place());
216 }
217 }
218
219 d->places = places;
220 }
221
222 /*!
223 Returns the parameters for matching places.
224 */
parameters() const225 QVariantMap QPlaceMatchRequest::parameters() const
226 {
227 Q_D(const QPlaceMatchRequest);
228 return d->parameters;
229 }
230
231 /*!
232 Sets the \a parameters for matching places.
233 */
setParameters(const QVariantMap & parameters)234 void QPlaceMatchRequest::setParameters(const QVariantMap ¶meters)
235 {
236 Q_D(QPlaceMatchRequest);
237 d->parameters = parameters;
238 }
239
240 /*!
241 Clears the match request.
242 */
clear()243 void QPlaceMatchRequest::clear()
244 {
245 Q_D(QPlaceMatchRequest);
246 d->clear();
247 }
248
d_func()249 inline QPlaceMatchRequestPrivate *QPlaceMatchRequest::d_func()
250 {
251 return static_cast<QPlaceMatchRequestPrivate *>(d_ptr.data());
252 }
253
d_func() const254 inline const QPlaceMatchRequestPrivate *QPlaceMatchRequest::d_func() const
255 {
256 return static_cast<const QPlaceMatchRequestPrivate *>(d_ptr.constData());
257 }
258
259 QT_END_NAMESPACE
260