Skip to content

Commit bcd9bd7

Browse files
committed
WFS adapted to QgsOWSConnection, remaining functionality from QgsWFSConnection moved to QgsWFSCapabilities
1 parent b7289fb commit bcd9bd7

File tree

7 files changed

+120
-111
lines changed

7 files changed

+120
-111
lines changed

src/providers/wfs/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
SET(WFS_SRCS
66
qgswfsprovider.cpp
7-
qgswfsconnection.cpp
7+
qgswfscapabilities.cpp
88
qgswfsdataitems.cpp
99
qgswfsdata.cpp
1010
qgswfssourceselect.cpp
@@ -13,7 +13,7 @@ SET(WFS_SRCS
1313

1414
SET (WFS_MOC_HDRS
1515
qgswfsdata.h
16-
qgswfsconnection.h
16+
qgswfscapabilities.h
1717
qgswfsdataitems.h
1818
qgswfsprovider.h
1919
qgswfssourceselect.h

src/providers/wfs/qgswfsconnection.cpp renamed to src/providers/wfs/qgswfscapabilities.cpp

Lines changed: 40 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "qgswfsconnection.h"
1+
#include "qgswfscapabilities.h"
22
#include "qgsexpression.h"
33
#include "qgslogger.h"
44
#include "qgsnetworkaccessmanager.h"
@@ -11,18 +11,25 @@
1111

1212
static const QString WFS_NAMESPACE = "http://www.opengis.net/wfs";
1313

14-
QgsWFSConnection::QgsWFSConnection( QString connName, QObject *parent ) :
15-
QObject( parent ),
16-
mConnName( connName ),
14+
QgsWFSCapabilities::QgsWFSCapabilities( QString theUri ) :
15+
//QObject( parent ),
16+
//mConnName( connName ),
1717
mCapabilitiesReply( 0 ),
18-
mErrorCode( QgsWFSConnection::NoError )
18+
mErrorCode( QgsWFSCapabilities::NoError )
1919
{
20+
mUri.setEncodedUri( theUri ),
21+
QgsDebugMsg ( "theUri = " + theUri );
22+
mBaseUrl = prepareUri ( mUri.param("url") );
23+
24+
QgsDebugMsg ( "mBaseUrl = " + mBaseUrl );
25+
2026
//find out the server URL
27+
/*
2128
QSettings settings;
2229
QString key = "/Qgis/connections-wfs/" + mConnName + "/url";
2330
mUri = settings.value( key ).toString();
2431
QgsDebugMsg( QString( "url is: %1" ).arg( mUri ) );
25-
32+
2633
//make a GetCapabilities request
2734
//modify mUri to add '?' or '&' at the end if it is not already there
2835
if ( !( mUri.contains( "?" ) ) )
@@ -33,19 +40,34 @@ QgsWFSConnection::QgsWFSConnection( QString connName, QObject *parent ) :
3340
{
3441
mUri.append( "&" );
3542
}
43+
*/
3644
}
3745

38-
QString QgsWFSConnection::uriGetCapabilities() const
46+
QString QgsWFSCapabilities::prepareUri( QString uri )
3947
{
40-
return mUri + "SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.0.0";
48+
if ( !uri.contains( "?" ) )
49+
{
50+
uri.append( "?" );
51+
}
52+
else if ( uri.right( 1 ) != "?" && uri.right( 1 ) != "&" )
53+
{
54+
uri.append( "&" );
55+
}
56+
57+
return uri;
58+
}
59+
60+
QString QgsWFSCapabilities::uriGetCapabilities() const
61+
{
62+
return mBaseUrl + "SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.0.0";
4163
}
4264

43-
QString QgsWFSConnection::uriDescribeFeatureType( const QString& typeName ) const
65+
QString QgsWFSCapabilities::uriDescribeFeatureType( const QString& typeName ) const
4466
{
45-
return mUri + "SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=1.0.0&TYPENAME=" + typeName;
67+
return mBaseUrl + "SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=1.0.0&TYPENAME=" + typeName;
4668
}
4769

48-
QString QgsWFSConnection::uriGetFeature( QString typeName, QString crsString, QString filter, QgsRectangle bBox ) const
70+
QString QgsWFSCapabilities::uriGetFeature( QString typeName, QString crsString, QString filter, QgsRectangle bBox ) const
4971
{
5072
//get CRS
5173
if ( !crsString.isEmpty() )
@@ -89,11 +111,7 @@ QString QgsWFSConnection::uriGetFeature( QString typeName, QString crsString, QS
89111
.arg( bBox.yMaximum(), 0, 'f' );
90112
}
91113

92-
QString uri = mUri;
93-
if ( !( uri.contains( "?" ) ) )
94-
{
95-
uri.append( "?" );
96-
}
114+
QString uri = mBaseUrl;
97115

98116
//add a wfs layer to the map
99117
uri += "SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=" + typeName + crsString + bBoxString + filterString;
@@ -102,9 +120,9 @@ QString QgsWFSConnection::uriGetFeature( QString typeName, QString crsString, QS
102120
}
103121

104122

105-
void QgsWFSConnection::requestCapabilities()
123+
void QgsWFSCapabilities::requestCapabilities()
106124
{
107-
mErrorCode = QgsWFSConnection::NoError;
125+
mErrorCode = QgsWFSCapabilities::NoError;
108126
mErrorMessage.clear();
109127

110128
QNetworkRequest request( uriGetCapabilities() );
@@ -113,12 +131,12 @@ void QgsWFSConnection::requestCapabilities()
113131
connect( mCapabilitiesReply, SIGNAL( finished() ), this, SLOT( capabilitiesReplyFinished() ) );
114132
}
115133

116-
void QgsWFSConnection::capabilitiesReplyFinished()
134+
void QgsWFSCapabilities::capabilitiesReplyFinished()
117135
{
118136
// handle network errors
119137
if ( mCapabilitiesReply->error() != QNetworkReply::NoError )
120138
{
121-
mErrorCode = QgsWFSConnection::NetworkError;
139+
mErrorCode = QgsWFSCapabilities::NetworkError;
122140
mErrorMessage = mCapabilitiesReply->errorString();
123141
emit gotCapabilities();
124142
return;
@@ -149,7 +167,7 @@ void QgsWFSConnection::capabilitiesReplyFinished()
149167
QDomDocument capabilitiesDocument;
150168
if ( !capabilitiesDocument.setContent( buffer, true, &capabilitiesDocError ) )
151169
{
152-
mErrorCode = QgsWFSConnection::XmlError;
170+
mErrorCode = QgsWFSCapabilities::XmlError;
153171
mErrorMessage = capabilitiesDocError;
154172
emit gotCapabilities();
155173
return;
@@ -163,7 +181,7 @@ void QgsWFSConnection::capabilitiesReplyFinished()
163181
QDomNode ex = doc.firstChild();
164182
QString exc = ex.toElement().attribute( "exceptionCode", "Exception" );
165183
QDomElement ext = ex.firstChild().toElement();
166-
mErrorCode = QgsWFSConnection::ServerExceptionError;
184+
mErrorCode = QgsWFSCapabilities::ServerExceptionError;
167185
mErrorMessage = exc + ": " + ext.firstChild().nodeValue();
168186
emit gotCapabilities();
169187
return;
@@ -226,31 +244,3 @@ void QgsWFSConnection::capabilitiesReplyFinished()
226244
emit gotCapabilities();
227245
}
228246

229-
230-
231-
232-
QStringList QgsWFSConnection::connectionList()
233-
{
234-
QSettings settings;
235-
settings.beginGroup( "/Qgis/connections-wfs" );
236-
return settings.childGroups();
237-
}
238-
239-
QString QgsWFSConnection::selectedConnection()
240-
{
241-
QSettings settings;
242-
return settings.value( "/Qgis/connections-wfs/selected" ).toString();
243-
}
244-
245-
void QgsWFSConnection::setSelectedConnection( QString name )
246-
{
247-
QSettings settings;
248-
settings.setValue( "/Qgis/connections-wfs/selected", name );
249-
}
250-
251-
void QgsWFSConnection::deleteConnection( QString name )
252-
{
253-
QSettings settings;
254-
settings.remove( "/Qgis/connections-wfs/" + name );
255-
settings.remove( "/Qgis/WFS/" + name );
256-
}

src/providers/wfs/qgswfsconnection.h renamed to src/providers/wfs/qgswfscapabilities.h

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
1-
#ifndef QGSWFSCONNECTION_H
2-
#define QGSWFSCONNECTION_H
1+
#ifndef QGSWFSCAPABILITIES_H
2+
#define QGSWFSCAPABILITIES_H
33

44
#include <QObject>
55

66
#include "qgsrectangle.h"
7+
#include "qgsdatasourceuri.h"
78

89
class QNetworkReply;
910

10-
class QgsWFSConnection : public QObject
11+
class QgsWFSCapabilities : public QObject
1112
{
1213
Q_OBJECT
1314
public:
14-
explicit QgsWFSConnection( QString connName, QObject *parent = 0 );
15+
//explicit QgsWFSCapabilities( QString connName, QObject *parent = 0 );
16+
QgsWFSCapabilities( QString theUri );
1517

16-
static QStringList connectionList();
17-
18-
static void deleteConnection( QString name );
19-
20-
static QString selectedConnection();
21-
static void setSelectedConnection( QString name );
18+
//! Append ? or & if necessary
19+
QString prepareUri( QString uri );
2220

2321
//! base service URI
24-
QString uri() const { return mUri; }
22+
QString uri() const { return mBaseUrl; }
2523
//! URI to get capabilities
2624
QString uriGetCapabilities() const;
2725
//! URI to get schema of wfs layer
@@ -67,13 +65,17 @@ class QgsWFSConnection : public QObject
6765
void capabilitiesReplyFinished();
6866

6967
protected:
70-
QString mConnName;
71-
QString mUri;
68+
//QString mConnName;
69+
//QString mUri;
70+
71+
QgsDataSourceURI mUri;
72+
73+
QString mBaseUrl;
7274

7375
QNetworkReply *mCapabilitiesReply;
7476
GetCapabilities mCaps;
7577
ErrorCode mErrorCode;
7678
QString mErrorMessage;
7779
};
7880

79-
#endif // QGSWFSCONNECTION_H
81+
#endif // QGSWFSCAPABILITIES_H

src/providers/wfs/qgswfsdataitems.cpp

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#include "qgswfsdataitems.h"
22

33
#include "qgswfsprovider.h"
4-
#include "qgswfsconnection.h"
4+
#include "qgsowsconnection.h"
5+
#include "qgswfscapabilities.h"
56
#include "qgswfssourceselect.h"
67

78
#include "qgsnewhttpconnection.h"
@@ -10,10 +11,10 @@
1011
#include <QCoreApplication>
1112

1213

13-
QgsWFSLayerItem::QgsWFSLayerItem( QgsDataItem* parent, QString connName, QString name, QString title )
14+
QgsWFSLayerItem::QgsWFSLayerItem( QgsDataItem* parent, QString name, QgsDataSourceURI uri, QString featureType, QString title )
1415
: QgsLayerItem( parent, title, parent->path() + "/" + name, QString(), QgsLayerItem::Vector, "WFS" )
1516
{
16-
mUri = QgsWFSConnection( connName ).uriGetFeature( name );
17+
mUri = QgsWFSCapabilities( uri.encodedUri() ).uriGetFeature( featureType );
1718
mPopulated = true;
1819
}
1920

@@ -24,7 +25,7 @@ QgsWFSLayerItem::~QgsWFSLayerItem()
2425
////
2526

2627
QgsWFSConnectionItem::QgsWFSConnectionItem( QgsDataItem* parent, QString name, QString path )
27-
: QgsDataCollectionItem( parent, name, path ), mName( name ), mConn( NULL )
28+
: QgsDataCollectionItem( parent, name, path ), mName( name ), mCapabilities( NULL )
2829
{
2930
mIcon = QIcon( getThemePixmap( "mIconConnect.png" ) );
3031
}
@@ -36,23 +37,29 @@ QgsWFSConnectionItem::~QgsWFSConnectionItem()
3637
QVector<QgsDataItem*> QgsWFSConnectionItem::createChildren()
3738
{
3839
mGotCapabilities = false;
39-
mConn = new QgsWFSConnection( mName, this );
40-
connect( mConn, SIGNAL( gotCapabilities() ), this, SLOT( gotCapabilities() ) );
4140

42-
mConn->requestCapabilities();
41+
QgsOWSConnection connection( "WFS", mName );
42+
QgsDataSourceURI uri = connection.uri();
43+
QString encodedUri = uri.encodedUri();
44+
45+
mCapabilities = new QgsWFSCapabilities( encodedUri );
46+
connect( mCapabilities, SIGNAL( gotCapabilities() ), this, SLOT( gotCapabilities() ) );
47+
48+
mCapabilities->requestCapabilities();
4349

4450
while ( !mGotCapabilities )
4551
{
4652
QCoreApplication::processEvents( QEventLoop::ExcludeUserInputEvents );
4753
}
4854

4955
QVector<QgsDataItem*> layers;
50-
if ( mConn->errorCode() == QgsWFSConnection::NoError )
56+
if ( mCapabilities->errorCode() == QgsWFSCapabilities::NoError )
5157
{
52-
QgsWFSConnection::GetCapabilities caps = mConn->capabilities();
53-
foreach( const QgsWFSConnection::FeatureType& featureType, caps.featureTypes )
58+
QgsWFSCapabilities::GetCapabilities caps = mCapabilities->capabilities();
59+
foreach( const QgsWFSCapabilities::FeatureType& featureType, caps.featureTypes )
5460
{
55-
QgsWFSLayerItem* layer = new QgsWFSLayerItem( this, mName, featureType.name, featureType.title );
61+
//QgsWFSLayerItem* layer = new QgsWFSLayerItem( this, mName, featureType.name, featureType.title );
62+
QgsWFSLayerItem* layer = new QgsWFSLayerItem( this, mName, uri, featureType.name, featureType.title );
5663
layers.append( layer );
5764
}
5865
}
@@ -61,8 +68,8 @@ QVector<QgsDataItem*> QgsWFSConnectionItem::createChildren()
6168
layers.append( new QgsErrorItem( this, tr( "Failed to retrieve layers" ), mPath + "/error" ) );
6269
}
6370

64-
mConn->deleteLater();
65-
mConn = NULL;
71+
mCapabilities->deleteLater();
72+
mCapabilities = NULL;
6673

6774
return layers;
6875
}
@@ -101,7 +108,7 @@ void QgsWFSConnectionItem::editConnection()
101108

102109
void QgsWFSConnectionItem::deleteConnection()
103110
{
104-
QgsWFSConnection::deleteConnection( mName );
111+
QgsOWSConnection::deleteConnection( "WFS", mName );
105112
// the parent should be updated
106113
mParent->refresh();
107114
}
@@ -127,7 +134,7 @@ QVector<QgsDataItem*> QgsWFSRootItem::createChildren()
127134
{
128135
QVector<QgsDataItem*> connections;
129136

130-
foreach( QString connName, QgsWFSConnection::connectionList() )
137+
foreach( QString connName, QgsOWSConnection::connectionList( "WFS" ) )
131138
{
132139
QgsDataItem * conn = new QgsWFSConnectionItem( this, connName, mPath + "/" + connName );
133140
connections.append( conn );

src/providers/wfs/qgswfsdataitems.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#define QGSWFSDATAITEMS_H
33

44
#include "qgsdataitem.h"
5+
#include "qgsdatasourceuri.h"
6+
#include "qgswfscapabilities.h"
57

68
class QgsWFSRootItem : public QgsDataCollectionItem
79
{
@@ -45,15 +47,15 @@ class QgsWFSConnectionItem : public QgsDataCollectionItem
4547
private:
4648
QString mName;
4749

48-
QgsWFSConnection* mConn;
50+
QgsWFSCapabilities* mCapabilities;
4951
bool mGotCapabilities;
5052
};
5153

5254

5355
class QgsWFSLayerItem : public QgsLayerItem
5456
{
5557
public:
56-
QgsWFSLayerItem( QgsDataItem* parent, QString connName, QString name, QString title );
58+
QgsWFSLayerItem( QgsDataItem* parent, QString name, QgsDataSourceURI uri, QString featureType, QString title );
5759
~QgsWFSLayerItem();
5860

5961
};

0 commit comments

Comments
 (0)