Revision 47645 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
XMLFileAsList.java | ||
---|---|---|
5 | 5 |
*/ |
6 | 6 |
package org.gvsig.fmap.dal.store.gml.virtualrows; |
7 | 7 |
|
8 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.LimitedReader; |
|
9 | 8 |
import java.io.BufferedReader; |
10 | 9 |
import java.io.Closeable; |
11 | 10 |
import java.io.File; |
... | ... | |
28 | 27 |
import org.apache.commons.io.IOUtils; |
29 | 28 |
import org.apache.commons.io.input.CloseShieldReader; |
30 | 29 |
import org.apache.commons.lang3.StringUtils; |
30 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.LimitedReader; |
|
31 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.RandomAccessFileReader; |
|
31 | 32 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.RecordsFile; |
32 | 33 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.RecordsFile.Record; |
33 | 34 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.RecordsFile.RecordType; |
34 | 35 |
import static org.gvsig.fmap.dal.store.simplereader.virtualrows.RecordsFile.RecordTypeBuilder.recordTypeBuilder; |
35 | 36 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.RecordsFileImpl; |
36 |
import org.gvsig.fmap.dal.store.simplereader.virtualrows.RandomAccessFileReader; |
|
37 | 37 |
import org.gvsig.fmap.geom.Geometry; |
38 | 38 |
import org.gvsig.fmap.geom.GeometryLocator; |
39 | 39 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
... | ... | |
56 | 56 |
public static final int COMBINE_NONE = 0; |
57 | 57 |
public static final int COMBINE_FIRST_NOT_NULL = 1; |
58 | 58 |
|
59 |
private static final int IDXFIELD_BEGINLINE = 0; |
|
60 |
private static final int IDXFIELD_BEGINCOLUMN = 1; |
|
61 |
private static final int IDXFIELD_BEGINRECORDPOS = 2; |
|
62 |
private static final int IDXFIELD_ENDLINE = 3; |
|
63 |
private static final int IDXFIELD_ENDCOLUMN = 4; |
|
59 |
private static final int IDXFIELD_BEGINLINE = 0; //INTEGER
|
|
60 |
private static final int IDXFIELD_BEGINCOLUMN = 1; //INTEGER
|
|
61 |
private static final int IDXFIELD_BEGINRECORDPOS = 2; //LONG
|
|
62 |
private static final int IDXFIELD_ENDLINE = 3; //INTEGER
|
|
63 |
private static final int IDXFIELD_ENDCOLUMN = 4; //INTEGER
|
|
64 | 64 |
|
65 |
private static final int IDXFIELD_BEGINGEOMLINE = 5; |
|
66 |
private static final int IDXFIELD_BEGINGEOMCOLUMN = 6; |
|
67 |
private static final int IDXFIELD_BEGINGEOMPOS = 7; |
|
68 |
private static final int IDXFIELD_ENDGEOMLINE = 8; |
|
69 |
private static final int IDXFIELD_ENDGEOMCOLUMN = 9; |
|
70 |
private static final int IDXFIELD_ENDGEOMPOS = 10; |
|
65 |
private static final int IDXFIELD_BEGINGEOMLINE = 5; //INTEGER
|
|
66 |
private static final int IDXFIELD_BEGINGEOMCOLUMN = 6; //INTEGER
|
|
67 |
private static final int IDXFIELD_BEGINGEOMPOS = 7; //LONG
|
|
68 |
private static final int IDXFIELD_ENDGEOMLINE = 8; //INTEGER
|
|
69 |
private static final int IDXFIELD_ENDGEOMCOLUMN = 9; //INTEGER
|
|
70 |
private static final int IDXFIELD_ENDGEOMPOS = 10; //LONG
|
|
71 | 71 |
|
72 | 72 |
|
73 | 73 |
private final RandomAccessFileReader reader; |
74 | 74 |
private final String recordPath; |
75 | 75 |
private RecordsFile index; |
76 | 76 |
private List<String> fieldPaths; |
77 |
private List<String> geomPaths; |
|
77 |
private final List<String> geomPaths;
|
|
78 | 78 |
private int combineMode; |
79 | 79 |
|
80 | 80 |
|
... | ... | |
204 | 204 |
spf.setNamespaceAware(false); |
205 | 205 |
SAXParser saxParser = spf.newSAXParser(); |
206 | 206 |
handler = new ParseRecordsHandler(); |
207 |
handler.endLineNumber=(int) (record.getLong(IDXFIELD_ENDLINE)-record.getLong(IDXFIELD_BEGINLINE)+1);
|
|
208 |
handler.endColumnNumber=(int) record.getLong(IDXFIELD_ENDCOLUMN);
|
|
207 |
handler.endLineNumber=(int) (record.getInt(IDXFIELD_ENDLINE)-record.getInt(IDXFIELD_BEGINLINE)+1);
|
|
208 |
handler.endColumnNumber=(int) record.getInt(IDXFIELD_ENDCOLUMN);
|
|
209 | 209 |
|
210 | 210 |
saxParser.parse(is, handler); |
211 | 211 |
} catch (StopParserSAXException ex) { |
... | ... | |
346 | 346 |
|
347 | 347 |
|
348 | 348 |
if (StringUtils.equalsIgnoreCase(path_s, recordPath)) { |
349 |
record.setLong(IDXFIELD_BEGINLINE, locator.getLineNumber());
|
|
350 |
record.setLong(IDXFIELD_BEGINCOLUMN, locator.getColumnNumber());
|
|
351 |
record.setLong(IDXFIELD_ENDLINE, 0);
|
|
352 |
record.setLong(IDXFIELD_ENDCOLUMN, 0);
|
|
349 |
record.setInt(IDXFIELD_BEGINLINE, locator.getLineNumber());
|
|
350 |
record.setInt(IDXFIELD_BEGINCOLUMN, locator.getColumnNumber());
|
|
351 |
record.setInt(IDXFIELD_ENDLINE, 0);
|
|
352 |
record.setInt(IDXFIELD_ENDCOLUMN, 0);
|
|
353 | 353 |
if(CollectionUtils.isNotEmpty(geomPaths)) { |
354 | 354 |
for (int i = 0; i < geomPaths.size(); i++) { |
355 |
record.setLong(IDXFIELD_BEGINGEOMLINE+6*i, 0);
|
|
356 |
record.setLong(IDXFIELD_BEGINGEOMCOLUMN+6*i, 0);
|
|
355 |
record.setInt(IDXFIELD_BEGINGEOMLINE+6*i, 0);
|
|
356 |
record.setInt(IDXFIELD_BEGINGEOMCOLUMN+6*i, 0);
|
|
357 | 357 |
record.setLong(IDXFIELD_BEGINGEOMPOS+6*i, 0); |
358 |
record.setLong(IDXFIELD_ENDGEOMLINE+6*i, 0);
|
|
359 |
record.setLong(IDXFIELD_ENDGEOMCOLUMN+6*i, 0);
|
|
358 |
record.setInt(IDXFIELD_ENDGEOMLINE+6*i, 0);
|
|
359 |
record.setInt(IDXFIELD_ENDGEOMCOLUMN+6*i, 0);
|
|
360 | 360 |
record.setLong(IDXFIELD_ENDGEOMPOS+6*i, 0); |
361 | 361 |
} |
362 | 362 |
} |
... | ... | |
367 | 367 |
for (int i = 0; i < geomPaths.size(); i++) { |
368 | 368 |
String geomPath = geomPaths.get(i); |
369 | 369 |
if (StringUtils.equalsIgnoreCase(path_s, recordPath+"/"+geomPath)) { |
370 |
record.setLong(IDXFIELD_BEGINGEOMLINE+6*i, locator.getLineNumber());
|
|
371 |
record.setLong(IDXFIELD_BEGINGEOMCOLUMN+6*i, locator.getColumnNumber());
|
|
370 |
record.setInt(IDXFIELD_BEGINGEOMLINE+6*i, locator.getLineNumber());
|
|
371 |
record.setInt(IDXFIELD_BEGINGEOMCOLUMN+6*i, locator.getColumnNumber());
|
|
372 | 372 |
record.setLong(IDXFIELD_BEGINGEOMPOS+6*i, 0); |
373 | 373 |
break; |
374 | 374 |
} |
... | ... | |
387 | 387 |
if(line==0){ |
388 | 388 |
column = column - this.beginColumnNumber; |
389 | 389 |
} |
390 |
record.setLong(IDXFIELD_ENDLINE, line);
|
|
391 |
record.setLong(IDXFIELD_ENDCOLUMN, column);
|
|
390 |
record.setInt(IDXFIELD_ENDLINE, line);
|
|
391 |
record.setInt(IDXFIELD_ENDCOLUMN, column);
|
|
392 | 392 |
theIndex.add(record); |
393 | 393 |
} |
394 | 394 |
if(CollectionUtils.isNotEmpty(geomPaths)) { |
395 | 395 |
for (int i = 0; i < geomPaths.size(); i++) { |
396 | 396 |
String geomPath = geomPaths.get(i); |
397 | 397 |
if (StringUtils.equalsIgnoreCase(path_s, recordPath+"/"+geomPath)) { |
398 |
record.setLong(IDXFIELD_ENDGEOMLINE+6*i, this.lastTagLineNumber);
|
|
399 |
record.setLong(IDXFIELD_ENDGEOMCOLUMN+6*i, this.lastTagColumnNumber);
|
|
398 |
record.setInt(IDXFIELD_ENDGEOMLINE+6*i, this.lastTagLineNumber);
|
|
399 |
record.setInt(IDXFIELD_ENDGEOMCOLUMN+6*i, this.lastTagColumnNumber);
|
|
400 | 400 |
break; |
401 | 401 |
} |
402 | 402 |
} |
... | ... | |
424 | 424 |
// } |
425 | 425 |
// System.out.println("RECO END : "+r.getLong(IDXFIELD_ENDLINE) + " " + r.getLong(IDXFIELD_ENDCOLUMN)); |
426 | 426 |
// } |
427 |
positionCalculator.next(r.getLong(IDXFIELD_BEGINLINE), r.getLong(IDXFIELD_BEGINCOLUMN));
|
|
427 |
positionCalculator.next(r.getInt(IDXFIELD_BEGINLINE), r.getInt(IDXFIELD_BEGINCOLUMN));
|
|
428 | 428 |
r.setLong(IDXFIELD_BEGINRECORDPOS, positionCalculator.getColumnPosition()); |
429 | 429 |
// System.out.println("RPOS : " + r.getLong(IDXFIELD_BEGINRECORDPOS)); |
430 | 430 |
if(CollectionUtils.isNotEmpty(geomPaths)) { |
431 | 431 |
for (int i = 0; i < geomPaths.size(); i++) { |
432 |
long beginGeomLine = r.getLong(IDXFIELD_BEGINGEOMLINE + i * 6);
|
|
433 |
long endGeomLine = r.getLong(IDXFIELD_ENDGEOMLINE + i * 6);
|
|
432 |
long beginGeomLine = r.getInt(IDXFIELD_BEGINGEOMLINE + i * 6);
|
|
433 |
long endGeomLine = r.getInt(IDXFIELD_ENDGEOMLINE + i * 6);
|
|
434 | 434 |
if (beginGeomLine == 0 || endGeomLine == 0) { |
435 | 435 |
continue; |
436 | 436 |
} |
437 |
positionCalculator.next(beginGeomLine, r.getLong(IDXFIELD_BEGINGEOMCOLUMN + i * 6));
|
|
437 |
positionCalculator.next(beginGeomLine, r.getInt(IDXFIELD_BEGINGEOMCOLUMN + i * 6));
|
|
438 | 438 |
r.setLong(IDXFIELD_BEGINGEOMPOS + i * 6, positionCalculator.getColumnPosition()); |
439 |
positionCalculator.next(endGeomLine, r.getLong(IDXFIELD_ENDGEOMCOLUMN + i * 6));
|
|
439 |
positionCalculator.next(endGeomLine, r.getInt(IDXFIELD_ENDGEOMCOLUMN + i * 6));
|
|
440 | 440 |
r.setLong(IDXFIELD_ENDGEOMPOS + i * 6, positionCalculator.getColumnPosition()); |
441 | 441 |
// System.out.println("GPOS" + i + " : " + r.getLong(IDXFIELD_BEGINGEOMPOS + i * 6) + " " + r.getLong(IDXFIELD_ENDGEOMPOS + i * 6)); |
442 | 442 |
} |
... | ... | |
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"; |
609 |
final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/INSPIRE_AU.gml"; |
|
609 |
|
|
610 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/INSPIRE_AU.gml"; //Hay 3 geometr?as, LineString, Surface y MultiSurface |
|
611 |
|
|
610 | 612 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/WatercourseLink.gml"; |
611 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/Watercourse.gml"; |
|
613 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/Watercourse.gml"; //Hay 2 geometr?as, Curve y Multicurve
|
|
612 | 614 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/FormOfWay.gml"; |
613 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadArea.gml"; |
|
614 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadSurfaceCategory.gml"; |
|
615 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/FunctionalRoadClass.gml"; |
|
616 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/ConditionOfFacility.gml"; |
|
617 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadWidth.gml"; |
|
618 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/VerticalPosition.gml"; |
|
619 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadLink.gml"; |
|
615 |
final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadArea.gml"; //NO VA |
|
616 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadArea (copia).gml"; //NO VA |
|
617 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadSurfaceCategory.gml"; //No tiene geometr?as |
|
618 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/FunctionalRoadClass.gml"; //No tiene geometr?as |
|
619 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/ConditionOfFacility.gml"; //No tiene geometr?as |
|
620 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadWidth.gml"; //No tiene geometr?as |
|
621 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/VerticalPosition.gml"; //No tiene geometr?as |
|
622 |
// final String XMLFILE1 = "/home/fdiaz/projects/GMLS/sk/RoadLink.gml"; //Hay 2 geometr?as, Curve y Multicurve |
|
620 | 623 |
|
621 | 624 |
|
625 |
|
|
622 | 626 |
String gmlfile = XMLFILE1; |
623 | 627 |
File idxFile = new File(FilenameUtils.removeExtension(gmlfile)+".gmlidx"); |
624 | 628 |
if(idxFile.exists()){ |
... | ... | |
647 | 651 |
System.out.println("RECORD "+i+":"+item); |
648 | 652 |
} |
649 | 653 |
System.out.println(StringUtils.join(gfs.getPropertiesPaths(), "\n")); |
654 |
System.out.println("Geometries:\n"+StringUtils.join(gfs.getGeometryElementPaths(), "\n")); |
|
650 | 655 |
} |
651 | 656 |
} |
Also available in: Unified diff