diff --git a/python/server/qgsserverrequest.sip b/python/server/qgsserverrequest.sip index 5715f3040fe..884f05b8c0f 100644 --- a/python/server/qgsserverrequest.sip +++ b/python/server/qgsserverrequest.sip @@ -30,7 +30,8 @@ class QgsServerRequest %End public: - enum Method { + enum Method + { HeadMethod, PutMethod, GetMethod, PostMethod, DeleteMethod }; @@ -61,12 +62,17 @@ class QgsServerRequest /** * @return the request url */ - virtual QUrl url() const; + QUrl url() const; /** * @return the request method */ - virtual Method method() const; + Method method() const; + + /** + * * @return query params + * */ + QMap parameters() const; /** * Return post/put data diff --git a/src/server/qgsserverrequest.cpp b/src/server/qgsserverrequest.cpp index c66cedf00a0..39020e4e42b 100644 --- a/src/server/qgsserverrequest.cpp +++ b/src/server/qgsserverrequest.cpp @@ -18,7 +18,7 @@ ***************************************************************************/ #include "qgsserverrequest.h" - +#include QgsServerRequest::QgsServerRequest( const QString& url, Method method ) : mUrl( url ) @@ -56,6 +56,23 @@ QgsServerRequest::Method QgsServerRequest::method() const return mMethod; } +QMap QgsServerRequest::parameters() const +{ + // Lazy build of the parameter map + if ( mParams.isEmpty() && mUrl.hasQuery() ) + { + typedef QPair pair_t; + + QUrlQuery query( mUrl ); + QList items = query.queryItems(); + Q_FOREACH ( const pair_t& pair, items ) + { + mParams.insert( pair.first.toUpper(), pair.second ); + } + } + return mParams; +} + QByteArray QgsServerRequest::data() const { return QByteArray(); diff --git a/src/server/qgsserverrequest.h b/src/server/qgsserverrequest.h index d3c05e0ef7e..1d7058ae543 100644 --- a/src/server/qgsserverrequest.h +++ b/src/server/qgsserverrequest.h @@ -20,6 +20,7 @@ #define QGSSERVERREQUEST_H #include +#include /** * \ingroup server @@ -58,20 +59,21 @@ class SERVER_EXPORT QgsServerRequest //! destructor virtual ~QgsServerRequest(); - /** - * @return the value of the header field for that request - */ - virtual QString getHeader( const QString& name ) const; - /** * @return the request url */ - virtual QUrl url() const; + QUrl url() const; /** * @return the request method */ - virtual Method method() const; + Method method() const; + + /** + * Return a map of query parameters with keys converted + * to uppercase + */ + QMap parameters() const; /** * Return post/put data @@ -80,10 +82,19 @@ class SERVER_EXPORT QgsServerRequest */ virtual QByteArray data() const; - protected: - QUrl mUrl; - Method mMethod; + /** + * @return the value of the header field for that request + */ + virtual QString getHeader( const QString& name ) const; + private: + QUrl mUrl; + Method mMethod; + // We mark as mutable in order + // to support lazy initialization + // Use QMap here because it will be faster for small + // number of elements + mutable QMap mParams; }; #endif diff --git a/src/server/qgsserviceregistry.h b/src/server/qgsserviceregistry.h index 33977557615..881f5264fbe 100644 --- a/src/server/qgsserviceregistry.h +++ b/src/server/qgsserviceregistry.h @@ -98,6 +98,8 @@ class SERVER_EXPORT QgsServiceRegistry void cleanUp(); private: + // XXX consider using QMap because of the few numbers of + // elements to handle typedef QHash > ServiceTable; typedef QHash > VersionTable;