Revision 44926 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
DbaseFileHeader.java | ||
---|---|---|
649 | 649 |
attr.setAllowNull(true); |
650 | 650 |
break; |
651 | 651 |
case DBFTYPE_FLOAT: |
652 |
if (dbfattr.getScale() > 0) { |
|
652 |
if (dbfattr.getScale()==-1 || dbfattr.getScale() > 0) {
|
|
653 | 653 |
if (dbfattr.getSize() > DataType.DOUBLE_MAX_PRECISION+3) { |
654 | 654 |
attr = featureType.add(dbfattr.getName(), |
655 | 655 |
DataTypes.DECIMAL, dbfattr.getSize()); |
... | ... | |
712 | 712 |
} |
713 | 713 |
break; |
714 | 714 |
case DBFTYPE_NUMBER: |
715 |
if (dbfattr.getScale() > 0) { |
|
715 |
if (dbfattr.getScale()==-1 || dbfattr.getScale() > 0) {
|
|
716 | 716 |
attr = featureType.add(dbfattr.getName(), |
717 | 717 |
DataTypes.DECIMAL, dbfattr.getSize()); |
718 | 718 |
attr.setPrecision(dbfattr.getPrecision()); |
... | ... | |
834 | 834 |
int requiredBytes = descriptor.getRequiredBytes(); |
835 | 835 |
switch (type) { |
836 | 836 |
case DataTypes.DECIMAL: |
837 |
header.addColumn(colName, DBFTYPE_NUMBER, requiredBytes>0?requiredBytes:precision+3, precision, scale); |
|
837 |
if( requiredBytes<1 ) { |
|
838 |
if( precision < 0) { |
|
839 |
requiredBytes = DbaseFieldDescriptor.MAX_NUMBER_SIZE; |
|
840 |
} else { |
|
841 |
requiredBytes = precision + 3; |
|
842 |
} |
|
843 |
} |
|
844 |
if( requiredBytes>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) { |
|
845 |
requiredBytes = DbaseFieldDescriptor.MAX_NUMBER_SIZE; |
|
846 |
} |
|
847 |
header.addColumn(colName, DBFTYPE_NUMBER, requiredBytes, precision, scale); |
|
838 | 848 |
break; |
839 | 849 |
case DataTypes.DOUBLE: |
840 |
header.addColumn(colName, DBFTYPE_FLOAT, |
|
841 |
requiredBytes>0?requiredBytes:DataType.DOUBLE_MAX_PRECISION+3, |
|
842 |
precision, scale |
|
843 |
); |
|
850 |
if( requiredBytes<1 ) { |
|
851 |
requiredBytes = DataType.DOUBLE_MAX_PRECISION+3; |
|
852 |
} |
|
853 |
if( requiredBytes>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) { |
|
854 |
requiredBytes = DbaseFieldDescriptor.MAX_NUMBER_SIZE; |
|
855 |
} |
|
856 |
header.addColumn(colName, DBFTYPE_FLOAT, requiredBytes, precision, scale); |
|
844 | 857 |
break; |
845 | 858 |
case DataTypes.FLOAT: |
846 |
header.addColumn(colName, DBFTYPE_FLOAT, |
|
847 |
requiredBytes>0?requiredBytes:DataType.FLOAT_MAX_PRECISION+3, |
|
848 |
precision, scale |
|
849 |
); |
|
859 |
if( requiredBytes<1 ) { |
|
860 |
requiredBytes = DataType.FLOAT_MAX_PRECISION+3; |
|
861 |
} |
|
862 |
if( requiredBytes>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) { |
|
863 |
requiredBytes = DbaseFieldDescriptor.MAX_NUMBER_SIZE; |
|
864 |
} |
|
865 |
header.addColumn(colName, DBFTYPE_FLOAT, requiredBytes, precision, scale); |
|
850 | 866 |
break; |
851 | 867 |
case DataTypes.INT: |
852 |
header.addColumn(colName, DBFTYPE_NUMBER, |
|
853 |
requiredBytes>0?requiredBytes:(precision>=DataType.INT_MAX_PRECISION?precision:precision+1), |
|
854 |
precision, scale |
|
855 |
); |
|
868 |
if( requiredBytes<1 ) { |
|
869 |
if( precision>=DataType.INT_MAX_PRECISION ) { |
|
870 |
requiredBytes = precision; |
|
871 |
} else { |
|
872 |
requiredBytes = precision + 1; |
|
873 |
} |
|
874 |
} |
|
875 |
if( requiredBytes>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) { |
|
876 |
requiredBytes = DbaseFieldDescriptor.MAX_NUMBER_SIZE; |
|
877 |
} |
|
878 |
header.addColumn(colName, DBFTYPE_NUMBER, requiredBytes, precision, scale); |
|
856 | 879 |
break; |
857 | 880 |
case DataTypes.LONG: |
858 |
header.addColumn(colName, DBFTYPE_NUMBER, |
|
859 |
requiredBytes>0?requiredBytes:(precision>=DataType.LONG_MAX_PRECISION?precision:precision+1), |
|
860 |
precision, scale |
|
861 |
); |
|
881 |
if( requiredBytes<1 ) { |
|
882 |
if( precision>=DataType.LONG_MAX_PRECISION ) { |
|
883 |
requiredBytes = precision; |
|
884 |
} else { |
|
885 |
requiredBytes = precision + 1; |
|
886 |
} |
|
887 |
} |
|
888 |
if( requiredBytes>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) { |
|
889 |
requiredBytes = DbaseFieldDescriptor.MAX_NUMBER_SIZE; |
|
890 |
} |
|
891 |
header.addColumn(colName, DBFTYPE_NUMBER, requiredBytes, precision, scale); |
|
862 | 892 |
break; |
863 | 893 |
case DataTypes.DATE: |
864 | 894 |
header.addColumn(colName, DBFTYPE_DATE, FieldFormatter.DATE_SIZE, 0, 0); |
... | ... | |
873 | 903 |
header.addColumn(colName, DBFTYPE_BOOLEAN, 1, 0, 0); |
874 | 904 |
break; |
875 | 905 |
case DataTypes.STRING: |
876 |
header.addColumn(colName, DBFTYPE_STRING, Math.min(254, size), 0, 0); |
|
906 |
if( requiredBytes<1 ) { |
|
907 |
requiredBytes = size; |
|
908 |
} |
|
909 |
if( requiredBytes>DbaseFieldDescriptor.MAX_SIZE ) { |
|
910 |
requiredBytes = DbaseFieldDescriptor.MAX_SIZE; |
|
911 |
} |
|
912 |
header.addColumn(colName, DBFTYPE_STRING, requiredBytes, 0, 0); |
|
877 | 913 |
break; |
878 | 914 |
case DataTypes.BYTE: |
879 |
header.addColumn(colName, DBFTYPE_NUMBER, |
|
880 |
requiredBytes>0?requiredBytes:(precision>=DataType.BYTE_MAX_PRECISION?precision:precision+1), |
|
881 |
precision, scale |
|
882 |
); |
|
915 |
if( requiredBytes<1 ) { |
|
916 |
if( precision>=DataType.BYTE_MAX_PRECISION ) { |
|
917 |
requiredBytes = precision; |
|
918 |
} else { |
|
919 |
requiredBytes = precision + 1; |
|
920 |
} |
|
921 |
} |
|
922 |
if( requiredBytes>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) { |
|
923 |
requiredBytes = DbaseFieldDescriptor.MAX_NUMBER_SIZE; |
|
924 |
} |
|
925 |
header.addColumn(colName, DBFTYPE_NUMBER,requiredBytes, precision, scale); |
|
883 | 926 |
break; |
884 | 927 |
default: |
885 | 928 |
// Si no sabemos lo que es intentaremos guardarlo como un string |
886 |
header.addColumn(colName, DBFTYPE_STRING, Math.min(254, size < 10 ? 10 : size), 0, 0); |
|
929 |
if( requiredBytes<1 ) { |
|
930 |
if( size < 20 ) { |
|
931 |
requiredBytes = 20; |
|
932 |
} else { |
|
933 |
requiredBytes = size; |
|
934 |
} |
|
935 |
} |
|
936 |
if( requiredBytes>DbaseFieldDescriptor.MAX_SIZE ) { |
|
937 |
requiredBytes = DbaseFieldDescriptor.MAX_SIZE; |
|
938 |
} |
|
939 |
header.addColumn(colName, DBFTYPE_STRING, requiredBytes, 0, 0); |
|
887 | 940 |
break; |
888 | 941 |
} |
889 |
|
|
890 | 942 |
} |
891 | 943 |
return header; |
892 | 944 |
} |
Also available in: Unified diff