35 #ifdef HAVE_SERVER_PYTHON_PLUGINS
39 const QDomDocument *capabilitiesDocument =
nullptr;
41 #ifdef HAVE_SERVER_PYTHON_PLUGINS
43 if ( cacheManager && cacheManager->
getCachedDocument( &doc, project, request, accessControl ) )
45 capabilitiesDocument = &doc;
55 capabilitiesDocument = &doc;
59 capabilitiesDocument = &doc;
61 response.
setHeader( QStringLiteral(
"Content-Type" ), QStringLiteral(
"text/xml; charset=utf-8" ) );
62 response.
write( capabilitiesDocument->toByteArray() );
74 QDomElement wcsCapabilitiesElement = doc.createElement( QStringLiteral(
"WCS_Capabilities" ) );
75 wcsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns" ),
WCS_NAMESPACE );
76 wcsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:xsi" ), QStringLiteral(
"http://www.w3.org/2001/XMLSchema-instance" ) );
77 wcsCapabilitiesElement.setAttribute( QStringLiteral(
"xsi:schemaLocation" ),
WCS_NAMESPACE +
" http://schemas.opengis.net/wcs/1.0.0/wcsCapabilities.xsd" );
78 wcsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:gml" ),
GML_NAMESPACE );
79 wcsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:xlink" ), QStringLiteral(
"http://www.w3.org/1999/xlink" ) );
81 wcsCapabilitiesElement.setAttribute( QStringLiteral(
"updateSequence" ), QStringLiteral(
"0" ) );
82 doc.appendChild( wcsCapabilitiesElement );
88 QDomElement capabilityElement = doc.createElement( QStringLiteral(
"Capability" ) );
89 wcsCapabilitiesElement.appendChild( capabilityElement );
92 QDomElement requestElement = doc.createElement( QStringLiteral(
"Request" ) );
93 capabilityElement.appendChild( requestElement );
96 QDomElement getCapabilitiesElement = doc.createElement( QStringLiteral(
"GetCapabilities" ) );
97 requestElement.appendChild( getCapabilitiesElement );
99 QDomElement dcpTypeElement = doc.createElement( QStringLiteral(
"DCPType" ) );
100 getCapabilitiesElement.appendChild( dcpTypeElement );
101 QDomElement httpElement = doc.createElement( QStringLiteral(
"HTTP" ) );
102 dcpTypeElement.appendChild( httpElement );
105 QString hrefString =
serviceUrl( request, project );
107 QDomElement getElement = doc.createElement( QStringLiteral(
"Get" ) );
108 httpElement.appendChild( getElement );
109 QDomElement onlineResourceElement = doc.createElement( QStringLiteral(
"OnlineResource" ) );
110 onlineResourceElement.setAttribute( QStringLiteral(
"xlink:type" ), QStringLiteral(
"simple" ) );
111 onlineResourceElement.setAttribute( QStringLiteral(
"xlink:href" ), hrefString );
112 getElement.appendChild( onlineResourceElement );
114 QDomElement getCapabilitiesDhcTypePostElement = dcpTypeElement.cloneNode().toElement();
115 getCapabilitiesDhcTypePostElement.firstChild().firstChild().toElement().setTagName( QStringLiteral(
"Post" ) );
116 getCapabilitiesElement.appendChild( getCapabilitiesDhcTypePostElement );
118 QDomElement describeCoverageElement = getCapabilitiesElement.cloneNode().toElement();
119 describeCoverageElement.setTagName( QStringLiteral(
"DescribeCoverage" ) );
120 requestElement.appendChild( describeCoverageElement );
122 QDomElement getCoverageElement = getCapabilitiesElement.cloneNode().toElement();
123 getCoverageElement.setTagName( QStringLiteral(
"GetCoverage" ) );
124 requestElement.appendChild( getCoverageElement );
136 QDomElement serviceElem = doc.createElement( QStringLiteral(
"Service" ) );
139 QDomElement nameElem = doc.createElement( QStringLiteral(
"name" ) );
140 QDomText nameText = doc.createTextNode(
"WCS" );
141 nameElem.appendChild( nameText );
142 serviceElem.appendChild( nameElem );
145 if ( !title.isEmpty() )
147 QDomElement titleElem = doc.createElement( QStringLiteral(
"label" ) );
148 QDomText titleText = doc.createTextNode( title );
149 titleElem.appendChild( titleText );
150 serviceElem.appendChild( titleElem );
154 if ( !
abstract.isEmpty() )
156 QDomElement abstractElem = doc.createElement( QStringLiteral(
"description" ) );
157 QDomText abstractText = doc.createCDATASection(
abstract );
158 abstractElem.appendChild( abstractText );
159 serviceElem.appendChild( abstractElem );
163 if ( !keywords.isEmpty() )
165 QDomElement keywordsElem = doc.createElement( QStringLiteral(
"keywords" ) );
166 for (
int i = 0; i < keywords.size(); ++i )
168 QDomElement keywordElem = doc.createElement( QStringLiteral(
"keyword" ) );
169 QDomText keywordText = doc.createTextNode( keywords.at( i ) );
170 keywordElem.appendChild( keywordText );
171 keywordsElem.appendChild( keywordElem );
173 serviceElem.appendChild( keywordsElem );
183 if ( !contactPerson.isEmpty() ||
184 !contactOrganization.isEmpty() ||
185 !contactPosition.isEmpty() ||
186 !contactMail.isEmpty() ||
187 !contactPhone.isEmpty() ||
188 !onlineResource.isEmpty() )
190 QDomElement responsiblePartyElem = doc.createElement( QStringLiteral(
"responsibleParty" ) );
191 if ( !contactPerson.isEmpty() )
193 QDomElement contactPersonElem = doc.createElement( QStringLiteral(
"individualName" ) );
194 QDomText contactPersonText = doc.createTextNode( contactPerson );
195 contactPersonElem.appendChild( contactPersonText );
196 responsiblePartyElem.appendChild( contactPersonElem );
198 if ( !contactOrganization.isEmpty() )
200 QDomElement contactOrganizationElem = doc.createElement( QStringLiteral(
"organisationName" ) );
201 QDomText contactOrganizationText = doc.createTextNode( contactOrganization );
202 contactOrganizationElem.appendChild( contactOrganizationText );
203 responsiblePartyElem.appendChild( contactOrganizationElem );
205 if ( !contactPosition.isEmpty() )
207 QDomElement contactPositionElem = doc.createElement( QStringLiteral(
"positionName" ) );
208 QDomText contactPositionText = doc.createTextNode( contactPosition );
209 contactPositionElem.appendChild( contactPositionText );
210 responsiblePartyElem.appendChild( contactPositionElem );
212 if ( !contactMail.isEmpty() ||
213 !contactPhone.isEmpty() ||
214 !onlineResource.isEmpty() )
216 QDomElement contactInfoElem = doc.createElement( QStringLiteral(
"contactInfo" ) );
217 if ( !contactMail.isEmpty() )
219 QDomElement contactAddressElem = doc.createElement( QStringLiteral(
"address" ) );
220 QDomElement contactAddressMailElem = doc.createElement( QStringLiteral(
"electronicMailAddress" ) );
221 QDomText contactAddressMailText = doc.createTextNode( contactMail );
222 contactAddressMailElem.appendChild( contactAddressMailText );
223 contactAddressElem.appendChild( contactAddressMailElem );
224 contactInfoElem.appendChild( contactAddressElem );
226 if ( !contactPhone.isEmpty() )
228 QDomElement contactPhoneElem = doc.createElement( QStringLiteral(
"phone" ) );
229 QDomElement contactVoiceElem = doc.createElement( QStringLiteral(
"voice" ) );
230 QDomText contactVoiceText = doc.createTextNode( contactPhone );
231 contactVoiceElem.appendChild( contactVoiceText );
232 contactPhoneElem.appendChild( contactVoiceElem );
233 contactInfoElem.appendChild( contactPhoneElem );
235 if ( !onlineResource.isEmpty() )
237 QDomElement onlineResourceElem = doc.createElement( QStringLiteral(
"onlineResource" ) );
238 onlineResourceElem.setAttribute( QStringLiteral(
"xmlns:xlink" ), QStringLiteral(
"http://www.w3.org/1999/xlink" ) );
239 onlineResourceElem.setAttribute( QStringLiteral(
"xlink:type" ), QStringLiteral(
"simple" ) );
240 onlineResourceElem.setAttribute( QStringLiteral(
"xlink:href" ), onlineResource );
241 contactInfoElem.appendChild( onlineResourceElem );
243 responsiblePartyElem.appendChild( contactInfoElem );
245 serviceElem.appendChild( responsiblePartyElem );
248 QDomElement feesElem = doc.createElement( QStringLiteral(
"fees" ) );
249 QDomText feesText = doc.createTextNode( QStringLiteral(
"None" ) );
251 if ( !fees.isEmpty() )
253 feesText = doc.createTextNode( fees );
255 feesElem.appendChild( feesText );
256 serviceElem.appendChild( feesElem );
258 QDomElement accessConstraintsElem = doc.createElement( QStringLiteral(
"accessConstraints" ) );
259 QDomText accessConstraintsText = doc.createTextNode( QStringLiteral(
"None" ) );
261 if ( !accessConstraints.isEmpty() )
263 accessConstraintsText = doc.createTextNode( accessConstraints );
265 accessConstraintsElem.appendChild( accessConstraintsText );
266 serviceElem.appendChild( accessConstraintsElem );
274 #ifdef HAVE_SERVER_PYTHON_PLUGINS
282 QDomElement contentMetadataElement = doc.createElement( QStringLiteral(
"ContentMetadata" ) );
285 for (
int i = 0; i < wcsLayersId.size(); ++i )
296 #ifdef HAVE_SERVER_PYTHON_PLUGINS
306 contentMetadataElement.appendChild( layerElem );
310 return contentMetadataElement;
A helper class that centralizes restrictions given by all the access control filter plugins.
bool layerReadPermission(const QgsMapLayer *layer) const
Returns the layer read right.
Base class for all map layer types.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
Represents a raster layer.
A helper class that centralizes caches accesses given by all the server cache filter plugins.
bool setCachedDocument(const QDomDocument *doc, const QgsProject *project, const QgsServerRequest &request, QgsAccessControl *accessControl) const
Updates or inserts the document in cache like capabilities.
bool getCachedDocument(QDomDocument *doc, const QgsProject *project, const QgsServerRequest &request, QgsAccessControl *accessControl) const
Returns cached document (or 0 if document not in cache) like capabilities.
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
virtual QgsAccessControl * accessControls() const =0
Gets the registered access control filters.
virtual QgsServerCacheManager * cacheManager() const =0
Gets the registered server cache filters.
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
QgsServerResponse Class defining response interface passed to services QgsService::executeRequest() m...
virtual void write(const QString &data)
Write string This is a convenient method that will write directly to the underlying I/O device.
virtual void setHeader(const QString &key, const QString &value)=0
Set Header entry Add Header entry to the response Note that it is usually an error to set Header afte...
SERVER_EXPORT QString owsServiceAccessConstraints(const QgsProject &project)
Returns the owsService access constraints defined in project.
SERVER_EXPORT QString owsServiceOnlineResource(const QgsProject &project)
Returns the owsService online resource defined in project.
SERVER_EXPORT QString owsServiceFees(const QgsProject &project)
Returns the owsService fees defined in project.
SERVER_EXPORT QStringList owsServiceKeywords(const QgsProject &project)
Returns the owsService keywords defined in project.
SERVER_EXPORT QString owsServiceContactPosition(const QgsProject &project)
Returns the owsService contact position defined in project.
SERVER_EXPORT QString owsServiceContactOrganization(const QgsProject &project)
Returns the owsService contact organization defined in project.
SERVER_EXPORT QString owsServiceTitle(const QgsProject &project)
Returns the owsService title defined in project.
SERVER_EXPORT QString owsServiceContactMail(const QgsProject &project)
Returns the owsService contact mail defined in project.
SERVER_EXPORT QString owsServiceAbstract(const QgsProject &project)
Returns the owsService abstract defined in project.
SERVER_EXPORT QStringList wcsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WCS.
SERVER_EXPORT QString owsServiceContactPhone(const QgsProject &project)
Returns the owsService contact phone defined in project.
SERVER_EXPORT QString owsServiceContactPerson(const QgsProject &project)
Returns the owsService contact person defined in project.
QDomDocument createGetCapabilitiesDocument(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request)
Create get capabilities document.
QDomElement getCoverageOffering(QDomDocument &doc, const QgsRasterLayer *layer, const QgsProject *project, bool brief)
CoverageOffering or CoverageOfferingBrief element.
QString serviceUrl(const QgsServerRequest &request, const QgsProject *project)
Service URL string.
QString implementationVersion()
Returns the highest version supported by this implementation.
const QString WCS_NAMESPACE
const QString GML_NAMESPACE
QDomElement getServiceElement(QDomDocument &doc, const QgsProject *project)
Create Service element for get capabilities document.
QDomElement getContentMetadataElement(QDomDocument &doc, QgsServerInterface *serverIface, const QgsProject *project)
Create ContentMetadata element for get capabilities document.
void writeGetCapabilities(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WCS GetCapabilities response.