Revision 47652

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorException.java
30 30
	 *
31 31
	 */
32 32
	private static final long serialVersionUID = 4694862217382272837L;
33
	private final static String MESSAGE_FORMAT = "Evaluator exception";
33
	private final static String MESSAGE_FORMAT = "Evaluator exception %(data)s";
34 34
	private final static String MESSAGE_KEY = "_DataEvaluatorException";
35 35

  
36 36
	public DataEvaluatorException(Throwable cause) {
37
		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
37
        this(cause, "");
38 38
	}
39 39

  
40
    public DataEvaluatorException(Throwable cause, String data) {
41
		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
42
        this.values.put("data", data);
43
    }
44
    
40 45
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureSetProvider.java
244 244
                filterCode.accept(new Visitor() {
245 245
                    @Override
246 246
                    public void visit(Object obj) throws VisitCanceledException, BaseException {
247
                        if( Code.isFunction((Code) obj, "ST_INTERSECTS") || Code.isFunction((Code) obj, "ST_CONTAINS")) {
248
                            Code.Callable intersects = (Code.Callable)obj;
247
                        if (Code.isFunction((Code) obj, "ST_INTERSECTS")
248
                            || Code.isFunction((Code) obj, "ST_CONTAINS")
249
                            || Code.isFunction((Code) obj, "&&")) {
250
                            Code.Callable intersects = (Code.Callable) obj;
249 251
                            Code p1 = intersects.parameters().get(0);
250 252
                            Code p2 = intersects.parameters().get(1);
251 253
                            Code sq = null;
252
                            if( Code.isIdentifier(p1, geomdesc.getName()) ) {
254
                            if (Code.isIdentifier(p1, geomdesc.getName())) {
253 255
                                sq = p2;
254
                            } else if( Code.isIdentifier(p2, geomdesc.getName()) ) {
256
                            } else if (Code.isIdentifier(p2, geomdesc.getName())) {
255 257
                                sq = p1;
256 258
                            }
257
                            if( sq != null ) {
259
                            if (sq != null) {
258 260
                                spatialQuery.setValue(sq);
259 261
                                throw new VisitCanceledException();
260 262
                            }
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/resources/org/gvsig/fmap/dal/store/gml/GMLParameters.xml
41 41
                <field name="header" type="string" mandatory="false" defaultValue="" group="Advanced">
42 42
                    <description>The header or empty if parsed automatically</description>
43 43
                </field>
44
                <field name="skipLines" label="Number of lines to skip" type="integer" mandatory="false" defaultValue="0" group="Advanced">
45
                    <description>The number of lines to skip at begin of file</description>
46
                </field>
47 44
                <field name="fieldsDefinition" label="Fields definition" type="string" mandatory="false" defaultValue="" group="Advanced">
48 45
                    <description>If set use this to define fields of fixed length instead of use a separator.\nThe format is a list of values separateds by spaces of the form N:M\nwhere N is the position of the first character of field, and M the last.\nCan accept N: to use form the N character to the end of line.</description>
49 46
                </field>
......
59 56
                <field name="limit" type="integer" mandatory="false" defaultValue="-1" group="Advanced">
60 57
                    <description>Limit the number of record to load of GML file.</description>
61 58
                </field>
59
                <field name="geometryCombineMode" label="_Geometry_combine_mode" type="integer" mandatory="false" defaultValue="0" group="Geometry">
60
                    <description>Combine mode for geometries</description>
61
                    <availableValues>
62
                        <value label="None">0</value>
63
                        <value label="Use first not null geometry field">1</value>
64
                    </availableValues>          
65
                </field>
62 66
            </fields>
63 67
        </class>
64 68
    </classes>
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/gml/GMLFeatureTypeLoader.java
7 7

  
8 8
import java.io.IOException;
9 9
import java.io.Reader;
10
import org.gvsig.fmap.dal.feature.EditableFeatureType;
10 11
import org.gvsig.fmap.dal.store.gml.simplereaders.GMLReader;
11 12
import org.gvsig.fmap.dal.store.simplereader.*;
12 13
import org.gvsig.fmap.dal.store.simplereader.simplereaders.SimpleReader;
14
import org.gvsig.tools.task.SimpleTaskStatus;
13 15

  
14 16
/**
15 17
 *
......
26 28
    }
27 29
    
28 30
    protected SimpleReader getSimpleReader(Reader in) throws IOException {
29
        SimpleReader reader = new GMLReader(in, parameters);
31
        SimpleReader reader = new GMLReader(in, (GMLStoreParameters) parameters);
30 32
        return reader;
31 33
    }
32 34

  
......
38 40
        }
39 41
        return headers;
40 42
    }
41
    
42
    
43

  
44
    @Override
45
    public boolean loadFeatureType(EditableFeatureType featureType, SimpleTaskStatus status) throws IOException {
46
        return this.loadFeatureType(featureType, false, status);
47
    }
48

  
43 49
}
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/gml/GMLStoreProvider.java
29 29
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
30 30
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
31 31
import org.gvsig.fmap.dal.store.gml.simplereaders.GMLReader;
32
import org.gvsig.fmap.dal.store.simplereader.simplereaders.SimpleReader;
33 32
import org.gvsig.fmap.dal.store.simplereader.SimpleReaderFeatureTypeLoader;
34 33
import org.gvsig.fmap.dal.store.simplereader.SimpleReaderStoreParameters;
35 34
import org.gvsig.fmap.dal.store.simplereader.SimpleReaderStoreProvider;
35
import org.gvsig.fmap.dal.store.simplereader.simplereaders.SimpleReader;
36 36
import org.slf4j.Logger;
37 37
import org.slf4j.LoggerFactory;
38 38

  
......
70 70

  
71 71
    @Override
72 72
    protected SimpleReader getSimpleReader(SimpleReaderStoreParameters parameters, Reader in) throws IOException {
73
        SimpleReader reader = new GMLReader(in,parameters);
73
        SimpleReader reader = new GMLReader(in, (GMLStoreParameters) parameters);
74 74
        return reader;
75 75
    }
76 76

  
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/gml/simplereaders/GMLReader.java
12 12
import java.util.List;
13 13
import org.apache.commons.io.FilenameUtils;
14 14
import org.apache.commons.io.IOUtils;
15
import org.apache.commons.lang3.StringUtils;
15 16
import org.cresques.cts.IProjection;
16 17
import org.gvsig.fmap.crs.CRSFactory;
18
import org.gvsig.fmap.dal.store.gml.GMLStoreParameters;
17 19
import org.gvsig.fmap.dal.store.gml.virtualrows.GfsFile;
18 20
import org.gvsig.fmap.dal.store.gml.virtualrows.XMLFileAsList;
19 21
import org.gvsig.fmap.dal.store.simplereader.SimpleReaderStoreParameters;
20 22
import org.gvsig.fmap.dal.store.simplereader.simplereaders.AbstractSimpleReader;
23
import org.gvsig.tools.ToolsLocator;
24
import org.gvsig.tools.dataTypes.DataType;
25
import org.gvsig.tools.dataTypes.DataTypesManager;
26
import org.gvsig.tools.namestranslator.NamesTranslator;
21 27
import org.gvsig.tools.task.SimpleTaskStatus;
22 28
import org.gvsig.tools.util.GetItemWithSize64;
23 29
import org.slf4j.Logger;
......
35 41
    private int columns;
36 42
    private String[] header;
37 43
    private int currentElement = 0;
38
    private final SimpleReaderStoreParameters parameters;
44
    private final GMLStoreParameters parameters;
39 45
    private GfsFile gfs;
40 46

  
41
    public GMLReader(Reader reader, SimpleReaderStoreParameters theParameters) throws IOException {
47
    public GMLReader(Reader reader, GMLStoreParameters theParameters) throws IOException {
42 48
        File gmlFile = theParameters.getFile();
43 49
        File gmlIdx = new File(FilenameUtils.removeExtension(gmlFile.getAbsolutePath())+".gmlidx");
44 50
        File gfsFile = new File(FilenameUtils.removeExtension(gmlFile.getAbsolutePath())+".gfs");
......
70 76
            List<String> geoms = gfs.getGeometryElementPaths();
71 77
            String[] theHeader = new String[gfs.size()+(geoms==null?0:geoms.size())];
72 78
            int i = 0;
79
            DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
73 80
            for (GfsFile.PropertyDefn item : gfs) {
74
                theHeader[i++] = item.getName();
81
                DataType dataType = dataTypesManager.get(item.getType());
82
                theHeader[i++] = item.getName()+"/"+dataType.getName();
75 83
            }
76 84
            if(geoms != null) {
77 85
                List<String> srss = gfs.getGeometryElementSrss();
78
                for (int j = 0; j < geoms.size(); j++) {
79
                    IProjection srs = CRSFactory.getCRS(srss.get(j));
80
                    if(srs == null){
81
                        theHeader[i++] = FilenameUtils.getBaseName(geoms.get(j));
86
                if(this.parameters.getGeometryCombineMode() == XMLFileAsList.COMBINE_FIRST_NOT_NULL){
87
                    String srs = srss.get(0);
88
                    for (int j = 0; j < srss.size(); j++) {
89
                        if(!StringUtils.equalsIgnoreCase(srs, srss.get(j))){
90
                            srs = null;
91
                            break;
92
                        }
93
                    }
94
                    IProjection proj = null;
95
                    if(srs != null){
96
                        proj = CRSFactory.getCRS(srs);
97
                    }
98
                    if(proj == null){
99
                        theHeader[i++] = FilenameUtils.getBaseName(getGeometryAttributeName())+"/Geometry";
82 100
                    } else {
83
                        theHeader[i++] = FilenameUtils.getBaseName(geoms.get(j))+"/Geometry/set/srs="+srs.getAbrev().replace(":", "@");
101
                        theHeader[i++] = FilenameUtils.getBaseName(getGeometryAttributeName())+"/Geometry/set/srs="+proj.getAbrev().replace(":", "@");
84 102
                    }
103
                } else {
104
                    for (int j = 0; j < srss.size(); j++) {
105
                        IProjection srs = CRSFactory.getCRS(srss.get(j));
106
                        if(srs == null){
107
                            theHeader[i++] = FilenameUtils.getBaseName(geoms.get(j))+"/Geometry";
108
                        } else {
109
                            theHeader[i++] = FilenameUtils.getBaseName(geoms.get(j))+"/Geometry/set/srs="+srs.getAbrev().replace(":", "@");
110
                        }
111
                    }
85 112
                }
86 113
            }
87 114
            this.header = theHeader;
88 115
        }
89 116
        return this.header;
90 117
    }
118
    
119
    private String getGeometryAttributeName() {
120
        NamesTranslator translator = NamesTranslator.createBaseTranslator();
121
        for (GfsFile.PropertyDefn item : gfs) {
122
            translator.addSource(item.getName());
123
        }
124
        String s = translator.getSuggestion("Geometry");
125
        return s;
126
    }
91 127

  
92 128
    @Override
93 129
    public int getColumnsCount() throws IOException {
......
162 198
                gfs.getGeometryElementPaths(),
163 199
                gfs.getPropertiesPaths()
164 200
            );
201
            
202
            x.setCombineMode(this.parameters.getGeometryCombineMode());
165 203

  
166 204
            return x;
167 205
        } catch (IOException ex) {
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/gml/GMLStoreParameters.java
25 25

  
26 26
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
27 27
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
28
import static org.gvsig.fmap.dal.store.gml.virtualrows.XMLFileAsList.COMBINE_NONE;
28 29
import org.gvsig.fmap.dal.store.simplereader.SimpleReaderFeatureTypeLoader;
29 30
import org.gvsig.fmap.dal.store.simplereader.SimpleReaderStoreParameters;
30
import org.slf4j.Logger;
31
import org.slf4j.LoggerFactory;
31
import org.gvsig.tools.dynobject.DynObject;
32 32

  
33 33
@SuppressWarnings("UseSpecificCatch")
34 34
public class GMLStoreParameters extends SimpleReaderStoreParameters implements
......
49 49
    protected SimpleReaderFeatureTypeLoader getFeatureTypeLoader() {
50 50
        return new GMLFeatureTypeLoader(this);
51 51
    }
52
            
52
    
53
    public int getGeometryCombineMode() {
54
        return getGeometryCombineMode(this);
55
    }
56

  
57
    public static int getGeometryCombineMode(DynObject dynobj) {
58
        Integer n = (Integer) dynobj.getDynValue("geometryCombineMode");
59
        if(n == null){
60
            return COMBINE_NONE;
61
        }
62
        return n;
63
    }
64

  
53 65
}
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/gml/virtualrows/XMLFileAsList.java
242 242
                    geom = GeometryLocator.getGeometryManager().createFrom(breader, null);
243 243
                    if(this.combineMode == COMBINE_FIRST_NOT_NULL){
244 244
                        if(geom != null){
245
                            handler.values.add(geom.convertToHexEWKB());
245
                            handler.values.add(geom.convertToHexWKB());
246 246
                            break;
247 247
                        }
248 248
                    } else {
249
                        handler.values.add(geom.convertToHexEWKB());
249
                        handler.values.add(geom.convertToHexWKB());
250 250
                    }
251 251
                }
252 252
                if(this.combineMode == COMBINE_FIRST_NOT_NULL && geom == null){
......
575 575
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/navarra.gml";
576 576
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/Falls.gml";
577 577
        
578
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/AerodromeArea.gml";
579
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/AerodromeType.gml"; //No tiene geometr?as
580
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/CablewayLink.gml";
581
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/CrossingS.gml";
582
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/CrossingP.gml";
578 583
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/EmbankmentL.gml";
579
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/AerodromeType.gml"; //No tiene geometr?as
580
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/SurfaceComposition.gml";
581
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/ShorelineConstructionL.gml";
582
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/AerodromeArea.gml";
584
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/EmbankmentS.gml";
585
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/FordP.gml";
583 586
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/DamOrWeirL.gml";
584 587
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RunwayArea.gml";
585 588
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayStationArea.gml";
586 589
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/DamOrWeirS.gml";
590
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/NominalTrackGauge.gml"; //No tiene geometr?as
591
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/NumberOfTracks.gml"; //No tiene geometr?as
587 592
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/Road.gml"; //No tiene geometr?as
588
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/CablewayLink.gml";
589
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayYardArea.gml";
590
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/WatercourseLinkSequence.gml"; //No tiene geometr?as
591
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/EmbankmentS.gml";
592
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/FordP.gml";
593 593
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadServiceType.gml"; //No tiene geometr?as
594
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/Wetland.gml";
594
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayArea.gml";
595 595
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayElectrification.gml"; //No tiene geometr?as
596 596
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayType.gml"; //No tiene geometr?as
597
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/NumberOfTracks.gml"; //No tiene geometr?as
597
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayLink.gml"; //Added Multicurve Strategy (ojo, en los registros, tras la geometr?a aparece otro atributo a null
598
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayYardArea.gml";
598 599
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadServiceArea.gml";
599
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/NominalTrackGauge.gml"; //No tiene geometr?as
600
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayArea.gml";
601
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/CrossingS.gml";
602
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/CrossingP.gml";
600
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/ShorelineConstructionL.gml";
603 601
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/StandingWater.gml";
602
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/SurfaceComposition.gml";
603
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/WatercourseLinkSequence.gml"; //No tiene geometr?as
604
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/Wetland.gml";
604 605

  
605
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RailwayLink.gml"; //Added Multicurve Strategy (ojo, en los registros, tras la geometr?a aparece otro atributo a null
606 606
        
607 607
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/BuildingP.gml";
608 608
//        final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/INSPIRE_GN.gml";
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/simplereaders/CSVReaderSuperCSV.java
2 2

  
3 3
import java.io.BufferedReader;
4 4
import java.io.File;
5
import java.io.FileInputStream;
6
import java.io.FileNotFoundException;
7
import java.io.FileReader;
5 8
import java.io.IOException;
9
import java.io.InputStreamReader;
6 10
import java.io.Reader;
11
import java.io.UnsupportedEncodingException;
7 12
import java.util.List;
8 13
import java.util.function.Function;
9 14
import org.apache.commons.io.FilenameUtils;
15
import org.apache.commons.io.IOUtils;
10 16
import org.apache.commons.io.input.CloseShieldReader;
11 17
import org.apache.commons.lang3.StringUtils;
12 18
import org.apache.commons.text.StringEscapeUtils;
......
72 78
        }
73 79
        return this.columns;
74 80
    }
81
    
82
    private boolean hasMultilineRecords(SimpleTaskStatus status) throws FileNotFoundException, UnsupportedEncodingException, IOException {
83
        FileInputStream fis = null;
84
        InputStreamReader theReader = null;
85
        BufferedReader breader = null;
86
        try {
87
            CSVStoreParameters params = getParameters();
88
            File data_file = CSVStoreParameters.getFile(params);
89
            String charset = CSVStoreParameters.getCharset(params);
90
            fis = new FileInputStream(data_file);
91
            theReader = new InputStreamReader(fis, charset);
92
            breader = new BufferedReader(theReader);
93
            CsvListReader parser = new CsvListReader(breader, getCSVPreferences());
94
//        int firstRecordLine = 0;
95
            while (parser.read() != null) {
96
                if (parser.getLineNumber() != parser.getRowNumber()) {
97
                    return true;
98
                }
99
            }
100
            return false;
101
        } finally {
102
            IOUtils.closeQuietly(breader);
103
            IOUtils.closeQuietly(theReader);
104
            IOUtils.closeQuietly(fis);
105
        }
106
    }
75 107

  
76 108
    @Override
77 109
    public GetItemWithSize64<List<String>>  getVirtualRows(SimpleTaskStatus status) {
......
83 115
            if( data_file.length()< 10*1024*1024 ) {
84 116
                return null;
85 117
            }
86
            
87
            Function<BufferedReader, Integer> numberOfLinesInRecord = new Function<BufferedReader, Integer>() {
88
                @Override
89
                public Integer apply(BufferedReader breader) {
90
                    CloseShieldReader theReader = CloseShieldReader.wrap(breader);
91
                    CsvListReader parser = new CsvListReader(theReader, getCSVPreferences());
92
                    try {
93
                        List<String> values = parser.read();
94
                    } catch (IOException ex) {
95
                        return 1;
118
            Function<BufferedReader, Integer> numberOfLinesInRecord = null;
119
            if(this.hasMultilineRecords(status)){
120
                numberOfLinesInRecord = new Function<BufferedReader, Integer>() {
121
                    @Override
122
                    public Integer apply(BufferedReader breader) {
123
                        CloseShieldReader theReader = CloseShieldReader.wrap(breader);
124
                        CsvListReader parser = new CsvListReader(theReader, getCSVPreferences());
125
                        try {
126
                            List<String> values = parser.read();
127
                        } catch (IOException ex) {
128
                            return 1;
129
                        }
130
                        return parser.getLineNumber();
96 131
                    }
97
                    return parser.getLineNumber();
98
                }
99
            };
132
                };
133
            }
100 134

  
101 135
            String charset = CSVStoreParameters.getCharset(params);
102 136
            File index_file = getIndexFile(data_file);
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/simplereader/SimpleReaderFeatureTypeLoader.java
169 169
        }
170 170
    }
171 171
    
172
    public boolean loadFeatureType(EditableFeatureType featureType, SimpleTaskStatus status) throws IOException {
173
        return loadFeatureType(featureType, true, status);
174
    }
175
    
172 176
    public boolean loadFeatureType(EditableFeatureType featureType, boolean  detectTypes, SimpleTaskStatus status) throws IOException {
173 177
        InputStreamReader in = null;
174 178
        SimpleReader reader = null;
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/simplereader/virtualrows/RandomAccessFileReader.java
21 21
import org.apache.commons.io.FilenameUtils;
22 22
import org.apache.commons.io.IOUtils;
23 23
import org.apache.commons.lang3.StringUtils;
24
import org.apache.commons.lang3.mutable.MutableInt;
24 25
import org.gvsig.tools.ToolsLocator;
25 26
import org.gvsig.tools.i18n.I18nManager;
26 27
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
......
163 164
    }
164 165

  
165 166
    public long countLines(Predicate<String> filter, SimpleTaskStatus status) throws IOException {
167
        return countLines(filter, new MutableInt(), status);
168
    }
169
    
170
    public long countLines(Predicate<String> filter, MutableInt maxLineLen, SimpleTaskStatus status) throws IOException {
166 171
        if (raf.length() == 0) {
167 172
            return 0;
168 173
        }
......
173 178
            status.message(i18n.getTranslation("_Calculating_number_of_lines"));
174 179
            status.setIndeterminate();
175 180
        }
181
        maxLineLen.setValue(0);
176 182
        BufferedReader breader = new BufferedReader(this, MAX_BUFFER_FOR_LINE);
177 183
        try {
178 184
            String line;
......
191 197
                    continue;
192 198
                }
193 199
                count++;
200
                int l = line.getBytes(this.getCharset()).length;
201
                if(l>maxLineLen.getValue()){
202
                    maxLineLen.setValue(l);
203
                }
194 204
            }
195 205
            if (status != null) {
196 206
                status.setCurValue(count);
......
257 267
    }
258 268
    
259 269
    public RandomAccessFileIndex createIndexOfLines(File index, boolean safe, Predicate<String> filter, SimpleTaskStatus status, Function<BufferedReader,Integer> numberOfLines) throws IOException {
260
        long countLines = this.countLines(filter, status);
270
        MutableInt maxLineLen = new MutableInt();
271
        long countLines = this.countLines(filter, maxLineLen, status);
261 272
        if (countLines < 1) {
262 273
            return null;
263 274
        }
275
        int maxBufferForLine = maxLineLen.getValue()+1024;
264 276
        RandomAccessFileIndex line_idx = new RandomAccessFileIndex();
265 277
        line_idx.create(index, countLines);
266 278

  
......
307 319
            } else {
308 320
                // Use buffered reader, fast and unsafe calculate position.
309 321
                StringBuilder builder = new StringBuilder();
310
                MyBufferedReader breader = new MyBufferedReader(this, MAX_BUFFER_FOR_LINE);
322
                MyBufferedReader breader = new MyBufferedReader(this, maxBufferForLine);
311 323
                while (lineno < countLines) {
312 324
                    this.seek(position);
313 325
                    breader.clean();
314 326
                    if(numberOfLines == null){
315 327
                        line = breader.readLine();
316 328
                    } else {
317
                        breader.mark(MAX_BUFFER_FOR_LINE);
329
                        breader.mark(maxBufferForLine);
318 330
                        Integer nextLine = numberOfLines.apply(breader);
319 331
                        breader.reset();
320 332
                        builder.setLength(0);
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/simplereader/SimpleReaderSetProvider.java
54 54

  
55 55
        @Override
56 56
        protected void doLoad() {
57
            long index=-1;
57 58
            try {
59
                index = this.getOID();
58 60
                SimpleReaderStoreProvider.RowToFeatureTranslator translator = this.store.getRowToFeatureTranslator();
59
                long index = this.getOID();
60 61
                List<String> row = this.store.getRowByIndex(index);
61 62
                translator.translate(index, row, this);
62
            } catch (Exception ex) {
63
                throw new ReadRuntimeException(getStoreFullName(), this.getOID(), ex);
63
            } catch (Throwable ex) {
64
                throw new ReadRuntimeException(getStoreFullName(), index, ex);
64 65
            }
65 66
        }
66 67

  
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/simplereader/SimpleReaderStoreProvider.java
528 528
            // Initialize the feature types
529 529
            EditableFeatureType edftype = getStoreServices().createFeatureType(this.getName());
530 530
            SimpleReaderFeatureTypeLoader featureTypeLoader = getFeatureTypeLoader();
531
            featureTypeLoader.loadFeatureType(edftype, true, taskStatus);
531
            featureTypeLoader.loadFeatureType(edftype, taskStatus);
532 532
            FeatureType ftype = edftype.getNotEditableCopy();
533 533
            this.setFeatureType(ftype);
534 534

  
......
558 558
            this.virtualrows = ((AbstractSimpleReader) reader).getVirtualRows(this.taskStatus);
559 559
            if (this.virtualrows == null) {
560 560

  
561
                taskStatus.message(i18n.getTranslation("_Loading"));
562
                taskStatus.setIndeterminate();
563

  
561 564
                List<String> row = reader.read();
562 565

  
563 566
                int skipLines = SimpleReaderStoreParameters.getSkipLines(getSimpleReaderParameters());
......
817 820
                    try {
818 821
                        oid = f.getOID();
819 822
                        Geometry geom = (Geometry) f.get(geomdesc.getName());
820
                        index.insert(geom, oid);
821
                        theEnvelope.add(geom);
822
                    } catch(Exception ex) {
823
                        if(geom!= null){
824
                            index.insert(geom, oid);
825
                            theEnvelope.add(geom);
826
                        }
827
                    } catch(Throwable ex) {
823 828
                        LOGGER.debug("Can't insert feature '"+Objects.toString(oid)+"' in spatial index.",ex);
824 829
                    }
825 830
                }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FilteredIterator.java
25 25

  
26 26
import java.util.Iterator;
27 27
import java.util.NoSuchElementException;
28
import java.util.Objects;
28 29
import org.gvsig.fmap.dal.exception.DataEvaluatorException;
29 30
import org.gvsig.fmap.dal.exception.DataException;
31
import org.gvsig.fmap.dal.feature.FeatureReference;
30 32
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
31 33
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
32 34
import org.gvsig.tools.evaluator.Evaluator;
......
134 136
            }
135 137
        }
136 138
        
137
	public boolean match(DefaultFeature feature) throws DataException {
138
		try {
139
			if (filter==null) {
140
                            return true;
141
			}
142
                        Object x = this.filter.evaluate(feature);
143
                        return toBooleanMatch(x);
144
		} catch (Exception e) {
145
			throw new DataEvaluatorException(e);
146
		}
147
	}
139
	   public boolean match(DefaultFeature feature) throws DataException {
140
        try {
141
            if (filter == null) {
142
                return true;
143
            }
144
            Object x = this.filter.evaluate(feature);
145
            return toBooleanMatch(x);
146
        } catch (Exception e) {
147
            FeatureReference ref = null;
148
            try {
149
                ref = feature.getReference();
150
            } catch (Throwable th) {
151
                //Do nothing
152
            }
153
            throw new DataEvaluatorException(e, Objects.toString(ref));
154
        }
155
    }
148 156

  
149 157
        @Override
150 158
	public Object next() {
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gml/GeometryStrategiesGML3.java
15 15
import com.vividsolutions.jts.geom.Polygon;
16 16
import com.vividsolutions.jts.io.gml2.GMLConstants;
17 17
import com.vividsolutions.jts.operation.linemerge.LineMerger;
18
import java.util.ArrayList;
18 19
import java.util.HashMap;
19 20
import java.util.List;
20 21
import org.apache.commons.collections4.CollectionUtils;
......
119 120

  
120 121
            @Override
121 122
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
122
                Object exterior = arg.children.get(0);
123
                Object interior = null;
124
                if(arg.children.size() > 1){ //FIXME: Ver si se est? cogiendo solo un agujero
125
                    interior = arg.children.get(1);
123
                LinearRing exterior = (LinearRing) arg.children.get(0);
124
                List<LinearRing> interior = null;
125
                int childrensCount = arg.children.size();
126
                if(childrensCount == 2){
127
                    interior = (List<LinearRing>) arg.children.get(1);
128
                } else if(childrensCount > 2){
129
                    interior = new ArrayList<>();
130
                    for (int i = 1; i < childrensCount; i++) {
131
                        Object child = arg.children.get(i);
132
                        if(child instanceof List){
133
                            interior.add(((List<LinearRing>)child).get(0));
134
                        } else {
135
                            interior.add(((LinearRing)child));
136
                        }
137
                    }
126 138
                }
127 139
                return new ImmutablePair(exterior, interior);
128 140
            }

Also available in: Unified diff