Revision 47325

View differences:

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
811 811
      int displaySize = descriptor.getDisplaySize();
812 812
      switch (type) {
813 813
        case DataTypes.DECIMAL:
814
          if( displaySize<1 ) {
815
            if( precision < 0) {
816
              displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
817
            } else {
818
              displaySize = precision + 3;
814
          if( precision < 0) {
815
            if( displaySize < 1){
816
                displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
819 817
            }
818
          } else {
819
            displaySize = Math.max(displaySize, precision + 3);
820 820
          }
821 821
          header.addColumn(colName, DBFTYPE_NUMBER, displaySize, precision, scale);
822 822
          break;
823 823
        case DataTypes.DOUBLE:
824
          if( displaySize<1 ) {
824
          if( displaySize < 1 ) {
825 825
            displaySize = DataType.DOUBLE_MAX_PRECISION+3;
826 826
          }
827 827
          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
......
830 830
          header.addColumn(colName, DBFTYPE_FLOAT, displaySize, precision, scale);
831 831
          break;
832 832
        case DataTypes.FLOAT:
833
          if( displaySize<1 ) {
833
          if( displaySize < 1 ) {
834 834
            displaySize = DataType.FLOAT_MAX_PRECISION+3;
835 835
          }
836 836
          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
......
839 839
          header.addColumn(colName, DBFTYPE_FLOAT, displaySize, precision, scale);
840 840
          break;
841 841
        case DataTypes.INT:
842
          if( displaySize<1 ) {
843
            if( precision>=DataType.INT_MAX_PRECISION ) {
844
              displaySize = DataType.INT_MAX_PRECISION;
845
            } else {
846
              displaySize = precision + 1;
847
            }
842
          displaySize = Math.max(displaySize, precision + 1);
843
          if( displaySize >= DataType.INT_MAX_PRECISION ) {
844
            displaySize = DataType.INT_MAX_PRECISION;
848 845
          }
849 846
          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
850 847
            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
......
852 849
          header.addColumn(colName, DBFTYPE_NUMBER, displaySize, precision, scale);
853 850
          break;
854 851
        case DataTypes.LONG:
855
          if( displaySize<1 ) {
856
            if( precision>=DataType.LONG_MAX_PRECISION ) {
857
              displaySize = DataType.LONG_MAX_PRECISION;
858
            } else {
859
              displaySize = precision + 1;
860
            }
852
          displaySize = Math.max(displaySize, precision + 1);
853
          if( displaySize >= DataType.LONG_MAX_PRECISION ) {
854
            displaySize = DataType.LONG_MAX_PRECISION;
861 855
          }
862 856
          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
863 857
            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
......
877 871
          header.addColumn(colName, DBFTYPE_BOOLEAN, 1, 0, 0);
878 872
          break;
879 873
        case DataTypes.STRING:
880
          if( displaySize<1 ) {
881
            displaySize = size;
882
          }
874
          displaySize = Math.max(displaySize, size);
883 875
          if( displaySize>DbaseFieldDescriptor.MAX_SIZE ) {
884 876
            displaySize = DbaseFieldDescriptor.MAX_SIZE;
885 877
          }
886 878
          header.addColumn(colName, DBFTYPE_STRING, displaySize, 0, 0);
887 879
          break;
888 880
        case DataTypes.BYTE:
889
          if( displaySize<1 ) {
890
            if( precision>=DataType.BYTE_MAX_PRECISION ) {
891
              displaySize = precision;
892
            } else {
893
              displaySize = precision + 1;
894
            }
881
          displaySize = Math.max(displaySize, precision + 1);
882
          if( displaySize >= DataType.BYTE_MAX_PRECISION ) {
883
            displaySize = DataType.BYTE_MAX_PRECISION;
895 884
          }
896 885
          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
897 886
            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
......
900 889
          break;
901 890
        default:
902 891
          // Si no sabemos lo que es intentaremos guardarlo como un string
903
          if( displaySize<1 ) {
904
            if( size < 20 ) {
905
              displaySize = 20;
906
            } else {
907
              displaySize = size;
908
            }
909
          }
892
          displaySize = Math.max(displaySize, Math.max(size, 20));
910 893
          if( displaySize>DbaseFieldDescriptor.MAX_SIZE ) {
911 894
            displaySize = DbaseFieldDescriptor.MAX_SIZE;
912 895
          }

Also available in: Unified diff