Skip to content

Commit 0e113e1

Browse files
committed
Add QgsOWSServer class, move code from qgis_map_serv.cpp into exection() functions
1 parent dcda258 commit 0e113e1

8 files changed

+567
-583
lines changed

src/mapserver/qgis_map_serv.cpp

+8-435
Large diffs are not rendered by default.

src/mapserver/qgsowsserver.h

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/***************************************************************************
2+
qgsowsserver.h
3+
--------------
4+
begin : March 24, 2014
5+
copyright : (C) 2006 by Marco Hugentobler
6+
email : marco dot hugentobler at sourcepole dot ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#ifndef QGSOWSSERVER_H
19+
#define QGSOWSSERVER_H
20+
21+
#include "qgsconfigparser.h"
22+
#include "qgsrequesthandler.h"
23+
24+
class QgsOWSServer
25+
{
26+
public:
27+
QgsOWSServer( const QString& configFilePath, const QMap<QString, QString>& parameters, QgsConfigParser* cp, QgsRequestHandler* rh ):
28+
mParameters( parameters ), mConfigParser( cp ), mRequestHandler( rh ), mConfigFilePath( configFilePath ) {}
29+
virtual ~QgsOWSServer() { delete mRequestHandler; }
30+
31+
virtual void executeRequest() = 0;
32+
33+
private:
34+
QgsOWSServer() {}
35+
36+
protected:
37+
QMap<QString, QString> mParameters;
38+
QgsConfigParser* mConfigParser;
39+
QgsRequestHandler* mRequestHandler;
40+
QString mConfigFilePath;
41+
};
42+
43+
#endif // QGSOWSSERVER_H

src/mapserver/qgswcsserver.cpp

+81-18
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,83 @@ static const QString WCS_NAMESPACE = "http://www.opengis.net/wcs";
3636
static const QString GML_NAMESPACE = "http://www.opengis.net/gml";
3737
static const QString OGC_NAMESPACE = "http://www.opengis.net/ogc";
3838

39-
QgsWCSServer::QgsWCSServer( QMap<QString, QString> parameters )
40-
: mParameterMap( parameters )
41-
, mConfigParser( 0 )
39+
QgsWCSServer::QgsWCSServer( const QString& configFilePath, QMap<QString, QString> parameters, QgsConfigParser* cp,
40+
QgsRequestHandler* rh ): QgsOWSServer( configFilePath, parameters, cp, rh )
4241
{
4342
}
4443

4544
QgsWCSServer::~QgsWCSServer()
4645
{
4746
}
4847

49-
QgsWCSServer::QgsWCSServer()
48+
QgsWCSServer::QgsWCSServer(): QgsOWSServer( QString(), QMap<QString, QString>(), 0, 0 )
5049
{
5150
}
5251

52+
void QgsWCSServer::executeRequest()
53+
{
54+
//request type
55+
QString request = mParameters.value( "REQUEST" );
56+
if ( request.isEmpty() )
57+
{
58+
//do some error handling
59+
QgsDebugMsg( "unable to find 'REQUEST' parameter, exiting..." );
60+
mRequestHandler->sendServiceException( QgsMapServiceException( "OperationNotSupported", "Please check the value of the REQUEST parameter" ) );
61+
return;
62+
}
63+
64+
if ( request.compare( "GetCapabilities", Qt::CaseInsensitive ) == 0 )
65+
{
66+
QDomDocument capabilitiesDocument;
67+
try
68+
{
69+
capabilitiesDocument = getCapabilities();
70+
}
71+
catch ( QgsMapServiceException& ex )
72+
{
73+
mRequestHandler->sendServiceException( ex );
74+
return;
75+
}
76+
QgsDebugMsg( "sending GetCapabilities response" );
77+
mRequestHandler->sendGetCapabilitiesResponse( capabilitiesDocument );
78+
return;
79+
}
80+
else if ( request.compare( "DescribeCoverage", Qt::CaseInsensitive ) == 0 )
81+
{
82+
QDomDocument describeDocument;
83+
try
84+
{
85+
describeDocument = describeCoverage();
86+
}
87+
catch ( QgsMapServiceException& ex )
88+
{
89+
mRequestHandler->sendServiceException( ex );
90+
return;
91+
}
92+
QgsDebugMsg( "sending GetCapabilities response" );
93+
mRequestHandler->sendGetCapabilitiesResponse( describeDocument );
94+
return;
95+
}
96+
else if ( request.compare( "GetCoverage", Qt::CaseInsensitive ) == 0 )
97+
{
98+
QByteArray* coverageOutput;
99+
try
100+
{
101+
coverageOutput = getCoverage();
102+
}
103+
catch ( QgsMapServiceException& ex )
104+
{
105+
mRequestHandler->sendServiceException( ex );
106+
return;
107+
}
108+
if ( coverageOutput )
109+
{
110+
mRequestHandler->sendGetCoverageResponse( coverageOutput );
111+
}
112+
return;
113+
}
114+
}
115+
53116
QDomDocument QgsWCSServer::getCapabilities()
54117
{
55118
QgsDebugMsg( "Entering." );
@@ -153,15 +216,15 @@ QDomDocument QgsWCSServer::describeCoverage()
153216
//defining coverage name
154217
QString coveName = "";
155218
//read COVERAGE
156-
QMap<QString, QString>::const_iterator cove_name_it = mParameterMap.find( "COVERAGE" );
157-
if ( cove_name_it != mParameterMap.end() )
219+
QMap<QString, QString>::const_iterator cove_name_it = mParameters.find( "COVERAGE" );
220+
if ( cove_name_it != mParameters.end() )
158221
{
159222
coveName = cove_name_it.value();
160223
}
161224
if ( coveName == "" )
162225
{
163-
QMap<QString, QString>::const_iterator cove_name_it = mParameterMap.find( "IDENTIFIER" );
164-
if ( cove_name_it != mParameterMap.end() )
226+
QMap<QString, QString>::const_iterator cove_name_it = mParameters.find( "IDENTIFIER" );
227+
if ( cove_name_it != mParameters.end() )
165228
{
166229
coveName = cove_name_it.value();
167230
}
@@ -181,15 +244,15 @@ QByteArray* QgsWCSServer::getCoverage()
181244
//defining coverage name
182245
QString coveName = "";
183246
//read COVERAGE
184-
QMap<QString, QString>::const_iterator cove_name_it = mParameterMap.find( "COVERAGE" );
185-
if ( cove_name_it != mParameterMap.end() )
247+
QMap<QString, QString>::const_iterator cove_name_it = mParameters.find( "COVERAGE" );
248+
if ( cove_name_it != mParameters.end() )
186249
{
187250
coveName = cove_name_it.value();
188251
}
189252
if ( coveName == "" )
190253
{
191-
QMap<QString, QString>::const_iterator cove_name_it = mParameterMap.find( "IDENTIFIER" );
192-
if ( cove_name_it != mParameterMap.end() )
254+
QMap<QString, QString>::const_iterator cove_name_it = mParameters.find( "IDENTIFIER" );
255+
if ( cove_name_it != mParameters.end() )
193256
{
194257
coveName = cove_name_it.value();
195258
}
@@ -216,8 +279,8 @@ QByteArray* QgsWCSServer::getCoverage()
216279
QString crs = "";
217280

218281
// read BBOX
219-
QMap<QString, QString>::const_iterator bbIt = mParameterMap.find( "BBOX" );
220-
if ( bbIt == mParameterMap.end() )
282+
QMap<QString, QString>::const_iterator bbIt = mParameters.find( "BBOX" );
283+
if ( bbIt == mParameters.end() )
221284
{
222285
minx = 0; miny = 0; maxx = 0; maxy = 0;
223286
}
@@ -240,11 +303,11 @@ QByteArray* QgsWCSServer::getCoverage()
240303
}
241304

242305
// read WIDTH
243-
width = mParameterMap.value( "WIDTH", "0" ).toInt( &conversionSuccess );
306+
width = mParameters.value( "WIDTH", "0" ).toInt( &conversionSuccess );
244307
if ( !conversionSuccess )
245308
width = 0;
246309
// read HEIGHT
247-
height = mParameterMap.value( "HEIGHT", "0" ).toInt( &conversionSuccess );
310+
height = mParameters.value( "HEIGHT", "0" ).toInt( &conversionSuccess );
248311
if ( !conversionSuccess )
249312
{
250313
height = 0;
@@ -255,7 +318,7 @@ QByteArray* QgsWCSServer::getCoverage()
255318
mErrors << QString( "The WIDTH and HEIGHT are mandatory and have to be integer" );
256319
}
257320

258-
crs = mParameterMap.value( "CRS", "" );
321+
crs = mParameters.value( "CRS", "" );
259322
if ( crs == "" )
260323
{
261324
mErrors << QString( "The CRS is mandatory" );
@@ -281,7 +344,7 @@ QByteArray* QgsWCSServer::getCoverage()
281344
{
282345
// RESPONSE_CRS
283346
QgsCoordinateReferenceSystem responseCRS = rLayer->crs();
284-
crs = mParameterMap.value( "RESPONSE_CRS", "" );
347+
crs = mParameters.value( "RESPONSE_CRS", "" );
285348
if ( crs != "" )
286349
{
287350
responseCRS = QgsCRSCache::instance()->crsByAuthId( crs );

src/mapserver/qgswcsserver.h

+7-6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <QString>
2424
#include <map>
2525
#include "qgis.h"
26+
#include "qgsowsserver.h"
2627

2728
class QgsConfigParser;
2829
class QgsRequestHandler;
@@ -31,12 +32,16 @@ class QgsRequestHandler;
3132
a map<QString, QString>. This map is usually generated by a subclass of QgsWMSRequestHandler, which makes QgsWCSServer
3233
independent from any server side technology*/
3334

34-
class QgsWCSServer
35+
class QgsWCSServer: public QgsOWSServer
3536
{
3637
public:
3738
/**Constructor. Takes parameter map and a pointer to a renderer object (does not take ownership)*/
38-
QgsWCSServer( QMap<QString, QString> parameters );
39+
QgsWCSServer( const QString& configFilePath, QMap<QString, QString> parameters, QgsConfigParser* cp,
40+
QgsRequestHandler* rh );
3941
~QgsWCSServer();
42+
43+
void executeRequest();
44+
4045
/**Returns an XML file with the capabilities description (as described in the WFS specs)*/
4146
QDomDocument getCapabilities();
4247

@@ -55,10 +60,6 @@ class QgsWCSServer
5560

5661
/**Get service address from REQUEST_URI if not specified in the configuration*/
5762
QString serviceUrl() const;
58-
59-
/**Map containing the WMS parameters*/
60-
QMap<QString, QString> mParameterMap;
61-
QgsConfigParser* mConfigParser;
6263
};
6364

6465
#endif

0 commit comments

Comments
 (0)