@@ -17,6 +17,7 @@ email : sherman at mrcc.com
17
17
18
18
#include " qgsogrprovider.h"
19
19
#include " qgslogger.h"
20
+ #include " qgsmessagelog.h"
20
21
21
22
#define CPL_SUPRESS_CPLUSPLUS
22
23
#include < gdal.h> // to collect version information
@@ -58,7 +59,8 @@ class QgsCPLErrorHandler
58
59
{
59
60
static void CPL_STDCALL showError ( CPLErr errClass, int errNo, const char *msg )
60
61
{
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" ) );
62
64
}
63
65
64
66
public:
@@ -189,13 +191,14 @@ QgsVectorLayerImport::ImportError QgsOgrProvider::createEmptyLayer(
189
191
190
192
191
193
QgsOgrProvider::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 )
199
202
{
200
203
QgsCPLErrorHandler handler;
201
204
@@ -272,14 +275,13 @@ QgsOgrProvider::QgsOgrProvider( QString const & uri )
272
275
// TODO is in read-only mode, otherwise edit ops will fail
273
276
// TODO: capabilities() should now reflect this; need to test.
274
277
}
278
+
275
279
if ( ogrDataSource )
276
280
{
277
281
278
282
QgsDebugMsg ( " Data source is valid" );
279
283
QgsDebugMsg ( " OGR Driver was " + QString ( OGR_Dr_GetName ( ogrDriver ) ) );
280
284
281
- valid = true ;
282
-
283
285
ogrDriverName = OGR_Dr_GetName ( ogrDriver );
284
286
285
287
// We get the layer which was requested by the uri. The layername
@@ -294,20 +296,14 @@ QgsOgrProvider::QgsOgrProvider( QString const & uri )
294
296
}
295
297
296
298
ogrLayer = ogrOrigLayer;
297
- if (ogrLayer != NULL )
299
+ if ( ogrLayer )
298
300
{
299
- setSubsetString ( mSubsetString );
300
- }
301
- else
302
- {
303
- valid = false ;
301
+ valid = setSubsetString ( mSubsetString );
304
302
}
305
303
}
306
304
else
307
305
{
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" ) );
311
307
}
312
308
313
309
// FIXME: sync with app/qgsnewvectorlayerdialog.cpp
@@ -426,10 +422,11 @@ QString QgsOgrProvider::subsetString()
426
422
QStringList QgsOgrProvider::subLayers () const
427
423
{
428
424
QStringList theList = QStringList ();
429
- if ( ! valid )
425
+ if ( !valid )
430
426
{
431
427
return theList;
432
428
}
429
+
433
430
for ( unsigned int i = 0 ; i < layerCount () ; i++ )
434
431
{
435
432
QString theLayerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( OGR_DS_GetLayer ( ogrDataSource, i ) ) ) );
@@ -630,7 +627,7 @@ bool QgsOgrProvider::nextFeature( QgsFeature& feature )
630
627
631
628
if ( !valid )
632
629
{
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 " ) );
634
631
return false ;
635
632
}
636
633
@@ -994,15 +991,15 @@ bool QgsOgrProvider::addFeature( QgsFeature& f )
994
991
break ;
995
992
996
993
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 " ) );
998
995
break ;
999
996
}
1000
997
}
1001
998
}
1002
999
1003
1000
if ( OGR_L_CreateFeature ( ogrLayer, feature ) != OGRERR_NONE )
1004
1001
{
1005
- QgsLogger::warning ( " Writing of the feature failed" );
1002
+ QgsMessageLog::logMessage ( tr ( " Writing of the feature %1 failed" ). arg ( f. id () ), tr ( " OGR " ) );
1006
1003
returnValue = false ;
1007
1004
}
1008
1005
else
@@ -1059,7 +1056,7 @@ bool QgsOgrProvider::addAttributes( const QList<QgsField> &attributes )
1059
1056
type = OFTString;
1060
1057
break ;
1061
1058
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 " ) );
1063
1060
returnvalue = false ;
1064
1061
continue ;
1065
1062
}
@@ -1070,7 +1067,7 @@ bool QgsOgrProvider::addAttributes( const QList<QgsField> &attributes )
1070
1067
1071
1068
if ( OGR_L_CreateField ( ogrLayer, fielddefn, true ) != OGRERR_NONE )
1072
1069
{
1073
- QgsLogger::warning ( " QgsOgrProvider.cpp: writing of field failed" );
1070
+ QgsMessageLog::logMessage ( tr ( " writing of field %1 failed" ). arg ( iter-> name () ), tr ( " OGR " ) );
1074
1071
returnvalue = false ;
1075
1072
}
1076
1073
OGR_Fld_Destroy ( fielddefn );
@@ -1090,7 +1087,7 @@ bool QgsOgrProvider::deleteAttributes( const QgsAttributeIds &attributes )
1090
1087
{
1091
1088
if ( OGR_L_DeleteField ( ogrLayer, attr ) != OGRERR_NONE )
1092
1089
{
1093
- QgsDebugMsg ( " Failed to delete attribute " + QString::number ( attr ) );
1090
+ QgsMessageLog::logMessage ( tr ( " Failed to delete attribute %1 " ). arg ( attr ), tr ( " OGR " ) );
1094
1091
res = false ;
1095
1092
}
1096
1093
}
@@ -1119,15 +1116,15 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
1119
1116
1120
1117
if ( FID_TO_NUMBER ( fid ) > std::numeric_limits<long >::max () )
1121
1118
{
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 " ) );
1123
1120
continue ;
1124
1121
}
1125
1122
1126
1123
OGRFeatureH of = OGR_L_GetFeature ( ogrLayer, static_cast <long >( FID_TO_NUMBER ( fid ) ) );
1127
1124
1128
1125
if ( !of )
1129
1126
{
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 " ) );
1131
1128
continue ;
1132
1129
}
1133
1130
@@ -1140,7 +1137,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
1140
1137
OGRFieldDefnH fd = OGR_F_GetFieldDefnRef ( of, f );
1141
1138
if ( !fd )
1142
1139
{
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 " ) );
1144
1141
continue ;
1145
1142
}
1146
1143
@@ -1165,7 +1162,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
1165
1162
OGR_F_SetFieldString ( of, f, mEncoding ->fromUnicode ( it2->toString () ).constData () );
1166
1163
break ;
1167
1164
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 " ) );
1169
1166
break ;
1170
1167
}
1171
1168
}
@@ -1174,7 +1171,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
1174
1171
OGRErr res;
1175
1172
if (( res = OGR_L_SetFeature ( ogrLayer, of ) ) != OGRERR_NONE )
1176
1173
{
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 " ) );
1178
1175
}
1179
1176
}
1180
1177
@@ -1194,14 +1191,14 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
1194
1191
{
1195
1192
if ( FID_TO_NUMBER ( it.key () ) > std::numeric_limits<long >::max () )
1196
1193
{
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 " ) );
1198
1195
continue ;
1199
1196
}
1200
1197
1201
1198
theOGRFeature = OGR_L_GetFeature ( ogrLayer, static_cast <long >( FID_TO_NUMBER ( it.key () ) ) );
1202
1199
if ( !theOGRFeature )
1203
1200
{
1204
- QgsLogger::warning ( " QgsOgrProvider::changeGeometryValues, cannot find feature " );
1201
+ QgsMessageLog::logMessage ( tr ( " Feature %1 not found for geometry update. " ). arg ( it. key () ), tr ( " OGR " ) );
1205
1202
continue ;
1206
1203
}
1207
1204
@@ -1211,22 +1208,22 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
1211
1208
&theNewGeometry,
1212
1209
it->wkbSize () ) != OGRERR_NONE )
1213
1210
{
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 " ) );
1215
1212
OGR_G_DestroyGeometry ( theNewGeometry );
1216
1213
theNewGeometry = 0 ;
1217
1214
continue ;
1218
1215
}
1219
1216
1220
1217
if ( !theNewGeometry )
1221
1218
{
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 " ) );
1223
1220
continue ;
1224
1221
}
1225
1222
1226
1223
// set the new geometry
1227
1224
if (( res = OGR_F_SetGeometryDirectly ( theOGRFeature, theNewGeometry ) ) != OGRERR_NONE )
1228
1225
{
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 " ) );
1230
1227
OGR_G_DestroyGeometry ( theNewGeometry );
1231
1228
theNewGeometry = 0 ;
1232
1229
continue ;
@@ -1235,7 +1232,7 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
1235
1232
1236
1233
if (( res = OGR_L_SetFeature ( ogrLayer, theOGRFeature ) ) != OGRERR_NONE )
1237
1234
{
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 " ) );
1239
1236
OGR_G_DestroyGeometry ( theNewGeometry );
1240
1237
theNewGeometry = 0 ;
1241
1238
continue ;
@@ -1317,7 +1314,7 @@ bool QgsOgrProvider::deleteFeature( QgsFeatureId id )
1317
1314
{
1318
1315
if ( FID_TO_NUMBER ( id ) > std::numeric_limits<long >::max () )
1319
1316
{
1320
- QgsDebugMsg ( " id too large for OGR" );
1317
+ QgsMessageLog::logMessage ( tr ( " id %1 too large for OGR" ). arg ( id ), tr ( " OGR " ) );
1321
1318
return false ;
1322
1319
}
1323
1320
@@ -1425,7 +1422,7 @@ int QgsOgrProvider::capabilities() const
1425
1422
1426
1423
if ( mAttributeFields .size () == 0 )
1427
1424
{
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 " ) );
1429
1426
ability &= ~( AddFeatures | DeleteFeatures | ChangeAttributeValues | AddAttributes | DeleteAttributes );
1430
1427
}
1431
1428
@@ -1519,7 +1516,7 @@ QString createFilters( QString type )
1519
1516
1520
1517
if ( !driver )
1521
1518
{
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 " ) );
1523
1520
continue ;
1524
1521
}
1525
1522
@@ -1705,7 +1702,7 @@ QString createFilters( QString type )
1705
1702
{
1706
1703
// NOP, we don't know anything about the current driver
1707
1704
// 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 ) );
1709
1706
}
1710
1707
1711
1708
} // each loaded GDAL driver
@@ -1874,7 +1871,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
1874
1871
QString name = fldIt->first .left ( 10 );
1875
1872
if ( fieldNames.contains ( name ) )
1876
1873
{
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 " ) );
1878
1875
return false ;
1879
1876
}
1880
1877
fieldNames << name;
@@ -1938,7 +1935,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
1938
1935
break ;
1939
1936
default :
1940
1937
{
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 " ) );
1942
1939
return false ;
1943
1940
break ;
1944
1941
}
@@ -2008,7 +2005,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
2008
2005
2009
2006
if ( OGR_L_CreateField ( layer, field, true ) != OGRERR_NONE )
2010
2007
{
2011
- QgsLogger::warning ( " creation of field failed" );
2008
+ QgsMessageLog::logMessage ( QObject::tr ( " creation of field %1 failed" ). arg ( it-> first ), QObject::tr ( " OGR " ) );
2012
2009
}
2013
2010
}
2014
2011
@@ -2026,7 +2023,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
2026
2023
}
2027
2024
else
2028
2025
{
2029
- QgsDebugMsg ( " Couldn't open file " + layerName + " .qpj " );
2026
+ QgsMessageLog::logMessage ( QObject::tr ( " Couldn't create file %1.qpj " ). arg ( layerName ), QObject::tr ( " OGR " ) );
2030
2027
}
2031
2028
}
2032
2029
@@ -2042,7 +2039,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
2042
2039
2043
2040
QgsCoordinateReferenceSystem QgsOgrProvider::crs ()
2044
2041
{
2045
- QgsDebugMsg ( " entering ." );
2042
+ QgsDebugMsg ( " Entering ." );
2046
2043
2047
2044
QgsCoordinateReferenceSystem srs;
2048
2045
0 commit comments