Revision 47652
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