Revision 44844 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
174 174
    tempFieldDescriptors[myFieldDescriptions.length] = new DbaseFieldDescriptor();
175 175
    tempFieldDescriptors[myFieldDescriptions.length].setType(fieldType);
176 176
    tempFieldDescriptors[myFieldDescriptions.length].setSize(fieldSize);
177
    tempFieldDescriptors[myFieldDescriptions.length].setPrecision(fieldPrecision);
178 177
    tempFieldDescriptors[myFieldDescriptions.length].setScale(fieldScale);
179 178
    tempFieldDescriptors[myFieldDescriptions.length].setOffsetInRecord(tempLength);
180 179

  
......
432 431

  
433 432
      myFieldDescriptions[i].setOffsetInRecord(fieldOffset);
434 433
      
435
      myFieldDescriptions[i].calculateScaleAndPrecission();
436
      
437 434
      fieldOffset += tempLength;
438 435

  
439 436
      // read the reserved bytes.
......
707 704
            } else {
708 705
              attr = featureType.add(
709 706
                      dbfattr.getName(),
710
                      DataTypes.BYTE
707
                      DataTypes.DECIMAL
711 708
              );
712 709
              attr.setPrecision(dbfattr.getPrecision());
713 710
              attr.setScale(0);
......
753 750
            } else {
754 751
              attr = featureType.add(
755 752
                      dbfattr.getName(),
756
                      DataTypes.BYTE
753
                      DataTypes.DECIMAL
757 754
              );
758 755
              attr.setPrecision(dbfattr.getPrecision());
759 756
              attr.setScale(0);
......
805 802
                  DBFStoreProvider.NAME
806 803
          );
807 804
      }
805
      attr.setRequiredBytes(dbfattr.getSize());
808 806
    }
809 807
    return featureType;
810 808
  }
......
835 833
      int size = descriptor.getSize();
836 834
      int scale = descriptor.getScale();
837 835
      int precision = descriptor.getPrecision();
836
      int requiredBytes = descriptor.getRequiredBytes();
838 837
      switch (type) {
839 838
        case DataTypes.DECIMAL:
840
          header.addColumn(colName, 'N', 0, precision, scale);
839
          header.addColumn(colName, 'N', requiredBytes>0?requiredBytes:precision+3, precision, scale);
841 840
          break;
842 841
        case DataTypes.DOUBLE:
842
          header.addColumn(colName, 'F', 
843
                  requiredBytes>0?requiredBytes:(precision+2>=DataType.DOUBLE_MAX_PRECISION?precision:precision+3), 
844
                  precision, scale
845
          );
846
          break;
843 847
        case DataTypes.FLOAT:
844
          header.addColumn(colName, 'F', 0, precision, scale);
848
          header.addColumn(colName, 'F', 
849
                  requiredBytes>0?requiredBytes:(precision+2>=DataType.FLOAT_MAX_PRECISION?precision:precision+3), 
850
                  precision, scale
851
          );
845 852
          break;
846 853
        case DataTypes.INT:
847
          header.addColumn(colName, 'N', 0, precision, scale);
854
          header.addColumn(colName, 'N', 
855
                  requiredBytes>0?requiredBytes:(precision>=DataType.INT_MAX_PRECISION?precision:precision+1), 
856
                  precision, scale
857
          );
848 858
          break;
849 859
        case DataTypes.LONG:
850
          header.addColumn(colName, 'N', 0, precision, scale);
860
          header.addColumn(colName, 'N', 
861
                  requiredBytes>0?requiredBytes:(precision>=DataType.LONG_MAX_PRECISION?precision:precision+1), 
862
                  precision, scale
863
          );
851 864
          break;
852 865
        case DataTypes.DATE:
853 866
          header.addColumn(colName, 'D', FieldFormatter.DATE_SIZE, 0, 0);
......
856 869
          header.addColumn(colName, 'C', FieldFormatter.TIME_SIZE, 0, 0);
857 870
          break;
858 871
        case DataTypes.TIMESTAMP:
859
          header.addColumn(colName, 'C', TIMESTAMP_SIZE, 0, 0);
872
          header.addColumn(colName, 'C', FieldFormatter.TIMESTAMP_SIZE, 0, 0);
860 873
          break;
861 874
        case DataTypes.BOOLEAN:
862 875
          header.addColumn(colName, 'L', 1, 0, 0);
......
865 878
          header.addColumn(colName, 'C', Math.min(254, size), 0, 0);
866 879
          break;
867 880
        case DataTypes.BYTE:
868
          header.addColumn(colName, 'N', 0, precision, scale);
881
          header.addColumn(colName, 'N', 
882
                  requiredBytes>0?requiredBytes:(precision>=DataType.BYTE_MAX_PRECISION?precision:precision+1), 
883
                  precision, scale
884
          );
869 885
          break;
870 886
        default:
871 887
          // Si no sabemos lo que es intentaremos guardarlo como un string

Also available in: Unified diff