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

View differences:

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