Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2060 / extensions / extDwg / src / org / gvsig / dwg / fmap / dal / store / dwg / DWGStoreProvider.java @ 39347

History | View | Annotate | Download (20.3 KB)

1
package org.gvsig.dwg.fmap.dal.store.dwg;
2

    
3
import java.io.File;
4
import java.io.IOException;
5
import java.util.ArrayList;
6
import java.util.HashMap;
7
import java.util.Iterator;
8
import java.util.List;
9
import java.util.Map;
10

    
11
import org.cresques.cts.IProjection;
12
import org.gvsig.dwg.lib.DwgFile;
13
import org.gvsig.dwg.lib.DwgObject;
14
import org.gvsig.dwg.lib.DwgVersionNotSupportedException;
15
import org.gvsig.dwg.lib.IDwg2FMap;
16
import org.gvsig.dwg.lib.IDwg3DTestable;
17
import org.gvsig.dwg.lib.objects.DwgMText;
18
import org.gvsig.dwg.lib.objects.DwgText;
19
import org.gvsig.fmap.dal.DALLocator;
20
import org.gvsig.fmap.dal.DataManager;
21
import org.gvsig.fmap.dal.DataServerExplorer;
22
import org.gvsig.fmap.dal.DataStoreNotification;
23
import org.gvsig.fmap.dal.DataTypes;
24
import org.gvsig.fmap.dal.FileHelper;
25
import org.gvsig.fmap.dal.exception.DataException;
26
import org.gvsig.fmap.dal.exception.InitializeException;
27
import org.gvsig.fmap.dal.exception.OpenException;
28
import org.gvsig.fmap.dal.exception.ReadException;
29
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
30
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
31
import org.gvsig.fmap.dal.feature.EditableFeatureType;
32
import org.gvsig.fmap.dal.feature.FeatureType;
33
import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
34
import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
35
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
36
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
37
import org.gvsig.fmap.dal.feature.spi.memory.AbstractMemoryStoreProvider;
38
import org.gvsig.fmap.dal.resource.ResourceAction;
39
import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
40
import org.gvsig.fmap.dal.resource.file.FileResource;
41
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
42
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
43
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
44
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
45
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
46
import org.gvsig.fmap.geom.Geometry;
47
import org.gvsig.fmap.geom.GeometryLocator;
48
import org.gvsig.fmap.geom.GeometryManager;
49
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
50
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
51
import org.gvsig.fmap.geom.primitive.Envelope;
52
import org.gvsig.fmap.geom.primitive.Point;
53
import org.gvsig.tools.dynobject.exception.DynMethodException;
54
import org.gvsig.tools.exception.NotYetImplemented;
55
import org.gvsig.tools.persistence.PersistentState;
56
import org.gvsig.tools.persistence.exception.PersistenceException;
57
import org.slf4j.Logger;
58
import org.slf4j.LoggerFactory;
59

    
60
public class DWGStoreProvider extends AbstractMemoryStoreProvider implements
61
                ResourceConsumer {
62
        private static final Logger logger = LoggerFactory.getLogger(DWGStoreProvider.class);
63

    
64
        public static final String NAME = "DWG";
65
        public static final String DESCRIPTION = "DWG file";
66
        public static final String METADATA_DEFINITION_NAME = NAME;
67

    
68
        public static final String NAME_FIELD_ID = "ID";
69
        public static final String NAME_FIELD_GEOMETRY = "Geometry";
70
        public static final String NAME_FIELD_ENTITY = "Entity";
71
        public static final String NAME_FIELD_LAYER = "Layer";
72
        public static final String NAME_FIELD_COLOR = "Color";
73
        public static final String NAME_FIELD_ELEVATION = "Elevation";
74
        public static final String NAME_FIELD_THICKNESS = "Thickness";
75
        public static final String NAME_FIELD_TEXT = "Text";
76
        public static final String NAME_FIELD_HEIGHTTEXT = "HeightText";
77
        public static final String NAME_FIELD_ROTATIONTEXT = "Rotation";
78

    
79
        private int ID_FIELD_ID = 0;
80
        private int ID_FIELD_GEOMETRY = 1;
81
        private int ID_FIELD_ENTITY = 2;
82
        private int ID_FIELD_LAYER = 3;
83
        private int ID_FIELD_COLOR = 4;
84
        private int ID_FIELD_ELEVATION = 5;
85
        private int ID_FIELD_THICKNESS = 6;
86
        private int ID_FIELD_TEXT = 7;
87
        private int ID_FIELD_HEIGHTTEXT = 8;
88
        private int ID_FIELD_ROTATIONTEXT = 9;
89

    
90
        private IProjection projection;
91
        private ResourceProvider resource;
92
        private LegendBuilder legendBuilder;
93

    
94
        private long counterNewsOIDs = 0;
95
        protected GeometryManager geomManager = GeometryLocator.getGeometryManager();
96

    
97
        public DWGStoreProvider(DWGStoreParameters parameters,
98
                        DataStoreProviderServices storeServices) throws InitializeException {
99
                super(parameters, storeServices, FileHelper
100
                                .newMetadataContainer(METADATA_DEFINITION_NAME));
101

    
102
                counterNewsOIDs = 0;
103
                //                projection = CRSFactory.getCRS(getParameters().getSRSID());
104

    
105
                File file = getDWGParameters().getFile();
106
                resource = this.createResource(
107
                                FileResource.NAME,
108
                                new Object[] { file.getAbsolutePath() }
109
                        );
110

    
111
                resource.addConsumer(this);
112

    
113
                this.projection = this.getDWGParameters().getCRS();
114

    
115

    
116
                try {
117
                        legendBuilder = (LegendBuilder) this.invokeDynMethod(
118
                                        LegendBuilder.DYNMETHOD_BUILDER_NAME, null);
119
                } catch (DynMethodException e) {
120
                        legendBuilder = null;
121
                } catch (Exception e) {
122
                        throw new InitializeException(e);
123
                }
124

    
125
                this.initializeFeatureTypes();
126
        }
127

    
128
        private DWGStoreParameters getDWGParameters() {
129
                return (DWGStoreParameters) this.getParameters();
130
        }
131

    
132

    
133
        public String getProviderName() {
134
                return NAME;
135
        }
136

    
137
        public boolean allowWrite() {
138
                return false;
139
        }
140

    
141
        public Object getLegend() throws OpenException {
142
                this.open();
143
                if (legendBuilder == null) {
144
                        return null;
145
                }
146
                return legendBuilder.getLegend();
147
        }
148

    
149
        public Object getLabeling() throws OpenException {
150
                this.open();
151
                if (legendBuilder == null) {
152
                        return null;
153
                }
154
                return legendBuilder.getLabeling();
155
        }
156

    
157
        private class DWGData {
158
                public ArrayList data = null;
159
                public FeatureType defaultFType = null;
160
                public List fTypes = null;
161
                public Envelope envelope = null;
162
                public IProjection projection;
163
                public LegendBuilder legendBuilder = null;
164
                public Envelope getEnvelopeCopy() throws CreateEnvelopeException {
165
                        if (envelope == null) {
166
                                return null;
167
                        }
168
                        Envelope newEnvelope;
169
                        if (envelope.getDimension() == 2) {
170
                                newEnvelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
171
                        } else {
172
                                newEnvelope = geomManager.createEnvelope(SUBTYPES.GEOM3D);
173

    
174
                        }
175
                        newEnvelope.setLowerCorner(envelope.getLowerCorner());
176
                        newEnvelope.setUpperCorner(envelope.getUpperCorner());
177
                        return newEnvelope;
178
                }
179
        }
180

    
181
        private AbstractMemoryStoreProvider getStoreProvider() {
182
                return this;
183
        }
184

    
185
        public void open() throws OpenException {
186
                if (this.data != null) {
187
                        return;
188
                }
189
                // try {
190
                // this.resource.begin();
191
                // } catch (ResourceExecuteException e2) {
192
                // try {
193
                // throw new OpenException(resource.getName(), e2);
194
                // } catch (AccessResourceException e1) {
195
                // throw new OpenException(this.getName(), e2);
196
                // }
197
                //
198
                // }
199
                try {
200
                        getResource().execute(new ResourceAction() {
201
                                public Object run() throws Exception {
202
                                        ResourceProvider resource = getResource();
203
                                        DWGData dwgData = null;
204
                                        FeatureStoreProviderServices store = getStoreServices();
205
                                        if (resource.getData() != null) {
206
                                                dwgData =
207
                                                                (DWGData) ((Map) resource.getData()).get(projection.getAbrev());
208
                                                // OJO no es del todo correcto (puede llevar
209
                                                // reproyeccion)
210
                                        } else {
211
                                                resource.setData(new HashMap());
212
                                        }
213
                                        if (dwgData == null) {
214
                                                dwgData = new DWGData();
215
                                                dwgData.data = new ArrayList();
216
                                                data = dwgData.data;
217
                                                counterNewsOIDs = 0;
218
                                                Reader reader =
219
                                                                new Reader().initialice(getStoreProvider(),
220
                                                                                (File)resource.get(),
221
                                                                                projection, legendBuilder);
222
                                                reader.begin(store);
223
                                                dwgData.defaultFType =
224
                                                                reader.getDefaultType().getNotEditableCopy();
225
                                                ArrayList types = new ArrayList();
226
                                                Iterator it = reader.getTypes().iterator();
227
                                                EditableFeatureType fType;
228
                                                while (it.hasNext()) {
229
                                                        fType = (EditableFeatureType) it.next();
230
                                                        if (fType.getId().equals(
231
                                                                        dwgData.defaultFType.getId())) {
232
                                                                types.add(dwgData.defaultFType);
233
                                                        } else {
234
                                                                types.add(fType.getNotEditableCopy());
235
                                                        }
236
                                                }
237
                                                dwgData.fTypes = types;
238
                                                dwgData.legendBuilder = legendBuilder;
239

    
240
                                                resource.notifyOpen();
241
                                                store.setFeatureTypes(dwgData.fTypes,
242
                                                                dwgData.defaultFType);
243
                                                reader.load();
244
                                                // this.envelope = reader.getEnvelope();
245

    
246
                                                dwgData.envelope = reader.getEnvelope();
247

    
248

    
249
                                                dwgData.projection = projection;
250

    
251
                                                reader.end();
252
                                                resource.notifyClose();
253
                                                ((Map) resource.getData()).put(projection.getAbrev(),
254
                                                                dwgData); // OJO la reproyeccion
255
                                        }
256

    
257
                                        data = dwgData.data;
258
                                        store.setFeatureTypes(dwgData.fTypes, dwgData.defaultFType);
259
                                        legendBuilder = dwgData.legendBuilder;
260
                                        setDynValue("Envelope", dwgData.getEnvelopeCopy());
261
                                        setDynValue("CRS", projection);
262
                                        counterNewsOIDs = data.size();
263
                                        return null;
264
                                }
265
                        });
266
                } catch (Exception e) {
267
                        this.data = null;
268
                        try {
269
                                throw new OpenException(resource.getName(), e);
270
                        } catch (AccessResourceException e1) {
271
                                throw new OpenException(this.getProviderName(), e);
272
                        }
273
                        // } finally {
274
                        // this.resource.end();
275
                }
276
        }
277

    
278

    
279
        public DataServerExplorer getExplorer() throws ReadException {
280
                DataManager manager = DALLocator.getDataManager();
281
                FilesystemServerExplorerParameters params;
282
                try {
283
                        params = (FilesystemServerExplorerParameters) manager
284
                                .createServerExplorerParameters(FilesystemServerExplorer.NAME);
285
                        params.setRoot(this.getDWGParameters().getFile().getParent());
286
                        return manager.createServerExplorer(params);
287
                } catch (DataException e) {
288
                        throw new ReadException(this.getProviderName(), e);
289
                } catch (ValidateDataParametersException e) {
290
                        throw new ReadException(this.getProviderName(), e);
291
                }
292

    
293
        }
294

    
295

    
296

    
297
        public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator originalFeatureTypesUpdated) throws PerformEditingException {
298
                // FIXME Exception
299
                throw new UnsupportedOperationException();
300
        }
