Revision 44870

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
650 650
          break;
651 651
        case DBFTYPE_FLOAT:
652 652
          if (dbfattr.getScale() > 0) {
653
            if (dbfattr.getPrecision() > DataType.DOUBLE_MAX_PRECISION
654
                    || dbfattr.getScale() > DataType.DOUBLE_MAX_PRECISION) {
653
            if (dbfattr.getSize() > DataType.DOUBLE_MAX_PRECISION+3) {
655 654
              attr = featureType.add(dbfattr.getName(),
656 655
                      DataTypes.DECIMAL, dbfattr.getSize());
657 656
              attr.setScale(dbfattr.getScale());
......
659 658
              attr.setDefaultValue(null);
660 659
              attr.setAllowNull(true);
661 660

  
662
            } else if (dbfattr.getPrecision() > DataType.FLOAT_MAX_PRECISION
663
                    || dbfattr.getScale() > DataType.FLOAT_MAX_PRECISION) {
661
            } else if (dbfattr.getSize() > DataType.FLOAT_MAX_PRECISION+3) {
664 662
              attr = featureType.add(dbfattr.getName(),
665 663
                      DataTypes.DOUBLE, dbfattr.getSize());
666 664
              attr.setScale(dbfattr.getScale());
......
836 834
      int requiredBytes = descriptor.getRequiredBytes();
837 835
      switch (type) {
838 836
        case DataTypes.DECIMAL:
839
          header.addColumn(colName, 'N', requiredBytes>0?requiredBytes:precision+3, precision, scale);
837
          header.addColumn(colName, DBFTYPE_NUMBER, requiredBytes>0?requiredBytes:precision+3, precision, scale);
840 838
          break;
841 839
        case DataTypes.DOUBLE:
842
          header.addColumn(colName, 'F', 
843
                  requiredBytes>0?requiredBytes:(precision+2>=DataType.DOUBLE_MAX_PRECISION?precision:precision+3), 
840
          header.addColumn(colName, DBFTYPE_FLOAT, 
841
                  requiredBytes>0?requiredBytes:DataType.DOUBLE_MAX_PRECISION+3, 
844 842
                  precision, scale
845 843
          );
846 844
          break;
847 845
        case DataTypes.FLOAT:
848
          header.addColumn(colName, 'F', 
849
                  requiredBytes>0?requiredBytes:(precision+2>=DataType.FLOAT_MAX_PRECISION?precision:precision+3), 
846
          header.addColumn(colName, DBFTYPE_FLOAT, 
847
                  requiredBytes>0?requiredBytes:DataType.FLOAT_MAX_PRECISION+3, 
850 848
                  precision, scale
851 849
          );
852 850
          break;
853 851
        case DataTypes.INT:
854
          header.addColumn(colName, 'N', 
852
          header.addColumn(colName, DBFTYPE_NUMBER, 
855 853
                  requiredBytes>0?requiredBytes:(precision>=DataType.INT_MAX_PRECISION?precision:precision+1), 
856 854
                  precision, scale
857 855
          );
858 856
          break;
859 857
        case DataTypes.LONG:
860
          header.addColumn(colName, 'N', 
858
          header.addColumn(colName, DBFTYPE_NUMBER, 
861 859
                  requiredBytes>0?requiredBytes:(precision>=DataType.LONG_MAX_PRECISION?precision:precision+1), 
862 860
                  precision, scale
863 861
          );
864 862
          break;
865 863
        case DataTypes.DATE:
866
          header.addColumn(colName, 'D', FieldFormatter.DATE_SIZE, 0, 0);
864
          header.addColumn(colName, DBFTYPE_DATE, FieldFormatter.DATE_SIZE, 0, 0);
867 865
          break;
868 866
        case DataTypes.TIME:
869
          header.addColumn(colName, 'C', FieldFormatter.TIME_SIZE, 0, 0);
867
          header.addColumn(colName, DBFTYPE_STRING, FieldFormatter.TIME_SIZE, 0, 0);
870 868
          break;
871 869
        case DataTypes.TIMESTAMP:
872
          header.addColumn(colName, 'C', FieldFormatter.TIMESTAMP_SIZE, 0, 0);
870
          header.addColumn(colName, DBFTYPE_STRING, FieldFormatter.TIMESTAMP_SIZE, 0, 0);
873 871
          break;
874 872
        case DataTypes.BOOLEAN:
875
          header.addColumn(colName, 'L', 1, 0, 0);
873
          header.addColumn(colName, DBFTYPE_BOOLEAN, 1, 0, 0);
876 874
          break;
877 875
        case DataTypes.STRING:
878
          header.addColumn(colName, 'C', Math.min(254, size), 0, 0);
876
          header.addColumn(colName, DBFTYPE_STRING, Math.min(254, size), 0, 0);
879 877
          break;
880 878
        case DataTypes.BYTE:
881
          header.addColumn(colName, 'N', 
879
          header.addColumn(colName, DBFTYPE_NUMBER, 
882 880
                  requiredBytes>0?requiredBytes:(precision>=DataType.BYTE_MAX_PRECISION?precision:precision+1), 
883 881
                  precision, scale
884 882
          );
885 883
          break;
886 884
        default:
887 885
          // Si no sabemos lo que es intentaremos guardarlo como un string
888
          header.addColumn(colName, 'C', Math.min(254, size < 10 ? 10 : size), 0, 0);
886
          header.addColumn(colName, DBFTYPE_STRING, Math.min(254, size < 10 ? 10 : size), 0, 0);
889 887
          break;
890 888
      }
891 889

  

Also available in: Unified diff