QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
qgsarcgisportalutils.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsarcgisportalutils.h
3 --------------------
4 begin : December 2020
5 copyright : (C) 2020 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
16
17#include "qgsarcgisrestquery.h"
18#include "qgsfeedback.h"
19
20#include <QString>
21#include <QUrl>
22#include <QUrlQuery>
23
24using namespace Qt::StringLiterals;
25
27 const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders, QgsFeedback *feedback, const QString &urlPrefix, bool forceRefresh
28)
29{
30 QString endPoint = communityUrl;
31 if ( endPoint.endsWith( '/' ) )
32 endPoint.chop( 1 );
33
34 if ( user.isEmpty() )
35 endPoint += "/self"_L1;
36 else
37 endPoint += u"/users/"_s + user;
38
39 QUrl queryUrl( endPoint );
40 QUrlQuery query( queryUrl );
41 query.addQueryItem( u"f"_s, u"json"_s );
42 queryUrl.setQuery( query );
43
44 return QgsArcGisRestQueryUtils::queryServiceJSON( queryUrl, authcfg, errorTitle, errorText, requestHeaders, feedback, urlPrefix, forceRefresh );
45}
46
48 const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QMap< QString, QVariant > &requestHeaders, QgsFeedback *feedback, const QString &urlPrefix
49)
50{
51 return QgsArcGisPortalUtils::retrieveUserInfo( communityUrl, user, authcfg, errorTitle, errorText, QgsHttpHeaders( requestHeaders ), feedback, urlPrefix );
52}
53
55 const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders, QgsFeedback *feedback, const QString &urlPrefix, bool forceRefresh
56)
57{
58 const QVariantMap info = retrieveUserInfo( communityUrl, user, authcfg, errorTitle, errorText, requestHeaders, feedback, urlPrefix, forceRefresh );
59 return info.value( u"groups"_s ).toList();
60}
61
63 const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QMap< QString, QVariant > &requestHeaders, QgsFeedback *feedback, const QString &urlPrefix
64)
65{
66 return QgsArcGisPortalUtils::retrieveUserGroups( communityUrl, user, authcfg, errorTitle, errorText, QgsHttpHeaders( requestHeaders ), feedback, urlPrefix );
67}
68
70 const QString &contentUrl,
71 const QString &groupId,
72 const QString &authcfg,
73 QString &errorTitle,
74 QString &errorText,
75 const QgsHttpHeaders &requestHeaders,
76 QgsFeedback *feedback,
77 int pageSize,
78 const QString &urlPrefix,
79 bool forceRefresh
80)
81{
82 QString endPoint = contentUrl;
83 if ( endPoint.endsWith( '/' ) )
84 endPoint.chop( 1 );
85
86 endPoint += u"/groups/"_s + groupId;
87
88 int start = 1;
89
90 QVariantList items;
91 while ( true )
92 {
93 QUrl queryUrl( endPoint );
94 QUrlQuery query( queryUrl );
95 query.addQueryItem( u"f"_s, u"json"_s );
96 query.addQueryItem( u"start"_s, QString::number( start ) );
97 query.addQueryItem( u"num"_s, QString::number( pageSize ) );
98 queryUrl.setQuery( query );
99
100 const QVariantMap response = QgsArcGisRestQueryUtils::queryServiceJSON( queryUrl, authcfg, errorTitle, errorText, requestHeaders, feedback, urlPrefix, forceRefresh );
101 if ( !errorText.isEmpty() )
102 return QVariantList();
103
104 items.append( response.value( u"items"_s ).toList() );
105
106 if ( feedback && feedback->isCanceled() )
107 return items;
108
109 const int total = response.value( u"total"_s ).toInt();
110 start += pageSize;
111 if ( total < start )
112 break;
113 }
114 return items;
115}
116
118 const QString &contentUrl,
119 const QString &groupId,
120 const QString &authcfg,
121 QString &errorTitle,
122 QString &errorText,
123 const QMap< QString, QVariant > &requestHeaders,
124 QgsFeedback *feedback,
125 int pageSize,
126 const QString &urlPrefix
127)
128{
129 return QgsArcGisPortalUtils::retrieveGroupContent( contentUrl, groupId, authcfg, errorTitle, errorText, QgsHttpHeaders( requestHeaders ), feedback, pageSize, urlPrefix );
130}
131
133 const QString &contentUrl,
134 const QString &groupId,
135 const QString &authcfg,
136 const QList<int> &itemTypes,
137 QString &errorTitle,
138 QString &errorText,
139 const QgsHttpHeaders &requestHeaders,
140 QgsFeedback *feedback,
141 int pageSize,
142 const QString &urlPrefix,
143 bool forceRefresh
144)
145{
146 const QVariantList items = retrieveGroupContent( contentUrl, groupId, authcfg, errorTitle, errorText, requestHeaders, feedback, pageSize, urlPrefix, forceRefresh );
147
148 // filter results to desired types
149 QVariantList result;
150 for ( const QVariant &item : items )
151 {
152 const QVariantMap itemDef = item.toMap();
153 const QString itemType = itemDef.value( u"type"_s ).toString();
154
155 for ( const int filterType : itemTypes )
156 {
157 if ( typeToString( static_cast< Qgis::ArcGisRestServiceType >( filterType ) ).compare( itemType, Qt::CaseInsensitive ) == 0 )
158 {
159 result << item;
160 break;
161 }
162 }
163 }
164 return result;
165}
166
168 const QString &contentUrl,
169 const QString &groupId,
170 const QString &authcfg,
171 const QList<int> &itemTypes,
172 QString &errorTitle,
173 QString &errorText,
174 const QMap< QString, QVariant > &requestHeaders,
175 QgsFeedback *feedback,
176 int pageSize,
177 const QString &urlPrefix
178)
179{
180 return QgsArcGisPortalUtils::retrieveGroupItemsOfType( contentUrl, groupId, authcfg, itemTypes, errorTitle, errorText, QgsHttpHeaders( requestHeaders ), feedback, pageSize, urlPrefix );
181}
182
183
184QString QgsArcGisPortalUtils::typeToString( Qgis::ArcGisRestServiceType type )
185{
186 // note -- these values are different in the Portal REST responses vs the standard ArcGIS REST responses!
187 switch ( type )
188 {
190 return u"Feature Service"_s;
192 return u"Map Service"_s;
194 return u"Image Service"_s;
196 return u"Scene Service"_s;
197
202 return QString();
203 }
205}
ArcGisRestServiceType
Available ArcGIS REST service types.
Definition qgis.h:4515
@ GeocodeServer
GeocodeServer.
Definition qgis.h:4521
@ SceneServer
SceneServer.
Definition qgis.h:4523
@ Unknown
Other unknown/unsupported type.
Definition qgis.h:4522
@ GlobeServer
GlobeServer.
Definition qgis.h:4519
@ ImageServer
ImageServer.
Definition qgis.h:4518
@ FeatureServer
FeatureServer.
Definition qgis.h:4516
static QVariantList retrieveGroupContent(const QString &contentUrl, const QString &groupId, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, int pageSize=100, const QString &urlPrefix=QString(), bool forceRefresh=false)
Retrieves JSON definitions for all items which belong the the specified groupId.
static QVariantList retrieveUserGroups(const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, const QString &urlPrefix=QString(), bool forceRefresh=false)
Retrieves JSON definitions for all groups which the specified user name is a member of.
static QVariantMap retrieveUserInfo(const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, const QString &urlPrefix=QString(), bool forceRefresh=false)
Retrieves JSON user info for the specified user name.
static QVariantList retrieveGroupItemsOfType(const QString &contentUrl, const QString &groupId, const QString &authcfg, const QList< int > &itemTypes, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, int pageSize=100, const QString &urlPrefix=QString(), bool forceRefresh=false)
Retrieves JSON definitions for all items which belong the the specified groupId.
static QVariantMap queryServiceJSON(const QUrl &url, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, const QString &urlPrefix=QString(), bool forceRefresh=false)
Performs a blocking request to a URL and returns the retrieved JSON content.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
bool isCanceled() const
Tells whether the operation has been canceled already.
Definition qgsfeedback.h:56
Implements simple HTTP header management.
#define BUILTIN_UNREACHABLE
Definition qgis.h:7540