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