Revision 130 org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/java/org/gvsig/fmap/dal/store/dgn/DGNStoreProvider.java

View differences:

DGNStoreProvider.java
315 315
                    TimeCounter tc = new TimeCounter();
316 316
                    tc.start();
317 317

  
318
                    FeatureStoreProviderServices store = getStoreServices();
318
                    FeatureStoreProviderServices storeProviderServices = getStoreServices();
319 319
                    if (dgndata == null && !(getDGNParameters().useReload())) {
320 320
                        if (resource.getData() != null) {
321 321
                            dgndata =
......
333 333
                        data = dgndata.data;
334 334
                        counterNewsOIDs = 0;
335 335
                        Reader reader = new Reader().initialice(getMemoryProvider(), (File) resource.get(), projection, legendBuilder);
336
                        reader.begin(store);
336
                        reader.begin(storeProviderServices);
337 337
                        dgndata.defaultFType = reader.getDefaultType().getNotEditableCopy();
338 338
                        List types = new ArrayList();
339 339
                        Iterator it = reader.getTypes().iterator();
......
349 349
                        dgndata.fTypes = types;
350 350

  
351 351
                        resource.notifyOpen();
352
                        store.setFeatureTypes(dgndata.fTypes, dgndata.defaultFType);
352
                        storeProviderServices.setFeatureTypes(dgndata.fTypes, dgndata.defaultFType);
353 353
                        reader.load();
354 354
                        dgndata.envelope = reader.getEnvelope();
355 355
                        dgndata.legendBuilder = legendBuilder;
......
365 365
                    // El feature type no lo compartimos entre las instancias del
366 366
                    // mismo resource ya que puede cambiar en funcion del filtro.
367 367
                    // Por lo menos el geometry-type.
368
                    List<FeatureType> featureTypes = getFeatureTypes(store);
368
                    List<FeatureType> featureTypes = getFeatureTypes(storeProviderServices);
369 369

  
370 370
                    tc.restart("Created featuretype (featureTypes=" + featureTypes + ")");
371 371

  
......
380 380
                    tc.restart("PostProcessFeatures");
381 381

  
382 382
                    legendBuilder = dgndata.legendBuilder;
383
                    store.setFeatureTypes(featureTypes, featureTypes.get(0));
383
                    storeProviderServices.setFeatureTypes(featureTypes, featureTypes.get(0));
384 384
                    setDynValue("CRS", projection);
385 385
                    counterNewsOIDs = data.size();
386 386
                    tc.restart("load finished.");
......
420 420
    }
421 421

  
422 422
    public List getFeatureTypes(FeatureStoreProviderServices store) {
423
        //FIXME: Habr?a que distinguir cuando se va a crear un DGN 3D o 2D, de momento siempre 3D
424
        return getFeatureTypes(store, Geometry.SUBTYPES.GEOM3D);
425
    }
426

  
427
    private List getFeatureTypes(FeatureStoreProviderServices store, int subtype) {
423 428
        EditableFeatureType featureType = store.createFeatureType(getName());
424 429

  
425 430
        featureType.setHasOID(true);
......
539 544
        }
540 545
        try {
541 546
            attr.setGeometryType(GeometryLocator.getGeometryManager()
542
                .getGeometryType(geometryTypeToUse, Geometry.SUBTYPES.GEOM3D));
547
                .getGeometryType(geometryTypeToUse, subtype));
543 548
        } catch (Exception e) {
544 549
            attr.setGeometryType(geometryTypeToUse);
545
            attr.setGeometrySubType(Geometry.SUBTYPES.GEOM3D);
550
            attr.setGeometrySubType(subtype);
546 551
        }
547 552
        ID_FIELD_GEOMETRY = attr.getIndex();
548 553

  
......
562 567
        private IProjection projection;
563 568
        private List types;
564 569
        private LegendBuilder leyendBuilder;
565
        private AbstractMemoryStoreProvider store;
570
        private AbstractMemoryStoreProvider storeProvider;
566 571
        private Envelope envelope;
