@@ -17,6 +17,7 @@ email : sherman at mrcc.com
1717
1818#include " qgsogrprovider.h"
1919#include " qgslogger.h"
20+ #include " qgsmessagelog.h"
2021
2122#define CPL_SUPRESS_CPLUSPLUS
2223#include < gdal.h> // to collect version information
@@ -58,7 +59,8 @@ class QgsCPLErrorHandler
5859{
5960 static void CPL_STDCALL showError ( CPLErr errClass, int errNo, const char *msg )
6061 {
61- QgsLogger::warning ( QString ( " OGR[%1] error %2: %3" ).arg ( errClass ).arg ( errNo ).arg ( msg ) );
62+ if ( errNo != OGRERR_NONE )
63+ QgsMessageLog::logMessage ( QObject::tr ( " OGR[%1] error %2: %3" ).arg ( errClass ).arg ( errNo ).arg ( msg ), QObject::tr ( " OGR" ) );
6264 }
6365
6466 public:
@@ -189,13 +191,14 @@ QgsVectorLayerImport::ImportError QgsOgrProvider::createEmptyLayer(
189191
190192
191193QgsOgrProvider::QgsOgrProvider ( QString const & uri )
192- : QgsVectorDataProvider( uri ),
193- ogrDataSource( 0 ),
194- extent_( 0 ),
195- ogrLayer( 0 ),
196- ogrOrigLayer( 0 ),
197- ogrDriver( 0 ),
198- featuresCounted( -1 )
194+ : QgsVectorDataProvider( uri )
195+ , ogrDataSource( 0 )
196+ , extent_( 0 )
197+ , ogrLayer( 0 )
198+ , ogrOrigLayer( 0 )
199+ , ogrDriver( 0 )
200+ , valid( false )
201+ , featuresCounted( -1 )
199202{
200203 QgsCPLErrorHandler handler;
201204
@@ -272,14 +275,13 @@ QgsOgrProvider::QgsOgrProvider( QString const & uri )
272275 // TODO is in read-only mode, otherwise edit ops will fail
273276 // TODO: capabilities() should now reflect this; need to test.
274277 }
278+
275279 if ( ogrDataSource )
276280 {
277281
278282 QgsDebugMsg ( " Data source is valid" );
279283 QgsDebugMsg ( " OGR Driver was " + QString ( OGR_Dr_GetName ( ogrDriver ) ) );
280284
281- valid = true ;
282-
283285 ogrDriverName = OGR_Dr_GetName ( ogrDriver );
284286
285287 // We get the layer which was requested by the uri. The layername
@@ -294,20 +296,14 @@ QgsOgrProvider::QgsOgrProvider( QString const & uri )
294296 }
295297
296298 ogrLayer = ogrOrigLayer;
297- if (ogrLayer != NULL )
299+ if ( ogrLayer )
298300 {
299- setSubsetString ( mSubsetString );
300- }
301- else
302- {
303- valid = false ;
301+ valid = setSubsetString ( mSubsetString );
304302 }
305303 }
306304 else
307305 {
308- QgsLogger::critical ( " Data source is invalid" );
309- QgsLogger::critical ( QString::fromUtf8 ( CPLGetLastErrorMsg () ) );
310- valid = false ;
306+ QgsMessageLog::logMessage ( tr ( " Data source is invalid (%1)" ).arg ( QString::fromUtf8 ( CPLGetLastErrorMsg () ) ), tr ( " OGR" ) );
311307 }
312308
313309 // FIXME: sync with app/qgsnewvectorlayerdialog.cpp
@@ -426,10 +422,11 @@ QString QgsOgrProvider::subsetString()
426422QStringList QgsOgrProvider::subLayers () const
427423{
428424 QStringList theList = QStringList ();
429- if ( ! valid )
425+ if ( !valid )
430426 {
431427 return theList;
432428 }
429+
433430 for ( unsigned int i = 0 ; i < layerCount () ; i++ )
434431 {
435432 QString theLayerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( OGR_DS_GetLayer ( ogrDataSource, i ) ) ) );
@@ -630,7 +627,7 @@ bool QgsOgrProvider::nextFeature( QgsFeature& feature )
630627
631628 if ( !valid )
632629 {
633- QgsLogger::warning ( " Read attempt on an invalid shapefile data source" );
630+ QgsMessageLog::logMessage ( tr ( " Read attempt on an invalid shapefile data source" ), tr ( " OGR " ) );
634631 return false ;
635632 }
636633
@@ -994,15 +991,15 @@ bool QgsOgrProvider::addFeature( QgsFeature& f )
994991 break ;
995992
996993 default :
997- QgsLogger::warning ( " QgsOgrProvider::addFeature, no type found" );
994+ QgsMessageLog::logMessage ( tr ( " type %1 for attribute %2 not found" ). arg ( type ). arg ( targetAttributeId ), tr ( " OGR " ) );
998995 break ;
999996 }
1000997 }
1001998 }
1002999
10031000 if ( OGR_L_CreateFeature ( ogrLayer, feature ) != OGRERR_NONE )
10041001 {
1005- QgsLogger::warning ( " Writing of the feature failed" );
1002+ QgsMessageLog::logMessage ( tr ( " Writing of the feature %1 failed" ). arg ( f. id () ), tr ( " OGR " ) );
10061003 returnValue = false ;
10071004 }
10081005 else
@@ -1059,7 +1056,7 @@ bool QgsOgrProvider::addAttributes( const QList<QgsField> &attributes )
10591056 type = OFTString;
10601057 break ;
10611058 default :
1062- QgsLogger::warning ( QString ( " QgsOgrProvider::addAttributes, type %1 not found" ).arg ( iter->typeName () ) );
1059+ QgsMessageLog::logMessage ( tr ( " type %1 for field %2 not found" ).arg ( iter->typeName () ). arg ( iter-> name () ), tr ( " OGR " ) );
10631060 returnvalue = false ;
10641061 continue ;
10651062 }
@@ -1070,7 +1067,7 @@ bool QgsOgrProvider::addAttributes( const QList<QgsField> &attributes )
10701067
10711068 if ( OGR_L_CreateField ( ogrLayer, fielddefn, true ) != OGRERR_NONE )
10721069 {
1073- QgsLogger::warning ( " QgsOgrProvider.cpp: writing of field failed" );
1070+ QgsMessageLog::logMessage ( tr ( " writing of field %1 failed" ). arg ( iter-> name () ), tr ( " OGR " ) );
10741071 returnvalue = false ;
10751072 }
10761073 OGR_Fld_Destroy ( fielddefn );
@@ -1090,7 +1087,7 @@ bool QgsOgrProvider::deleteAttributes( const QgsAttributeIds &attributes )
10901087 {
10911088 if ( OGR_L_DeleteField ( ogrLayer, attr ) != OGRERR_NONE )
10921089 {
1093- QgsDebugMsg ( " Failed to delete attribute " + QString::number ( attr ) );
1090+ QgsMessageLog::logMessage ( tr ( " Failed to delete attribute %1 " ). arg ( attr ), tr ( " OGR " ) );
10941091 res = false ;
10951092 }
10961093 }
@@ -1119,15 +1116,15 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
11191116
11201117 if ( FID_TO_NUMBER ( fid ) > std::numeric_limits<long >::max () )
11211118 {
1122- QgsLogger::warning ( " QgsOgrProvider::changeAttributeValues, feature id too large for OGR" );
1119+ QgsMessageLog::logMessage ( tr ( " Feature id %1 too large for OGR" ). arg ( fid ), tr ( " OGR " ) );
11231120 continue ;
11241121 }
11251122
11261123 OGRFeatureH of = OGR_L_GetFeature ( ogrLayer, static_cast <long >( FID_TO_NUMBER ( fid ) ) );
11271124
11281125 if ( !of )
11291126 {
1130- QgsLogger::warning ( " QgsOgrProvider::changeAttributeValues, Cannot read feature, cannot change attributes " );
1127+ QgsMessageLog::logMessage ( tr ( " Feature %1 for attribute update not found. " ). arg ( fid ), tr ( " OGR " ) );
11311128 continue ;
11321129 }
11331130
@@ -1140,7 +1137,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
11401137 OGRFieldDefnH fd = OGR_F_GetFieldDefnRef ( of, f );
11411138 if ( !fd )
11421139 {
1143- QgsLogger::warning ( " QgsOgrProvider::changeAttributeValues, Field " + QString::number ( f ) + " doesn't exist " );
1140+ QgsMessageLog::logMessage ( tr ( " Field %1 of feature %2 doesn't exist. " ). arg ( f ). arg ( fid ), tr ( " OGR " ) );
11441141 continue ;
11451142 }
11461143
@@ -1165,7 +1162,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
11651162 OGR_F_SetFieldString ( of, f, mEncoding ->fromUnicode ( it2->toString () ).constData () );
11661163 break ;
11671164 default :
1168- QgsLogger::warning ( " QgsOgrProvider::changeAttributeValues, Unknown field type, cannot change attribute " );
1165+ QgsMessageLog::logMessage ( tr ( " Type %1 of attribute %2 of feature %3 unknown. " ). arg ( type ). arg ( fid ). arg ( f ), tr ( " OGR " ) );
11691166 break ;
11701167 }
11711168 }
@@ -1174,7 +1171,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
11741171 OGRErr res;
11751172 if (( res = OGR_L_SetFeature ( ogrLayer, of ) ) != OGRERR_NONE )
11761173 {
1177- QgsLogger::warning ( " QgsOgrProvider::changeAttributeValues, setting the feature failed: " + QString::number ( res ) );
1174+ QgsMessageLog::logMessage ( tr ( " Update of Feature %1 failed: %2 " ). arg ( fid ). arg ( res ), tr ( " OGR " ) );
11781175 }
11791176 }
11801177
@@ -1194,14 +1191,14 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
11941191 {
11951192 if ( FID_TO_NUMBER ( it.key () ) > std::numeric_limits<long >::max () )
11961193 {
1197- QgsLogger::warning ( " QgsOgrProvider::changeGeometryValues, fid too large for OGR" );
1194+ QgsMessageLog::logMessage ( tr ( " Feature id %1 too large for OGR" ). arg ( it. key () ), tr ( " OGR " ) );
11981195 continue ;
11991196 }
12001197
12011198 theOGRFeature = OGR_L_GetFeature ( ogrLayer, static_cast <long >( FID_TO_NUMBER ( it.key () ) ) );
12021199 if ( !theOGRFeature )
12031200 {
1204- QgsLogger::warning ( " QgsOgrProvider::changeGeometryValues, cannot find feature " );
1201+ QgsMessageLog::logMessage ( tr ( " Feature %1 not found for geometry update. " ). arg ( it. key () ), tr ( " OGR " ) );
12051202 continue ;
12061203 }
12071204
@@ -1211,22 +1208,22 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
12111208 &theNewGeometry,
12121209 it->wkbSize () ) != OGRERR_NONE )
12131210 {
1214- QgsLogger::warning ( " QgsOgrProvider::changeGeometryValues, error while creating new OGRGeometry " );
1211+ QgsMessageLog::logMessage ( tr ( " Creation of new geometry for feature %1 failed. " ). arg ( it. key () ), tr ( " OGR " ) );
12151212 OGR_G_DestroyGeometry ( theNewGeometry );
12161213 theNewGeometry = 0 ;
12171214 continue ;
12181215 }
12191216
12201217 if ( !theNewGeometry )
12211218 {
1222- QgsLogger::warning ( " QgsOgrProvider::changeGeometryValues, new geometry is NULL " );
1219+ QgsMessageLog::logMessage ( tr ( " Newly created geometry for feature % is null. " ). arg ( it. key () ), tr ( " OGR " ) );
12231220 continue ;
12241221 }
12251222
12261223 // set the new geometry
12271224 if (( res = OGR_F_SetGeometryDirectly ( theOGRFeature, theNewGeometry ) ) != OGRERR_NONE )
12281225 {
1229- QgsLogger::warning ( " QgsOgrProvider::changeGeometryValues, error while replacing geometry: " + QString::number ( res ) );
1226+ QgsMessageLog::logMessage ( tr ( " Geometry update for feature %1 failed: %2 " ). arg ( it. key () ). arg ( res ), tr ( " OGR " ) );
12301227 OGR_G_DestroyGeometry ( theNewGeometry );
12311228 theNewGeometry = 0 ;
12321229 continue ;
@@ -1235,7 +1232,7 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
12351232
12361233 if (( res = OGR_L_SetFeature ( ogrLayer, theOGRFeature ) ) != OGRERR_NONE )
12371234 {
1238- QgsLogger::warning ( " QgsOgrProvider::changeGeometryValues, error while setting feature: " + QString::number ( res ) );
1235+ QgsMessageLog::logMessage ( tr ( " Update of feature %1 failed: %2 " ). arg ( it. key () ). arg ( res ), tr ( " OGR " ) );
12391236 OGR_G_DestroyGeometry ( theNewGeometry );
12401237 theNewGeometry = 0 ;
12411238 continue ;
@@ -1317,7 +1314,7 @@ bool QgsOgrProvider::deleteFeature( QgsFeatureId id )
13171314{
13181315 if ( FID_TO_NUMBER ( id ) > std::numeric_limits<long >::max () )
13191316 {
1320- QgsDebugMsg ( " id too large for OGR" );
1317+ QgsMessageLog::logMessage ( tr ( " id %1 too large for OGR" ). arg ( id ), tr ( " OGR " ) );
13211318 return false ;
13221319 }
13231320
@@ -1425,7 +1422,7 @@ int QgsOgrProvider::capabilities() const
14251422
14261423 if ( mAttributeFields .size () == 0 )
14271424 {
1428- QgsDebugMsg ( " OGR doesn't handle shapefile without attributes well, ie. missing DBFs " );
1425+ QgsMessageLog::logMessage ( tr ( " Shapefiles without attribute are considered read-only. " ), tr ( " OGR " ) );
14291426 ability &= ~( AddFeatures | DeleteFeatures | ChangeAttributeValues | AddAttributes | DeleteAttributes );
14301427 }
14311428
@@ -1519,7 +1516,7 @@ QString createFilters( QString type )
15191516
15201517 if ( !driver )
15211518 {
1522- QgsLogger::warning ( " unable to get driver " + QString::number ( i ) );
1519+ QgsMessageLog::logMessage ( QObject::tr ( " Unable to get driver %1 " ). arg ( i ), QObject::tr ( " OGR " ) );
15231520 continue ;
15241521 }
15251522
@@ -1705,7 +1702,7 @@ QString createFilters( QString type )
17051702 {
17061703 // NOP, we don't know anything about the current driver
17071704 // with regards to a proper file filter string
1708- QgsDebugMsg ( " fileVectorFilters, unknown driver: " + driverName );
1705+ QgsDebugMsg ( QString ( " Unknown driver %1 for file filters. " ). arg ( driverName ) );
17091706 }
17101707
17111708 } // each loaded GDAL driver
@@ -1874,7 +1871,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
18741871 QString name = fldIt->first .left ( 10 );
18751872 if ( fieldNames.contains ( name ) )
18761873 {
1877- QgsDebugMsg ( QString ( " duplicate field (10 significant characters): %1" ).arg ( name ) );
1874+ QgsMessageLog::logMessage ( QObject::tr ( " Duplicate field (10 significant characters): %1" ).arg ( name ), QObject::tr ( " OGR " ) );
18781875 return false ;
18791876 }
18801877 fieldNames << name;
@@ -1938,7 +1935,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
19381935 break ;
19391936 default :
19401937 {
1941- QgsDebugMsg ( QString ( " Unknown vector type of: %1" ).arg (( int )( vectortype ) ) );
1938+ QgsMessageLog::logMessage ( QObject::tr ( " Unknown vector type of %1" ).arg (( int )( vectortype ) ), QObject::tr ( " OGR " ) );
19421939 return false ;
19431940 break ;
19441941 }
@@ -2008,7 +2005,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
20082005
20092006 if ( OGR_L_CreateField ( layer, field, true ) != OGRERR_NONE )
20102007 {
2011- QgsLogger::warning ( " creation of field failed" );
2008+ QgsMessageLog::logMessage ( QObject::tr ( " creation of field %1 failed" ). arg ( it-> first ), QObject::tr ( " OGR " ) );
20122009 }
20132010 }
20142011
@@ -2026,7 +2023,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
20262023 }
20272024 else
20282025 {
2029- QgsDebugMsg ( " Couldn't open file " + layerName + " .qpj " );
2026+ QgsMessageLog::logMessage ( QObject::tr ( " Couldn't create file %1.qpj " ). arg ( layerName ), QObject::tr ( " OGR " ) );
20302027 }
20312028 }
20322029
@@ -2042,7 +2039,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
20422039
20432040QgsCoordinateReferenceSystem QgsOgrProvider::crs ()
20442041{
2045- QgsDebugMsg ( " entering ." );
2042+ QgsDebugMsg ( " Entering ." );
20462043
20472044 QgsCoordinateReferenceSystem srs;
20482045
0 commit comments