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: 2011-12-18 Functions: 25 21 84.0 %

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

Generated by: LCOV version 1.7