Skip to content

Commit 1a078d9

Browse files
committed
Use class instead of struct
1 parent 950f7d7 commit 1a078d9

File tree

2 files changed

+125
-112
lines changed

2 files changed

+125
-112
lines changed

src/server/qgsserverparameters.cpp

Lines changed: 77 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -18,47 +18,69 @@
1818
#include "qgsserverparameters.h"
1919
#include "qgsserverexception.h"
2020

21+
//
22+
// QgsServerParameterDefinition
23+
//
24+
QgsServerParameterDefinition::QgsServerParameterDefinition( const QVariant::Type type,
25+
const QVariant defaultValue )
26+
: mType( type )
27+
, mDefaultValue( defaultValue )
28+
{
29+
}
30+
31+
QString QgsServerParameterDefinition::typeName() const
32+
{
33+
return QVariant::typeToName( mType );
34+
}
35+
36+
bool QgsServerParameterDefinition::isValid() const
37+
{
38+
return mValue.canConvert( mType );
39+
}
40+
41+
void QgsServerParameterDefinition::raiseError( const QString &msg )
42+
{
43+
throw QgsBadRequestException( QStringLiteral( "Invalid Parameter" ), msg );
44+
}
45+
46+
//
47+
// QgsServerParameter
48+
//
49+
QgsServerParameter::QgsServerParameter( const QgsServerParameter::Name name,
50+
const QVariant::Type type, const QVariant defaultValue )
51+
: QgsServerParameterDefinition( type, defaultValue )
52+
, mName( name )
53+
{
54+
}
55+
56+
QString QgsServerParameter::name( QgsServerParameter::Name name )
57+
{
58+
const QMetaEnum metaEnum( QMetaEnum::fromType<QgsServerParameter::Name>() );
59+
return metaEnum.valueToKey( name );
60+
}
61+
62+
QgsServerParameter::Name QgsServerParameter::name( const QString &name )
63+
{
64+
const QMetaEnum metaEnum( QMetaEnum::fromType<QgsServerParameter::Name>() );
65+
return ( QgsServerParameter::Name ) metaEnum.keyToValue( name.toUpper().toStdString().c_str() );
66+
}
67+
68+
void QgsServerParameter::raiseError() const
69+
{
70+
const QString msg = QString( "%1 ('%2') cannot be converted into %3" ).arg( name( mName ), mValue.toString(), typeName() );
71+
QgsServerParameterDefinition::raiseError( msg );
72+
}
73+
74+
//
75+
// QgsServerParameters
76+
//
2177
QgsServerParameters::QgsServerParameters()
2278
{
23-
const Parameter pService = { ParameterName::SERVICE,
24-
QVariant::String,
25-
QVariant( "" ),
26-
QVariant(),
27-
false
28-
};
29-
save( pService );
30-
31-
const Parameter pRequest = { ParameterName::REQUEST,
32-
QVariant::String,
33-
QVariant( "" ),
34-
QVariant(),
35-
false
36-
};
37-
save( pRequest );
38-
39-
const Parameter pVersion = { ParameterName::VERSION_SERVICE,
40-
QVariant::String,
41-
QVariant( "" ),
42-
QVariant(),
43-
false
44-
};
45-
save( pVersion );
46-
47-
const Parameter pMap = { ParameterName::MAP,
48-
QVariant::String,
49-
QVariant( "" ),
50-
QVariant(),
51-
false
52-
};
53-
save( pMap );
54-
55-
const Parameter pFile = { ParameterName::FILE_NAME,
56-
QVariant::String,
57-
QVariant( "" ),
58-
QVariant(),
59-
false
60-
};
61-
save( pFile );
79+
save( QgsServerParameter( QgsServerParameter::SERVICE ) );
80+
save( QgsServerParameter( QgsServerParameter::REQUEST ) );
81+
save( QgsServerParameter( QgsServerParameter::VERSION_SERVICE ) );
82+
save( QgsServerParameter( QgsServerParameter::MAP ) );
83+
save( QgsServerParameter( QgsServerParameter::FILE_NAME ) );
6284
}
6385

6486
QgsServerParameters::QgsServerParameters( const QUrlQuery &query )
@@ -67,7 +89,7 @@ QgsServerParameters::QgsServerParameters( const QUrlQuery &query )
6789
load( query );
6890
}
6991

