Revision 46893 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
DbaseFileWriter.java | ||
---|---|---|
219 | 219 |
} |
220 | 220 |
|
221 | 221 |
private void encodeField(FeatureAttributeDescriptor attr, Feature feature) throws java.io.UnsupportedEncodingException, UnsupportedEncodingException { |
222 |
DbaseFieldDescriptor descriptor = this.header.getFieldDescription(attr.getName()); |
|
222 |
if (attr == null) { |
|
223 |
throw new NullPointerException("attr is NULL"); |
|
224 |
} |
|
225 |
if (feature == null) { |
|
226 |
throw new NullPointerException("feature is NULL"); |
|
227 |
} |
|
228 |
try { |
|
229 |
DbaseFieldDescriptor descriptor = this.header.getFieldDescription(attr.getName()); |
|
223 | 230 |
|
224 |
int type = attr.getType(); |
|
225 |
final int fieldLen = descriptor.getSize(); |
|
226 |
String fieldString; |
|
231 |
int type = attr.getType();
|
|
232 |
final int fieldLen = descriptor.getSize();
|
|
233 |
String fieldString;
|
|
227 | 234 |
|
228 | 235 |
// if( buffer.position()!=descriptor.getOffsetInRecord() ) { |
229 | 236 |
// throw new RuntimeException("Encoding field '"+descriptor.getName()+"' found an incorrect offset."); |
230 | 237 |
// } |
231 |
if( feature.isNull(attr.getIndex()) ) {
|
|
232 |
safeEncode(" ", fieldLen, false); |
|
233 |
return; |
|
234 |
} |
|
235 |
if (DataTypes.BOOLEAN == type) { |
|
236 |
boolean b = feature.getBoolean(attr.getIndex()); |
|
237 |
safeEncode(b? "T":"F", 1, true);
|
|
238 |
if (feature.isNull(attr.getIndex())) {
|
|
239 |
safeEncode(" ", fieldLen, false);
|
|
240 |
return;
|
|
241 |
}
|
|
242 |
if (DataTypes.BOOLEAN == type) {
|
|
243 |
boolean b = feature.getBoolean(attr.getIndex());
|
|
244 |
safeEncode(b ? "T" : "F", 1, true);
|
|
238 | 245 |
|
239 |
} else if (DataTypes.TIME == type) { |
|
240 |
Date date = feature.getTime(attr.getIndex()); |
|
241 |
fieldString = formatter.formatTime(date); |
|
242 |
safeEncode(fieldString, fieldLen, false); |
|
246 |
} else if (DataTypes.TIME == type) {
|
|
247 |
Date date = feature.getTime(attr.getIndex());
|
|
248 |
fieldString = formatter.formatTime(date);
|
|
249 |
safeEncode(fieldString, fieldLen, false);
|
|
243 | 250 |
|
244 |
} else if (DataTypes.TIMESTAMP == type) { |
|
245 |
Date date = feature.getTimestamp(attr.getIndex()); |
|
246 |
fieldString = formatter.formatTimestamp(date); |
|
247 |
safeEncode(fieldString, fieldLen, false); |
|
251 |
} else if (DataTypes.TIMESTAMP == type) {
|
|
252 |
Date date = feature.getTimestamp(attr.getIndex());
|
|
253 |
fieldString = formatter.formatTimestamp(date);
|
|
254 |
safeEncode(fieldString, fieldLen, false);
|
|
248 | 255 |
|
249 |
} else if (DataTypes.DATE == type) { |
|
250 |
Date date = feature.getDate(attr.getIndex()); |
|
251 |
fieldString = formatter.formatDate(date); |
|
252 |
safeEncode(fieldString, fieldLen, false); |
|
256 |
} else if (DataTypes.DATE == type) {
|
|
257 |
Date date = feature.getDate(attr.getIndex());
|
|
258 |
fieldString = formatter.formatDate(date);
|
|
259 |
safeEncode(fieldString, fieldLen, false);
|
|
253 | 260 |
|
254 |
} else if (DataTypes.DECIMAL == type) { |
|
255 |
BigDecimal n = feature.getDecimal(attr.getIndex()); |
|
256 |
fieldString = formatter.format(n, fieldLen); |
|
257 |
safeEncode(fieldString, fieldLen, false); |
|
261 |
} else if (DataTypes.DECIMAL == type) {
|
|
262 |
BigDecimal n = feature.getDecimal(attr.getIndex());
|
|
263 |
fieldString = formatter.format(n, fieldLen);
|
|
264 |
safeEncode(fieldString, fieldLen, false);
|
|
258 | 265 |
|
259 |
} else if (DataTypes.DOUBLE == type) { |
|
260 |
double n = feature.getDouble(attr.getIndex()); |
|
261 |
fieldString = formatter.format(n, fieldLen, descriptor.getScale()); |
|
262 |
safeEncode(fieldString, fieldLen, false); |
|
266 |
} else if (DataTypes.DOUBLE == type) {
|
|
267 |
double n = feature.getDouble(attr.getIndex());
|
|
268 |
fieldString = formatter.format(n, fieldLen, descriptor.getScale());
|
|
269 |
safeEncode(fieldString, fieldLen, false);
|
|
263 | 270 |
|
264 |
} else if (DataTypes.FLOAT == type) { |
|
265 |
float n = feature.getFloat(attr.getIndex()); |
|
266 |
fieldString = formatter.format(n, fieldLen, descriptor.getScale()); |
|
267 |
safeEncode(fieldString, fieldLen, false); |
|
271 |
} else if (DataTypes.FLOAT == type) {
|
|
272 |
float n = feature.getFloat(attr.getIndex());
|
|
273 |
fieldString = formatter.format(n, fieldLen, descriptor.getScale());
|
|
274 |
safeEncode(fieldString, fieldLen, false);
|
|
268 | 275 |
|
269 |
} else if (DataTypes.LONG == type) { |
|
270 |
long l = feature.getLong(attr.getIndex()); |
|
271 |
fieldString = formatter.format(l, fieldLen); |
|
272 |
safeEncode(fieldString, fieldLen, false); |
|
276 |
} else if (DataTypes.LONG == type) {
|
|
277 |
long l = feature.getLong(attr.getIndex());
|
|
278 |
fieldString = formatter.format(l, fieldLen);
|
|
279 |
safeEncode(fieldString, fieldLen, false);
|
|
273 | 280 |
|
274 |
} else if (DataTypes.INT == type) { |
|
275 |
int n = feature.getInt(attr.getIndex()); |
|
276 |
fieldString = formatter.format(n, fieldLen); |
|
277 |
safeEncode(fieldString, fieldLen, false); |
|
281 |
} else if (DataTypes.INT == type) {
|
|
282 |
int n = feature.getInt(attr.getIndex());
|
|
283 |
fieldString = formatter.format(n, fieldLen);
|
|
284 |
safeEncode(fieldString, fieldLen, false);
|
|
278 | 285 |
|
279 |
} else if (DataTypes.BYTE == type) { |
|
280 |
int n = feature.getInt(attr.getIndex()); |
|
281 |
fieldString = formatter.format(n, fieldLen); |
|
282 |
safeEncode(fieldString, fieldLen, false); |
|
286 |
} else if (DataTypes.BYTE == type) {
|
|
287 |
int n = feature.getInt(attr.getIndex());
|
|
288 |
fieldString = formatter.format(n, fieldLen);
|
|
289 |
safeEncode(fieldString, fieldLen, false);
|
|
283 | 290 |
|
284 |
} else if (DataTypes.STRING == type) { |
|
285 |
String s = feature.getString(attr.getIndex()); |
|
286 |
safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true); |
|
291 |
} else if (DataTypes.STRING == type) {
|
|
292 |
String s = feature.getString(attr.getIndex());
|
|
293 |
safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
|
|
287 | 294 |
|
288 |
} else { |
|
289 |
// Si no conocemos el tipo intentamos guardarlo como un string |
|
290 |
String s = feature.getString(attr.getIndex()); |
|
291 |
safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true); |
|
295 |
} else {
|
|
296 |
// Si no conocemos el tipo intentamos guardarlo como un string
|
|
297 |
String s = feature.getString(attr.getIndex());
|
|
298 |
safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
|
|
292 | 299 |
|
300 |
} |
|
301 |
} catch (Exception ex) { |
|
302 |
throw new RuntimeException("Can't encode field '" + attr.getName() + "'", ex); |
|
293 | 303 |
} |
294 | 304 |
|
295 | 305 |
} |
Also available in: Unified diff