@@ -34,15 +34,92 @@ namespace QgsWfs
3434 };
3535 save ( pOutputFormat );
3636
37+ const Parameter pResultType = { ParameterName::RESULTTYPE,
38+ QVariant::String,
39+ QVariant ( " " ),
40+ QVariant ()
41+ };
42+ save ( pResultType );
43+
44+ const Parameter pPropertyName = { ParameterName::PROPERTYNAME,
45+ QVariant::String,
46+ QVariant ( " " ),
47+ QVariant ()
48+ };
49+ save ( pPropertyName );
50+
51+ const Parameter pMaxFeatures = { ParameterName::MAXFEATURES,
52+ QVariant::Int,
53+ QVariant ( -1 ),
54+ QVariant ()
55+ };
56+ save ( pMaxFeatures );
57+
58+ const Parameter pStartIndex = { ParameterName::STARTINDEX,
59+ QVariant::Int,
60+ QVariant ( 0 ),
61+ QVariant ()
62+ };
63+ save ( pStartIndex );
64+
3765 const Parameter pSrsName = { ParameterName::SRSNAME,
3866 QVariant::String,
3967 QVariant ( " " ),
4068 QVariant ()
4169 };
4270 save ( pSrsName );
71+
72+ const Parameter pTypeName = { ParameterName::TYPENAME,
73+ QVariant::String,
74+ QVariant ( " " ),
75+ QVariant ()
76+ };
77+ save ( pTypeName );
78+
79+ const Parameter pFeatureId = { ParameterName::FEATUREID,
80+ QVariant::String,
81+ QVariant ( " " ),
82+ QVariant ()
83+ };
84+ save ( pFeatureId );
85+
86+ const Parameter pFilter = { ParameterName::FILTER,
87+ QVariant::String,
88+ QVariant ( " " ),
89+ QVariant ()
90+ };
91+ save ( pFilter );
92+
93+ const Parameter pBbox = { ParameterName::BBOX,
94+ QVariant::String,
95+ QVariant ( " " ),
96+ QVariant ()
97+ };
98+ save ( pBbox );
99+
100+ const Parameter pSortBy = { ParameterName::SORTBY,
101+ QVariant::String,
102+ QVariant ( " " ),
103+ QVariant ()
104+ };
105+ save ( pSortBy );
106+
107+ const Parameter pExpFilter = { ParameterName::EXP_FILTER,
108+ QVariant::String,
109+ QVariant ( " " ),
110+ QVariant ()
111+ };
112+ save ( pExpFilter );
113+
114+ const Parameter pGeometryName = { ParameterName::GEOMETRYNAME,
115+ QVariant::String,
116+ QVariant ( " " ),
117+ QVariant ()
118+ };
119+ save ( pGeometryName );
43120 }
44121
45- QgsWfsParameters::QgsWfsParameters ( const QgsServerRequest::Parameters ¶meters )
122+ QgsWfsParameters::QgsWfsParameters ( const QgsServerRequest::Parameters ¶meters ) : QgsWfsParameters()
46123 {
47124 load ( parameters );
48125 }
@@ -144,11 +221,81 @@ namespace QgsWfs
144221 return f;
145222 }
146223
224+ QString QgsWfsParameters::resultTypeAsString () const
225+ {
226+ return value ( ParameterName::RESULTTYPE ).toString ();
227+ }
228+
229+ QStringList QgsWfsParameters::propertyNames () const
230+ {
231+ return toStringListWithExp ( ParameterName::PROPERTYNAME );
232+ }
233+
234+ QString QgsWfsParameters::maxFeatures () const
235+ {
236+ return value ( ParameterName::MAXFEATURES ).toString ();
237+ }
238+
239+ int QgsWfsParameters::maxFeaturesAsInt () const
240+ {
241+ return toInt ( ParameterName::MAXFEATURES );
242+ }
243+
244+ QString QgsWfsParameters::startIndex () const
245+ {
246+ return value ( ParameterName::STARTINDEX ).toString ();
247+ }
248+
249+ int QgsWfsParameters::startIndexAsInt () const
250+ {
251+ return toInt ( ParameterName::STARTINDEX );
252+ }
253+
147254 QString QgsWfsParameters::srsName () const
148255 {
149256 return value ( ParameterName::SRSNAME ).toString ();
150257 }
151258
259+ QStringList QgsWfsParameters::typeNames () const
260+ {
261+ return toStringList ( ParameterName::TYPENAME );
262+ }
263+
264+ QStringList QgsWfsParameters::featureIds () const
265+ {
266+ return toStringList ( ParameterName::FEATUREID );
267+ }
268+
269+ QStringList QgsWfsParameters::filters () const
270+ {
271+ return toStringListWithExp ( ParameterName::FILTER );
272+ }
273+
274+ QString QgsWfsParameters::bbox () const
275+ {
276+ return value ( ParameterName::BBOX ).toString ();
277+ }
278+
279+ QgsRectangle QgsWfsParameters::bboxAsRectangle () const
280+ {
281+ return toRectangle ( ParameterName::BBOX );
282+ }
283+
284+ QStringList QgsWfsParameters::sortBy () const
285+ {
286+ return toStringListWithExp ( ParameterName::SORTBY );
287+ }
288+
289+ QStringList QgsWfsParameters::expFilters () const
290+ {
291+ return toStringListWithExp ( ParameterName::EXP_FILTER );
292+ }
293+
294+ QString QgsWfsParameters::geometryNameAsString () const
295+ {
296+ return value ( ParameterName::GEOMETRYNAME ).toString ();
297+ }
298+
152299 QString QgsWfsParameters::request () const
153300 {
154301 if ( mRequestParameters .contains ( " REQUEST" ) )
@@ -186,6 +333,119 @@ namespace QgsWfs
186333 return metaEnum.valueToKey ( name );
187334 }
188335
336+ int QgsWfsParameters::toInt ( const QVariant &value, const QVariant &defaultValue, bool *error ) const
337+ {
338+ int val = defaultValue.toInt ();
339+ QString valStr = value.toString ();
340+ bool ok = true ;
341+
342+ if ( !valStr.isEmpty () )
343+ {
344+ val = value.toInt ( &ok );
345+ }
346+ *error = !ok;
347+
348+ return val;
349+ }
350+
351+ int QgsWfsParameters::toInt ( ParameterName p ) const
352+ {
353+ bool error;
354+ int val = toInt ( value ( p ), defaultValue ( p ), &error );
355+ if ( error )
356+ {
357+ QString n = name ( p );
358+ QString valStr = value ( p ).toString ();
359+ QString msg = n + " ('" + valStr + " ') cannot be converted into int" ;
360+ raiseError ( msg );
361+ }
362+
363+ return val;
364+ }
365+
366+ QgsRectangle QgsWfsParameters::toRectangle ( const QVariant &value, bool *error ) const
367+ {
368+ *error = false ;
369+ QString bbox = value.toString ();
370+ QgsRectangle extent;
371+
372+ if ( !bbox.isEmpty () )
373+ {
374+ QStringList corners = bbox.split ( " ," );
375+
376+ if ( corners.size () == 4 )
377+ {
378+ double d[4 ];
379+ bool ok;
380+
381+ for ( int i = 0 ; i < 4 ; i++ )
382+ {
383+ corners[i].replace ( QLatin1String ( " " ), QLatin1String ( " +" ) );
384+ d[i] = corners[i].toDouble ( &ok );
385+ if ( !ok )
386+ {
387+ *error = !ok;
388+ return extent;
389+ }
390+ }
391+
392+ extent = QgsRectangle ( d[0 ], d[1 ], d[2 ], d[3 ] );
393+ }
394+ else
395+ {
396+ *error = true ;
397+ return extent;
398+ }
399+ }
400+
401+ return extent;
402+ }
403+
404+ QgsRectangle QgsWfsParameters::toRectangle ( ParameterName p ) const
405+ {
406+ bool error;
407+ QgsRectangle extent = toRectangle ( value ( p ), &error );
408+ if ( error )
409+ {
410+ QString n = name ( p );
411+ QString valStr = value ( p ).toString ();
412+ QString msg = n + " ('" + valStr + " ') cannot be converted into a rectangle" ;
413+ raiseError ( msg );
414+ }
415+
416+ return extent;
417+ }
418+
419+ QStringList QgsWfsParameters::toStringList ( ParameterName p, char delimiter ) const
420+ {
421+ return value ( p ).toString ().split ( delimiter, QString::SkipEmptyParts );
422+ }
423+
424+ QStringList QgsWfsParameters::toStringListWithExp ( ParameterName p, const QString &exp ) const
425+ {
426+ QStringList theList;
427+
428+ QString val = value ( p ).toString ();
429+ if ( val.isEmpty () )
430+ return theList;
431+
432+ QRegExp rx ( exp );
433+ if ( rx.indexIn ( val, 0 ) == -1 )
434+ {
435+ theList << val;
436+ }
437+ else
438+ {
439+ int pos = 0 ;
440+ while ( ( pos = rx.indexIn ( val, pos ) ) != -1 )
441+ {
442+ theList << rx.cap ( 1 );
443+ pos += rx.matchedLength ();
444+ }
445+ }
446+ return theList;
447+ }
448+
189449 void QgsWfsParameters::log ( const QString &msg ) const
190450 {
191451 QgsMessageLog::logMessage ( msg, " Server" , QgsMessageLog::INFO );
0 commit comments