|
From: <bma...@us...> - 2011-09-09 16:53:20
|
Revision: 6385
http://fudaa.svn.sourceforge.net/fudaa/?rev=6385&view=rev
Author: bmarchan
Date: 2011-09-09 16:53:14 +0000 (Fri, 09 Sep 2011)
Log Message:
-----------
Add : Lecture csv avec possibilit?\195?\169 d'avoir des colonnes String
Modified Paths:
--------------
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigFileLoaderCsv.java
trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigWizardFileModel.java
Modified: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigFileLoaderCsv.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigFileLoaderCsv.java 2011-09-09 16:52:21 UTC (rev 6384)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigFileLoaderCsv.java 2011-09-09 16:53:14 UTC (rev 6385)
@@ -11,7 +11,6 @@
*/
package org.fudaa.fudaa.sig.wizard;
-import gnu.trove.TDoubleArrayList;
import java.io.File;
import java.util.List;
@@ -20,19 +19,20 @@
import org.fudaa.ctulu.CtuluAnalyze;
import org.fudaa.ctulu.CtuluDoubleParser;
import org.fudaa.ctulu.CtuluIOOperationSynthese;
-import org.fudaa.ctulu.CtuluLibArray;
import org.fudaa.ctulu.CtuluLibString;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.gis.GISAttributeConstants;
import org.fudaa.ctulu.gis.GISAttributeInterface;
import org.fudaa.ctulu.gis.GISDataModelAttributeAdapter;
-import org.fudaa.ctulu.gis.GISDataModelListPtAdapter;
import org.fudaa.ctulu.gis.GISPoint;
import org.fudaa.dodico.mesure.DodicoCsvReader;
import org.fudaa.fudaa.commun.FudaaLib;
import org.fudaa.fudaa.sig.FSigLib;
import com.memoire.bu.BuFileFilter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import org.fudaa.ctulu.gis.GISZoneCollectionPoint;
/**
* @author Fred Deniger
@@ -80,6 +80,7 @@
public XYCsvReader() {
setNumeric(false);
+ setBlankValid(true);
super.minValueByLine_ = 2;
}
@@ -99,16 +100,26 @@
return reader_.getName();
}
- public boolean containsError() {
+ public String containsError() {
final String[][] r = getPreview();
- return r == null || r.length == 0 || r[0].length < 2;
+ if (r == null || r.length == 0 || r[0].length < 2) {
+ return FSigLib.getS("Le fichier doit contenir 2 champs (X,Y) au minimum");
+ }
+ if (colTypes_==null || colTypes_[0]==DodicoCsvReader.COL_TYPE_STRING ||
+ colTypes_[1]==DodicoCsvReader.COL_TYPE_STRING ) {
+ return FSigLib.getS("Les champs (X,Y) doivent \xEAtre de type num\xE9rique");
+ }
+
+ return null;
}
- protected Object internalRead() {
+ @Override
+ protected String[][] internalRead() {
analyze_.clear();
final String[][] r = (String[][]) super.internalRead();
- if (r == null || r.length == 0 || r[0].length < 2) {
- analyze_.addFatalError(FSigLib.getS("Le fichier doit contenir 2 champs (X,Y) au minimum"));
+ String error=containsError();
+ if (error!=null) {
+ analyze_.addFatalError(error);
return null;
}
return r;
@@ -136,6 +147,8 @@
public void setInResult(final FSigFileLoadResult _r, final File _f, String _fileOrigine, final ProgressionInterface _prog,
final CtuluAnalyze _analyze) {
+
+ // Lecture du fichier
final XYCsvReader reader = new XYCsvReader();
final CtuluDoubleParser parser = new CtuluDoubleParser();
parser.setEmptyIsNull(true);
@@ -146,38 +159,75 @@
_analyze.merge(op.getAnalyze());
return;
}
- final List lists = CtuluLibArray.getCorrectValueSplit((String[][]) op.getSource(), parser);
- for (int k = 0; k < lists.size(); k++) {
- final TDoubleArrayList[] values = (TDoubleArrayList[]) lists.get(k);
+
+ // Suppression des lignes invalides (X ou Y non Double) et conversion des
+ // String en Double pour les colonnes de ce type.
+ String[][] vals=(String[][]) op.getSource();
+ if (vals.length==0) return;
+
+ ArrayList[] lvals=new ArrayList[vals.length];
+ for (int i=0; i<lvals.length; i++) {
+ lvals[i]=new ArrayList(Arrays.asList(vals[i]));
+ }
+
+ int[] colTypes=reader.getColTypes();
+ for (int i=0; i<lvals.length; i++) {
+ if (colTypes[i] == DodicoCsvReader.COL_TYPE_STRING) {
+ continue;
+ }
- final GISPoint[] pt = new GISPoint[values[0].size()];
- for (int i = pt.length - 1; i >= 0; i--) {
- pt[i] = new GISPoint(values[0].get(i), values[1].get(i), 0);
+ for (int j=0; j < lvals[i].size(); ) {
+ try {
+ lvals[i].set(j,Double.parseDouble((String)lvals[i].get(j)));
+ j++;
+ }
+ catch (NumberFormatException _exc) {
+ for (int k=0; k < lvals.length; k++) {
+ lvals[k].remove(j);
+ }
+ }
}
+ }
- double[][] attValues = null;
- final String[] name = reader.getName();
- GISAttributeInterface[] att = null;
- if (values.length > 2) { // On ne prend pas le x et le y
- att = new GISAttributeInterface[values.length - 2];
- attValues = new double[att.length][];
- for (int i = att.length - 1; i >= 0; i--) {
- final int real = i + 2;
- att[i] = i == 0 ? GISAttributeConstants.BATHY : _r.findOrCreateAttribute(name.length > real ? name[real]
+ // Cr\xE9ation des points
+ final GISPoint[] pt=new GISPoint[lvals[0].size()];
+ for (int i=0; i<pt.length; i++) {
+ pt[i]=new GISPoint((Double) lvals[0].get(i), (Double) lvals[1].get(i), 0);
+ }
+
+ // Cr\xE9ation des attributs
+ List<Object[]> attVals=new ArrayList<Object[]>();
+
+ final String[] name=reader.getName();
+ GISAttributeInterface[] att=new GISAttributeInterface[lvals.length - 2];
+ if (lvals.length > 2) { // On ne prend pas le x et le y
+ for (int i=0; i < att.length; i++) {
+ final int real=i + 2;
+ if (colTypes[real] == DodicoCsvReader.COL_TYPE_STRING) {
+ att[i]=_r.findOrCreateAttribute(name.length > real ? name[real]
+ : "S_" + (i + 1), String.class, true);
+ attVals.add(lvals[real].toArray(new String[0]));
+ }
+ else {
+ att[i]=_r.findOrCreateAttribute(name.length > real ? name[real]
: "V_" + (i + 1), Double.class, true);
- attValues[i] = values[real].toNativeArray();
+ attVals.add(lvals[real].toArray(new Double[0]));
}
- _r.addUsedAttributes(att);
-
}
- _r.nbPoint_ += pt.length;
- _r.nbPointTotal_ += pt.length;
- // Ajout de l'attribut ETAT_GEOM
- _r.findOrCreateAttribute(GISAttributeConstants.ETAT_GEOM.getID(), String.class, false);
- GISDataModelAttributeAdapter adapter = new GISDataModelAttributeAdapter(new GISDataModelListPtAdapter(pt, att, attValues));
- adapter.addAttribut(GISAttributeConstants.ETAT_GEOM, _fileOrigine);
- //
- _r.pointModel_.add(adapter);
+ _r.addUsedAttributes(att);
}
+
+ GISZoneCollectionPoint zone=new GISZoneCollectionPoint();
+ zone.setAttributes(att, null);
+ zone.addAll(pt, attVals, null);
+
+ // Ajout de l'attribut ETAT_GEOM
+ _r.findOrCreateAttribute(GISAttributeConstants.ETAT_GEOM.getID(), String.class, false);
+ GISDataModelAttributeAdapter adapter=new GISDataModelAttributeAdapter(zone);
+ adapter.addAttribut(GISAttributeConstants.ETAT_GEOM, _fileOrigine);
+
+ _r.nbPoint_+=pt.length;
+ _r.nbPointTotal_+=pt.length;
+ _r.pointModel_.add(adapter);
}
}
Modified: trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigWizardFileModel.java
===================================================================
--- trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigWizardFileModel.java 2011-09-09 16:52:21 UTC (rev 6384)
+++ trunk/business/fudaa-sig/src/main/java/org/fudaa/fudaa/sig/wizard/FSigWizardFileModel.java 2011-09-09 16:53:14 UTC (rev 6385)
@@ -80,10 +80,12 @@
origines_ = new HashMap<String, String>();
}
+ @Override
protected void actionBeforeRemove(final int _i) {
fileData_.remove(getValueAt(_i));
}
+ @Override
public void addElement(final Object _o) {
if (!fileData_.containsKey(_o)) {
// ajouter le format
@@ -129,10 +131,12 @@
}
}
+ @Override
public int getColumnCount() {
return 4;
}
+ @Override
public String getColumnName(final int _column) {
switch (_column) {
case 0:
@@ -148,6 +152,7 @@
}
}
+ @Override
public Object getValueAt(final int _row, final int _col) {
if (_col == 3) {
return origines_.get(((File) super.getValueAt(_row, 1)).getName());
@@ -158,6 +163,7 @@
return super.getValueAt(_row, _col);
}
+ @Override
public boolean isCellEditable(final int _rowIndex, final int _columnIndex) {
return _columnIndex > 0;
}
@@ -176,6 +182,7 @@
return null;
}
+ @Override
public void setValueAt(final Object _value, final int _rowIndex, final int _columnIndex) {
if (_columnIndex == 3) {
origines_.put(((File) super.getValueAt(_rowIndex, 1)).getName(), (String)_value);
@@ -220,15 +227,16 @@
@Override
public boolean isDataValid() {
- final boolean res = reader.containsError();
- if (res) {
- setErrorText(FSigLib.getS("Le fichier doit contenir 2 champs (X,Y) au minimum."));
+ reader.initFromOption(buildOption());
+ final String res = reader.containsError();
+ if (res!=null) {
+ setErrorText(res);
}
- return !res;
+ return res==null;
}
};
- reader.setNumeric(true);
+ reader.setNumeric(false);
pn.setReader(reader);
if (CtuluDialogPanel.isOkResponse(pn.afficheModale(CtuluLibSwing.getActiveWindow()))) { return pn.buildOption(); }
return null;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|