QGIS API Documentation  3.23.0-Master (22c16f2067)
qgswfs.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgswfs.cpp
3  -------------------------
4  begin : December 20 , 2016
5  copyright : (C) 2007 by Marco Hugentobler ( parts from qgswmshandler)
6  (C) 2012 by RenĂ©-Luc D'Hont ( parts from qgswmshandler)
7  (C) 2014 by Alessandro Pasotti ( parts from qgswmshandler)
8  (C) 2016 by David Marteau
9  email : marco dot hugentobler at karto dot baug dot ethz dot ch
10  a dot pasotti at itopen dot it
11  david dot marteau at 3liz dot com
12  ***************************************************************************/
13 
14 /***************************************************************************
15  * *
16  * This program is free software; you can redistribute it and/or modify *
17  * it under the terms of the GNU General Public License as published by *
18  * the Free Software Foundation; either version 2 of the License, or *
19  * (at your option) any later version. *
20  * *
21  ***************************************************************************/
22 
23 #include "qgsmodule.h"
24 #include "qgswfsutils.h"
25 #include "qgswfsgetcapabilities.h"
27 #include "qgswfsgetfeature.h"
29 #include "qgswfstransaction.h"
31 
32 #define QSTR_COMPARE( str, lit )\
33  (str.compare( QLatin1String( lit ), Qt::CaseInsensitive ) == 0)
34 
35 namespace QgsWfs
36 {
37 
44  class Service: public QgsService
45  {
46  public:
47 
52  Service( QgsServerInterface *serverIface )
53  : mServerIface( serverIface )
54  {}
55 
56  QString name() const override { return QStringLiteral( "WFS" ); }
57  QString version() const override { return implementationVersion(); }
58 
59  void executeRequest( const QgsServerRequest &request, QgsServerResponse &response,
60  const QgsProject *project ) override
61  {
62  const QgsWfsParameters params( QUrlQuery( request.url() ) );
63 
64  // Set the default version
65  QString versionString = params.version();
66  if ( versionString.isEmpty() )
67  {
68  versionString = version(); // defined in qgswfsutils.h
69  }
70 
71  // Get the request
72  const QString req = params.request();
73  if ( req.isEmpty() )
74  {
75  throw QgsServiceException( QStringLiteral( "OperationNotSupported" ),
76  QStringLiteral( "Please add or check the value of the REQUEST parameter" ), 501 );
77  }
78 
79  if ( QSTR_COMPARE( req, "GetCapabilities" ) )
80  {
81  // Supports WFS 1.0.0
82  if ( QSTR_COMPARE( versionString, "1.0.0" ) )
83  {
84  v1_0_0::writeGetCapabilities( mServerIface, project, versionString, request, response );
85  }
86  else
87  {
88  writeGetCapabilities( mServerIface, project, versionString, request, response );
89  }
90  }
91  else if ( QSTR_COMPARE( req, "GetFeature" ) )
92  {
93  writeGetFeature( mServerIface, project, versionString, request, response );
94  }
95  else if ( QSTR_COMPARE( req, "DescribeFeatureType" ) )
96  {
97  writeDescribeFeatureType( mServerIface, project, versionString, request, response );
98  }
99  else if ( QSTR_COMPARE( req, "Transaction" ) )
100  {
101  // Supports WFS 1.0.0
102  if ( QSTR_COMPARE( versionString, "1.0.0" ) )
103  {
104  v1_0_0::writeTransaction( mServerIface, project, versionString, request, response );
105  }
106  else
107  {
108  writeTransaction( mServerIface, project, versionString, request, response );
109  }
110  }
111  else
112  {
113  // Operation not supported
114  throw QgsServiceException( QStringLiteral( "OperationNotSupported" ),
115  QStringLiteral( "Request %1 is not supported" ).arg( req ), 501 );
116  }
117  }
118 
119  private:
120  QgsServerInterface *mServerIface = nullptr;
121  };
122 
123 
124 } // namespace QgsWfs
125 
133 {
134  public:
135  void registerSelf( QgsServiceRegistry &registry, QgsServerInterface *serverIface ) override
136  {
137  QgsDebugMsg( QStringLiteral( "WFSModule::registerSelf called" ) );
138  registry.registerService( new QgsWfs::Service( serverIface ) );
139  }
140 };
141 
142 
143 // Entry points
145 {
146  static QgsWfsModule module;
147  return &module;
148 }
150 {
151  // Nothing to do
152 }
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:101
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
virtual QString request() const
Returns REQUEST parameter as a string or an empty string if not defined.
virtual QString version() const
Returns VERSION parameter as a string or an empty string if not defined.
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
QgsServerResponse Class defining response interface passed to services QgsService::executeRequest() m...
Class defining the service module interface for QGIS server services.
QgsServiceRegistry Class defining the registry manager for QGIS server services.
void registerService(QgsService *service)
Register a service by its name and version.
QgsService Class defining interfaces for QGIS server services.
Definition: qgsservice.h:40
Module specialized for WFS service.
Definition: qgswfs.cpp:133
void registerSelf(QgsServiceRegistry &registry, QgsServerInterface *serverIface) override
Asks the module to register all provided services.
Definition: qgswfs.cpp:135
Exception class for WFS service exceptions.
Provides an interface to retrieve and manipulate WFS parameters received from the client.
OGC web service specialized for WFS.
Definition: qgswfs.cpp:45
Service(QgsServerInterface *serverIface)
Constructor for WFS service.
Definition: qgswfs.cpp:52
void executeRequest(const QgsServerRequest &request, QgsServerResponse &response, const QgsProject *project) override
Execute the requests and set result in QgsServerRequest.
Definition: qgswfs.cpp:59
QString name() const override
Definition: qgswfs.cpp:56
QString version() const override
Definition: qgswfs.cpp:57
void writeGetCapabilities(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS GetCapabilities response.
void writeTransaction(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS transaction response.
WMS implementation.
Definition: qgswfs.cpp:36
QString implementationVersion()
Returns the highest version supported by this implementation.
Definition: qgswfsutils.cpp:32
void writeDescribeFeatureType(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS GetCapabilities response.
void writeTransaction(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS transaction response.
void writeGetFeature(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS GetFeature response.
void writeGetCapabilities(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS GetCapabilities response.
#define QGISEXTERN
Definition: qgis.h:2001
#define QgsDebugMsg(str)
Definition: qgslogger.h:38
#define QSTR_COMPARE(str, lit)
Definition: qgswfs.cpp:32
QGISEXTERN void QGS_ServiceModule_Exit(QgsServiceModule *)
Definition: qgswfs.cpp:149
QGISEXTERN QgsServiceModule * QGS_ServiceModule_Init()
Definition: qgswfs.cpp:144