Revision 46904 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileWriter.java

View differences:

DbaseFileWriter.java
43 43
import org.gvsig.fmap.dal.feature.Feature;
44 44
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
45 45
import org.gvsig.fmap.dal.feature.FeatureType;
46
import org.gvsig.tools.logger.FilteredLogger;
47
import org.slf4j.Logger;
48
import org.slf4j.LoggerFactory;
46 49

  
47 50
/**
48 51
 * A DbaseFileReader is used to read a dbase III format file. The general use of
......
60 63
 * @author Ian Schneider
61 64
 */
62 65
public class DbaseFileWriter {
66
    
67
    private static final Logger LOGGER = LoggerFactory.getLogger(DbaseFileWriter.class);
63 68

  
64 69
    private final DbaseFileHeader header;
65 70
    private FieldFormatter formatter = new FieldFormatter();
......
70 75
    private int blankSize;
71 76

  
72 77
    private Charset charset;
78
    
79
    private FilteredLogger logger;
73 80

  
74 81
    /**
75 82
     * Create a DbaseFileWriter using the specified header and writing to the
......
236 243
//        if( buffer.position()!=descriptor.getOffsetInRecord() ) {
237 244
//            throw new RuntimeException("Encoding field '"+descriptor.getName()+"' found an incorrect offset.");
238 245
//        }
246
            String fieldName = attr.getName();
239 247
            if (feature.isNull(attr.getIndex())) {
240
                safeEncode(" ", fieldLen, false);
248
                safeEncode(fieldName, " ", fieldLen, false);
241 249
                return;
242 250
            }
243 251
            if (DataTypes.BOOLEAN == type) {
244 252
                boolean b = feature.getBoolean(attr.getIndex());
245
                safeEncode(b ? "T" : "F", 1, true);
253
                safeEncode(fieldName, b ? "T" : "F", 1, true);
246 254

  
247 255
            } else if (DataTypes.TIME == type) {
248 256
                Date date = feature.getTime(attr.getIndex());
249 257
                fieldString = formatter.formatTime(date);
250
                safeEncode(fieldString, fieldLen, false);
258
                safeEncode(fieldName, fieldString, fieldLen, false);
251 259

  
252 260
            } else if (DataTypes.TIMESTAMP == type) {
253 261
                Date date = feature.getTimestamp(attr.getIndex());
254 262
                fieldString = formatter.formatTimestamp(date);
255
                safeEncode(fieldString, fieldLen, false);
263
                safeEncode(fieldName, fieldString, fieldLen, false);
256 264

  
257 265
            } else if (DataTypes.DATE == type) {
258 266
                Date date = feature.getDate(attr.getIndex());
259 267
                fieldString = formatter.formatDate(date);
260
                safeEncode(fieldString, fieldLen, false);
268
                safeEncode(fieldName, fieldString, fieldLen, false);
261 269

  
262 270
            } else if (DataTypes.DECIMAL == type) {
263 271
                BigDecimal n = feature.getDecimal(attr.getIndex());
264 272
                fieldString = formatter.format(n, fieldLen);
265
                safeEncode(fieldString, fieldLen, false);
273
                safeEncode(fieldName, fieldString, fieldLen, false);
266 274

  
267 275
            } else if (DataTypes.DOUBLE == type) {
268 276
                double n = feature.getDouble(attr.getIndex());
269 277
                fieldString = formatter.format(n, fieldLen, descriptor.getScale());
270
                safeEncode(fieldString, fieldLen, false);
278
                safeEncode(fieldName, fieldString, fieldLen, false);
271 279

  
272 280
            } else if (DataTypes.FLOAT == type) {
273 281
                float n = feature.getFloat(attr.getIndex());
274 282
                fieldString = formatter.format(n, fieldLen, descriptor.getScale());
275
                safeEncode(fieldString, fieldLen, false);
283
                safeEncode(fieldName, fieldString, fieldLen, false);
276 284

  
277 285
            } else if (DataTypes.LONG == type) {
278 286
                long l = feature.getLong(attr.getIndex());
279 287
                fieldString = formatter.format(l, fieldLen);
280
                safeEncode(fieldString, fieldLen, false);
288
                safeEncode(fieldName, fieldString, fieldLen, false);
281 289

  
282 290
            } else if (DataTypes.INT == type) {
283 291
                int n = feature.getInt(attr.getIndex());
284 292
                fieldString = formatter.format(n, fieldLen);
285
                safeEncode(fieldString, fieldLen, false);
293
                safeEncode(fieldName, fieldString, fieldLen, false);
286 294

  
287 295
            } else if (DataTypes.BYTE == type) {
288 296
                int n = feature.getInt(attr.getIndex());
289 297
                fieldString = formatter.format(n, fieldLen);
290
                safeEncode(fieldString, fieldLen, false);
298
                safeEncode(fieldName, fieldString, fieldLen, false);
291 299

  
292 300
            } else if (DataTypes.STRING == type) {
293 301
                String s = feature.getString(attr.getIndex());
294
                safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
302
                safeEncode(fieldName, StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
295 303

  
296 304
            } else {
297 305
                // Si no conocemos el tipo intentamos guardarlo como un string
298 306
                String s = feature.getString(attr.getIndex());
299
                safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
307
                safeEncode(fieldName, StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
300 308

  
301 309
            }
302 310
        } catch (Exception ex) {
......
314 322
     *
315 323
     * @throws UnsupportedEncodingException
316 324
     */
317
    private void safeEncode(String in, int limit, boolean rightPadding) throws UnsupportedEncodingException {
325
    private void safeEncode(String fieldName, String in, int limit, boolean rightPadding) throws UnsupportedEncodingException {
318 326
        try {
319 327
            byte[] encodedString = in.getBytes(this.charset);
320 328
            if (encodedString.length > limit) {
329
                this.getLogger().error("'"+fieldName+"' field size ["+encodedString.length+"] exceeds limit "+limit);
321 330
                // too long, truncating
322 331
                /*
323 332
    			 * The block code bellow is equivalent to this simple code
......
487 496
        blank = charset.encode(" ");
488 497
        blankSize = blank.limit();
489 498
    }
499
    
500
    protected FilteredLogger getLogger() {
501
        if(this.logger == null){
502
            this.logger = new FilteredLogger(LOGGER, "DbaseFileWriter", 2000L);
503
        }
504
        return this.logger;
505
    }
490 506

  
491 507
}

Also available in: Unified diff