|
From: <de...@us...> - 2012-10-05 11:24:55
|
Revision: 7711
http://fudaa.svn.sourceforge.net/fudaa/?rev=7711&view=rev
Author: deniger
Date: 2012-10-05 11:24:47 +0000 (Fri, 05 Oct 2012)
Log Message:
-----------
am?\195?\169lioration des courbes: labels verticaux, banni?\195?\168res...
Modified Paths:
--------------
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContent.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentColumn.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentReader.java
trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/common/businessMessages.properties
trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/common/AbstractTestCase.java
Added Paths:
-----------
trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/io/extern/
trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/io/extern/ExternContentReaderTest.java
trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/
trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/badNumber.txt
trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctEmptyExtern.txt
trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctExtern.txt
trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/empty.txt
trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/notSameColumns.txt
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContent.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContent.java 2012-10-05 10:36:45 UTC (rev 7710)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContent.java 2012-10-05 11:24:47 UTC (rev 7711)
@@ -3,8 +3,11 @@
*/
package org.fudaa.dodico.crue.io.extern;
+import gnu.trove.TIntObjectHashMap;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
/**
*
@@ -15,11 +18,29 @@
private String name;
private String comment;
List<ExternContentColumn> columns = new ArrayList<ExternContentColumn>();
+ TIntObjectHashMap<String> labels = new TIntObjectHashMap<String>();
+ private int nbValues;
+ public int getNbValues() {
+ return nbValues;
+ }
+
+ protected void setNbValues(int nbValues) {
+ this.nbValues = nbValues;
+ }
+
public String getName() {
return name;
}
+ protected void addLabel(int i, String label) {
+ labels.put(i, label);
+ }
+
+ public String getLabel(int i) {
+ return labels.get(i);
+ }
+
protected void addColumn(ExternContentColumn col) {
columns.add(col);
}
@@ -32,7 +53,35 @@
return comment;
}
+ public ExternContentColumn getColumn(String name) {
+ return contentsByName.get(name);
+ }
+
+ public List<String> getNames() {
+ return new ArrayList<String>(contentsByName.keySet());
+ }
+
void setComment(String comment) {
this.comment = comment;
}
+ Map<String, ExternContentColumn> contentsByName = new LinkedHashMap<String, ExternContentColumn>();
+
+ boolean finalyseData() {
+ nbValues = 0;
+ if (!columns.isEmpty()) {
+ nbValues = columns.get(0).getSize();
+ for (int i = 1; i < columns.size(); i++) {
+ if (nbValues != columns.get(i).getSize()) {
+ nbValues = 0;
+ return false;
+ }
+ }
+ }
+ contentsByName.clear();
+ for (ExternContentColumn externContentColumn : columns) {
+ contentsByName.put(externContentColumn.getTitle(), externContentColumn);
+
+ }
+ return true;
+ }
}
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentColumn.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentColumn.java 2012-10-05 10:36:45 UTC (rev 7710)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentColumn.java 2012-10-05 11:24:47 UTC (rev 7711)
@@ -3,6 +3,8 @@
*/
package org.fudaa.dodico.crue.io.extern;
+import gnu.trove.TDoubleArrayList;
+
/**
*
* @author Frederic Deniger
@@ -10,7 +12,7 @@
public class ExternContentColumn {
String title;
- double[] values;
+ TDoubleArrayList values = new TDoubleArrayList();
public String getTitle() {
return title;
@@ -20,11 +22,15 @@
this.title = title;
}
- public double[] getValues() {
- return values;
+ protected void addValue(double x) {
+ values.add(x);
}
- void setValues(double[] values) {
- this.values = values;
+ public int getSize() {
+ return values.size();
}
+
+ public double getValue(int i) {
+ return values.get(i);
+ }
}
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentReader.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentReader.java 2012-10-05 10:36:45 UTC (rev 7710)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/extern/ExternContentReader.java 2012-10-05 11:24:47 UTC (rev 7711)
@@ -3,38 +3,140 @@
*/
package org.fudaa.dodico.crue.io.extern;
+import com.Ostermiller.util.BadDelimiterException;
+import com.Ostermiller.util.CSVParser;
import java.io.File;
import java.io.FileReader;
+import java.io.IOException;
import java.io.LineNumberReader;
+import java.io.StringReader;
+import org.apache.commons.lang.StringUtils;
+import org.fudaa.ctulu.CtuluDoubleParser;
import org.fudaa.ctulu.CtuluLibFile;
import org.fudaa.ctulu.CtuluLog;
import org.fudaa.dodico.crue.common.BusinessMessages;
import org.fudaa.dodico.crue.io.common.CrueIOResu;
-import org.fudaa.dodico.fortran.FortranReader;
/**
*
* @author Frederic Deniger
*/
public class ExternContentReader {
-
+
CrueIOResu<ExternContent> read(File f) {
CrueIOResu<ExternContent> res = new CrueIOResu<ExternContent>();
CtuluLog log = new CtuluLog(BusinessMessages.RESOURCE_BUNDLE);
res.setAnalyse(log);
+ if (f == null) {
+ log.addSevereError("extern.noFileDefined");
+ return res;
+ }
+ log.setDesc(f.getAbsolutePath());
+ if (!f.exists()) {
+ log.addSevereError("extern.fileNotFound", f.getAbsoluteFile());
+ return res;
+ }
FileReader fileReader = null;
try {
fileReader = new FileReader(f);
LineNumberReader reader = new LineNumberReader(fileReader);
- String readLine = reader.readLine();
-
-
+ res.setMetier(read(reader, log));
} catch (Exception ex) {
log.manageException(ex);
} finally {
CtuluLibFile.close(fileReader);
}
-
+ if (res.getMetier() != null) {
+ boolean ok = res.getMetier().finalyseData();
+ if (!ok) {
+ log.addError("extern.columnsWithDifferentSize");
+ return null;
+ }
+ }
+
return res;
}
+ private final static String COMMENT = "#";
+
+ private ExternContent read(LineNumberReader reader, CtuluLog log) throws Exception {
+ ExternContent content = new ExternContent();
+ //nom
+ String readLine = readComment(reader, log);
+ if (readLine == null) {
+ return null;
+ }
+ content.setName(readLine);
+ //commentaire
+ readLine = readComment(reader, log);
+ if (readLine == null) {
+ return null;
+ }
+ //values
+ content.setComment(readLine);
+ readLine = readComment(reader, log);
+ if (readLine == null) {
+ return null;
+ }
+ String[] line = parseLine(readLine);
+ if (line.length == 0) {
+ return content;
+ }
+ ExternContentColumn[] contents = new ExternContentColumn[line.length];
+ final int nbVariables = contents.length;
+ for (int i = 0; i < nbVariables; i++) {
+ contents[i] = new ExternContentColumn();
+ contents[i].setTitle(line[i]);
+ content.addColumn(contents[i]);
+ }
+ readLine = reader.readLine();
+ int variableIdx = 0;
+ CtuluDoubleParser doubleParser = new CtuluDoubleParser();
+ doubleParser.setEmptyIsNull(true);
+ while (readLine != null) {
+ line = parseLine(readLine);
+ if (line.length != nbVariables && line.length != nbVariables + 1) {
+ log.addError("extern.valueLineBadNumberOfColumns", reader.getLineNumber(), line.length, nbVariables, nbVariables + 1);
+ return null;
+ }
+ for (int i = 0; i < nbVariables; i++) {
+ ExternContentColumn externContentColumn = contents[i];
+ try {
+ externContentColumn.addValue(doubleParser.parse(line[i]));
+ } catch (NumberFormatException numberFormatException) {
+ log.addError("extern.valueLineBadContent", reader.getLineNumber(), line[i]);
+ return null;
+ }
+ }
+ if (line.length == nbVariables + 1) {
+ final String label = line[nbVariables];
+ if (StringUtils.isNotBlank(label)) {
+ content.addLabel(variableIdx, label);
+ }
+ }
+ readLine = reader.readLine();
+ variableIdx++;
+ }
+
+ return content;
+ }
+
+ private String readComment(LineNumberReader reader, CtuluLog log) throws Exception {
+ String readLine = reader.readLine();
+ if (readLine == null) {
+ log.addSevereError("extern.formatFileError");
+ return null;
+ }
+ readLine = readLine.trim();
+ if (!readLine.startsWith(COMMENT)) {
+ log.addSevereError("extern.formatFileError");
+ return null;
+ }
+ return readLine.substring(1);
+ }
+
+ private String[] parseLine(String readLine) throws BadDelimiterException, IOException {
+ final CSVParser csvParser = new CSVParser(new StringReader(readLine), ';');
+ csvParser.changeQuote('\'');
+ return csvParser.getLine();
+ }
}
Modified: trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/common/businessMessages.properties
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/common/businessMessages.properties 2012-10-05 10:36:45 UTC (rev 7710)
+++ trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/common/businessMessages.properties 2012-10-05 11:24:47 UTC (rev 7711)
@@ -1197,4 +1197,10 @@
CalcTransNoeudNiveauContinuTarage.builderName=Zimp(Q)
CalcTransBrancheOrificeManoeuvre.builderName=Manoeuvre
CalcTransBrancheSaintVenantQruis.builderName=BrancheSaintVenant Qruis
-CalcTransCasierProfilQruis.builderName=CasierProfil Qruis
\ No newline at end of file
+CalcTransCasierProfilQruis.builderName=CasierProfil Qruis
+extern.noFileDefined=Aucun fichier de d\u00e9fini
+extern.fileNotFound=Le fichier n''existe pas: {0}
+extern.formatFileError=Le format du fichier n'est pas valide. Il doit commencer par 3 lignes commen\u00e7ant par #
+extern.valueLineBadNumberOfColumns=Ligne {0}: le nombre de colonnes ({1}) n''est pas correct. {2} ou {3} colonnes doivent \u00eatre d\u00e9finies
+extern.valueLineBadContent=Ligne {0}: la valeur {1} ne peut pas \u00eatre transform\u00e9e en r\u00e9el.
+extern.columnsWithDifferentSize=Le contenu du fichier n'est pas coh\u00e9rent. Des colonnes ont des tailles diff\u00e9rentes.
\ No newline at end of file
Modified: trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/common/AbstractTestCase.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/common/AbstractTestCase.java 2012-10-05 10:36:45 UTC (rev 7710)
+++ trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/common/AbstractTestCase.java 2012-10-05 11:24:47 UTC (rev 7711)
@@ -265,7 +265,6 @@
CtuluLibFile.close(in);
}
assertTrue(f.exists());
- assertTrue(f.length() > 0);
return f;
}
Added: trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/io/extern/ExternContentReaderTest.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/io/extern/ExternContentReaderTest.java (rev 0)
+++ trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/io/extern/ExternContentReaderTest.java 2012-10-05 11:24:47 UTC (rev 7711)
@@ -0,0 +1,119 @@
+/*
+ GPL 2
+ */
+package org.fudaa.dodico.crue.io.extern;
+
+import java.io.File;
+import java.util.List;
+import org.fudaa.ctulu.CtuluLogRecord;
+import org.fudaa.dodico.crue.common.AbstractTestCase;
+import org.fudaa.dodico.crue.io.common.CrueIOResu;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author Frederic Deniger
+ */
+public class ExternContentReaderTest {
+
+ public ExternContentReaderTest() {
+ }
+
+ @Test
+ public void testRead() {
+ File file = AbstractTestCase.getFile("/externe/correctExtern.txt");
+ assertTrue(file.exists());
+ ExternContentReader reader = new ExternContentReader();
+ CrueIOResu<ExternContent> read = reader.read(file);
+ assertNotNull(read);
+ assertTrue(read.getAnalyse().isEmpty());
+ ExternContent content = read.getMetier();
+ assertEquals("Title", content.getName());
+ assertEquals("Comment", content.getComment());
+ assertEquals(3, content.getNbValues());
+ List<String> names = content.getNames();
+ assertEquals(2, names.size());
+ assertEquals("V1", names.get(0));
+ assertEquals("v2", names.get(1));
+ assertEquals("value 1", content.getLabel(0));
+ assertNull(content.getLabel(1));
+ assertEquals("value 2", content.getLabel(2));
+ ExternContentColumn column = content.getColumn("V1");
+ assertEquals(1, column.getValue(0), 1e-15);
+ assertEquals(2, column.getValue(1), 1e-15);
+ assertEquals(3, column.getValue(2), 1e-15);
+ column = content.getColumn("v2");
+ assertEquals(1.2, column.getValue(0), 1e-15);
+ assertEquals(2.2, column.getValue(1), 1e-15);
+ assertEquals(3.2, column.getValue(2), 1e-15);
+ file.delete();
+
+ }
+
+ @Test
+ public void testReadCorrectEmpty() {
+ File file = AbstractTestCase.getFile("/externe/correctEmptyExtern.txt");
+ assertTrue(file.exists());
+ ExternContentReader reader = new ExternContentReader();
+ CrueIOResu<ExternContent> read = reader.read(file);
+ assertNotNull(read);
+ assertTrue(read.getAnalyse().isEmpty());
+ ExternContent content = read.getMetier();
+ assertEquals("Title", content.getName());
+ assertEquals("Comment", content.getComment());
+ assertEquals(0, content.getNbValues());
+ List<String> names = content.getNames();
+ assertEquals(2, names.size());
+ assertEquals("V1", names.get(0));
+ assertEquals("v2", names.get(1));
+ ExternContentColumn column = content.getColumn("V1");
+ assertEquals(0, column.getSize());
+ column = content.getColumn("v2");
+ assertEquals(0, column.getSize());
+ file.delete();
+
+ }
+
+ @Test
+ public void testReadEmpty() {
+ File file = AbstractTestCase.getFile("/externe/empty.txt");
+ assertTrue(file.exists());
+ ExternContentReader reader = new ExternContentReader();
+ CrueIOResu<ExternContent> read = reader.read(file);
+ assertNotNull(read);
+ assertTrue(read.getAnalyse().containsErrorOrSevereError());
+ assertEquals(1, read.getAnalyse().getRecords().size());
+ CtuluLogRecord record = read.getAnalyse().getRecords().get(0);
+ assertEquals("extern.formatFileError", record.getMsg());
+ file.delete();
+ }
+
+ @Test
+ public void testBadNumber() {
+ File file = AbstractTestCase.getFile("/externe/badNumber.txt");
+ assertTrue(file.exists());
+ ExternContentReader reader = new ExternContentReader();
+ CrueIOResu<ExternContent> read = reader.read(file);
+ assertNotNull(read);
+ assertTrue(read.getAnalyse().containsErrorOrSevereError());
+ assertEquals(1, read.getAnalyse().getRecords().size());
+ CtuluLogRecord record = read.getAnalyse().getRecords().get(0);
+ assertEquals("extern.valueLineBadContent", record.getMsg());
+ file.delete();
+ }
+
+ @Test
+ public void testNotSameColumnsBadNumber() {
+ File file = AbstractTestCase.getFile("/externe/notSameColumns.txt");
+ assertTrue(file.exists());
+ ExternContentReader reader = new ExternContentReader();
+ CrueIOResu<ExternContent> read = reader.read(file);
+ assertNotNull(read);
+ assertTrue(read.getAnalyse().containsErrorOrSevereError());
+ assertEquals(1, read.getAnalyse().getRecords().size());
+ CtuluLogRecord record = read.getAnalyse().getRecords().get(0);
+ assertEquals("extern.valueLineBadNumberOfColumns", record.getMsg());
+ file.delete();
+ }
+}
Added: trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/badNumber.txt
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/badNumber.txt (rev 0)
+++ trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/badNumber.txt 2012-10-05 11:24:47 UTC (rev 7711)
@@ -0,0 +1,6 @@
+#Title
+#Comment
+#V1;'v2'
+1;1.2;value 1
+2;2,2;
+3;a;'value 2'
\ No newline at end of file
Added: trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctEmptyExtern.txt
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctEmptyExtern.txt (rev 0)
+++ trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctEmptyExtern.txt 2012-10-05 11:24:47 UTC (rev 7711)
@@ -0,0 +1,3 @@
+#Title
+#Comment
+#V1;'v2'
\ No newline at end of file
Added: trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctExtern.txt
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctExtern.txt (rev 0)
+++ trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/correctExtern.txt 2012-10-05 11:24:47 UTC (rev 7711)
@@ -0,0 +1,6 @@
+#Title
+#Comment
+#V1;'v2'
+1;1.2;value 1
+2;2,2;
+3;3,2;'value 2'
\ No newline at end of file
Added: trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/empty.txt
===================================================================
Added: trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/notSameColumns.txt
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/notSameColumns.txt (rev 0)
+++ trunk/soft/fudaa-crue/crue-server/src/test/resources/externe/notSameColumns.txt 2012-10-05 11:24:47 UTC (rev 7711)
@@ -0,0 +1,6 @@
+#Title
+#Comment
+#V1;'v2'
+1;1.2;value 1
+2;2,2;
+3
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|