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

View differences:

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