LCOV - code coverage report
Current view: directory - ogr/ogrsf_frmts/wfs - ogr_wfs.h (source / functions) Found Hit Coverage
Test: gdal_filtered.info Lines: 25 21 84.0 %
Date: 2012-12-26 Functions: 25 21 84.0 %

       1                 : /******************************************************************************
       2                 :  * $Id: ogr_wfs.h 24791 2012-08-15 20:48:55Z rouault $
       3                 :  *
       4                 :  * Project:  WFS Translator
       5                 :  * Purpose:  Definition of classes for OGR WFS driver.
       6                 :  * Author:   Even Rouault, even dot rouault at mines dash paris dot org
       7                 :  *
       8                 :  ******************************************************************************
       9                 :  * Copyright (c) 2010, Even Rouault <even dot rouault at mines dash paris dot org>
      10                 :  *
      11                 :  * Permission is hereby granted, free of charge, to any person obtaining a
      12                 :  * copy of this software and associated documentation files (the "Software"),
      13                 :  * to deal in the Software without restriction, including without limitation
      14                 :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      15                 :  * and/or sell copies of the Software, and to permit persons to whom the
      16                 :  * Software is furnished to do so, subject to the following conditions:
      17                 :  *
      18                 :  * The above copyright notice and this permission notice shall be included
      19                 :  * in all copies or substantial portions of the Software.
      20                 :  *
      21                 :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      22                 :  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      23                 :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
      24                 :  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      25                 :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      26                 :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      27                 :  * DEALINGS IN THE SOFTWARE.
      28                 :  ****************************************************************************/
      29                 : 
      30                 : #ifndef _OGR_WFS_H_INCLUDED
      31                 : #define _OGR_WFS_H_INCLUDED
      32                 : 
      33                 : #include <vector>
      34                 : #include <set>
      35                 : #include <map>
      36                 : 
      37                 : #include "cpl_minixml.h"
      38                 : #include "ogrsf_frmts.h"
      39                 : #include "gmlreader.h"
      40                 : #include "cpl_http.h"
      41                 : 
      42                 : CPLXMLNode* WFSFindNode(CPLXMLNode* psXML, const char* pszRootName);
      43                 : CPLString WFS_TurnSQLFilterToOGCFilter( const char * pszFilter,
      44                 :                                         OGRFeatureDefn* poFDefn,
      45                 :                                         int nVersion,
      46                 :                                         int bPropertyIsNotEqualToSupported,
      47                 :                                         int bUseFeatureId,
      48                 :                                         int bGmlObjectIdNeedsGMLPrefix,
      49                 :                                         int* pbOutNeedsNullCheck );
      50                 : 
      51                 : const char* FindSubStringInsensitive(const char* pszStr,
      52                 :                                      const char* pszSubStr);
      53                 : 
      54                 : CPLString WFS_EscapeURL(const char* pszURL);
      55                 : 
      56                 : /************************************************************************/
      57                 : /*                             OGRWFSLayer                              */
      58                 : /************************************************************************/
      59                 : 
      60                 : class OGRWFSDataSource;
      61                 : 
      62                 : class OGRWFSLayer : public OGRLayer
      63                 : {
      64                 :     OGRWFSDataSource*   poDS;
      65                 : 
      66                 :     OGRFeatureDefn*     poFeatureDefn;
      67                 :     int                 bGotApproximateLayerDefn;
      68                 :     GMLFeatureClass*    poGMLFeatureClass;
      69                 : 
      70                 :     int                  bAxisOrderAlreadyInverted;
      71                 :     OGRSpatialReference *poSRS;
      72                 : 
      73                 :     char*               pszBaseURL;
      74                 :     char*               pszName;
      75                 :     char*               pszNS;
      76                 :     char*               pszNSVal;
      77                 : 
      78                 :     int                 bStreamingDS;
      79                 :     OGRDataSource      *poBaseDS;
      80                 :     OGRLayer           *poBaseLayer;
      81                 :     int                 bHasFetched;
      82                 :     int                 bReloadNeeded;
      83                 : 
      84                 :     CPLString           osGeometryColumnName;
      85                 :     OGRwkbGeometryType  eGeomType;
      86                 :     int nFeatures;
      87                 : 
      88                 :     CPLString           MakeGetFeatureURL(int nMaxFeatures, int bRequestHits);
      89                 :     int                 MustRetryIfNonCompliantServer(const char* pszServerAnswer);
      90                 :     OGRDataSource*      FetchGetFeature(int nMaxFeatures);
      91                 :     OGRFeatureDefn*     DescribeFeatureType();
      92                 :     int                 ExecuteGetFeatureResultTypeHits();
      93                 : 
      94                 :     double              dfMinX, dfMinY, dfMaxX, dfMaxY;
      95                 :     int                 bHasExtents;
      96                 : 
      97                 :     OGRGeometry        *poFetchedFilterGeom;
      98                 : 
      99                 :     CPLString           osSQLWhere;
     100                 :     CPLString           osWFSWhere;
     101                 : 
     102                 :     CPLString           osTargetNamespace;
     103                 :     CPLString           GetDescribeFeatureTypeURL(int bWithNS);
     104                 : 
     105                 :     int                 nExpectedInserts;
     106                 :     CPLString           osGlobalInsert;
     107                 :     std::vector<CPLString> aosFIDList;
     108                 :     
     109                 :     int                 bInTransaction;
     110                 : 
     111                 :     CPLString           GetPostHeader();
     112                 : 
     113                 :     int                 bUseFeatureIdAtLayerLevel;
     114                 : 
     115                 :     int                 bPagingActive;
     116                 :     int                 nPagingStartIndex;
     117                 :     int                 nFeatureRead;
     118                 :     int                 nFeatureCountRequested;
     119                 : 
     120                 :     OGRFeatureDefn*     BuildLayerDefnFromFeatureClass(GMLFeatureClass* poClass);
     121                 : 
     122                 :     char                *pszRequiredOutputFormat;
     123                 : 
     124                 :     CPLString            osFieldToSort;
     125                 :     int                  bAscFlag;
     126                 : 
     127                 :   public:
     128                 :                         OGRWFSLayer(OGRWFSDataSource* poDS,
     129                 :                                     OGRSpatialReference* poSRS,
     130                 :                                     int bAxisOrderAlreadyInverted,
     131                 :                                     const char* pszBaseURL,
     132                 :                                     const char* pszName,
     133                 :                                     const char* pszNS,
     134                 :                                     const char* pszNSVal);
     135                 : 
     136                 :                         ~OGRWFSLayer();
     137                 : 
     138                 :     OGRWFSLayer*                Clone();
     139                 : 
     140                 : 
     141            5713 :     const char                 *GetName() { return pszName; }
     142                 : 
     143                 :     virtual void                ResetReading();
     144                 :     virtual OGRFeature*         GetNextFeature();
     145                 :     virtual OGRFeature*         GetFeature(long nFID);
     146                 : 
     147                 :     virtual OGRFeatureDefn *    GetLayerDefn();
     148                 : 
     149               0 :     virtual const char *GetGeometryColumn() { return osGeometryColumnName; }
     150                 : 
     151                 :     virtual int                 TestCapability( const char * );
     152                 : 
     153                 :     virtual OGRSpatialReference *GetSpatialRef();
     154                 : 
     155                 :     virtual void        SetSpatialFilter( OGRGeometry * );
     156                 : 
     157                 :     virtual OGRErr      SetAttributeFilter( const char * );
     158                 : 
     159                 :     virtual int         GetFeatureCount( int bForce = TRUE );
     160                 : 
     161                 :     void                SetExtents(double dfMinX, double dfMinY, double dfMaxX, double dfMaxY);
     162                 :     virtual OGRErr      GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
     163                 : 
     164                 :     virtual OGRErr      CreateFeature( OGRFeature *poFeature );
     165                 :     virtual OGRErr      SetFeature( OGRFeature *poFeature );
     166                 :     virtual OGRErr      DeleteFeature( long nFID );
     167                 : 
     168                 :     virtual OGRErr      StartTransaction();
     169                 :     virtual OGRErr      CommitTransaction();
     170                 :     virtual OGRErr      RollbackTransaction();
     171                 : 
     172             238 :     int                 HasLayerDefn() { return poFeatureDefn != NULL; }
     173                 : 
     174                 :     OGRFeatureDefn*     ParseSchema(CPLXMLNode* psSchema);
     175                 :     OGRFeatureDefn*     BuildLayerDefn(OGRFeatureDefn* poSrcFDefn = NULL);
     176                 : 
     177                 :     OGRErr              DeleteFromFilter( CPLString osOGCFilter );
     178                 : 
     179               1 :     const std::vector<CPLString>& GetLastInsertedFIDList() { return aosFIDList; }
     180                 : 
     181                 :     const char         *GetShortName();
     182                 : 
     183                 :     void                SetRequiredOutputFormat(const char* pszRequiredOutputFormatIn);
     184                 : 
     185             147 :     const char         *GetRequiredOutputFormat() { return pszRequiredOutputFormat; };
     186                 : 
     187                 :     void                SetOrderBy(const char* pszFieldToSort, int bAscFlag);
     188               1 :     int                 HasGotApproximateLayerDefn() { GetLayerDefn(); return bGotApproximateLayerDefn; }
     189                 : };
     190                 : 
     191                 : /************************************************************************/
     192                 : /*                           OGRWFSDataSource                           */
     193                 : /************************************************************************/
     194                 : 
     195                 : class OGRWFSDataSource : public OGRDataSource
     196                 : {
     197                 :     char*               pszName;
     198                 :     int                 bRewriteFile;
     199                 :     CPLXMLNode*         psFileXML;
     200                 : 
     201                 :     OGRWFSLayer**       papoLayers;
     202                 :     int                 nLayers;
     203                 :     std::map<OGRLayer*, OGRLayer*> oMap;
     204                 : 
     205                 :     int                 bUpdate;
     206                 : 
     207                 :     int                 bGetFeatureSupportHits;
     208                 :     CPLString           osVersion;
     209                 :     int                 bNeedNAMESPACE;
     210                 :     int                 bHasMinOperators;
     211                 :     int                 bHasNullCheck;
     212                 :     int                 bPropertyIsNotEqualToSupported;
     213                 :     int                 bUseFeatureId;
     214                 :     int                 bGmlObjectIdNeedsGMLPrefix;
     215                 :     int                 bRequiresEnvelopeSpatialFilter;
     216                 :     int                 DetectRequiresEnvelopeSpatialFilter(CPLXMLNode* psRoot);
     217                 : 
     218                 :     int                 bTransactionSupport;
     219                 :     char**              papszIdGenMethods;
     220                 :     int                 DetectTransactionSupport(CPLXMLNode* psRoot);
     221                 : 
     222                 :     CPLString           osBaseURL;
     223                 :     CPLString           osPostTransactionURL;
     224                 : 
     225                 :     CPLXMLNode*         LoadFromFile( const char * pszFilename );
     226                 : 
     227                 :     int                 bUseHttp10;
     228                 : 
     229                 :     char**              papszHttpOptions;
     230                 : 
     231                 :     int                 bPagingAllowed;
     232                 :     int                 nPageSize;
     233                 : 
     234                 :     int                 bIsGEOSERVER;
     235                 : 
     236                 :     int                 bLoadMultipleLayerDefn;
     237                 :     std::set<CPLString> aoSetAlreadyTriedLayers;
     238                 : 
     239                 :     CPLString           osLayerMetadataCSV;
     240                 :     CPLString           osLayerMetadataTmpFileName;
     241                 :     OGRDataSource      *poLayerMetadataDS;
     242                 :     OGRLayer           *poLayerMetadataLayer;
     243                 : 
     244                 :     CPLString           osGetCapabilities;
     245                 :     OGRDataSource      *poLayerGetCapabilitiesDS;
     246                 :     OGRLayer           *poLayerGetCapabilitiesLayer;
     247                 : 
     248                 :     int                 bKeepLayerNamePrefix;
     249                 : 
     250                 :     CPLHTTPResult*      SendGetCapabilities(const char* pszBaseURL,
     251                 :                                             CPLString& osTypeName);
     252                 : 
     253                 :     int                 GetLayerIndex(const char* pszName);
     254                 : 
     255                 :   public:
     256                 :                         OGRWFSDataSource();
     257                 :                         ~OGRWFSDataSource();
     258                 : 
     259                 :     int                 Open( const char * pszFilename,
     260                 :                               int bUpdate );
     261                 : 
     262              22 :     virtual const char*         GetName() { return pszName; }
     263                 : 
     264               7 :     virtual int                 GetLayerCount() { return nLayers; }
     265                 :     virtual OGRLayer*           GetLayer( int );
     266                 :     virtual OGRLayer*           GetLayerByName(const char* pszLayerName);
     267                 : 
     268                 :     virtual int                 TestCapability( const char * );
     269                 : 
     270                 :     virtual OGRLayer *          ExecuteSQL( const char *pszSQLCommand,
     271                 :                                         OGRGeometry *poSpatialFilter,
     272                 :                                         const char *pszDialect );
     273                 :     virtual void                ReleaseResultSet( OGRLayer * poResultsSet );
     274                 : 
     275              15 :     int                         UpdateMode() { return bUpdate; }
     276              15 :     int                         SupportTransactions() { return bTransactionSupport; }
     277               0 :     void                        DisableSupportHits() { bGetFeatureSupportHits = FALSE; }
     278              25 :     int                         GetFeatureSupportHits() { return bGetFeatureSupportHits; }
     279             208 :     const char                 *GetVersion() { return osVersion.c_str(); }
     280                 : 
     281                 :     int                         IsOldDeegree(const char* pszErrorString);
     282              64 :     int                         GetNeedNAMESPACE() { return bNeedNAMESPACE; }
     283              36 :     int                         HasMinOperators() { return bHasMinOperators; }
     284               1 :     int                         HasNullCheck() { return bHasNullCheck; }
     285              18 :     int                         UseFeatureId() { return bUseFeatureId; }
     286               4 :     int                         RequiresEnvelopeSpatialFilter() { return bRequiresEnvelopeSpatialFilter; }
     287               0 :     void                        SetGmlObjectIdNeedsGMLPrefix() { bGmlObjectIdNeedsGMLPrefix = TRUE; }
     288              23 :     int                         DoesGmlObjectIdNeedGMLPrefix() { return bGmlObjectIdNeedsGMLPrefix; }
     289                 : 
     290               2 :     void                        SetPropertyIsNotEqualToUnSupported() { bPropertyIsNotEqualToSupported = FALSE; }
     291              23 :     int                         PropertyIsNotEqualToSupported() { return bPropertyIsNotEqualToSupported; }
     292                 : 
     293                 :     CPLString                   GetPostTransactionURL();
     294                 : 
     295                 :     void                        SaveLayerSchema(const char* pszLayerName, CPLXMLNode* psSchema);
     296                 : 
     297                 :     CPLHTTPResult*              HTTPFetch( const char* pszURL, char** papszOptions );
     298                 : 
     299              54 :     int                         IsPagingAllowed() { return bPagingAllowed; }
     300               0 :     int                         GetPageSize() { return nPageSize; }
     301                 : 
     302                 :     void                        LoadMultipleLayerDefn(const char* pszLayerName,
     303                 :                                                       char* pszNS, char* pszNSVal);
     304                 : 
     305                 :     int                         GetKeepLayerNamePrefix() { return bKeepLayerNamePrefix; }
     306                 : };
     307                 : 
     308                 : /************************************************************************/
     309                 : /*                             OGRWFSDriver                             */
     310                 : /************************************************************************/
     311                 : 
     312                 : class OGRWFSDriver : public OGRSFDriver
     313             226 : {
     314                 :   public:
     315                 :                 ~OGRWFSDriver();
     316                 : 
     317                 :     virtual const char*         GetName();
     318                 :     virtual OGRDataSource*      Open( const char *, int );
     319                 :     virtual int                 TestCapability( const char * );
     320                 : };
     321                 : 
     322                 : 
     323                 : #endif /* ndef _OGR_WFS_H_INCLUDED */

Generated by: LCOV version 1.7