Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Merge pull request #2092 from elpaso/server-refactoring-3
[SERVER] Server refactoring and Python bindings/tests
- Loading branch information
Showing
52 changed files
with
2,630 additions
and
488 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/*************************************************************************** | ||
qgsconfigcache.sip | ||
------------------- | ||
begin : 2015-05-19 | ||
copyright : (C) 2015 by Alessandro Pasotti | ||
email : a dot pasotti at itopen dot it | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
/** | ||
* \class QgsConfigCache | ||
* \brief A cache for xml documents (by configuration file path) | ||
*/ | ||
|
||
|
||
class QgsConfigCache: QObject | ||
{ | ||
%TypeHeaderCode | ||
#include "qgsconfigcache.h" | ||
%End | ||
public: | ||
static QgsConfigCache* instance(); | ||
~QgsConfigCache(); | ||
|
||
QgsServerProjectParser* serverConfiguration( const QString& filePath ); | ||
QgsWCSProjectParser* wcsConfiguration( const QString& filePath ); | ||
QgsWFSProjectParser* wfsConfiguration( const QString& filePath ); | ||
QgsWMSConfigParser* wmsConfiguration( const QString& filePath, const QMap<QString, QString>& parameterMap = QMap< QString, QString >() ); | ||
|
||
private: | ||
QgsConfigCache(); | ||
|
||
}; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/*************************************************************************** | ||
qgsserver.sip | ||
Qgis Mapserver | ||
------------------- | ||
begin : 2015-05-21 | ||
copyright : (C) 2015 by Alessandro Pasotti | ||
email : a dot pasotti at itopen dot it | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
|
||
|
||
class QgsServer | ||
{ | ||
%TypeHeaderCode | ||
#include "qgsserver.h" | ||
%End | ||
|
||
public: | ||
QgsServer(); | ||
~QgsServer(); | ||
// Original init for the fcgi application: | ||
//void init( int argc, char* argv[] ); | ||
// init for python bindings: | ||
void init( ); | ||
QByteArray handleRequest( const QString queryString = QString( ) ); | ||
// TODO: if HAVE_SERVER_PYTHON | ||
QByteArray handleRequest( const QString queryString, | ||
const bool returnHeaders, | ||
const bool returnBody ); | ||
QByteArray handleRequestGetBody( const QString queryString = QString( ) ); | ||
QByteArray handleRequestGetHeaders( const QString queryString = QString( ) ); | ||
//QgsServerContext& serverContext ( ) /KeepReference/; | ||
%If (HAVE_SERVER_PYTHON_PLUGINS) | ||
QgsServerInterface* serverInterface( ); | ||
// Needs %MethodCode | ||
//QMultiMap<int, QgsServerFilter*> pluginFilters( ); | ||
%End | ||
|
||
// The following is needed because otherwise SIP fails trying to create copy | ||
// ctor | ||
private: | ||
QgsServer( const QgsServer& ); | ||
QgsServer & operator=( const QgsServer& ); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
/*************************************************************************** | ||
qgsserverprojectparser.sip | ||
------------------------ | ||
begin : March 2, 2015 | ||
copyright : (C) 2015 by Alessandro Pasotti | ||
email : a dot pasotti at itopen dot it | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
|
||
class QgsServerProjectParser | ||
{ | ||
%TypeHeaderCode | ||
#include "qgsserverprojectparser.h" | ||
|
||
%End | ||
public: | ||
/**Takes ownership of the document*/ | ||
QgsServerProjectParser( QDomDocument* xmlDoc, const QString& filePath ); | ||
|
||
QString projectPath(); | ||
|
||
const QDomDocument* xmlDocument(); | ||
|
||
/**Returns project layers by id*/ | ||
void projectLayerMap( QMap<QString, QgsMapLayer*>& layerMap ) const; | ||
|
||
/**Converts a (possibly relative) path to absolute*/ | ||
QString convertToAbsolutePath( const QString& file ) const; | ||
|
||
/**Creates a maplayer object from <maplayer> element. The layer cash owns the maplayer, so don't delete it | ||
@return the maplayer or 0 in case of error*/ | ||
QgsMapLayer* createLayerFromElement( const QDomElement& elem, bool useCache = true ) const; | ||
|
||
QgsMapLayer* mapLayerFromLayerId( const QString& lId, bool useCache = true ) const; | ||
|
||
/**Returns the layer id under a <legendlayer> tag in the QGIS projectfile*/ | ||
QString layerIdFromLegendLayer( const QDomElement& legendLayer ) const; | ||
|
||
/**@param considerMapExtent Take user-defined map extent instead of data-calculated extent if present in project file*/ | ||
void combineExtentAndCrsOfGroupChildren( QDomElement& groupElement, QDomDocument& doc, bool considerMapExtent = false ) const; | ||
|
||
void addLayerProjectSettings( QDomElement& layerElem, QDomDocument& doc, QgsMapLayer* currentLayer ) const; | ||
|
||
QgsRectangle layerBoundingBoxInProjectCRS( const QDomElement& layerElem, const QDomDocument &doc ) const; | ||
|
||
bool crsSetForLayer( const QDomElement& layerElement, QSet<QString> &crsSet ) const; | ||
|
||
const QgsCoordinateReferenceSystem& projectCRS() const; | ||
|
||
QgsRectangle mapRectangle() const; | ||
|
||
QStringList supportedOutputCrsList() const; | ||
|
||
const QList<QDomElement>& projectLayerElements() const; | ||
|
||
const QList<QDomElement>& legendGroupElements() const; | ||
|
||
QString projectTitle() const; | ||
|
||
QDomElement legendElem() const; | ||
|
||
QDomElement propertiesElem() const; | ||
|
||
const QSet<QString>& restrictedLayers() const; | ||
bool useLayerIDs() const; | ||
|
||
const QHash< QString, QDomElement >& projectLayerElementsByName() const; | ||
const QHash< QString, QDomElement >& projectLayerElementsById() const; | ||
|
||
// SIP doesn't like QMap: | ||
// void layerFromLegendLayer( const QDomElement& legendLayerElem, QMap< int, QgsMapLayer*>& layers, bool useCache = true ) const; | ||
|
||
QStringList wfsLayerNames() const; | ||
QStringList wcsLayerNames() const; | ||
|
||
QDomElement firstComposerLegendElement() const; | ||
|
||
QList<QDomElement> publishedComposerElements() const; | ||
|
||
//QList< QPair< QString, QgsLayerCoordinateTransform > > layerCoordinateTransforms() const; | ||
|
||
/**Returns the text of the <layername> element for a layer element | ||
@return id or a null string in case of error*/ | ||
QString layerName( const QDomElement& layerElem ) const; | ||
|
||
QString serviceUrl() const; | ||
QString wfsServiceUrl() const; | ||
QString wcsServiceUrl() const; | ||
|
||
QStringList wfsLayers() const; | ||
QStringList wcsLayers() const; | ||
|
||
void addJoinLayersForElement( const QDomElement& layerElem ) const; | ||
|
||
void addValueRelationLayersForLayer( const QgsVectorLayer *vl ) const; | ||
/**Add layers which are necessary for the evaluation of the expression function 'getFeature( layer, attributField, value)'*/ | ||
void addGetFeatureLayers( const QDomElement& layerElem ) const; | ||
|
||
/**Returns the text of the <id> element for a layer element | ||
@return id or a null string in case of error*/ | ||
QString layerId( const QDomElement& layerElem ) const; | ||
|
||
QgsRectangle projectExtent() const; | ||
|
||
int numberOfLayers() const; | ||
|
||
bool updateLegendDrawingOrder() const; | ||
|
||
void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc, const QString& service, bool sia2045 = false ) const; | ||
|
||
}; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/*************************************************************************** | ||
qgswcsserver.sip | ||
------------------- | ||
begin : May 2, 2015 | ||
copyright : (C) 2015 by Alessandro Pasotti | ||
email : a dot pasotti at itopen dot it | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
#ifndef QGSWCSSERVER_H | ||
#define QGSWCSSERVER_H | ||
|
||
#include <QDomDocument> | ||
#include <QMap> | ||
#include <QString> | ||
#include <map> | ||
#include "qgis.h" | ||
#include "qgsowsserver.h" | ||
|
||
class QgsWCSProjectParser; | ||
class QgsRequestHandler; | ||
|
||
/**This class handles all the wcs server requests. The parameters and values have to be passed in the form of | ||
a map<QString, QString>. This map is usually generated by a subclass of QgsWMSRequestHandler, which makes QgsWCSServer | ||
independent from any server side technology*/ | ||
|
||
class QgsWCSServer: public QgsOWSServer | ||
{ | ||
public: | ||
/**Constructor. Takes parameter map and a pointer to a renderer object (does not take ownership)*/ | ||
QgsWCSServer( const QString& configFilePath, QMap<QString, QString>& parameters, QgsWCSProjectParser* pp, | ||
QgsRequestHandler* rh ); | ||
~QgsWCSServer(); | ||
|
||
void executeRequest() override; | ||
|
||
/**Returns an XML file with the capabilities description (as described in the WFS specs)*/ | ||
QDomDocument getCapabilities(); | ||
|
||
/**Returns an XML file with the describe Coverage (as described in the WCS specs)*/ | ||
QDomDocument describeCoverage(); | ||
|
||
/**Creates a file which is the result of the getCoverage request.*/ | ||
QByteArray* getCoverage(); | ||
|
||
/**Sets configuration parser for administration settings. Does not take ownership*/ | ||
void setAdminConfigParser( QgsWCSProjectParser* parser ) { mConfigParser = parser; } | ||
|
||
private: | ||
/**Don't use the default constructor*/ | ||
QgsWCSServer(); | ||
|
||
/**Get service address from REQUEST_URI if not specified in the configuration*/ | ||
QString serviceUrl() const; | ||
|
||
QgsWCSProjectParser* mConfigParser; | ||
|
||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/*************************************************************************** | ||
qgswcsprojectparser.sip | ||
------------------------ | ||
begin : May 2, 2015 | ||
copyright : (C) 2015 by Alessandro Pasotti | ||
email : a dot pasotti at itopen dot it | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
|
||
class QgsWCSProjectParser | ||
{ | ||
%TypeHeaderCode | ||
#include "qgswcsprojectparser.h" | ||
|
||
%End | ||
public: | ||
QgsWCSProjectParser( const QString& filePath ); | ||
~QgsWCSProjectParser(); | ||
|
||
void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const; | ||
QString wcsServiceUrl() const; | ||
QString serviceUrl() const; | ||
void wcsContentMetadata( QDomElement& parentElement, QDomDocument& doc ) const; | ||
QStringList wcsLayers() const; | ||
void describeCoverage( const QString& aCoveName, QDomElement& parentElement, QDomDocument& doc ) const; | ||
QList<QgsMapLayer*> mapLayerFromCoverage( const QString& cName, bool useCache = true ) const; | ||
|
||
}; | ||
|
Oops, something went wrong.