70-
void QgsServerParameters::save( const Parameter &parameter )
92+
void QgsServerParameters::save( const QgsServerParameter &parameter )
7193
{
7294
mParameters[ parameter.mName ] = parameter;
7395
}
@@ -99,7 +121,7 @@ void QgsServerParameters::remove( const QString &key )
99121
}
100122
else
101123
{
102-
ParameterName paramName = name( key );
124+
QgsServerParameter::Name paramName = QgsServerParameter::name( key );
103125
if ( mParameters.contains( paramName ) )
104126
{
105127
mParameters.take( paramName );
@@ -109,22 +131,22 @@ void QgsServerParameters::remove( const QString &key )
109131

110132
QString QgsServerParameters::map() const
111133
{
112-
return value( ParameterName::MAP ).toString();
134+
return value( QgsServerParameter::MAP ).toString();
113135
}
114136

115137
QString QgsServerParameters::version() const
116138
{
117-
return value( ParameterName::VERSION_SERVICE ).toString();
139+
return value( QgsServerParameter::VERSION_SERVICE ).toString();
118140
}
119141

120142
QString QgsServerParameters::fileName() const
121143
{
122-
return value( ParameterName::FILE_NAME ).toString();
144+
return value( QgsServerParameter::FILE_NAME ).toString();
123145
}
124146

125147
QString QgsServerParameters::service() const
126148
{
127-
QString serviceValue = value( ParameterName::SERVICE ).toString();
149+
QString serviceValue = value( QgsServerParameter::SERVICE ).toString();
128150

129151
if ( serviceValue.isEmpty() )
130152
{
@@ -143,14 +165,12 @@ QMap<QString, QString> QgsServerParameters::toMap() const
143165
{
144166
QMap<QString, QString> params = mUnmanagedParameters;
145167

146-
const QMetaEnum metaEnum( QMetaEnum::fromType<ParameterName>() );
147-
148168
for ( auto parameter : mParameters.toStdMap() )
149169
{
150170
if ( ! parameter.second.mDefined )
151171
continue;
152172

153-
const QString paramName = name( parameter.first );
173+
const QString paramName = QgsServerParameter::name( parameter.first );
154174
params[paramName] = parameter.second.mValue.toString();
155175
}
156176

@@ -159,15 +179,15 @@ QMap<QString, QString> QgsServerParameters::toMap() const
159179

160180
QString QgsServerParameters::request() const
161181
{
162-
return value( ParameterName::REQUEST ).toString();
182+
return value( QgsServerParameter::REQUEST ).toString();
163183
}
164184

165185
QString QgsServerParameters::value( const QString &key ) const
166186
{
167-
return value( name( key ) ).toString();
187+
return value( QgsServerParameter::name( key ) ).toString();
168188
}
169189

170-
QVariant QgsServerParameters::value( ParameterName name ) const
190+
QVariant QgsServerParameters::value( QgsServerParameter::Name name ) const
171191
{
172192
return mParameters[name].mValue;
173193
}
@@ -179,19 +199,16 @@ void QgsServerParameters::load( const QUrlQuery &query )
179199
cleanQuery.setQuery( query.query().replace( '+', QStringLiteral( "%20" ) ) );
180200

181201
// load parameters
182-
const QMetaEnum metaEnum( QMetaEnum::fromType<ParameterName>() );
183-
184202
for ( const auto &item : cleanQuery.queryItems( QUrl::FullyDecoded ) )
185203
{
186-
const ParameterName paramName = name( item.first );
187-
if ( paramName >= 0 )
204+
const QgsServerParameter::Name name = QgsServerParameter::name( item.first );
205+
if ( name >= 0 )
188206
{
189-
const QVariant value( item.second );
190-
mParameters[paramName].mValue = value;
191-
mParameters[paramName].mDefined = true;
192-
if ( !value.canConvert( mParameters[paramName].mType ) )
207+
mParameters[name].mValue = item.second;
208+
mParameters[name].mDefined = true;
209+
if ( ! mParameters[name].isValid() )
193210
{
194-
raiseError( paramName );
211+
mParameters[name].raiseError();
195212
}
196213
}
197214
else
@@ -206,29 +223,3 @@ void QgsServerParameters::clear()
206223
mParameters.clear();
207224
mUnmanagedParameters.clear();
208225
}
209-
210-
QString QgsServerParameters::name( ParameterName name ) const
211-
{
212-
const QMetaEnum metaEnum( QMetaEnum::fromType<ParameterName>() );
213-
return metaEnum.valueToKey( name );
214-
}
215-
216-
QgsServerParameters::ParameterName QgsServerParameters::name( const QString &key ) const
217-
{
218-
const QMetaEnum metaEnum( QMetaEnum::fromType<ParameterName>() );
219-
return ( ParameterName ) metaEnum.keyToValue( key.toUpper().toStdString().c_str() );
220-
}
221-
222-
void QgsServerParameters::raiseError( ParameterName paramName ) const
223-
{
224-
const QString value = mParameters[paramName].mValue.toString();
225-
const QString param = name( paramName );
226-
const QString type = QVariant::typeToName( mParameters[paramName].mType );
227-
const QString msg = QString( "%1 ('%2') cannot be converted into %3" ).arg( param, value, type );
228-
raiseError( msg );
229-
}
230-
231-
void QgsServerParameters::raiseError( const QString &msg ) const
232-
{
233-
throw QgsBadRequestException( QStringLiteral( "Invalid WMS Parameter" ), msg );
234-
}

src/server/qgsserverparameters.h

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,62 @@
2424
#include <QUrlQuery>
2525
#include "qgis_server.h"
2626

27-
/**
28-
* QgsServerParameters provides an interface to retrieve and manipulate
29-
* global parameters received from the client.
30-
* \since QGIS 3.4
31-
*/
32-
class SERVER_EXPORT QgsServerParameters
27+
class SERVER_EXPORT QgsServerParameterDefinition
28+
{
29+
public:
30+
QgsServerParameterDefinition( const QVariant::Type type = QVariant::String,
31+
const QVariant defaultValue = QVariant( "" ) );
32+
33+
QString typeName() const;
34+
35+
bool isValid() const;
36+
37+
static void raiseError( const QString &msg );
38+
39+
QVariant::Type mType;
40+
QVariant mValue;
41+
QVariant mDefaultValue;
42+
bool mDefined = false;
43+
};
44+
45+
class SERVER_EXPORT QgsServerParameter : public QgsServerParameterDefinition
3346
{
3447
Q_GADGET
3548

3649
public:
37-
enum ParameterName
50+
enum Name
3851
{
52+
UNKNOWN,
3953
SERVICE,
40-
VERSION_SERVICE, // should be VERSION, but there's a conflict with #define VERSION
54+
VERSION_SERVICE, // conflict with #define VERSION
4155
REQUEST,
4256
MAP,
4357
FILE_NAME
4458
};
45-
Q_ENUM( ParameterName )
59+
Q_ENUM( Name )
4660

47-
struct Parameter
48-
{
49-
ParameterName mName;
50-
QVariant::Type mType;
51-
QVariant mDefaultValue;
52-
QVariant mValue;
53-
bool mDefined;
54-
};
61+
QgsServerParameter( const QgsServerParameter::Name name = Name::UNKNOWN,
62+
const QVariant::Type type = QVariant::String,
63+
const QVariant defaultValue = QVariant( "" ) );
64+
65+
void raiseError() const;
66+
67+
static QString name( QgsServerParameter::Name );
68+
static QgsServerParameter::Name name( const QString &name );
69+
70+
QgsServerParameter::Name mName;
71+
};
72+
73+
/**
74+
* QgsServerParameters provides an interface to retrieve and manipulate
75+
* global parameters received from the client.
76+
* \since QGIS 3.4
77+
*/
78+
class SERVER_EXPORT QgsServerParameters
79+
{
80+
Q_GADGET
81+
82+
public:
5583

5684
/**
5785
* Constructor.
@@ -139,16 +167,10 @@ class SERVER_EXPORT QgsServerParameters
139167
QString version() const;
140168

141169
private:
142-
void save( const Parameter &parameter );
143-
QVariant value( ParameterName name ) const;
144-
145-
ParameterName name( const QString &name ) const;
146-
QString name( ParameterName name ) const;
147-
148-
void raiseError( ParameterName name ) const;
149-
void raiseError( const QString &msg ) const;
170+
void save( const QgsServerParameter &parameter );
171+
QVariant value( QgsServerParameter::Name name ) const;
150172

151-
QMap<ParameterName, Parameter> mParameters;
173+
QMap<QgsServerParameter::Name, QgsServerParameter> mParameters;
152174
QMap<QString, QString> mUnmanagedParameters;
153175
};
154176

0 commit comments

Comments
 (0)