301

    
302
        public class Reader {
303
                private File file;
304
                private String fileName;
305
                private IProjection projection;
306
                private List types;
307
                private LegendBuilder leyendBuilder;
308
                private AbstractMemoryStoreProvider store;
309
                private Envelope envelope;
310
                private DwgFile dwgFeatureFile;
311

    
312
                public Reader initialice(AbstractMemoryStoreProvider store, File file,
313
                                IProjection projection,
314
                                LegendBuilder leyendBuilder) {
315
                        this.store = store;
316
                        this.file = file;
317
                        this.fileName = file.getAbsolutePath();
318
                        this.projection = projection;
319
                        this.leyendBuilder = leyendBuilder;
320
                        if (leyendBuilder != null) {
321
                                leyendBuilder.initialize(store);
322
                        }
323
                        return this;
324
                }
325

    
326
                public Envelope getEnvelope() {
327
                        return this.envelope;
328
                }
329

    
330
                public void begin(FeatureStoreProviderServices store) throws UnsupportedDWGVersionException, ReadException {
331
                    dwgFeatureFile = new DwgFile(file.getAbsolutePath());
332

    
333
            try {
334
                dwgFeatureFile.read();
335
            } catch (DwgVersionNotSupportedException e1) {
336
                throw new UnsupportedDWGVersionException(file.getName(), e1);
337
            } catch (IOException e) {
338
                throw new ReadException(NAME, e);
339
            }
340

    
341
                        EditableFeatureType featureType = store.createFeatureType();
342

    
343
                        featureType.setHasOID(true);
344

    
345
                        ID_FIELD_ID = featureType.add(NAME_FIELD_ID, DataTypes.INT)
346
                                        .setDefaultValue(Integer.valueOf(0))
347
                                .getIndex();
348

    
349
                        EditableFeatureAttributeDescriptor attr = featureType.add(
350
                                        NAME_FIELD_GEOMETRY, DataTypes.GEOMETRY);
351
                        attr.setSRS(this.projection);
352
                        attr.setGeometryType(Geometry.TYPES.GEOMETRY);
353
                        boolean is3dFile = dwgFeatureFile.isDwg3DFile();
354
                        if (is3dFile){
355
                            attr.setGeometrySubType(Geometry.SUBTYPES.GEOM3D);
356
                        }else{
357
                            attr.setGeometrySubType(Geometry.SUBTYPES.GEOM2D);
358
                        }
359
                        ID_FIELD_GEOMETRY = attr.getIndex();
360

    
361
                        featureType.setDefaultGeometryAttributeName(NAME_FIELD_GEOMETRY);
362

    
363
                        // FIXME: Cual es el size y el valor por defecto para Entity ?
364
                        ID_FIELD_ENTITY = featureType.add(NAME_FIELD_ENTITY,
365
                                        DataTypes.STRING, 100)
366
                                        .setDefaultValue("")
367
                                        .getIndex();
368

    
369
                        // FIXME: Cual es el size de Layer ?
370
                        ID_FIELD_LAYER = featureType.add(NAME_FIELD_LAYER,
371
                                        DataTypes.STRING, 100)
372
                                        .setDefaultValue(
373
                                        "default").getIndex();
374

    
375
                        ID_FIELD_COLOR = featureType.add(NAME_FIELD_COLOR,
376
                                        DataTypes.INT)
377
                                        .setDefaultValue(
378
                                        Integer.valueOf(0)).getIndex();
379

    
380
                        ID_FIELD_ELEVATION = featureType.add(NAME_FIELD_ELEVATION,
381
                                        DataTypes.DOUBLE)
382
                                        .setDefaultValue(
383
                                        Double.valueOf(0)).getIndex();
384

    
385
                        ID_FIELD_THICKNESS = featureType.add(NAME_FIELD_THICKNESS,
386
                                        DataTypes.DOUBLE)
387
                                        .setDefaultValue(
388
                                        Double.valueOf(0)).getIndex();
389

    
390
                        // FIXME: Cual es el size de Text ?
391
                        ID_FIELD_TEXT = featureType.add(NAME_FIELD_TEXT,
392
                                        DataTypes.STRING, 100)
393
                                        .setDefaultValue("")
394
                                        .getIndex();
395

    
396
                        ID_FIELD_HEIGHTTEXT = featureType.add(NAME_FIELD_HEIGHTTEXT,
397
                                        DataTypes.DOUBLE).setDefaultValue(
398
                                        Double.valueOf(10)).getIndex();
399

    
400
                        ID_FIELD_ROTATIONTEXT = featureType.add(NAME_FIELD_ROTATIONTEXT,
401
                                        DataTypes.DOUBLE).setDefaultValue(
402
                                        Double.valueOf(0)).getIndex();
403

    
404

    
405

    
406
                        // FIXME: Parece que el DXF puede tener mas atributos opcionales.
407
                        // Habria que ver de pillarlos ?
408

    
409
                        types = new ArrayList();
410
                        types.add(featureType);
411

    
412
                        if (leyendBuilder != null) {
413
                                leyendBuilder.begin();
414
                        }
415

    
416
                }
417

    
418
                public void end() {
419
                        if (leyendBuilder != null) {
420
                                leyendBuilder.end();
421
                        }
422
                }
423

    
424
                public List getTypes() {
425
                        return types;
426
                }
427

    
428
                public EditableFeatureType getDefaultType() {
429
                        return (EditableFeatureType) types.get(0);
430
                }
431

    
432
                private Double toDouble(String value) {
433
                        if (value == null) {
434
                                return Double.valueOf(0);
435
                        }
436
                        return Double.valueOf(value);
437
                }
438

    
439
                public void load() throws DataException {
440

    
441
                        this.envelope = null;
442

    
443
            long count_not_fmap_interface = 0;
444
            long count_null_geometry = 0;
445
            long count_bad_envelope = 0;
446
            long count_envelope_out_of_aoi = 0;
447

    
448
                        dwgFeatureFile.calculateGisModelDwgPolylines();
449
                        dwgFeatureFile.blockManagement2();
450
                        List entities = dwgFeatureFile.getDwgObjects();
451

    
452
                        int id = -1;
453
                        try{
454
                                int envelopeSubType = Geometry.SUBTYPES.GEOM2D;
455
                                boolean is3dFile = dwgFeatureFile.isDwg3DFile();
456

    
457
                                this.envelope = geomManager.createEnvelope(envelopeSubType);
458

    
459
                                boolean updateEnvelope = true;
460

    
461
                                double[] extMin = (double[]) dwgFeatureFile
462
                                                .getHeader("MSPACE_EXTMIN");
463
                                double[] extMax = (double[]) dwgFeatureFile
464
                                                .getHeader("MSPACE_EXTMAX");
465
                                if (extMin != null && extMax != null) {
466
                                        updateEnvelope = false;
467
                                        Point point = (Point) geomManager.create(
468
                                                        Geometry.TYPES.POINT, envelopeSubType);
469
                                        point.setCoordinates(extMin);
470
                                        this.envelope.setLowerCorner(point);
471
                                        point = (Point) geomManager.create(Geometry.TYPES.POINT,
472
                                                        envelopeSubType);
473
                                        point.setCoordinates(extMax);
474
                                        this.envelope.setUpperCorner(point);
475
                                }
476

    
477

    
478
                                Iterator iter = entities.iterator();
479

    
480
                                FeatureProvider featureProvider;
481
                                Envelope gEnvelope;
482

    
483
                                while (iter.hasNext()) {
484
                                        id++;
485
                                        DwgObject entity = (DwgObject) iter.next();
486

    
487
                                        if (!(entity instanceof IDwg2FMap)) {
488
                                            count_not_fmap_interface++;
489
                                            /*
490
                                                logger.warn("load: entity type {}(id:{}) not loadded",
491
                                                new Object[] { entity.getType() }, id);
492
                                                */
493
                                                continue;
494
                                        }
495

    
496
                                        IDwg2FMap dwgEnt = (IDwg2FMap) entity;
497
                                        Geometry geometry = dwgEnt.toFMapGeometry(is3dFile);
498
                                        if (geometry == null) {
499
                                            count_null_geometry++;
500
                                            /*
501
                                                logger.warn("load: entity {}(id:{}) with null geometry",
502
                                                    new Object[] { entity.getType(), id });
503
                                                    */
504
                                                continue;
505
                                        }
506
                                        // FIXME: Estas 6 lineas es por si la geometr??a no se ha
507
                                        // creado correctamente
508
                                        gEnvelope = null;
509
                                        try {
510
                                                gEnvelope = geometry.getEnvelope();
511
                                        } catch (Exception e) {
512
                                                gEnvelope = null;
513
                                        }
514
                                        if (gEnvelope == null) {
515
                                            count_bad_envelope++;
516
                                            /*
517
                                                logger.warn("load: entity {}(id:{}) with null envelope",
518
                                                    new Object[] { entity.getType(), id });
519
                                                    */
520
                                                continue;
521
                                        }
522
                                        // we check for Region of Interest of the CAD file
523
                                        if (!this.envelope.intersects(geometry.getEnvelope())) {
524
                                            count_envelope_out_of_aoi++;
525
                                            /*
526
                                                logger.warn("load: entity {}(id:{}) out of envelope",
527
                                                    new Object[] { entity.getType(), id });
528
                                                    */
529
                                                continue;
530
                                        }
531
                                        featureProvider = store.createFeatureProvider(store
532
                                                        .getStoreServices().getDefaultFeatureType());
533

    
534
                                        featureProvider.set(ID_FIELD_ID, id);
535

    
536
                                        featureProvider.set(ID_FIELD_ENTITY, dwgEnt.toString());
537

    
538
                                        featureProvider.set(ID_FIELD_LAYER, dwgFeatureFile
539
                                                        .getLayerName(entity));
540

    
541
                                        int colorByLayer = dwgFeatureFile.getColorByLayer(entity);
542
                                        int color = entity.getColor();
543
                                        if (color < 0) {
544
                                                color = Math.abs(color);
545
                                        }
546
                                        if (color > 255) {
547
                                                color = colorByLayer;
548
                                        }
549

    
550
                                        featureProvider.set(ID_FIELD_COLOR, color);
551

    
552
                                        if (entity instanceof IDwg3DTestable) {
553
                                                featureProvider.set(ID_FIELD_ELEVATION,
554
                                                                ((IDwg3DTestable) entity).getZ());
555
                                        }
556

    
557
                                        featureProvider.set(ID_FIELD_THICKNESS, 0.0);
558
                                        featureProvider.set(ID_FIELD_HEIGHTTEXT, 0.0);
559
                                        featureProvider.set(ID_FIELD_ROTATIONTEXT, 0.0);
560
                                        featureProvider.set(ID_FIELD_TEXT, "");
561

    
562
                                        if (entity instanceof DwgMText) {
563
                                                DwgMText mtext = (DwgMText) entity;
564
                                                featureProvider.set(ID_FIELD_HEIGHTTEXT, mtext.getHeight());
565
                                                featureProvider.set(ID_FIELD_TEXT, mtext.getText());
566
                                        } else if (entity instanceof DwgText) {
567
                                                DwgText text = (DwgText) entity;
568
                                                featureProvider
569
                                                                .set(ID_FIELD_THICKNESS, text.getThickness());
570
                                                featureProvider.set(ID_FIELD_HEIGHTTEXT, text.getHeight());
571
                                                featureProvider.set(ID_FIELD_ROTATIONTEXT, text
572
                                                                .getRotationAngle());
573
                                                featureProvider.set(ID_FIELD_TEXT, text.getText());
574
                                        }// if-else
575

    
576
                                        featureProvider.setDefaultGeometry(geometry);
577

    
578
                                        store.addFeatureProvider(featureProvider);
579
                                        if (this.leyendBuilder != null) {
580
                                                this.leyendBuilder.process(featureProvider);
581
                                        }
582

    
583
                                }
584

    
585
                                logger.info("Issues while loading DWG entities:+\n"
586
                        + "    Entities not implementing IDwg2FMap interface: " + count_not_fmap_interface + "\n"
587
                        + "    Entities with non-convertible geometry: " + count_null_geometry + "\n"
588
                        + "    Entities without valid envelope: " + count_bad_envelope + "\n"
589
                        + "    Entities with envelope out of global envelope: " + count_envelope_out_of_aoi);
590

    
591
                        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
592
                                throw new CreateGeometryException(e);
593
                        } catch (org.gvsig.fmap.geom.exception.CreateEnvelopeException e) {
594
                                throw new CreateGeometryException(e);
595
                        }
596
                }
597

    
598
        }
