Revision 34978 branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dxf/DXFStoreProvider.java

View differences:

DXFStoreProvider.java
142 142
        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
143 143
        this.taskStatus = manager.creteDefaultSimpleTaskStatus("DXF");
144 144

  
145
        counterNewsOIDs = 0;
145
		counterNewsOIDs = 0;
146 146
		//		projection = CRSFactory.getCRS(getParameters().getSRSID());
147 147

  
148 148
		File file = getDXFParameters().getFile();
......
220 220
			return newEnvelope;
221 221
		}
222 222
	}
223
    
223

  
224 224
	public void open() throws OpenException {
225 225
		if (this.data != null) {
226 226
			return;
227 227
		}
228
		openEver();
229
	}
230
	
231
	private void openEver() throws OpenException {
228 232
		try {
229 233
	        this.taskStatus.add();
230 234
			getResource().execute(new ResourceAction() {
231 235
				public Object run() throws Exception {
232 236
					DXFData dxfData = null;
233
					if (resource.getData() != null) {
234
						dxfData = (DXFData) ((Map) resource.getData())
235
								.get(projection
236
								.getAbrev()); // OJO no es del todo correcto (puede
237
												// llevar reproyeccion)
238
					} else {
239
						resource.setData(new HashMap());
240
					}
237
					resource.setData(new HashMap());
241 238
					FeatureStoreProviderServices store = getStoreServices();
242
					if (dxfData == null) {
243 239
						dxfData = new DXFData();
244 240
						dxfData.data = new ArrayList();
245 241
						data = dxfData.data;
246 242
						counterNewsOIDs = 0;
247 243
						Reader reader = new Reader().initialice(
248 244
								getMemoryProvider(),
249
								new File((String) resource.get()),
245
								(File) resource.get(),
250 246
								projection,
251 247
								legendBuilder
252 248
							);
......
269 265
						resource.notifyOpen();
270 266
						store.setFeatureTypes(dxfData.fTypes, dxfData.defaultFType);
271 267
						reader.load();
272
						//				envelope = reader.getEnvelope();
273 268

  
274 269
						dxfData.envelope = reader.getEnvelope();
275 270

  
......
281 276
						resource.notifyClose();
282 277
						((Map) resource.getData()).put(projection.getAbrev(),
283 278
								dxfData); // OJO la reproyeccion
284
					}
285 279

  
286 280
					data = dxfData.data;
287 281
					store.setFeatureTypes(dxfData.fTypes, dxfData.defaultFType);
......
341 335
						features =
342 336
							getStoreServices().getFeatureStore()
343 337
									.getFeatureSet();
344

  
338
					List newdata = new ArrayList();
345 339
					writer.begin();
346 340
					it = features.fastIterator();
347 341
                    taskStatus.setRangeOfValues(0,0);
348 342
                    long counter=0;
349 343
					while (it.hasNext()) {
350 344
					    taskStatus.setCurValue(counter++);
351
						writer.add(getStoreServices().getFeatureProviderFromFeature(
352
								(org.gvsig.fmap.dal.feature.Feature) it.next()));
345
						FeatureProvider feature = getStoreServices().getFeatureProviderFromFeature(
346
								(org.gvsig.fmap.dal.feature.Feature) it.next());
347
						writer.add(feature);
348
						if (feature.getOID() == null){
349
							logger.warn("feature without OID");
350
							feature.setOID(createNewOID());
351
						}
352
						newdata.add(feature);
353 353
					}
354
					data = newdata;
354 355
					writer.end();
356
						if (writer.getEnvelope() != null){
357
							envelope = writer.getEnvelope().getGeometry().getEnvelope();
358
						}
355 359
					resource.notifyChanges();
356
					counterNewsOIDs = 0;
360
//					counterNewsOIDs = 0;
357 361
					} finally {
358 362
						if (it != null) {
359 363
							it.dispose();
......
582 586

  
583 587
			    taskStatus.setCurValue(i);
584 588

  
585
                FeatureProvider feature = store.createFeatureProvider(store
589
				FeatureProvider feature = store.createFeatureProvider(store
586 590
						.getStoreServices().getDefaultFeatureType());
587 591

  
592
				Feature fea = (Feature) features.get(i);
588 593
				try {
589
					Feature fea = (Feature) features.get(i);
590 594

  
591 595
					feature.setOID(new Long(i));
592 596
					feature.set(ID_FIELD_ID, Integer.valueOf(i));
......
603 607
							.getProp("elevation")));
604 608
					feature.set(ID_FIELD_THICKNESS, toDouble(fea
605 609
							.getProp("thickness")));
610
					feature.set(ID_FIELD_GEOMETRY, null);
606 611
					// FIXME: Abria que pillar el resto de atributos del DXF.
607 612

  
608 613
					store.addFeatureProvider(feature);
......
763 768
						);
764 769
					}
765 770
				} catch (Exception e) {
766
					throw new LoadException(e, fileName);
771
					//throw new LoadException(e, fileName);
772
					// FIXME: add to log max 10
767 773
				}
768 774
				if (leyendBuilder != null) {
775
					try {
769 776
					leyendBuilder.process(feature);
777
					} catch (Exception e) {
778
						logger.warn(
779
								MessageFormat.format(
780
									"load: legendBuilder process fails in the feature {1}",
781
									fea
782
								)
783
							);
784
					}
770 785
				}
771 786

  
772 787
			}
......
787 802

  
788 803
		private boolean dxf3DFile = false;
789 804
		private String fileName;
805
		private Envelope envelope;
790 806

  
791 807
		public Writer initialice(File file, IProjection projection) {
792 808
			this.proj = projection;
793 809
			this.fileName = file.getAbsolutePath();
794 810
			entityMaker = new DxfEntityMaker(proj);
795

  
796 811
			return this;
797 812
		}
798 813

  
799 814
		public void begin() {
815
			envelope = null;
800 816
			entityMaker = new DxfEntityMaker(proj);
801 817
		}
802 818

  
......
817 833
		public void add(FeatureProvider feature) throws WriteException {
818 834
			try {
819 835
				Geometry geom = feature.getDefaultGeometry();
836
				if(geom == null){
837
					//FIXME: tirar al log y avisar al usuario
838
					return;
839
				}
820 840
				GeometryType type = geom.getGeometryType();
841
				boolean geometrySupported = true;
821 842

  
822 843
				if ((TYPES.POINT == type.getType()) && (SUBTYPES.GEOM3D == type.getSubType())) {
823 844
					dxf3DFile = true;
......
850 871
					k = createLwPolyline2D(handle, k, feature, true);
851 872

  
852 873
				} else {
874
					geometrySupported = false;
853 875
					logger.warn(
854 876
							MessageFormat.format(
855 877
									"Geometry '{1}' not yet supported",
......
858 880
						);
859 881
					k++;
860 882
				}
883
				if (geometrySupported){
884
					if (this.envelope != null){
885
						this.envelope.add(feature.getDefaultEnvelope());
886
					} else {
887
						this.envelope = feature.getDefaultEnvelope().getGeometry().getEnvelope();
888
					}
889
				}
861 890
			} catch (Exception e) {
862 891
				throw new WriteException(fileName, e);
863 892
			}
......
1470 1499
			return k;
1471 1500
		}
1472 1501

  
1502
		public Envelope getEnvelope() {
1503
			return this.envelope;
1504
		}
1505

  
1473 1506
	}
1474 1507

  
1475 1508
	public boolean closeResourceRequested(ResourceProvider resource) {

Also available in: Unified diff