Revision 43283 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java

View differences:

CSVStoreProvider.java
23 23
package org.gvsig.fmap.dal.store.csv;
24 24

  
25 25
import java.io.File;
26
import java.io.FileInputStream;
27
import java.io.FileNotFoundException;
26 28
import java.io.FileReader;
27 29
import java.io.FileWriter;
28 30
import java.io.IOException;
31
import java.io.InputStreamReader;
29 32
import java.net.URL;
30
import java.text.SimpleDateFormat;
33
import java.nio.charset.Charset;
31 34
import java.util.ArrayList;
32 35
import java.util.HashMap;
33 36
import java.util.Iterator;
......
746 749
                logger.warn("Can't set geometry type for the calculated field in CSV file '" + getFullFileName() + "'.", e);
747 750
            }
748 751
        }
752
        
753
        String geometry_column = CSVStoreParameters.getGeometryColumn(this.getParameters());
754
        if( !StringUtils.isEmpty(geometry_column) ) {
755
            EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) fType.get(geometry_column);
756
            if( attr!=null && attr.getType()!=DataTypes.GEOMETRY ) {
757
                attr.setDataType(DataTypes.GEOMETRY);
758
                GeometryManager geommgr = GeometryLocator.getGeometryManager();
759
                GeometryType gt;
760
                try {
761
                    gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.UNKNOWN);
762
                    attr.setGeometryType(gt);
763
                } catch (Exception e) {
764
                    logger.warn("Can't set geometry type for the calculated field in CSV file '" + getFullFileName() + "'.", e);
765
                }
766
                fType.setDefaultGeometryAttributeName(geometry_column);
767
            }
768
        }
749 769
        return fType;
750 770
    }
751 771

  
......
889 909

  
890 910
    }
891 911

  
892
    private SimpleReader getSimpleReader(FileReader in) {
912
    private SimpleReader getSimpleReader(InputStreamReader in) {
893 913
        SimpleReader reader;
894 914
        if (CSVStoreParameters.getRawFieldsDefinition(getCSVParameters()) != null) {
895 915
            reader = new FixedLenReader(in, getCSVParameters());
......
917 937
        return headers;
918 938
    }
919 939

  
940
    private InputStreamReader openFile(File f, String charsetName) throws FileNotFoundException {
941
        Charset charset = Charset.defaultCharset();
942
        FileInputStream fis = new FileInputStream(f);
943
        if( !StringUtils.isEmpty(charsetName) ) {
944
            if( Charset.isSupported(charsetName) )  {
945
                try {
946
                    charset = Charset.forName(charsetName);
947
                } catch(Throwable th) {
948
                    logger.warn("Can't use charset '"+charsetName+"' for read csv '"+this.getFullFileName()+"'.", th);
949
                }
950
            } else {
951
                logger.warn("charset '"+charsetName+"' not supported for read csv '"+this.getFullFileName()+"'.");                
952
            }
953
        }
954
        InputStreamReader isr = new InputStreamReader(fis, charset);
955
        return isr;
956
    }
957
    
920 958
    private void loadFeatures() {
921
        FileReader in = null;
959
        InputStreamReader in = null;
922 960
        SimpleReader reader = null;
923 961
        try {
924 962
            String headers[] = null;
......
926 964

  
927 965
            boolean ignore_errors = CSVStoreParameters.getIgnoreErrors(getCSVParameters());
928 966

  
929
            in = new FileReader(this.getCSVParameters().getFile());
967
            in = openFile(
968
                this.getCSVParameters().getFile(), 
969
                CSVStoreParameters.getCharset(this.getCSVParameters())
970
            );
930 971

  
931 972
            reader = getSimpleReader(in);
932 973

  

Also available in: Unified diff