Revision 44870
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/DbaseFileHeader.java | ||
---|---|---|
650 | 650 |
break; |
651 | 651 |
case DBFTYPE_FLOAT: |
652 | 652 |
if (dbfattr.getScale() > 0) { |
653 |
if (dbfattr.getPrecision() > DataType.DOUBLE_MAX_PRECISION |
|
654 |
|| dbfattr.getScale() > DataType.DOUBLE_MAX_PRECISION) { |
|
653 |
if (dbfattr.getSize() > DataType.DOUBLE_MAX_PRECISION+3) { |
|
655 | 654 |
attr = featureType.add(dbfattr.getName(), |
656 | 655 |
DataTypes.DECIMAL, dbfattr.getSize()); |
657 | 656 |
attr.setScale(dbfattr.getScale()); |
... | ... | |
659 | 658 |
attr.setDefaultValue(null); |
660 | 659 |
attr.setAllowNull(true); |
661 | 660 |
|
662 |
} else if (dbfattr.getPrecision() > DataType.FLOAT_MAX_PRECISION |
|
663 |
|| dbfattr.getScale() > DataType.FLOAT_MAX_PRECISION) { |
|
661 |
} else if (dbfattr.getSize() > DataType.FLOAT_MAX_PRECISION+3) { |
|
664 | 662 |
attr = featureType.add(dbfattr.getName(), |
665 | 663 |
DataTypes.DOUBLE, dbfattr.getSize()); |
666 | 664 |
attr.setScale(dbfattr.getScale()); |
... | ... | |
836 | 834 |
int requiredBytes = descriptor.getRequiredBytes(); |
837 | 835 |
switch (type) { |
838 | 836 |
case DataTypes.DECIMAL: |
839 |
header.addColumn(colName, 'N', requiredBytes>0?requiredBytes:precision+3, precision, scale);
|
|
837 |
header.addColumn(colName, DBFTYPE_NUMBER, requiredBytes>0?requiredBytes:precision+3, precision, scale);
|
|
840 | 838 |
break; |
841 | 839 |
case DataTypes.DOUBLE: |
842 |
header.addColumn(colName, 'F',
|
|
843 |
requiredBytes>0?requiredBytes:(precision+2>=DataType.DOUBLE_MAX_PRECISION?precision:precision+3),
|
|
840 |
header.addColumn(colName, DBFTYPE_FLOAT,
|
|
841 |
requiredBytes>0?requiredBytes:DataType.DOUBLE_MAX_PRECISION+3,
|
|
844 | 842 |
precision, scale |
845 | 843 |
); |
846 | 844 |
break; |
847 | 845 |
case DataTypes.FLOAT: |
848 |
header.addColumn(colName, 'F',
|
|
849 |
requiredBytes>0?requiredBytes:(precision+2>=DataType.FLOAT_MAX_PRECISION?precision:precision+3),
|
|
846 |
header.addColumn(colName, DBFTYPE_FLOAT,
|
|
847 |
requiredBytes>0?requiredBytes:DataType.FLOAT_MAX_PRECISION+3,
|
|
850 | 848 |
precision, scale |
851 | 849 |
); |
852 | 850 |
break; |
853 | 851 |
case DataTypes.INT: |
854 |
header.addColumn(colName, 'N',
|
|
852 |
header.addColumn(colName, DBFTYPE_NUMBER,
|
|
855 | 853 |
requiredBytes>0?requiredBytes:(precision>=DataType.INT_MAX_PRECISION?precision:precision+1), |
856 | 854 |
precision, scale |
857 | 855 |
); |
858 | 856 |
break; |
859 | 857 |
case DataTypes.LONG: |
860 |
header.addColumn(colName, 'N',
|
|
858 |
header.addColumn(colName, DBFTYPE_NUMBER,
|
|
861 | 859 |
requiredBytes>0?requiredBytes:(precision>=DataType.LONG_MAX_PRECISION?precision:precision+1), |
862 | 860 |
precision, scale |
863 | 861 |
); |
864 | 862 |
break; |
865 | 863 |
case DataTypes.DATE: |
866 |
header.addColumn(colName, 'D', FieldFormatter.DATE_SIZE, 0, 0);
|
|
864 |
header.addColumn(colName, DBFTYPE_DATE, FieldFormatter.DATE_SIZE, 0, 0);
|
|
867 | 865 |
break; |
868 | 866 |
case DataTypes.TIME: |
869 |
header.addColumn(colName, 'C', FieldFormatter.TIME_SIZE, 0, 0);
|
|
867 |
header.addColumn(colName, DBFTYPE_STRING, FieldFormatter.TIME_SIZE, 0, 0);
|
|
870 | 868 |
break; |
871 | 869 |
case DataTypes.TIMESTAMP: |
872 |
header.addColumn(colName, 'C', FieldFormatter.TIMESTAMP_SIZE, 0, 0);
|
|
870 |
header.addColumn(colName, DBFTYPE_STRING, FieldFormatter.TIMESTAMP_SIZE, 0, 0);
|
|
873 | 871 |
break; |
874 | 872 |
case DataTypes.BOOLEAN: |
875 |
header.addColumn(colName, 'L', 1, 0, 0);
|
|
873 |
header.addColumn(colName, DBFTYPE_BOOLEAN, 1, 0, 0);
|
|
876 | 874 |
break; |
877 | 875 |
case DataTypes.STRING: |
878 |
header.addColumn(colName, 'C', Math.min(254, size), 0, 0);
|
|
876 |
header.addColumn(colName, DBFTYPE_STRING, Math.min(254, size), 0, 0);
|
|
879 | 877 |
break; |
880 | 878 |
case DataTypes.BYTE: |
881 |
header.addColumn(colName, 'N',
|
|
879 |
header.addColumn(colName, DBFTYPE_NUMBER,
|
|
882 | 880 |
requiredBytes>0?requiredBytes:(precision>=DataType.BYTE_MAX_PRECISION?precision:precision+1), |
883 | 881 |
precision, scale |
884 | 882 |
); |
885 | 883 |
break; |
886 | 884 |
default: |
887 | 885 |
// Si no sabemos lo que es intentaremos guardarlo como un string |
888 |
header.addColumn(colName, 'C', Math.min(254, size < 10 ? 10 : size), 0, 0);
|
|
886 |
header.addColumn(colName, DBFTYPE_STRING, Math.min(254, size < 10 ? 10 : size), 0, 0);
|
|
889 | 887 |
break; |
890 | 888 |
} |
891 | 889 |
|
Also available in: Unified diff