|
From: <bma...@us...> - 2011-05-30 15:52:54
|
Revision: 6265
http://fudaa.svn.sourceforge.net/fudaa/?rev=6265&view=rev
Author: bmarchan
Date: 2011-05-30 15:52:47 +0000 (Mon, 30 May 2011)
Log Message:
-----------
Exporteur 2d vers fichiers : Le filtre FSigLayerFilter est g?\195?\169n?\195?\169ralis?\195?\169 en FSigLAyerFilterAbstract
Outils externes : Am?\195?\169lioration export de calques
Modified Paths:
--------------
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/exetools/FSigInpFileParam.java
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigEditor.java
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java
Added Paths:
-----------
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporterI.java
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilterAbstract.java
Removed Paths:
-------------
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java
Modified: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/exetools/FSigInpFileParam.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/exetools/FSigInpFileParam.java 2011-05-25 14:42:57 UTC (rev 6264)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/exetools/FSigInpFileParam.java 2011-05-30 15:52:47 UTC (rev 6265)
@@ -4,6 +4,9 @@
*/
package org.fudaa.fudaa.sig.exetools;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiPoint;
+import com.vividsolutions.jts.geom.Point;
import java.awt.BorderLayout;
import java.io.File;
import java.util.ArrayList;
@@ -14,18 +17,19 @@
import javax.swing.table.TableCellEditor;
import org.fudaa.ctulu.CtuluIOOperationSynthese;
import org.fudaa.ctulu.CtuluUI;
+import org.fudaa.ctulu.gis.GISDataModel;
import org.fudaa.ctulu.gis.GISZoneCollectionGeometry;
-import org.fudaa.ctulu.gui.CtuluAnalyzeGUI;
import org.fudaa.ctulu.gui.CtuluCellDialogEditor;
import org.fudaa.ctulu.gui.CtuluDialog;
import org.fudaa.ctulu.gui.CtuluDialogPanel;
import org.fudaa.ebli.calque.BCalque;
-import org.fudaa.ebli.calque.BCalqueVisitor;
import org.fudaa.ebli.calque.BGroupeCalque;
+import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface;
import org.fudaa.ebli.calque.ZCalqueGeometry;
import org.fudaa.fudaa.commun.exetools.FudaaExeTool;
import org.fudaa.fudaa.commun.exetools.FudaaExeTool.ParamI;
import org.fudaa.fudaa.sig.FSigLib;
+import org.fudaa.fudaa.sig.layer.FSigLayerFilterAbstract;
/**
* Un param\xE8tre fichier d'entr\xE9e construit a partir de calques s\xE9lectionn\xE9s.
@@ -82,7 +86,7 @@
}
}
- private class CalqueZoneGeometryVisitor implements BCalqueVisitor {
+ private class CalqueZoneGeometryVisitor extends FSigLayerFilterAbstract {
private List<String> layerNames=new ArrayList<String>();
private List<GISZoneCollectionGeometry> zones=new ArrayList<GISZoneCollectionGeometry>();
@@ -92,8 +96,18 @@
public boolean visit(BCalque _cq) {
if (_cq instanceof ZCalqueGeometry) {
- if (layerNames.contains(_cq.getName()))
- zones.add((GISZoneCollectionGeometry)((ZCalqueGeometry)_cq).modeleDonnees().getGeomData());
+ ZCalqueGeometry cq=(ZCalqueGeometry)_cq;
+ if (layerNames.contains(_cq.getName())) {
+ if (cq.modeleDonnees().getGeomData().getDataStoreClass().equals(Point.class)) {
+ pointCq_.add(cq);
+ }
+ else if (LineString.class.isAssignableFrom(cq.modeleDonnees().getGeomData().getDataStoreClass())) {
+ polyCq_.add(cq);
+ }
+ else if (MultiPoint.class.isAssignableFrom(cq.modeleDonnees().getGeomData().getDataStoreClass())) {
+ mlptsCq_.add(cq);
+ }
+ }
}
return true;
}
@@ -101,6 +115,10 @@
public GISZoneCollectionGeometry[] getZones() {
return zones.toArray(new GISZoneCollectionGeometry[0]);
}
+
+ protected GISDataModel getCollect(ZCalqueAffichageDonneesInterface _cq) {
+ return ((ZCalqueGeometry)_cq).modeleDonnees().getGeomData();
+ }
}
public static void setCtuluUI(CtuluUI _ui) {
Modified: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigEditor.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigEditor.java 2011-05-25 14:42:57 UTC (rev 6264)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigEditor.java 2011-05-30 15:52:47 UTC (rev 6265)
@@ -197,8 +197,8 @@
final BuFileFilter st = RubarStCnFileFormat.createStFilter();
final Map filterExporter = new HashMap(5);// pour l'instant .....
- filterExporter.put(sx, new FSigLayerExporter.ToSinusX());
- filterExporter.put(st, new FSigLayerExporter.ToRubar());
+ filterExporter.put(sx, new FSigLayerExporterI.ToSinusX());
+ filterExporter.put(st, new FSigLayerExporterI.ToRubar());
final Map dataStores = GISExportDataStoreFactory.buildFileFilterMap(false);
if (dataStores.size() == 0) {
if (FuLog.isTrace()) {
@@ -208,7 +208,7 @@
}
for (final Iterator it = dataStores.entrySet().iterator(); it.hasNext();) {
final Map.Entry e = (Map.Entry) it.next();
- filterExporter.put(e.getKey(), new FSigLayerExporter.DataStore((FileDataStoreFactorySpi) e.getValue()));
+ filterExporter.put(e.getKey(), new FSigLayerExporterI.DataStore((FileDataStoreFactorySpi) e.getValue()));
}
final BuFileFilter[] filters = new BuFileFilter[filterExporter.size()];
filterExporter.keySet().toArray(filters);
@@ -226,7 +226,7 @@
public boolean run(ProgressionInterface _proj)
{
- final CtuluIOOperationSynthese op = filter.exportTo((FSigLayerExporter) filterExporter.get(fileChooser.getFileFilter()), getUi(), f, _proj);
+ final CtuluIOOperationSynthese op = filter.exportTo((FSigLayerExporterI) filterExporter.get(fileChooser.getFileFilter()), getUi(), f, _proj);
if (op != null)
{
getUi().manageErrorOperationAndIsFatal(op);
Deleted: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java 2011-05-25 14:42:57 UTC (rev 6264)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java 2011-05-30 15:52:47 UTC (rev 6265)
@@ -1,276 +0,0 @@
-/*
- * @creation 26 f\xE9vr. 07
- * @modification $Date: 2007-06-14 12:01:22 $
- * @license GNU General Public License 2
- * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
- * @mail de...@fu...
- */
-package org.fudaa.fudaa.sig.layer;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.fudaa.ctulu.CtuluAnalyze;
-import org.fudaa.ctulu.CtuluIOOperationSynthese;
-import org.fudaa.ctulu.CtuluLib;
-import org.fudaa.ctulu.CtuluLibFile;
-import org.fudaa.ctulu.CtuluLibString;
-import org.fudaa.ctulu.CtuluUI;
-import org.fudaa.ctulu.ProgressionInterface;
-import org.fudaa.ctulu.fileformat.FileFormatUnique;
-import org.fudaa.ctulu.gis.GISAttributeConstants;
-import org.fudaa.ctulu.gis.GISAttributeDouble;
-import org.fudaa.ctulu.gis.GISAttributeInterface;
-import org.fudaa.ctulu.gis.GISDataModel;
-import org.fudaa.ctulu.gis.GISDataModelFilterAdapter;
-import org.fudaa.ctulu.gis.GISDataModelMultiAdapter;
-import org.fudaa.ctulu.gis.GISDataModelPointToMultiPointAdapter;
-import org.fudaa.ctulu.gis.factory.GISExportDataStoreFactory;
-import org.fudaa.ctulu.gis.gml.GISGMLZoneExporter;
-import org.fudaa.ctulu.gis.mif.MIFDataStoreFactory;
-import org.fudaa.dodico.commun.DodicoLib;
-import org.fudaa.dodico.ef.io.dunes.DunesGEOFileFormat;
-import org.fudaa.dodico.rubar.io.RubarSEMFileFormat;
-import org.fudaa.dodico.rubar.io.RubarSEMWriterGISAdapter;
-import org.fudaa.dodico.rubar.io.RubarStCnFileFormat;
-import org.fudaa.dodico.telemac.io.SinusxFileFormat;
-import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface;
-import org.fudaa.fudaa.commun.FudaaLib;
-import org.geotools.data.FileDataStoreFactorySpi;
-
-import com.memoire.fu.FuLog;
-
-/**
- * @author fred deniger
- * @version $Id$
- */
-public abstract class FSigLayerExporter {
-
- abstract CtuluIOOperationSynthese exportTo(FSigLayerFilter _filter, final CtuluUI _impl, final File _file,
- final ProgressionInterface _prog);
-
- public static class DataStore extends FSigLayerExporter {
-
- final FileDataStoreFactorySpi dataStore_;
-
- public DataStore(final FileDataStoreFactorySpi _dataStore) {
- dataStore_ = _dataStore;
- }
-
- CtuluIOOperationSynthese exportTo(final FSigLayerFilter _filter, final CtuluUI _impl, final File _file,
- final ProgressionInterface _prog) {
- final GISGMLZoneExporter exporter = new GISGMLZoneExporter();
- try {
- final boolean one = _filter.getNbZone() == 1;
-
- final Set nameUsed = new HashSet();
- final File dir = _file.getParentFile();
- final String name = _file.getName();
- int idx = 0;
- final List total = new ArrayList(_filter.pointCq_);
- total.addAll(_filter.polyCq_);
- total.addAll(_filter.mlptsCq_);
- final int nb = total.size();
- for (int i = 0; i < nb; i++) {
- final ZCalqueAffichageDonneesInterface oi = (ZCalqueAffichageDonneesInterface) total.get(i);
- String ni = one ? name : name + '-' + _filter.getName(oi);
- if (nameUsed.contains(ni)) {
- ni += '-' + CtuluLibString.getString(++idx);
- }
- if (nameUsed.contains(ni)) {
- ni = File.createTempFile(new File(dir, name + _filter.getName(oi)).getAbsolutePath(), "").getName();
- }
- nameUsed.add(ni);
- File file = new File(dir, ni);
- if (dataStore_ instanceof MIFDataStoreFactory) {
- if (!file.getName().endsWith(".mif")) {
- file = new File(file.getAbsolutePath() + ".mif");
- }
- if (!file.createNewFile()) {
- return null;
- }
- final File mid = CtuluLibFile.changeExtension(file, "mid");
- if (mid != null && !mid.createNewFile()) {
- return null;
- }
- }
- GISDataModel collect = _filter.getCollect(oi);
- GISAttributeDouble attIsZ=_filter.getAttributeIsZ(oi);
- exporter.process(_prog, collect, attIsZ, GISExportDataStoreFactory.createDataStore(dataStore_, file.toURL(), collect
- .getEnvelopeInternal(), true));
-
- }
-
- } catch (final Exception _e) {
- _impl.error(FudaaLib.getS("Export") + ' ' + _file.getName(), _e.getMessage(), false);
- FuLog.warning(_e);
- }
- return null;
- }
- }
-
- public static class ToSinusX extends FSigLayerExporter {
-
- CtuluIOOperationSynthese exportTo(final FSigLayerFilter _filter, final CtuluUI _impl, final File _f,
- final ProgressionInterface _prog) {
- File f = CtuluLibFile.appendExtensionIfNeeded(_f, "sx");
- GISDataModel[][] z = new GISDataModel[3][];
- int nb = _filter.pointCq_.size();
- z[0]=new GISDataModel[_filter.pointCq_.size()];
- for (int i = 0; i < nb; i++) {
- final GISDataModel collec = _filter.getCollect(_filter.pointCq_.get(i));
- z[0][i]=collec;
- }
- nb = _filter.polyCq_.size();
- z[1]=new GISDataModel[_filter.polyCq_.size()];
- for (int i = 0; i < nb; i++) {
- final GISDataModel collec = _filter.getCollect(_filter.polyCq_.get(i));
- z[1][i]=collec;
- }
- nb = _filter.mlptsCq_.size();
- z[2]=new GISDataModel[_filter.mlptsCq_.size()];
- for (int i = 0; i < nb; i++) {
- final GISDataModel collec = _filter.getCollect(_filter.mlptsCq_.get(i));
- z[2][i]=collec;
- }
- return SinusxFileFormat.getInstance().write(f, z, _prog);
-
- }
- }
-
- public static class ToDunes extends FSigLayerExporter {
-
- CtuluIOOperationSynthese exportTo(final FSigLayerFilter _filter, final CtuluUI _impl, final File _f,
- final ProgressionInterface _prog) {
- File f = CtuluLibFile.appendExtensionIfNeeded(_f, DunesGEOFileFormat.getInstance().getExtensions()[0]);
-
- List<GISDataModel> mdls=new ArrayList<GISDataModel>();
- for (int i=0; i<_filter.pointCq_.size(); i++) {
- mdls.add(new GISDataModelPointToMultiPointAdapter(
- GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.pointCq_.get(i)), null)));
- }
- for (int i = 0; i < _filter.mlptsCq_.size(); i++) {
- mdls.add(_filter.getCollect(_filter.mlptsCq_.get(i)));
- }
- for (int i = 0; i < _filter.polyCq_.size(); i++) {
- final GISDataModel collec = _filter.getCollect(_filter.polyCq_.get(i));
- mdls.add(collec);
- }
-
- return DunesGEOFileFormat.getInstance().write(f, mdls.toArray(new GISDataModel[0]), _prog);
- }
- }
-
- /**
- * Export des g\xE9om\xE9tries vers les fichiers Rubar (ST, SEM, CN).
- * @author Bertrand Marchand
- * @version $Id$
- */
- public static class ToRubar extends FSigLayerExporter {
- CtuluIOOperationSynthese exportTo(final FSigLayerFilter _filter, final CtuluUI _impl, final File _f,
- final ProgressionInterface _prog) {
- CtuluIOOperationSynthese synt=new CtuluIOOperationSynthese();
- File f = CtuluLibFile.getSansExtension(_f);
- CtuluAnalyze ana=new CtuluAnalyze();
- synt.setAnalyze(ana);
-
- // Regroupement des mod\xE8les suivant leur nature.
- List<GISDataModel> mdlprofs=new ArrayList<GISDataModel>();
- List<GISDataModel> mdlniv=new ArrayList<GISDataModel>();
- List<GISDataModel> mdlligdir=new ArrayList<GISDataModel>();
- List<GISDataModel> mdlsemis=new ArrayList<GISDataModel>();
- List<GISDataModel> mdlautres=new ArrayList<GISDataModel>();
-
- for (int i=0; i<_filter.pointCq_.size(); i++) {
- mdlsemis.add(new GISDataModelPointToMultiPointAdapter(
- GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.pointCq_.get(i)), null)));
- }
- for (int i = 0; i < _filter.mlptsCq_.size(); i++) {
- mdlsemis.add(GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.mlptsCq_.get(i)), null));
- }
- for (int i=0; i<_filter.polyCq_.size(); i++) {
- GISDataModel col=_filter.getCollect(_filter.polyCq_.get(i));
- if (col.getNumGeometries()==0)
- continue;
- int idxAtt=col.getIndiceOf(GISAttributeConstants.NATURE);
- if (idxAtt==-1) {
- mdlautres.add(GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)),
- new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.COMMENTAIRE_HYDRO}));
- }
- else {
- GISDataModel mdl=GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)),
- new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.NATURE, GISAttributeConstants.COMMENTAIRE_HYDRO});
- if (GISAttributeConstants.ATT_NATURE_CN.equals(col.getValue(idxAtt, 0))) {
- mdlniv.add(mdl);
- }
- else if (GISAttributeConstants.ATT_NATURE_PF.equals(col.getValue(idxAtt,0))) {
- mdlprofs.add(mdl);
- }
- else if (GISAttributeConstants.ATT_NATURE_LD.equals(col.getValue(idxAtt,0))) {
- mdlligdir.add(mdl);
- }
- else {
- mdlautres.add(mdl);
- }
- }
- }
-
- FileFormatUnique ff;
-
- // Les semis
- if (mdlsemis.size()>0) {
- ff=new RubarSEMFileFormat();
- GISDataModel mdl=new GISDataModelMultiAdapter(mdlsemis.toArray(new GISDataModel[0]));
- ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]),
- new RubarSEMWriterGISAdapter(mdl), _prog).getAnalyze();
-
- int nbsemis=mdl.getNumGeometries();
- ana.addInfo(DodicoLib.getS("{0} semis sur {1} ont \xE9t\xE9 export\xE9s", ""+nbsemis, ""+nbsemis), -1);
-
- synt.getAnalyze().merge(ana);
- if (synt.containsFatalError()) return synt;
- }
-
- // Les profils et lignes directrices
- if (mdlprofs.size()>0 || mdlligdir.size()>0) {
- ff=RubarStCnFileFormat.getInstance();
- GISDataModel[] mdl=new GISDataModel[2];
- mdl[0]=mdlprofs.size()==0 ? null:new GISDataModelMultiAdapter(mdlprofs.toArray(new GISDataModel[0]));
- mdl[1]=mdlligdir.size()==0 ? null:new GISDataModelMultiAdapter(mdlligdir.toArray(new GISDataModel[0]));
- ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]), mdl, _prog).getAnalyze();
- synt.getAnalyze().merge(ana);
- if (synt.containsFatalError()) return synt;
- }
-
- // Les courbes de niveau
- if (mdlniv.size()>0) {
- ff=RubarStCnFileFormat.getInstance();
- GISDataModel[] mdl=new GISDataModel[2];
- mdl[0]=new GISDataModelMultiAdapter(mdlniv.toArray(new GISDataModel[0]));
- mdl[1]=null;
- ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[1]), mdl, _prog).getAnalyze();
- synt.getAnalyze().merge(ana);
- if (synt.containsFatalError()) return synt;
- }
-
- // Les autres polylignes => dans un fichier _autres.st
- if (mdlautres.size()>0) {
- ff=RubarStCnFileFormat.getInstance();
- GISDataModel[] mdl=new GISDataModel[2];
- mdl[0]=new GISDataModelMultiAdapter(mdlautres.toArray(new GISDataModel[0]));
- mdl[1]=null;
- ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(
- new File(f.getPath()+"_"+CtuluLib.getS("autres")),ff.getExtensions()[0]), mdl, _prog).getAnalyze();
- synt.getAnalyze().merge(ana);
- if (synt.containsFatalError()) return synt;
- }
-
- return synt;
- }
-
- }
-
-}
Copied: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporterI.java (from rev 6240, trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java)
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporterI.java (rev 0)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerExporterI.java 2011-05-30 15:52:47 UTC (rev 6265)
@@ -0,0 +1,276 @@
+/*
+ * @creation 26 f\xE9vr. 07
+ * @modification $Date: 2007-06-14 12:01:22 $
+ * @license GNU General Public License 2
+ * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail de...@fu...
+ */
+package org.fudaa.fudaa.sig.layer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.fudaa.ctulu.CtuluAnalyze;
+import org.fudaa.ctulu.CtuluIOOperationSynthese;
+import org.fudaa.ctulu.CtuluLib;
+import org.fudaa.ctulu.CtuluLibFile;
+import org.fudaa.ctulu.CtuluLibString;
+import org.fudaa.ctulu.CtuluUI;
+import org.fudaa.ctulu.ProgressionInterface;
+import org.fudaa.ctulu.fileformat.FileFormatUnique;
+import org.fudaa.ctulu.gis.GISAttributeConstants;
+import org.fudaa.ctulu.gis.GISAttributeDouble;
+import org.fudaa.ctulu.gis.GISAttributeInterface;
+import org.fudaa.ctulu.gis.GISDataModel;
+import org.fudaa.ctulu.gis.GISDataModelFilterAdapter;
+import org.fudaa.ctulu.gis.GISDataModelMultiAdapter;
+import org.fudaa.ctulu.gis.GISDataModelPointToMultiPointAdapter;
+import org.fudaa.ctulu.gis.factory.GISExportDataStoreFactory;
+import org.fudaa.ctulu.gis.gml.GISGMLZoneExporter;
+import org.fudaa.ctulu.gis.mif.MIFDataStoreFactory;
+import org.fudaa.dodico.commun.DodicoLib;
+import org.fudaa.dodico.ef.io.dunes.DunesGEOFileFormat;
+import org.fudaa.dodico.rubar.io.RubarSEMFileFormat;
+import org.fudaa.dodico.rubar.io.RubarSEMWriterGISAdapter;
+import org.fudaa.dodico.rubar.io.RubarStCnFileFormat;
+import org.fudaa.dodico.telemac.io.SinusxFileFormat;
+import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface;
+import org.fudaa.fudaa.commun.FudaaLib;
+import org.geotools.data.FileDataStoreFactorySpi;
+
+import com.memoire.fu.FuLog;
+
+/**
+ * @author fred deniger
+ * @version $Id$
+ */
+public interface FSigLayerExporterI {
+
+ CtuluIOOperationSynthese exportTo(FSigLayerFilterAbstract _filter, final CtuluUI _impl, final File _file,
+ final ProgressionInterface _prog);
+
+ public class DataStore implements FSigLayerExporterI {
+
+ final FileDataStoreFactorySpi dataStore_;
+
+ public DataStore(final FileDataStoreFactorySpi _dataStore) {
+ dataStore_ = _dataStore;
+ }
+
+ public CtuluIOOperationSynthese exportTo(final FSigLayerFilterAbstract _filter, final CtuluUI _impl, final File _file,
+ final ProgressionInterface _prog) {
+ final GISGMLZoneExporter exporter = new GISGMLZoneExporter();
+ try {
+ final boolean one = _filter.getNbZone() == 1;
+
+ final Set nameUsed = new HashSet();
+ final File dir = _file.getParentFile();
+ final String name = _file.getName();
+ int idx = 0;
+ final List total = new ArrayList(_filter.pointCq_);
+ total.addAll(_filter.polyCq_);
+ total.addAll(_filter.mlptsCq_);
+ final int nb = total.size();
+ for (int i = 0; i < nb; i++) {
+ final ZCalqueAffichageDonneesInterface oi = (ZCalqueAffichageDonneesInterface) total.get(i);
+ String ni = one ? name : name + '-' + _filter.getName(oi);
+ if (nameUsed.contains(ni)) {
+ ni += '-' + CtuluLibString.getString(++idx);
+ }
+ if (nameUsed.contains(ni)) {
+ ni = File.createTempFile(new File(dir, name + _filter.getName(oi)).getAbsolutePath(), "").getName();
+ }
+ nameUsed.add(ni);
+ File file = new File(dir, ni);
+ if (dataStore_ instanceof MIFDataStoreFactory) {
+ if (!file.getName().endsWith(".mif")) {
+ file = new File(file.getAbsolutePath() + ".mif");
+ }
+ if (!file.createNewFile()) {
+ return null;
+ }
+ final File mid = CtuluLibFile.changeExtension(file, "mid");
+ if (mid != null && !mid.createNewFile()) {
+ return null;
+ }
+ }
+ GISDataModel collect = _filter.getCollect(oi);
+ GISAttributeDouble attIsZ=_filter.getAttributeIsZ(oi);
+ exporter.process(_prog, collect, attIsZ, GISExportDataStoreFactory.createDataStore(dataStore_, file.toURL(), collect
+ .getEnvelopeInternal(), true));
+
+ }
+
+ } catch (final Exception _e) {
+ _impl.error(FudaaLib.getS("Export") + ' ' + _file.getName(), _e.getMessage(), false);
+ FuLog.warning(_e);
+ }
+ return null;
+ }
+ }
+
+ public static class ToSinusX implements FSigLayerExporterI {
+
+ public CtuluIOOperationSynthese exportTo(final FSigLayerFilterAbstract _filter, final CtuluUI _impl, final File _f,
+ final ProgressionInterface _prog) {
+ File f = CtuluLibFile.appendExtensionIfNeeded(_f, "sx");
+ GISDataModel[][] z = new GISDataModel[3][];
+ int nb = _filter.pointCq_.size();
+ z[0]=new GISDataModel[_filter.pointCq_.size()];
+ for (int i = 0; i < nb; i++) {
+ final GISDataModel collec = _filter.getCollect(_filter.pointCq_.get(i));
+ z[0][i]=collec;
+ }
+ nb = _filter.polyCq_.size();
+ z[1]=new GISDataModel[_filter.polyCq_.size()];
+ for (int i = 0; i < nb; i++) {
+ final GISDataModel collec = _filter.getCollect(_filter.polyCq_.get(i));
+ z[1][i]=collec;
+ }
+ nb = _filter.mlptsCq_.size();
+ z[2]=new GISDataModel[_filter.mlptsCq_.size()];
+ for (int i = 0; i < nb; i++) {
+ final GISDataModel collec = _filter.getCollect(_filter.mlptsCq_.get(i));
+ z[2][i]=collec;
+ }
+ return SinusxFileFormat.getInstance().write(f, z, _prog);
+
+ }
+ }
+
+ public static class ToDunes implements FSigLayerExporterI {
+
+ public CtuluIOOperationSynthese exportTo(final FSigLayerFilterAbstract _filter, final CtuluUI _impl, final File _f,
+ final ProgressionInterface _prog) {
+ File f = CtuluLibFile.appendExtensionIfNeeded(_f, DunesGEOFileFormat.getInstance().getExtensions()[0]);
+
+ List<GISDataModel> mdls=new ArrayList<GISDataModel>();
+ for (int i=0; i<_filter.pointCq_.size(); i++) {
+ mdls.add(new GISDataModelPointToMultiPointAdapter(
+ GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.pointCq_.get(i)), null)));
+ }
+ for (int i = 0; i < _filter.mlptsCq_.size(); i++) {
+ mdls.add(_filter.getCollect(_filter.mlptsCq_.get(i)));
+ }
+ for (int i = 0; i < _filter.polyCq_.size(); i++) {
+ final GISDataModel collec = _filter.getCollect(_filter.polyCq_.get(i));
+ mdls.add(collec);
+ }
+
+ return DunesGEOFileFormat.getInstance().write(f, mdls.toArray(new GISDataModel[0]), _prog);
+ }
+ }
+
+ /**
+ * Export des g\xE9om\xE9tries vers les fichiers Rubar (ST, SEM, CN).
+ * @author Bertrand Marchand
+ * @version $Id$
+ */
+ public static class ToRubar implements FSigLayerExporterI {
+ public CtuluIOOperationSynthese exportTo(final FSigLayerFilterAbstract _filter, final CtuluUI _impl, final File _f,
+ final ProgressionInterface _prog) {
+ CtuluIOOperationSynthese synt=new CtuluIOOperationSynthese();
+ File f = CtuluLibFile.getSansExtension(_f);
+ CtuluAnalyze ana=new CtuluAnalyze();
+ synt.setAnalyze(ana);
+
+ // Regroupement des mod\xE8les suivant leur nature.
+ List<GISDataModel> mdlprofs=new ArrayList<GISDataModel>();
+ List<GISDataModel> mdlniv=new ArrayList<GISDataModel>();
+ List<GISDataModel> mdlligdir=new ArrayList<GISDataModel>();
+ List<GISDataModel> mdlsemis=new ArrayList<GISDataModel>();
+ List<GISDataModel> mdlautres=new ArrayList<GISDataModel>();
+
+ for (int i=0; i<_filter.pointCq_.size(); i++) {
+ mdlsemis.add(new GISDataModelPointToMultiPointAdapter(
+ GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.pointCq_.get(i)), null)));
+ }
+ for (int i = 0; i < _filter.mlptsCq_.size(); i++) {
+ mdlsemis.add(GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.mlptsCq_.get(i)), null));
+ }
+ for (int i=0; i<_filter.polyCq_.size(); i++) {
+ GISDataModel col=_filter.getCollect(_filter.polyCq_.get(i));
+ if (col.getNumGeometries()==0)
+ continue;
+ int idxAtt=col.getIndiceOf(GISAttributeConstants.NATURE);
+ if (idxAtt==-1) {
+ mdlautres.add(GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)),
+ new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.COMMENTAIRE_HYDRO}));
+ }
+ else {
+ GISDataModel mdl=GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)),
+ new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.NATURE, GISAttributeConstants.COMMENTAIRE_HYDRO});
+ if (GISAttributeConstants.ATT_NATURE_CN.equals(col.getValue(idxAtt, 0))) {
+ mdlniv.add(mdl);
+ }
+ else if (GISAttributeConstants.ATT_NATURE_PF.equals(col.getValue(idxAtt,0))) {
+ mdlprofs.add(mdl);
+ }
+ else if (GISAttributeConstants.ATT_NATURE_LD.equals(col.getValue(idxAtt,0))) {
+ mdlligdir.add(mdl);
+ }
+ else {
+ mdlautres.add(mdl);
+ }
+ }
+ }
+
+ FileFormatUnique ff;
+
+ // Les semis
+ if (mdlsemis.size()>0) {
+ ff=new RubarSEMFileFormat();
+ GISDataModel mdl=new GISDataModelMultiAdapter(mdlsemis.toArray(new GISDataModel[0]));
+ ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]),
+ new RubarSEMWriterGISAdapter(mdl), _prog).getAnalyze();
+
+ int nbsemis=mdl.getNumGeometries();
+ ana.addInfo(DodicoLib.getS("{0} semis sur {1} ont \xE9t\xE9 export\xE9s", ""+nbsemis, ""+nbsemis), -1);
+
+ synt.getAnalyze().merge(ana);
+ if (synt.containsFatalError()) return synt;
+ }
+
+ // Les profils et lignes directrices
+ if (mdlprofs.size()>0 || mdlligdir.size()>0) {
+ ff=RubarStCnFileFormat.getInstance();
+ GISDataModel[] mdl=new GISDataModel[2];
+ mdl[0]=mdlprofs.size()==0 ? null:new GISDataModelMultiAdapter(mdlprofs.toArray(new GISDataModel[0]));
+ mdl[1]=mdlligdir.size()==0 ? null:new GISDataModelMultiAdapter(mdlligdir.toArray(new GISDataModel[0]));
+ ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]), mdl, _prog).getAnalyze();
+ synt.getAnalyze().merge(ana);
+ if (synt.containsFatalError()) return synt;
+ }
+
+ // Les courbes de niveau
+ if (mdlniv.size()>0) {
+ ff=RubarStCnFileFormat.getInstance();
+ GISDataModel[] mdl=new GISDataModel[2];
+ mdl[0]=new GISDataModelMultiAdapter(mdlniv.toArray(new GISDataModel[0]));
+ mdl[1]=null;
+ ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[1]), mdl, _prog).getAnalyze();
+ synt.getAnalyze().merge(ana);
+ if (synt.containsFatalError()) return synt;
+ }
+
+ // Les autres polylignes => dans un fichier _autres.st
+ if (mdlautres.size()>0) {
+ ff=RubarStCnFileFormat.getInstance();
+ GISDataModel[] mdl=new GISDataModel[2];
+ mdl[0]=new GISDataModelMultiAdapter(mdlautres.toArray(new GISDataModel[0]));
+ mdl[1]=null;
+ ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(
+ new File(f.getPath()+"_"+CtuluLib.getS("autres")),ff.getExtensions()[0]), mdl, _prog).getAnalyze();
+ synt.getAnalyze().merge(ana);
+ if (synt.containsFatalError()) return synt;
+ }
+
+ return synt;
+ }
+
+ }
+
+}
Modified: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2011-05-25 14:42:57 UTC (rev 6264)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2011-05-30 15:52:47 UTC (rev 6265)
@@ -9,21 +9,13 @@
import gnu.trove.TIntArrayList;
-import java.io.File;
-import java.util.ArrayList;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
-import org.fudaa.ctulu.CtuluIOOperationSynthese;
-import org.fudaa.ctulu.CtuluUI;
-import org.fudaa.ctulu.ProgressionInterface;
-import org.fudaa.ctulu.gis.GISAttributeDouble;
import org.fudaa.ctulu.gis.GISDataModel;
import org.fudaa.ctulu.gis.GISDataModelFilterAdapter;
import org.fudaa.ctulu.gis.GISZoneCollection;
import org.fudaa.ebli.calque.BCalque;
-import org.fudaa.ebli.calque.BCalqueVisitor;
import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface;
import org.fudaa.ebli.calque.ZModeleGeometry;
@@ -36,15 +28,11 @@
* @author Fred Deniger
* @version $Id$
*/
-public class FSigLayerFilter implements BCalqueVisitor {
-
- final Set<ZCalqueAffichageDonneesInterface> cqs_ = new HashSet<ZCalqueAffichageDonneesInterface>();
- List<ZCalqueAffichageDonneesInterface> pointCq_ = new ArrayList<ZCalqueAffichageDonneesInterface>();
- List<ZCalqueAffichageDonneesInterface> polyCq_ = new ArrayList<ZCalqueAffichageDonneesInterface>();
- List<ZCalqueAffichageDonneesInterface> mlptsCq_=new ArrayList<ZCalqueAffichageDonneesInterface>();
+public class FSigLayerFilter extends FSigLayerFilterAbstract {
protected boolean bonlyVisible_=false;
protected boolean onlySelectedGeometries_=false;
protected boolean bonlyOnVisibleGeometries_=true;
+ final Set<ZCalqueAffichageDonneesInterface> cqs_=new HashSet<ZCalqueAffichageDonneesInterface>();
/**
*
@@ -53,27 +41,7 @@
super();
}
- /**
- * @return true si vide
- */
- public boolean isEmpty() {
- return pointCq_.size() == 0 && polyCq_.size() == 0 && mlptsCq_.size()==0;
- }
-
- public int getNbZone() {
- return pointCq_.size() + polyCq_.size() + mlptsCq_.size();
- }
-
- public CtuluIOOperationSynthese exportTo(final FSigLayerExporter _exporter, final CtuluUI _impl, final File _file,
- final ProgressionInterface _prog) {
- return _exporter.exportTo(this, _impl, _file, _prog);
- }
-
- String getName(final ZCalqueAffichageDonneesInterface _o) {
- return _o.getTitle();
- }
-
- final GISDataModel getCollect(final ZCalqueAffichageDonneesInterface _o) {
+ protected GISDataModel getCollect(final ZCalqueAffichageDonneesInterface _o) {
GISZoneCollection zone = ((ZModeleGeometry) _o.modeleDonnees()).getGeomData();
zone.prepareExport();
@@ -95,19 +63,10 @@
else
return zone;
}
-
- /**
- * Retourne l'attribut pris pour Z dans la zone.
- * @param _o Le calque
- * @return L'attribut pris pour Z. Peut \xEAtre null.
- */
- final GISAttributeDouble getAttributeIsZ(final ZCalqueAffichageDonneesInterface _o) {
- return ((ZModeleGeometry) _o.modeleDonnees()).getGeomData().getAttributeIsZ();
- }
- final GISDataModel getCollect(final Object _o) {
- return getCollect((ZCalqueAffichageDonneesInterface) _o);
- }
+// final GISDataModel getCollect(final Object _o) {
+// return getCollect((ZCalqueAffichageDonneesInterface) _o);
+// }
/**
* Le traitement ne s'applique qu'aux seuls calques visibles.
Added: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilterAbstract.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilterAbstract.java (rev 0)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilterAbstract.java 2011-05-30 15:52:47 UTC (rev 6265)
@@ -0,0 +1,66 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.fudaa.fudaa.sig.layer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.fudaa.ctulu.CtuluIOOperationSynthese;
+import org.fudaa.ctulu.CtuluUI;
+import org.fudaa.ctulu.ProgressionInterface;
+import org.fudaa.ctulu.gis.GISAttributeDouble;
+import org.fudaa.ctulu.gis.GISDataModel;
+import org.fudaa.ebli.calque.BCalqueVisitor;
+import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface;
+import org.fudaa.ebli.calque.ZModeleGeometry;
+
+/**
+ * Un filtre g\xE9n\xE9rique sur des calques \xE0 exporter, rempli par un visitor a implementer.
+ * @author mar...@de...
+ */
+public abstract class FSigLayerFilterAbstract implements BCalqueVisitor {
+ protected List<ZCalqueAffichageDonneesInterface> mlptsCq_=new ArrayList<ZCalqueAffichageDonneesInterface>();
+ protected List<ZCalqueAffichageDonneesInterface> pointCq_=new ArrayList<ZCalqueAffichageDonneesInterface>();
+ protected List<ZCalqueAffichageDonneesInterface> polyCq_=new ArrayList<ZCalqueAffichageDonneesInterface>();
+
+ public FSigLayerFilterAbstract() {
+ super();
+ }
+
+ public CtuluIOOperationSynthese exportTo(final FSigLayerExporterI _exporter, final CtuluUI _impl, final File _file, final ProgressionInterface _prog) {
+ return _exporter.exportTo(this, _impl, _file, _prog);
+ }
+
+ /**
+ * Retourne l'attribut pris pour Z dans la zone.
+ * @param _o Le calque
+ * @return L'attribut pris pour Z. Peut \xEAtre null.
+ */
+ final GISAttributeDouble getAttributeIsZ(final ZCalqueAffichageDonneesInterface _o) {
+ return ((ZModeleGeometry) _o.modeleDonnees()).getGeomData().getAttributeIsZ();
+ }
+
+ String getName(final ZCalqueAffichageDonneesInterface _o) {
+ return _o.getTitle();
+ }
+
+ public int getNbZone() {
+ return pointCq_.size() + polyCq_.size() + mlptsCq_.size();
+ }
+
+ /**
+ * @return true si vide
+ */
+ public boolean isEmpty() {
+ return pointCq_.size() == 0 && polyCq_.size() == 0 && mlptsCq_.size() == 0;
+ }
+
+ /**
+ * Retourne la collection pour le calque donn\xE9. Peut eventuellement \xEAtre filtr\xE9e.
+ * @param _cq Le calque
+ * @return La collection
+ */
+ protected abstract GISDataModel getCollect(final ZCalqueAffichageDonneesInterface _cq);
+}
Property changes on: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/layer/FSigLayerFilterAbstract.java
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|