|
From: <de...@us...> - 2013-01-15 00:17:12
|
Revision: 8209
http://fudaa.svn.sourceforge.net/fudaa/?rev=8209&view=rev
Author: deniger
Date: 2013-01-15 00:16:59 +0000 (Tue, 15 Jan 2013)
Log Message:
-----------
Ajout support filtre de points
Modified Paths:
--------------
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/persistence/FSigLayerPointPersistence.java
Modified: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/persistence/FSigLayerPointPersistence.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/persistence/FSigLayerPointPersistence.java 2013-01-15 00:15:11 UTC (rev 8208)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/persistence/FSigLayerPointPersistence.java 2013-01-15 00:16:59 UTC (rev 8209)
@@ -13,20 +13,29 @@
import com.memoire.fu.Fu;
import com.memoire.fu.FuLog;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.fudaa.ctulu.CtuluArkLoader;
import org.fudaa.ctulu.CtuluArkSaver;
+import org.fudaa.ctulu.CtuluLibFile;
import org.fudaa.ctulu.CtuluLibString;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.gis.GISAttributeInterface;
import org.fudaa.ctulu.gis.GISDataModel;
import org.fudaa.ctulu.gis.GISDataModelFeatureAdapter;
+import org.fudaa.ctulu.gis.GISGeometryFactory;
import org.fudaa.ctulu.gis.GISLib;
import org.fudaa.ctulu.gis.GISZoneCollection;
import org.fudaa.ctulu.gis.GISZoneCollectionPoint;
import org.fudaa.ctulu.gis.gml.GISGMLZoneExporter;
import org.fudaa.ctulu.gis.gml.GMLInputTemplate;
import org.fudaa.ctulu.gis.gml.GMLReader;
+import org.fudaa.ctulu.gis.shapefile.ShapefileDataStore;
import org.fudaa.ebli.calque.BCalque;
import org.fudaa.ebli.calque.BCalquePersistenceGroupe;
import org.fudaa.ebli.calque.BCalquePersistenceSingle;
@@ -38,7 +47,10 @@
import org.fudaa.ebli.calque.edition.ZCalqueEditionGroup;
import org.fudaa.fudaa.commun.save.FudaaSaveLib;
import org.fudaa.fudaa.sig.layer.FSigLayerGroup;
+import org.geotools.data.DataStore;
+import org.geotools.data.FeatureSource;
import org.geotools.feature.FeatureCollection;
+import org.geotools.feature.FeatureType;
/**
* @author Fred Deniger
@@ -57,6 +69,10 @@
save.getUI().put(getGeomId(), geomData);
return save;
}
+ /**
+ * pour des raisons de performances, shapefile peut \xEAtre utilis\xE9 afin d'acc\xE9l\xE9rer les sauvegardes
+ */
+ private boolean useShapefile = false;
/**
* Sauvegarde des entites g\xE9ometriques sur entry .gml.
@@ -66,13 +82,34 @@
final String _parentDirEntry, final String _parentDirIndice) {
final BCalqueSaverSingle res = (BCalqueSaverSingle) super.saveIn(_cqToSave, _saver, _parentDirEntry,
_parentDirIndice);
- final String entry = getEntryBase(_cqToSave, _parentDirEntry, res.getId()) + ".gml";
- try {
- _saver.startEntry(entry);
- createExporter().processGML(null, getGeomData(_cqToSave), _saver.getOutStream());
- _saver.getOutStream().flush();
- } catch (final Exception _evt) {
- FuLog.error(_evt);
+
+
+ if (useShapefile) {
+ File shp = null;
+ try {
+ shp = File.createTempFile("tmp", ".shp");
+ DataStore store = new ShapefileDataStore(shp.toURI().toURL());
+ createExporter().process(null, getGeomData(_cqToSave), null, store);
+ final String entry = getEntryBase(_cqToSave, _parentDirEntry, res.getId()) + ".shp";
+ _saver.startEntry(entry);
+ CtuluLibFile.copyStream(new FileInputStream(shp), _saver.getOutStream(), true, false);
+ _saver.getOutStream().flush();
+ } catch (Exception ex) {
+ Logger.getLogger(FSigLayerPointPersistence.class.getName()).log(Level.SEVERE, null, ex);
+ } finally {
+ if (shp != null) {
+ shp.delete();
+ }
+ }
+ } else {
+ final String entry = getEntryBase(_cqToSave, _parentDirEntry, res.getId()) + ".gml";
+ try {
+ _saver.startEntry(entry);
+ createExporter().processGML(null, getGeomData(_cqToSave), _saver.getOutStream());
+ _saver.getOutStream().flush();
+ } catch (final Exception _evt) {
+ FuLog.error(_evt);
+ }
}
return res;
@@ -112,22 +149,54 @@
final BCalqueSaverTargetInterface _parentPanel, final BCalque _parentCalque, final String _parentDirEntry,
final String _entryName, final ProgressionInterface _proj) {
boolean r = false;
- try {
+ InputStream shapeInputStream = null;
+ if (useShapefile) {
+ shapeInputStream = getShapeInputStream(_loader, _parentDirEntry, _entryName);
+ }
+ if (useShapefile && shapeInputStream != null) {
- final GMLInputTemplate input = new GMLInputTemplate();
- final InputStream inputStream = getGMLInputStream(_loader, _parentDirEntry, _entryName);
- if (inputStream == null) {
- return true;
+ File shp = null;
+ try {
+ shp = File.createTempFile("tmp", ".shp");
+ CtuluLibFile.copyStream(shapeInputStream, new FileOutputStream(shp), false, true);
+ ShapefileDataStore store = new ShapefileDataStore(shp.toURI().toURL(), null, GISGeometryFactory.INSTANCE);
+ FeatureType schema = store.getSchema();
+ final String[] name = store.getTypeNames();
+ if (name == null || name.length == 0) {
+ throw new IOException("name not found");
+ }
+ final String typeName = schema.getTypeName();
+ FeatureSource featureSource = store.getFeatureSource(typeName);
+ final FeatureCollection feature = featureSource.getFeatures();
+ _saver.getUI().put(getGeomId(), createCollection(GISDataModelFeatureAdapter.load(feature)));
+ r = true;
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ } finally {
+ if (shp != null) {
+ shp.delete();
+ }
}
- input.load(new InputStreamReader(inputStream));
- final GMLReader gmlReader = new GMLReader();
- gmlReader.setInputTemplate(input);
- final FeatureCollection feature = gmlReader.open(getGMLInputStream(_loader, _parentDirEntry, _entryName));
- _saver.getUI().put(getGeomId(), createCollection(GISDataModelFeatureAdapter.load(feature)));
- r = true;
- } catch (final Exception _evt) {
- FuLog.error(_evt);
+
+ } else {
+ try {
+
+ final GMLInputTemplate input = new GMLInputTemplate();
+ final InputStream inputStream = getGMLInputStream(_loader, _parentDirEntry, _entryName);
+ if (inputStream == null) {
+ return true;
+ }
+ input.load(new InputStreamReader(inputStream));
+ final GMLReader gmlReader = new GMLReader();
+ gmlReader.setInputTemplate(input);
+ final FeatureCollection feature = gmlReader.open(getGMLInputStream(_loader, _parentDirEntry, _entryName));
+ _saver.getUI().put(getGeomId(), createCollection(GISDataModelFeatureAdapter.load(feature)));
+ r = true;
+ } catch (final Exception _evt) {
+ FuLog.error(_evt);
+
+ }
}
return r;
}
@@ -137,6 +206,11 @@
return _loader.getReader(_parentDirEntry, _entryName + ".gml");
}
+ private InputStream getShapeInputStream(final CtuluArkLoader _loader, final String _parentDirEntry,
+ final String _entryName) {
+ return _loader.getReader(_parentDirEntry, _entryName + ".shp");
+ }
+
protected BCalque addInParent(final FSigLayerGroup _gr, final BCalqueSaverInterface _cqName,
final GISZoneCollection _collection) {
return _gr.addPointLayerAct(_cqName.getUI().getTitle(), (GISZoneCollectionPoint) _collection, null);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|