Author: tchemit Date: 2012-08-10 14:28:10 +0200 (Fri, 10 Aug 2012) New Revision: 394 Url: http://forge.codelutin.com/repositories/revision/sammoa/394 Log: improve dbf table model (more check on cleanValue) Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java 2012-08-10 12:26:41 UTC (rev 393) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java 2012-08-10 12:28:10 UTC (rev 394) @@ -5,6 +5,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -19,6 +21,10 @@ */ public class DbfTableModelBuilder { + /** Logger. */ + private static final Logger logger = + LoggerFactory.getLogger(DbfTableModelBuilder.class); + public static final int DEFAULT_STRING_LENGTH = 64; public static final int DEFAULT_INTEGER_LENGTH = 8; @@ -88,7 +94,7 @@ } public DbfTableModelBuilder booleanColumn(String name) { - return dbfColumn(newBooleanColumn( name )); + return dbfColumn(newBooleanColumn(name)); } public DbfTableModelBuilder integerColumn(String name) { @@ -119,13 +125,13 @@ model.setDecimalCount(i, (byte) columnModel.getDecimalCount()); } columnMap = Maps.uniqueIndex(columns, - new Function<DbfColumnModel, String>() { + new Function<DbfColumnModel, String>() { - @Override - public String apply(DbfColumnModel input) { - return input.getName(); - } - }); + @Override + public String apply(DbfColumnModel input) { + return input.getName(); + } + }); return this; } @@ -163,8 +169,7 @@ if (value instanceof Integer) { result = Double.valueOf(String.valueOf(value)); } - } - else if (DbfTableModel.TYPE_TIMESTAMP == type) { + } else if (DbfTableModel.TYPE_TIMESTAMP == type) { // FIX for Date : no format is done if (value instanceof Date) { @@ -172,8 +177,7 @@ result = DbfTimestampConverter.toString(date); } - } - else if (DbfTableModel.TYPE_DATE == type) { + } else if (DbfTableModel.TYPE_DATE == type) { // FIX for Date : no format is done if (value instanceof Date) { @@ -181,9 +185,21 @@ result = DATE_FORMAT.format(date); } - }else if (DbfTableModel.TYPE_LOGICAL == type) { - result = ( (Boolean) value ) ? "T" : "F"; + } else if (DbfTableModel.TYPE_LOGICAL == type) { + result = ((Boolean) value) ? "T" : "F"; + } else if (value instanceof Enum) { + result = ((Enum) value).name(); + } else if (value instanceof Character) { + result = String.valueOf(value); } + + if (result != null && + !(result instanceof String) && + !(result instanceof Double)) { + if (logger.isWarnEnabled()) { + logger.warn("Incompatible data value {} (type {})", result, type); + } + } return result; }