599

    
600

    
601
        public boolean closeResourceRequested(ResourceProvider resource) {
602
                return true;
603
        }
604

    
605
        public int getOIDType() {
606
                return DataTypes.LONG;
607
        }
608

    
609
        public boolean supportsAppendMode() {
610
                return false;
611
        }
612

    
613
        public void append(FeatureProvider featureProvider) {
614
                // FIXME Exception
615
                throw new UnsupportedOperationException();
616
        }
617

    
618
        public void beginAppend() {
619
                // FIXME Exception
620
                throw new UnsupportedOperationException();
621

    
622
        }
623

    
624
        public void endAppend() {
625
                // FIXME Exception
626
                throw new UnsupportedOperationException();
627
        }
628

    
629
        public void saveToState(PersistentState state) throws PersistenceException {
630
                // TODO Auto-generated method stub
631
                throw new NotYetImplemented();
632
        }
633

    
634
        public void loadFromState(PersistentState state) throws PersistenceException {
635
                // TODO Auto-generated method stub
636
                throw new NotYetImplemented();
637
        }
638

    
639
        public Object createNewOID() {
640
                return new Long(counterNewsOIDs++);
641
        }
642

    
643
        protected void initializeFeatureTypes() throws InitializeException {
644
                try {
645
                        this.open();
646
                } catch (OpenException e) {
647
                        throw new InitializeException(this.getProviderName(), e);
648
                }
649
        }
650

    
651
        public Envelope getEnvelope() throws DataException {
652
                this.open();
653
                return (Envelope) this.getDynValue("Envelope");
654
        }
655

    
656

    
657
        /*
658
         * (non-Javadoc)
659
         *
660
         * @see
661
         * org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.
662
         * gvsig.fmap.dal.resource.spi.ResourceProvider)
663
         */
664
        public void resourceChanged(ResourceProvider resource) {
665
                this.getStoreServices().notifyChange(
666
                                DataStoreNotification.RESOURCE_CHANGED,
667
                                resource);
668
        }
669

    
670
        public Object getSourceId() {
671
                return this.getDWGParameters().getFile();
672
        }
673

    
674

    
675
        public String getName() {
676
                String name = this.getDWGParameters().getFile().getName();
677
                int n = name.lastIndexOf(".");
678
                if( n<1 ) {
679
                        return name;
680
                }
681
                return name.substring(0, n);
682
        }
683
        
684
        public String getFullName() {
685
                return this.getDWGParameters().getFile().getAbsolutePath();
686
        }
687
        
688

    
689
        
690
        public ResourceProvider getResource() {
691
                return resource;
692
        }
693

    
694
}