567 572

  
568
        public Reader initialice(AbstractMemoryStoreProvider store, File file,
573
        public Reader initialice(AbstractMemoryStoreProvider storeProvider, File file,
569 574
            IProjection projection, LegendBuilder leyendBuilder) {
570
            this.store = store;
575
            this.storeProvider = storeProvider;
571 576
            this.file = file;
572 577
            this.projection = projection;
573 578
            this.leyendBuilder = leyendBuilder;
574 579
            if (leyendBuilder != null) {
575
                leyendBuilder.initialize(store);
580
                leyendBuilder.initialize(storeProvider);
576 581
            }
577 582
            return this;
578 583
        }
......
581 586
            return this.envelope;
582 587
        }
583 588

  
584
        public void begin(FeatureStoreProviderServices store) {
589
        public void begin(FeatureStoreProviderServices storeProviderServices) {
585 590

  
586
            types = getFeatureTypes(store);
591
            types = getFeatureTypes(storeProviderServices);
587 592

  
588 593
            if (leyendBuilder != null) {
589 594
                leyendBuilder.begin();
......
653 658

  
654 659
                DGNReader dgnReader = new DGNReader(file.getAbsolutePath(), getDGNParameters().logErrors());
655 660

  
656
                if (dgnReader.getInfo().dimension == 2 || getDGNParameters().ignoreZs()) {
657
                    envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
658
                } else {
659
                    envelope = geomManager.createEnvelope(SUBTYPES.GEOM3D);
660
                }
661
                // FIXME: De momento forzamos a que todas las geometr?as que se
662
                // creen sean 3D porque el m?todo getFeatureTypes solo puede
663
                // crear los geometryAttributes como 3D
664
                int subtypeHeader;
665
                    subtypeHeader = Geometry.SUBTYPES.GEOM3D;
661 666

  
667
                envelope = geomManager.createEnvelope(subtypeHeader);
668

  
662 669
                FeatureType type = getDefaultType().getNotEditableCopy();
663 670

  
664 671
                int counterOfElement = 0;
......
752 759

  
753 760
                    zvalue = 0;
754 761
                    try {
755
                        int subtype;
762
                        int subtypeElement;
756 763
                        switch (elemento.stype) {
757 764
                        case DGNFileHeader.DGNST_COMPLEX_HEADER:
758 765
                            parentElement = (DGNElemComplexHeader) elemento;
......
768 775
                                zvalue = p.getZ();
769 776
                            } else {
770 777
                                OrientablePrimitive geom = null;
771
                                subtype = getGeometrySubType(dgnmultipoint);
778
                                subtypeElement = getGeometrySubType(dgnmultipoint);
772 779
                                if (dgnmultipoint.isPolygon()) {
773
                                    geom = (OrientablePrimitive) geomManager.create(Geometry.TYPES.SURFACE,subtype);
780
                                    geom = (OrientablePrimitive) geomManager.create(Geometry.TYPES.SURFACE,subtypeHeader);
774 781
                                } else {
775
                                    geom = (OrientablePrimitive) geomManager.create(Geometry.TYPES.CURVE,subtype);
782
                                    geom = (OrientablePrimitive) geomManager.create(Geometry.TYPES.CURVE,subtypeHeader);
776 783
                                }
777 784

  
778 785
                                // Si es una curva nos saltamos los dos primeros y los dos ultimos vertices.
......
835 842
                            elShapeArc.transform(mT);
836 843

  
837 844
                            OrientablePrimitive geom = null;
838
                            subtype = getGeometrySubType(dgnarc);
845
                            subtypeElement = getGeometrySubType(dgnarc);
839 846
                            if (dgnarc.isSurface()) {
840 847
                                geom = (OrientablePrimitive) geomManager.create(
841
                                        Geometry.TYPES.SURFACE, subtype);
848
                                        Geometry.TYPES.SURFACE, subtypeHeader);
842 849
                            } else {
843 850
                                geom = (OrientablePrimitive) geomManager.create(
844
                                        Geometry.TYPES.CURVE, subtype);
851
                                        Geometry.TYPES.CURVE, subtypeHeader);
845 852
                            }
846 853
                            geom.setGeneralPath(elShapeArc);
847
                            if ((subtype == Geometry.SUBTYPES.GEOM3D || subtype == Geometry.SUBTYPES.GEOM3DM)
854
                            if ((subtypeElement == Geometry.SUBTYPES.GEOM3D || subtypeElement == Geometry.SUBTYPES.GEOM3DM)
848 855
                                && !ignoreZs) {
849 856
                                for (int i = 0; i < geom.getNumVertices(); i++) {
850 857
                                    Point originalvertex = geom.getVertex(i);
851 858
                                    Point vertex =
852
                                        (Point) geomManager.create(Geometry.TYPES.POINT, subtype);
859
                                        (Point) geomManager.create(Geometry.TYPES.POINT, subtypeElement);
853 860
                                    vertex.setCoordinateAt(0,originalvertex.getX());
854 861
                                    vertex.setCoordinateAt(1,originalvertex.getY());
855 862
                                    vertex.setCoordinateAt(2, zvalue);
......
865 872

  
866 873
                        case DGNFileHeader.DGNST_TEXT:
867 874
                            DGNElemText dgntext = (DGNElemText) elemento;
868
                            subtype = getGeometrySubType(dgntext);
869
                            Point point = (Point) geomManager.create(TYPES.POINT, subtype);
875
                            subtypeElement = getGeometrySubType(dgntext);
876
                            Point point = (Point) geomManager.create(TYPES.POINT, subtypeHeader);
870 877
                            point.setCoordinateAt(0, dgntext.getPoint().getX());
871 878
                            point.setCoordinateAt(1, dgntext.getPoint().getY());
872
                            if (subtype == Geometry.SUBTYPES.GEOM3D) {
873
                                point.setCoordinateAt(2, dgntext.getPoint().getZ());
879
                            if (subtypeHeader == Geometry.SUBTYPES.GEOM3D) {
880
                                if(subtypeElement == Geometry.SUBTYPES.GEOM2D){
881
                                    point.setCoordinateAt(2, 0);
882
                                } else {
883
                                    point.setCoordinateAt(2, dgntext.getPoint().getZ());
884
                                }
874 885
                            }
875 886

  
876 887
                            data.set(ID_FIELD_HEIGHTTEXT, dgntext.getHeight());
......
900 911
                    addFeature(data, dgnReader);
901 912
                } // for
902 913

  
903
                EditableFeatureType featureType = store.getFeatureStore().getDefaultFeatureType().getCopy().getEditable();
914
                EditableFeatureType featureType = storeProvider.getFeatureStore().getDefaultFeatureType().getCopy().getEditable();
904 915
                FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType.get(featureType.getDefaultGeometryAttributeName());
905 916
                featureType.remove(fad.getName());
906 917
                EditableFeatureAttributeDescriptor efad = featureType.add(fad.getName(), fad.getType(), fad.getSize());
907 918
                efad.setDefaultValue(fad.getDefaultValue());
908 919

  
909 920
                GeometryType gty = null;
910
                int geometrySubtype;
911
                if (dgnReader.is3D()) {
912
                    geometrySubtype = Geometry.SUBTYPES.GEOM3D;
913
                } else {
914
                    geometrySubtype = Geometry.SUBTYPES.GEOM2D;
915
                }
916 921

  
917
                gty = geomManager.getGeometryType(fad.getGeomType().getType(),geometrySubtype);
922
                gty = geomManager.getGeometryType(fad.getGeomType().getType(),subtypeHeader);
918 923

  
919 924
                efad.setGeometryType(gty);
920 925

  
921 926
                efad.setPrecision(fad.getPrecision());
922 927
                featureType.setDefaultGeometryAttributeName(fad.getName());
923 928

  
929

  
924 930
                if (xmlbfw != null) {
925 931
                    try {
926 932
                        xmlbfw.write("</DGN>\n");

Also available in: Unified diff