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

       1                 : /******************************************************************************
       2                 :  * $Id: ogr_wfs.h 23702 2012-01-05 00:02:12Z 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                 :                                     int nVersion,
      45                 :                                     int bPropertyIsNotEqualToSupported,
      46                 :                                     int bUseFeatureId,
      47                 :                                     int bGmlObjectIdNeedsGMLPrefix,
      48                 :                                     int* pbOutNeedsNullCheck );
      49                 : 
      50                 : const char* FindSubStringInsensitive(const char* pszStr,
      51                 :                                      const char* pszSubStr);
      52                 : 
      53                 : /************************************************************************/
      54                 : /*                             OGRWFSLayer                              */
      55                 : /************************************************************************/
      56                 : 
      57                 : class OGRWFSDataSource;
      58                 : 
      59                 : class OGRWFSLayer : public OGRLayer
      60                 : {
      61                 :     OGRWFSDataSource*   poDS;
      62                 : 
      63                 :     OGRFeatureDefn*     poFeatureDefn;
      64                 :     int                 bGotApproximateLayerDefn;
      65                 :     GMLFeatureClass*    poGMLFeatureClass;
      66                 : 
      67                 :     int                  bAxisOrderAlreadyInverted;
      68                 :     OGRSpatialReference *poSRS;
      69                 : 
      70                 :     char*               pszBaseURL;
      71                 :     char*               pszName;
      72                 :     char*               pszNS;
      73                 :     char*               pszNSVal;
      74                 : 
      75                 :     OGRDataSource      *poBaseDS;
      76                 :     OGRLayer           *poBaseLayer;
      77                 :     int                 bHasFetched;
      78                 :     int                 bReloadNeeded;
      79                 : 
      80                 :     CPLString           osGeometryColumnName;
      81                 :     OGRwkbGeometryType  eGeomType;
      82                 :     int nFeatures;
      83                 : 
      84                 :     CPLString           MakeGetFeatureURL(int nMaxFeatures, int bRequestHits);
      85                 :     OGRDataSource*      FetchGetFeature(int nMaxFeatures);
      86                 :     OGRFeatureDefn*     DescribeFeatureType();
      87                 :     int                 ExecuteGetFeatureResultTypeHits();
      88                 : 
      89                 :     double              dfMinX, dfMinY, dfMaxX, dfMaxY;
      90                 :     int                 bHasExtents;
      91                 : 
      92                 :     OGRGeometry        *poFetchedFilterGeom;
      93                 : 
      94                 :     CPLString           osSQLWhere;
      95                 :     CPLString           osWFSWhere;
      96                 : 
      97                 :     CPLString           osTargetNamespace;
      98                 :     CPLString           GetDescribeFeatureTypeURL(int bWithNS);
      99                 : 
     100                 :     int                 nExpectedInserts;
     101                 :     CPLString           osGlobalInsert;
     102                 :     std::vector<CPLString> aosFIDList;
     103                 :     
     104                 :     int                 bInTransaction;
     105                 : 
     106                 :     CPLString           GetPostHeader();
     107                 : 
     108                 :     int                 bUseFeatureIdAtLayerLevel;
     109                 : 
     110                 :     int                 bPagingActive;
     111                 :     int                 nPagingStartIndex;
     112                 :     int                 nFeatureRead;
     113                 :     int                 nFeatureCountRequested;
     114                 : 
     115                 :     OGRFeatureDefn*     BuildLayerDefnFromFeatureClass(GMLFeatureClass* poClass);
     116                 : 
     117                 :     char                *pszRequiredOutputFormat;
     118                 :     char                *pszRequiredOutputFormatURL;
     119                 : 
     120                 :     CPLString            osFieldToSort;
     121                 :     int                  bAscFlag;
     122                 : 
     123                 :   public:
     124                 :                         OGRWFSLayer(OGRWFSDataSource* poDS,
     125                 :                                     OGRSpatialReference* poSRS,
     126                 :                                     int bAxisOrderAlreadyInverted,
     127                 :                                     const char* pszBaseURL,
     128                 :                                     const char* pszName,
     129                 :                                     const char* pszNS,
     130                 :                                     const char* pszNSVal);
     131                 : 
     132                 :                         ~OGRWFSLayer();
     133                 : 
     134                 :     OGRWFSLayer*                Clone();
     135                 : 
     136                 : 
     137            9064 :     const char                 *GetName() { return pszName; }
     138                 : 
     139                 :     virtual void                ResetReading();
     140                 :     virtual OGRFeature*         GetNextFeature();
     141                 :     virtual OGRFeature*         GetFeature(long nFID);
     142                 : 
     143                 :     virtual OGRFeatureDefn *    GetLayerDefn();
     144                 : 
     145               0 :     virtual const char *GetGeometryColumn() { return osGeometryColumnName; }
     146                 : 
     147                 :     virtual int                 TestCapability( const char * );
     148                 : 
     149                 :     virtual OGRSpatialReference *GetSpatialRef();
     150                 : 
     151                 :     virtual void        SetSpatialFilter( OGRGeometry * );
     152                 : 
     153                 :     virtual OGRErr      SetAttributeFilter( const char * );
     154                 : 
     155                 :     virtual int         GetFeatureCount( int bForce = TRUE );
     156                 : 
     157                 :     void                SetExtents(double dfMinX, double dfMinY, double dfMaxX, double dfMaxY);
     158                 :     virtual OGRErr      GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
     159                 : 
     160                 :     virtual OGRErr      CreateFeature( OGRFeature *poFeature );
     161                 :     virtual OGRErr      SetFeature( OGRFeature *poFeature );
     162                 :     virtual OGRErr      DeleteFeature( long nFID );
     163                 : 
     164                 :     virtual OGRErr      StartTransaction();
     165                 :     virtual OGRErr      CommitTransaction();
     166                 :     virtual OGRErr      RollbackTransaction();
     167                 : 
     168             248 :     int                 HasLayerDefn() { return poFeatureDefn != NULL; }
     169                 : 
     170                 :     OGRFeatureDefn*     ParseSchema(CPLXMLNode* psSchema);
     171                 :     OGRFeatureDefn*     BuildLayerDefn(OGRFeatureDefn* poSrcFDefn = NULL);
     172                 : 
     173                 :     OGRErr              DeleteFromFilter( CPLString osOGCFilter );
     174                 : 
     175               0 :     const std::vector<CPLString>& GetLastInsertedFIDList() { return aosFIDList; }
     176                 : 
     177                 :     const char         *GetShortName();
     178                 : 
     179                 :     void                SetRequiredOutputFormat(const char* pszRequiredOutputFormatIn);
     180                 : 
     181                 :     const char         *GetRequiredOutputFormat() { return pszRequiredOutputFormat; };
     182             166 :     const char         *GetRequiredOutputFormatURL() { return pszRequiredOutputFormatURL; };
     183                 : 
     184                 :     void                SetOrderBy(const char* pszFieldToSort, int bAscFlag);
     185               2 :     int                 HasGotApproximateLayerDefn() { GetLayerDefn(); return bGotApproximateLayerDefn; }
     186                 : };
     187                 : 
     188                 : /************************************************************************/
     189                 : /*                           OGRWFSDataSource                           */
     190                 : /************************************************************************/
     191                 : 
     192                 : class OGRWFSDataSource : public OGRDataSource
     193                 : {
     194                 :     char*               pszName;
     195                 :     int                 bRewriteFile;
     196                 :     CPLXMLNode*         psFileXML;
     197                 : 
     198                 :     OGRWFSLayer**       papoLayers;
     199                 :     int                 nLayers;
     200                 :     std::map<OGRLayer*, OGRLayer*> oMap;
     201                 : 
     202                 :     int                 bUpdate;
     203                 : 
     204                 :     int                 bGetFeatureSupportHits;
     205                 :     CPLString           osVersion;
     206                 :     int                 bNeedNAMESPACE;
     207                 :     int                 bHasMinOperators;
     208                 :     int                 bHasNullCheck;
     209                 :     int                 bPropertyIsNotEqualToSupported;
     210                 :     int                 bUseFeatureId;
     211                 :     int                 bGmlObjectIdNeedsGMLPrefix;
     212                 :     int                 bRequiresEnvelopeSpatialFilter;
     213                 :     int                 DetectRequiresEnvelopeSpatialFilter(CPLXMLNode* psRoot);
     214                 : 
     215                 :     int                 bTransactionSupport;
     216                 :     char**              papszIdGenMethods;
     217                 :     int                 DetectTransactionSupport(CPLXMLNode* psRoot);
     218                 : 
     219                 :     CPLString           osBaseURL;
     220                 :     CPLString           osPostTransactionURL;
     221                 : 
     222                 :     CPLXMLNode*         LoadFromFile( const char * pszFilename );
     223                 : 
     224                 :     int                 bUseHttp10;
     225                 : 
     226                 :     char**              papszHttpOptions;
     227                 : 
     228                 :     int                 bPagingAllowed;
     229                 :     int                 nPageSize;
     230                 : 
     231                 :     int                 bIsGEOSERVER;
     232                 : 
     233                 :     int                 bLoadMultipleLayerDefn;
     234                 :     std::set<CPLString> aoSetAlreadyTriedLayers;
     235                 : 
     236                 :     CPLString           osLayerMetadataCSV;
     237                 :     CPLString           osLayerMetadataTmpFileName;
     238                 :     OGRDataSource      *poLayerMetadataDS;
     239                 :     OGRLayer           *poLayerMetadataLayer;
     240                 : 
     241                 :     CPLString           osGetCapabilities;
     242                 :     OGRDataSource      *poLayerGetCapabilitiesDS;
     243                 :     OGRLayer           *poLayerGetCapabilitiesLayer;
     244                 : 
     245                 :     int                 bKeepLayerNamePrefix;
     246                 : 
     247                 :     CPLHTTPResult*      SendGetCapabilities(const char* pszBaseURL,
     248                 :                                             CPLString& osTypeName);
     249                 : 
     250                 :     int                 GetLayerIndex(const char* pszName);
     251                 : 
     252                 :   public:
     253                 :                         OGRWFSDataSource();
     254                 :                         ~OGRWFSDataSource();
     255                 : 
     256                 :     int                 Open( const char * pszFilename,
     257                 :                               int bUpdate );
     258                 : 
     259              18 :     virtual const char*         GetName() { return pszName; }
     260                 : 
     261               6 :     virtual int                 GetLayerCount() { return nLayers; }
     262                 :     virtual OGRLayer*           GetLayer( int );
     263                 :     virtual OGRLayer*           GetLayerByName(const char* pszLayerName);
     264                 : 
     265                 :     virtual int                 TestCapability( const char * );
     266                 : 
     267                 :     virtual OGRLayer *          ExecuteSQL( const char *pszSQLCommand,
     268                 :                                         OGRGeometry *poSpatialFilter,
     269                 :                                         const char *pszDialect );
     270                 :     virtual void                ReleaseResultSet( OGRLayer * poResultsSet );
     271                 : 
     272               6 :     int                         UpdateMode() { return bUpdate; }
     273               6 :     int                         SupportTransactions() { return bTransactionSupport; }
     274               0 :     void                        DisableSupportHits() { bGetFeatureSupportHits = FALSE; }
     275              26 :     int                         GetFeatureSupportHits() { return bGetFeatureSupportHits; }
     276             124 :     const char                 *GetVersion() { return osVersion.c_str(); }
     277                 : 
     278                 :     int                         IsOldDeegree(const char* pszErrorString);
     279              26 :     int                         GetNeedNAMESPACE() { return bNeedNAMESPACE; }
     280              34 :     int                         HasMinOperators() { return bHasMinOperators; }
     281               0 :     int                         HasNullCheck() { return bHasNullCheck; }
     282              14 :     int                         UseFeatureId() { return bUseFeatureId; }
     283               2 :     int                         RequiresEnvelopeSpatialFilter() { return bRequiresEnvelopeSpatialFilter; }
     284               0 :     void                        SetGmlObjectIdNeedsGMLPrefix() { bGmlObjectIdNeedsGMLPrefix = TRUE; }
     285              26 :     int                         DoesGmlObjectIdNeedGMLPrefix() { return bGmlObjectIdNeedsGMLPrefix; }
     286                 : 
     287               2 :     void                        SetPropertyIsNotEqualToUnSupported() { bPropertyIsNotEqualToSupported = FALSE; }
     288              26 :     int                         PropertyIsNotEqualToSupported() { return bPropertyIsNotEqualToSupported; }
     289                 : 
     290                 :     CPLString                   GetPostTransactionURL();
     291                 : 
     292                 :     void                        SaveLayerSchema(const char* pszLayerName, CPLXMLNode* psSchema);
     293                 : 
     294                 :     CPLHTTPResult*              HTTPFetch( const char* pszURL, char** papszOptions );
     295                 : 
     296              36 :     int                         IsPagingAllowed() { return bPagingAllowed; }
     297               0 :     int                         GetPageSize() { return nPageSize; }
     298                 : 
     299                 :     void                        LoadMultipleLayerDefn(const char* pszLayerName,
     300                 :                                                       char* pszNS, char* pszNSVal);
     301                 : 
     302              90 :     int                         GetKeepLayerNamePrefix() { return bKeepLayerNamePrefix; }
     303                 : };
     304                 : 
     305                 : /************************************************************************/
     306                 : /*                             OGRWFSDriver                             */
     307                 : /************************************************************************/
     308                 : 
     309                 : class OGRWFSDriver : public OGRSFDriver
     310             389 : {
     311                 :   public:
     312                 :                 ~OGRWFSDriver();
     313                 : 
     314                 :     virtual const char*         GetName();
     315                 :     virtual OGRDataSource*      Open( const char *, int );
     316                 :     virtual int                 TestCapability( const char * );
     317                 : };
     318                 : 
     319                 : 
     320                 : #endif /* ndef _OGR_WFS_H_INCLUDED */

Generated by: LCOV version 1.7