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 &parameters)
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