Revision 34978 branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dxf/DXFStoreProvider.java
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