Isis-fish-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- 3175 discussions
r4168 - trunk/src/main/java/fr/ifremer/isisfish/ui/script
by bpoussin@users.forge.codelutin.com 24 Dec '14
by bpoussin@users.forge.codelutin.com 24 Dec '14
24 Dec '14
Author: bpoussin
Date: 2014-12-24 16:39:29 +0000 (Wed, 24 Dec 2014)
New Revision: 4168
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4168
Log:
missing CommunityExportStep in case
Modified:
trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2014-12-24 16:32:05 UTC (rev 4167)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2014-12-24 16:39:29 UTC (rev 4168)
@@ -317,6 +317,7 @@
script = SimulationPlanStorage.createSimulationPlan(fileName, Location.COMMUNITY);
break;
case CommunityExport:
+ case CommunityExportStep:
script = ExportStorage.createExport(fileName, Location.COMMUNITY);
break;
case CommunityObjective:
1
0
r4167 - trunk/src/main/java/fr/ifremer/isisfish/export
by bpoussin@users.forge.codelutin.com 24 Dec '14
by bpoussin@users.forge.codelutin.com 24 Dec '14
24 Dec '14
Author: bpoussin
Date: 2014-12-24 16:32:05 +0000 (Wed, 24 Dec 2014)
New Revision: 4167
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4167
Log:
must extends Export and not ExportInfo
Modified:
trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java 2014-12-19 18:40:04 UTC (rev 4166)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java 2014-12-24 16:32:05 UTC (rev 4167)
@@ -36,6 +36,6 @@
* Last update: $Date$
* by : $Author$
*/
-public interface SensitivityExport extends ExportInfo {
+public interface SensitivityExport extends Export {
}
1
0
19 Dec '14
Author: bpoussin
Date: 2014-12-19 18:40:04 +0000 (Fri, 19 Dec 2014)
New Revision: 4166
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4166
Log:
fixes #5844: export de resultats durant la simulation
Added:
trunk/src/main/java/fr/ifremer/isisfish/export/ExportInfo.java
trunk/src/main/java/fr/ifremer/isisfish/export/ExportStep.java
trunk/src/main/resources/templates/script/exportStep.ftl
trunk/src/test/java/fr/ifremer/isisfish/datastore/ExportStepStorageTest.java
Modified:
trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java
trunk/src/main/java/fr/ifremer/isisfish/export/Export.java
trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java
trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationListener.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java
trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java
trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java
trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportObservationTableModel.java
trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportTableCellRenderer.java
trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java
trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java
trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx
trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java
trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java
trunk/src/main/resources/i18n/isis-fish_en_GB.properties
trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -68,6 +68,7 @@
import fr.ifremer.isisfish.util.IsisCacheBackend;
import fr.ifremer.isisfish.util.IsisCacheBackendOnGuava;
import fr.ifremer.isisfish.vcs.VCS;
+import java.nio.charset.Charset;
/**
* Isis fish configuration.
@@ -135,6 +136,10 @@
protected static Version version;
protected static Version databaseVersion;
protected static Version apiVersion;
+ // IDEA: perhaps add this in simulation configuration to permit easy portable
+ // export between CapArmor and Windows world
+ public static final Charset charset = Charset.forName("UTF-8");
+ public static final String COMPRESSION_EXTENSION = ".gz";
/**
* Le nombre global ex: 3.2.0.0
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -36,12 +36,12 @@
import org.apache.commons.logging.LogFactory;
import fr.ifremer.isisfish.IsisFish;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.util.Doc;
import fr.ifremer.isisfish.vcs.VCSException;
/**
- * Gestion des fichers VCS de type {@link Export}
+ * Gestion des fichers VCS de type {@link ExportInfo}
* (appartenant au module exports).
*
* Created: 18 août 2005 15:07:36 CEST
@@ -61,6 +61,8 @@
/** Template freemarker pour les scripts d'export . */
public static final String EXPORT_TEMPLATE = "templates/script/export.ftl";
+ /** Template freemarker pour les scripts d'export . */
+ public static final String EXPORT_STEP_TEMPLATE = "templates/script/exportStep.ftl";
/** Instance cache. */
private static Map<String, ExportStorage> exportCache = new ReferenceMap<String, ExportStorage>();
@@ -152,16 +154,16 @@
}
/**
- * <b>Be ware this method require to instantiate a Export, so
- * it would be better to call as often as possible.</b>
+ * <b>Be ware this method require to instantiate a ExportInfo, so
+ it would be better to call as often as possible.</b>
*
- * @return the description of the instantiate Export
+ * @return the description of the instantiate ExportInfo
* @see Doc
*/
public String getDescription() {
String result = null;
try {
- Export export = getNewInstance();
+ ExportInfo export = getNewInstance();
if (export != null) {
result = export.getDescription();
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -53,7 +53,7 @@
import fr.ifremer.isisfish.entities.Population;
import fr.ifremer.isisfish.entities.Result;
import fr.ifremer.isisfish.entities.ResultDAO;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.simulator.Objective;
@@ -266,7 +266,7 @@
for (String exportName : exportNames) {
ExportStorage storage = ExportStorage.getExport(exportName);
try {
- Export export = storage.getNewInstance();
+ ExportInfo export = storage.getNewInstance();
for (String resultName : export.getNecessaryResult()) {
enabledResult.add(resultName);
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -32,7 +32,7 @@
import fr.ifremer.isisfish.IsisFishException;
import fr.ifremer.isisfish.entities.Population;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.simulator.SimulationPlan;
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -53,7 +53,7 @@
import fr.ifremer.isisfish.IsisFishException;
import fr.ifremer.isisfish.IsisFishRuntimeException;
import fr.ifremer.isisfish.entities.Population;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.simulator.Objective;
@@ -391,7 +391,7 @@
for (String exportName : exportNames) {
ExportStorage storage = ExportStorage.getExport(exportName);
try {
- Export export = storage.getNewInstance();
+ ExportInfo export = storage.getNewInstance();
Collections.addAll(enabledResult, export.getNecessaryResult());
} catch (IsisFishException eee) {
if (log.isWarnEnabled()) {
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -23,6 +23,7 @@
*/
+import fr.ifremer.isisfish.IsisConfig;
import fr.ifremer.isisfish.IsisFish;
import fr.ifremer.isisfish.IsisFishRuntimeException;
import fr.ifremer.isisfish.simulator.SimulationContext;
@@ -38,7 +39,6 @@
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
-import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -103,8 +103,6 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(ResultStorageCSV.class);
- static final private Charset charset = Charset.forName("UTF-8");
-
/** number of step result to store on disk. 0 for none, negative for all result */
protected int storeOnDiskStep = -1;
/** number of step in cache */
@@ -190,7 +188,7 @@
}
protected File getMatrixFile(TimeStep step, String name) {
- File file = new File(getMatrixDirectory(name), step.getStep() + "-" + name + ".csv.gz");
+ File file = new File(getMatrixDirectory(name), step.getStep() + "-" + name + ".csv" + IsisConfig.COMPRESSION_EXTENSION);
return file;
}
@@ -227,7 +225,7 @@
LineNumberReader in = null;
try {
in = new LineNumberReader(new InputStreamReader(
- new GZIPInputStream(new FileInputStream(file)), charset));
+ new GZIPInputStream(new FileInputStream(file)), IsisConfig.charset));
SimpleParser sp = new SimpleParser(in, true);
@@ -389,7 +387,7 @@
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
new GZIPOutputStream(counter = new CountingOutputStream(new FileOutputStream(file))),
- charset
+ IsisConfig.charset
)));
out.print(name);
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -72,6 +72,7 @@
private static final String END_SIMULATION = "simulationEnd";
private static final String EXPORT_TIME = "exportTime";
private static final String EXPORT_SIZE = "exportSize";
+ private static final String EXPORT_EXCEPTION = "exportException";
private static final String RULE_TIME = "ruleTime";
private static final String RULE_TIME_INIT = RULE_TIME + ".init";
private static final String RULE_TIME_PRE = RULE_TIME + ".pre";
@@ -133,15 +134,12 @@
// exports
Map<String, Long> exportTime = getExportTimes();
if (exportTime.size() > 0) {
- result += "Export time: " +
- DurationFormatUtils.formatDuration(getAllExportTime(),
- "s'.'S") + "s\n";
+ result += "Export time: " + StringUtil.convertTime(getAllExportTime()) + "\n";
for (Map.Entry<String, Long> entry : exportTime.entrySet()) {
result += "\t"
+ entry.getKey()
+ " : "
- + DurationFormatUtils.formatDuration(entry.getValue(),
- "s'.'S") + "s\n";
+ + StringUtil.convertTime(entry.getValue()) + "\n";
}
}
@@ -219,9 +217,21 @@
// Exception
v = getException();
if (v != null) {
- result += "Exception:\n" + v + "\n";
+ result += "Simulation exception:\n" + v + "\n";
}
+ // exports Exception
+ Map<String, String> exportException = getExportExceptions();
+ if (exportException.size() > 0) {
+ result += "Export exception:\n ";
+ for (Map.Entry<String, String> entry : exportException.entrySet()) {
+ result += entry.getKey()
+ + " : "
+ + entry.getValue() + "\n\n";
+ }
+ }
+
+
return result;
}
@@ -307,6 +317,10 @@
setInfo(EXPORT_SIZE + "." + exportName, String.valueOf(size));
}
+ public void addExportException(String exportName, Throwable eee) {
+ setInfo(EXPORT_EXCEPTION + "." + exportName, exceptionToString(eee));
+ }
+
public void addAllExportTime(long time) {
setInfo(EXPORT_TIME, String.valueOf(time));
}
@@ -348,6 +362,22 @@
}
/**
+ * Get all export exception in map.
+ *
+ * @return a map with all export exception
+ */
+ protected Map<String, String> getExportExceptions() {
+ Map<String, String> result = new TreeMap<String, String>();
+ for (String key : info.stringPropertyNames()) {
+ if (key.startsWith(EXPORT_EXCEPTION + ".")) {
+ String exportName = key.substring(EXPORT_EXCEPTION.length() + 1);
+ result.put(exportName, info.getProperty(key));
+ }
+ }
+ return result;
+ }
+
+ /**
* Get all export time in map.
*
* @return a map with all export time
@@ -567,11 +597,16 @@
}
public void setException(Throwable eee) {
+ String v = exceptionToString(eee);
+ setInfo(SIMULATION_EXCEPTION, v);
+ }
+
+ protected String exceptionToString(Throwable eee) {
StringWriter w = new StringWriter();
PrintWriter pw = new PrintWriter(w);
eee.printStackTrace(pw);
String v = w.getBuffer().toString();
- setInfo(SIMULATION_EXCEPTION, v);
+ return v;
}
/**
Modified: trunk/src/main/java/fr/ifremer/isisfish/export/Export.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/Export.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/Export.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -30,7 +30,8 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
/**
- * Interface que doivent implanter les classes d'export de resultats.
+ * Interface que doivent implanter les classes d'export de resultats pour les
+ * export qui ne peuvent pas etre fait pas de temps par pas de temps
*
* Le nom du fichier d'export qui sera utilisé sera le basé sur le nom de la
* classe d'export
@@ -43,39 +44,11 @@
* Last update: $Date$
* by : $Author$
*/
-public interface Export {
+public interface Export extends ExportInfo {
/**
- * Necessary results names for export execution.
+ * Exporte les resultat apres la simulation.
*
- * @return the necessaryResult name
- */
- public String[] getNecessaryResult();
-
- /**
- * Return Export description.
- *
- * @return string displayable to the end user
- */
- public String getDescription();
-
- /**
- * Return filename used to contains export data.
- *
- * @return filename by example "myexport"
- */
- public String getExportFilename();
-
- /**
- * Return extension used as filename name extension.
- *
- * @return extension by example ".csv"
- */
- public String getExtensionFilename();
-
- /**
- * Exporte les resultat.
- *
* @param simulation la simulation dont on souhaite exporter les resultats
* @param out la sortie sur lequel il faut ecrire l'export
* @throws Exception if export fail
Modified: trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -25,28 +25,26 @@
package fr.ifremer.isisfish.export;
-import fr.ifremer.isisfish.IsisFish;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.Writer;
-import java.util.List;
+import fr.ifremer.isisfish.IsisConfig;
+import fr.ifremer.isisfish.IsisFishException;
+import fr.ifremer.isisfish.datastore.ExportStorage;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.TopiaContext;
-import fr.ifremer.isisfish.datastore.ExportStorage;
-import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.datastore.StorageHelper;
import fr.ifremer.isisfish.simulator.SimulationParameterPropertiesHelper;
+import fr.ifremer.isisfish.types.TimeStep;
+import java.io.BufferedWriter;
+import java.io.File;
import java.io.FileOutputStream;
-import java.io.OutputStream;
+import java.io.IOException;
import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
+import java.io.Writer;
import java.util.Properties;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.output.CountingOutputStream;
import org.apache.commons.lang3.StringUtils;
@@ -66,51 +64,103 @@
/** Class logger. */
private static Log log = LogFactory.getLog(ExportHelper.class);
- static final private String COMPRESSION_EXTENSION = ".gz";
- // IDEA: perhaps add this in simulation configuration to permit easy portable
- // export between CapArmor and Windows world
- static final private Charset charset = Charset.forName("UTF-8");
+// /**
+// * Permet de faire les exports pour une simulation.
+// *
+// * @param simulation La simulation pour lequel il faut faire les exports
+// * @param destdir le repertoire dans lequel il faut ecrire les exports
+// * @param exports les instances des exports à faire
+// * @param compileDir le nom du répertoire ou les classes d'export sont compilées
+// */
+// public static void doExport(SimulationStorage simulation, File destdir,
+// List<Export> exports, File compileDir) {
+//
+// // on ne compte plus ici les temps d'instanciations
+// // deplacer dans SimulationExportResultWrapper#afterSimulation(SimulationContext)
+//
+// long writtenAll = 0;
+// long timeStart = System.currentTimeMillis();
+// for (Export export : exports) {
+// String exportName = ExportStorage.getName(export);
+// long written = 0;
+// long time = System.currentTimeMillis();
+// try {
+// written = exportToFile(simulation, destdir, export);
+// writtenAll += written;
+// } catch (Exception eee) {
+// if (log.isWarnEnabled()) {
+// log.warn("Can't export object: " + exportName, eee);
+// }
+// }
+// simulation.getInformation().addExportSize(exportName, written);
+// simulation.getInformation().addExportTime(exportName,
+// System.currentTimeMillis() - time);
+// }
+// simulation.getInformation().addAllExportSize(writtenAll);
+// simulation.getInformation().addAllExportTime(
+// System.currentTimeMillis() - timeStart);
+// }
+//
+// /**
+// * Do single export.
+// *
+// * @param simulation la simulation pour lequel il faut faire les exports
+// * @param destdir le repertoire dans lequel il faut ecrire les exports
+// * @param export le nom des exports a faire
+// *
+// * @return number of byte written on disk
+// *
+// * @throws Exception si une erreur survient
+// */
+// protected static long exportToFile(SimulationStorage simulation,
+// File destdir, Export export) throws Exception {
+// long result = 0;
+//
+// String filename = export.getExportFilename();
+// String extension = export.getExtensionFilename();
+//
+// if (!StringUtils.endsWithIgnoreCase(extension, IsisConfig.COMPRESSION_EXTENSION)
+// && IsisFish.config.getExportForceCompression()) {
+// extension += IsisConfig.COMPRESSION_EXTENSION;
+// }
+//
+// File file = new File(destdir, filename + extension);
+// // prevent two export with same name
+// // name MyExport.csv become MyExport_1.csv
+// int val = 0;
+// while (file.exists()) {
+// val++;
+// file = new File(destdir, filename + extension + "_" + val);
+// }
+//
+// Writer out = null;
+// CountingOutputStream counter = null;
+// try {
+//
+// OutputStream os = new FileOutputStream(file);
+// os = counter = new CountingOutputStream(os);
+//
+// // if compression is needed by extension, add compression writer
+// if (StringUtils.endsWithIgnoreCase(extension, IsisConfig.COMPRESSION_EXTENSION)) {
+// os = new GZIPOutputStream(os);
+// }
+//
+// out = new PrintWriter(new BufferedWriter(
+// new OutputStreamWriter(os, IsisConfig.charset)));
+//
+// export.export(simulation, out);
+// } finally {
+// IOUtils.closeQuietly(out);
+// if (counter != null) {
+// result = counter.getByteCount();
+// }
+// }
+// return result;
+// }
/**
- * Permet de faire les exports pour une simulation.
- *
- * @param simulation La simulation pour lequel il faut faire les exports
- * @param destdir le repertoire dans lequel il faut ecrire les exports
- * @param exports les instances des exports à faire
- * @param compileDir le nom du répertoire ou les classes d'export sont compilées
- */
- public static void doExport(SimulationStorage simulation, File destdir,
- List<Export> exports, File compileDir) {
-
- // on ne compte plus ici les temps d'instanciations
- // deplacer dans SimulationExportResultWrapper#afterSimulation(SimulationContext)
-
- long writtenAll = 0;
- long timeStart = System.currentTimeMillis();
- for (Export export : exports) {
- String exportName = ExportStorage.getName(export);
- long written = 0;
- long time = System.currentTimeMillis();
- try {
- written = exportToFile(simulation, destdir, export);
- writtenAll += written;
- } catch (Exception eee) {
- if (log.isWarnEnabled()) {
- log.warn("Can't export object: " + exportName, eee);
- }
- }
- simulation.getInformation().addExportSize(exportName, written);
- simulation.getInformation().addExportTime(exportName,
- System.currentTimeMillis() - time);
- }
- simulation.getInformation().addAllExportSize(writtenAll);
- simulation.getInformation().addAllExportTime(
- System.currentTimeMillis() - timeStart);
- }
-
- /**
* Do single export.
- *
+ *
* @param simulation la simulation pour lequel il faut faire les exports
* @param destdir le repertoire dans lequel il faut ecrire les exports
* @param export le nom des exports a faire
@@ -119,50 +169,35 @@
*
* @throws Exception si une erreur survient
*/
- protected static long exportToFile(SimulationStorage simulation,
- File destdir, Export export) throws Exception {
- long result = 0;
-
- String filename = export.getExportFilename();
- String extension = export.getExtensionFilename();
-
- if (!StringUtils.endsWithIgnoreCase(extension, COMPRESSION_EXTENSION)
- && IsisFish.config.getExportForceCompression()) {
- extension += COMPRESSION_EXTENSION;
- }
-
- File file = new File(destdir, filename + extension);
- // prevent two export with same name
- // name MyExport.csv become MyExport_1.csv
- int val = 0;
- while (file.exists()) {
- val++;
- file = new File(destdir, filename + extension + "_" + val);
- }
-
+ public static void exportToFile(SimulationStorage simulationStorage, String exportName, File file) throws Exception {
+ ExportStorage storage = ExportStorage.getExport(exportName);
+ ExportInfo exportInfo = storage.getNewInstance();
Writer out = null;
- CountingOutputStream counter = null;
try {
+ if (StringUtils.endsWithIgnoreCase(file.getName(), IsisConfig.COMPRESSION_EXTENSION)) {
+ out = new BufferedWriter(new OutputStreamWriter(
+ new GZIPOutputStream(new FileOutputStream(file)),
+ IsisConfig.charset));
+ } else {
+ out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),
+ IsisConfig.charset));
+ }
- OutputStream os = new FileOutputStream(file);
- os = counter = new CountingOutputStream(os);
+ if (exportInfo instanceof ExportStep) {
+ ExportStep exportStep = (ExportStep)exportInfo;
+ TimeStep lastStep = simulationStorage.getResultStorage().getLastStep();
+ for (TimeStep step = new TimeStep(0); !step.after(lastStep); step = step.next()) {
+ exportStep.export(simulationStorage, step, out);
+ }
+ exportStep.exportEnd(simulationStorage, out);
- // if compression is needed by extension, add compression writer
- if (StringUtils.endsWithIgnoreCase(extension, COMPRESSION_EXTENSION)) {
- os = new GZIPOutputStream(os);
+ } else {
+ Export export = (Export)exportInfo;
+ export.export(simulationStorage, out);
}
-
- out = new PrintWriter(new BufferedWriter(
- new OutputStreamWriter(os, charset)));
-
- export.export(simulation, out);
} finally {
IOUtils.closeQuietly(out);
- if (counter != null) {
- result = counter.getByteCount();
- }
}
- return result;
}
/**
Copied: trunk/src/main/java/fr/ifremer/isisfish/export/ExportInfo.java (from rev 4158, trunk/src/main/java/fr/ifremer/isisfish/export/Export.java)
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/ExportInfo.java (rev 0)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/ExportInfo.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -0,0 +1,76 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.export;
+
+import java.io.Writer;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+
+/**
+ * Interface que doivent implanter les classes d'export de resultats.
+ *
+ * Le nom du fichier d'export qui sera utilisé sera le basé sur le nom de la
+ * classe d'export
+ *
+ * Created: 22 janv. 2006 21:12:58
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public interface ExportInfo {
+
+ /**
+ * Necessary results names for export execution.
+ *
+ * @return the necessaryResult name
+ */
+ public String[] getNecessaryResult();
+
+ /**
+ * Return ExportInfo description.
+ *
+ * @return string displayable to the end user
+ */
+ public String getDescription();
+
+ /**
+ * Return filename used to contains export data.
+ *
+ * @return filename by example "myexport"
+ */
+ public String getExportFilename();
+
+ /**
+ * Return extension used as filename name extension.
+ *
+ * @return extension by example ".csv"
+ */
+ public String getExtensionFilename();
+
+}
Copied: trunk/src/main/java/fr/ifremer/isisfish/export/ExportStep.java (from rev 4158, trunk/src/main/java/fr/ifremer/isisfish/export/Export.java)
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/ExportStep.java (rev 0)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/ExportStep.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -0,0 +1,73 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2006 - 2014 Ifremer, Code Lutin, Benjamin Poussin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.export;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.types.TimeStep;
+import java.io.Writer;
+
+
+/**
+ * Interface que doivent implanter les classes d'export de resultats qui veulent
+ * exporter au fur et a mesure de la simulation.
+ *
+ * Created: 18 dec. 2014 15:03
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ *
+ * @since 4.4.0.0
+ */
+public interface ExportStep extends ExportInfo {
+
+ /**
+ * Exporte les resultats, cette methode est appellee a la fin de chaque pas
+ * de temps. Elle peut ecrire dans le fichier via le parametre out,
+ * ou collecter les informations et les ecrires a la fin de la simulation
+ * lorsque la methode {@link #export(fr.ifremer.isisfish.datastore.SimulationStorage, java.io.Writer)
+ * est appelee.
+ *
+ * @param simulation la simulation dont on souhaite exporter les resultats
+ * @param step le pas de temps courant de la simulation
+ * @param out la sortie sur lequel il faut ecrire l'export
+ * @throws Exception if export fail
+ */
+ public void export(SimulationStorage simulation, TimeStep step, Writer out)
+ throws Exception;
+
+ /**
+ * Appeler a la fin de l'export
+ *
+ * @param simulation la simulation dont on souhaite exporter les resultats
+ * @param out la sortie sur lequel il faut ecrire l'export
+ * @throws Exception if export fail
+ */
+ public void exportEnd(SimulationStorage simulation, Writer out)
+ throws Exception;
+}
Modified: trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/SensitivityExport.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -36,6 +36,6 @@
* Last update: $Date$
* by : $Author$
*/
-public interface SensitivityExport extends Export {
+public interface SensitivityExport extends ExportInfo {
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -42,7 +42,7 @@
import fr.ifremer.isisfish.datastore.ExportStorage;
import fr.ifremer.isisfish.entities.Observation;
import fr.ifremer.isisfish.entities.Population;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.types.TimeStep;
@@ -76,7 +76,7 @@
public ResultManager(SimulationContext context) {
this.context = context;
}
-
+
/**
* Don't use this method to add listener, use
* {@link SimulationContext#addSimulationListener(SimulationListener)}
@@ -125,7 +125,7 @@
for (String exportName : exportNames) {
ExportStorage storage = ExportStorage.getExport(exportName);
try {
- Export export = storage.getNewInstance();
+ ExportInfo export = storage.getNewInstance();
for (String resultName : export.getNecessaryResult()) {
enabledResult.add(resultName);
}
@@ -169,9 +169,9 @@
}
// optimization export
- Map<Export, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations();
+ Map<ExportInfo, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations();
if (optimizationExportsObservations != null) {
- for (Export export : optimizationExportsObservations.keySet()) {
+ for (ExportInfo export : optimizationExportsObservations.keySet()) {
for (String resultName : export.getNecessaryResult()) {
enabledResult.add(resultName);
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -240,6 +240,10 @@
}
}
+ /**
+ * @deprecated a supprimer lorsqu'on aura supprimer ResultDatabaseStorage
+ */
+ @Deprecated
public void closeDBResult() {
if (dbResult != null) {
try {
@@ -429,8 +433,11 @@
/**
* this method return TopiaContext that must be used to save result
* @return Returns the dbResult.
- * @throws TopiaException
+ * @throws TopiaException
+ *
+ * @deprecated ne sert plus a rien lorsque ResultDatabaseStorage sera supprime
*/
+ @Deprecated
public TopiaContext getDbResult() throws TopiaException {
if (dbResult == null && getSimulationStorage() != null) {
dbResult = getSimulationStorage().getStorage().beginTransaction();
@@ -444,7 +451,9 @@
* @param step time step to remove data
* @since 4.1.1.0
* @throws TopiaException
+ * @deprecated ne sert plus a rien, le cache est directement listener de la simulation
*/
+ @Deprecated
public void clearCache(TimeStep step) throws TopiaException {
getCache().clear(step);
}
@@ -553,16 +562,29 @@
* @since 4.3.1.0
*/
public void rollbackRuleChanges() throws TopiaException {
- TopiaContext tx = getDB();
- tx.rollbackTransaction();
+ if (db != null) {
+ db.rollbackTransaction();
+ }
}
/**
+ * Valide (commit) database modification
+ */
+ public void validateDBChanges() throws TopiaException {
+ if (db != null) {
+ db.commitTransaction();
+ }
+ }
+
+ /**
* Commit result storage transaction.
*
* @throws TopiaException
* @since 4.3.1.0
+ *
+ * @deprecated ne sert plus a rien lorsque ResultDatabaseStorage sera supprime
*/
+ @Deprecated
public void commitResults() throws TopiaException {
TopiaContext tx = getDbResult();
tx.commitTransaction();
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -25,10 +25,12 @@
package fr.ifremer.isisfish.simulator;
+import fr.ifremer.isisfish.IsisConfig;
+import fr.ifremer.isisfish.IsisFish;
+
import static org.nuiton.i18n.I18n.t;
import java.io.File;
-import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -39,12 +41,26 @@
import fr.ifremer.isisfish.datastore.ExportStorage;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.export.Export;
-import fr.ifremer.isisfish.export.ExportHelper;
+import fr.ifremer.isisfish.export.ExportInfo;
+import fr.ifremer.isisfish.export.ExportStep;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.types.TimeStep;
+import java.io.BufferedWriter;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.zip.GZIPOutputStream;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.CountingOutputStream;
+import org.apache.commons.lang3.StringUtils;
/**
- * Export simulation listener.
+ * ExportInfo simulation listener.
*
* Do export after simulation ends.
*
@@ -62,27 +78,121 @@
private static Log log = LogFactory
.getLog(SimulationExportResultWrapper.class);
+ protected TimeStep lastStep;
+
+ private class ExportContext {
+ ExportInfo export;
+ File exportDir;
+ Writer out;
+ CountingOutputStream counter;
+ long time = 0;
+ long bytes = 0;
+ Exception exception = null;
+
+ public ExportContext(ExportInfo export, File exportDir) {
+ this.export = export;
+ this.exportDir = exportDir;
+ }
+ public void close() {
+ IOUtils.closeQuietly(out);
+ if (counter != null) {
+ bytes = counter.getByteCount();
+ }
+ }
+
+ public Writer getOut() throws IOException {
+ if (out == null) {
+ String filename = export.getExportFilename();
+ String extension = export.getExtensionFilename();
+
+ if (!StringUtils.endsWithIgnoreCase(extension, IsisConfig.COMPRESSION_EXTENSION)
+ && IsisFish.config.getExportForceCompression()) {
+ extension += IsisConfig.COMPRESSION_EXTENSION;
+ }
+
+ File file = new File(exportDir, filename + extension);
+ // prevent two export with same name
+ // name MyExport.csv become MyExport_1.csv
+ int val = 0;
+ while (file.exists()) {
+ val++;
+ file = new File(exportDir, filename + extension + "_" + val);
+ }
+
+
+ OutputStream os = new FileOutputStream(file);
+ os = counter = new CountingOutputStream(os);
+
+ // if compression is needed by extension, add compression writer
+ if (StringUtils.endsWithIgnoreCase(extension, IsisConfig.COMPRESSION_EXTENSION)) {
+ os = new GZIPOutputStream(os);
+ }
+
+ out = new PrintWriter(new BufferedWriter(
+ new OutputStreamWriter(os, IsisConfig.charset)));
+ }
+ return out;
+ }
+
+ public void addTime(long time) {
+ this.time += time;
+ }
+
+ public void export(SimulationStorage simulation, TimeStep step) throws Exception {
+ if (export instanceof ExportStep) {
+ long timeStart = System.nanoTime();
+ ((ExportStep)export).export(simulation, step, getOut());
+ addTime(System.nanoTime() - timeStart);
+ }
+ }
+
+ public void exportEnd(SimulationStorage simulation) throws Exception {
+ if (export instanceof ExportStep) {
+ long timeStart = System.nanoTime();
+ ((ExportStep)export).exportEnd(simulation, getOut());
+ addTime(System.nanoTime() - timeStart);
+ }
+ }
+
+ public void export(SimulationStorage simulation) throws Exception {
+ if (export instanceof Export) {
+ long timeStart = System.nanoTime();
+ ((Export)export).export(simulation, getOut());
+ addTime(System.nanoTime() - timeStart);
+ }
+ }
+
+ public void setException(Exception exception) {
+ this.exception = exception;
+ }
+
+ }
+
+ protected Map<ExportInfo, ExportContext> allExports = new HashMap<ExportInfo, ExportContext>();
+
/*
- * @see fr.ifremer.isisfish.simulator.SimulationListener#afterSimulation(fr.ifremer.isisfish.simulator.SimulationContext)
+ * @see fr.ifremer.isisfish.simulator.SimulationListener#beforeSimulation(fr.ifremer.isisfish.simulator.SimulationContext)
*/
@Override
- public void afterSimulation(SimulationContext context) {
+ public void beforeSimulation(SimulationContext context) {
SimulationStorage simulation = context.getSimulationStorage();
SimulationParameter parameters = simulation.getParameter();
File rootDirectory = simulation.getDirectory();
- SimulationControl control = context.getSimulationControl();
+ File exportDir = SimulationStorage
+ .getResultExportDirectory(rootDirectory);
+ exportDir.mkdirs();
+
// Ici on contantene les 2 listes d'exports
// first, make export instances based on export
// names
- List<Export> allExports = new ArrayList<Export>();
if (parameters.getExportNames() != null) {
for (String exportName : parameters.getExportNames()) {
try {
ExportStorage storage = ExportStorage.getExport(exportName);
- Export export = storage.getNewInstance();
- allExports.add(export);
+ ExportInfo export = storage.getNewInstance();
+ allExports.put(export, new ExportContext(export, exportDir));
} catch (IsisFishException e) {
if (log.isErrorEnabled()) {
log.error("Can't get export instance " + exportName, e);
@@ -90,43 +200,94 @@
}
}
}
-
+
// second, add already instanciated sensitivity
// exports (with parameters)
List<SensitivityExport> sensitivityExports = parameters.getSensitivityExport();
if (sensitivityExports != null) {
- allExports.addAll(sensitivityExports);
+ for (ExportInfo e : sensitivityExports) {
+ allExports.put(e, new ExportContext(e, exportDir));
+ }
}
// third, optimization export
- Set<Export> optimizationExports = parameters.getOptimizationExportsObservations().keySet();
- for (Export export : optimizationExports) {
+ Set<ExportInfo> optimizationExports = parameters.getOptimizationExportsObservations().keySet();
+ for (ExportInfo export : optimizationExports) {
// exclude export already added with regular exports
String exportName = ExportStorage.getName(export);
if (parameters.getExportNames() == null || !parameters.getExportNames().contains(exportName)) {
- allExports.add(export);
+ allExports.put(export, new ExportContext(export, exportDir));
}
}
+ }
+
+ @Override
+ public void stepChange(SimulationContext context, TimeStep step) {
+ SimulationControl control = context.getSimulationControl();
+
+ // we keep step to use in after simulation, for last call
+ lastStep = step;
+ // step is next step, we need previous for export
+ step = step.previous();
// make exports
if (!allExports.isEmpty()) {
control.setText(t("isisfish.message.export.export"));
- File exportDir = SimulationStorage
- .getResultExportDirectory(rootDirectory);
- exportDir.mkdirs();
- ExportHelper.doExport(simulation, exportDir, allExports,
- rootDirectory);
+ SimulationStorage simulation = context.getSimulationStorage();
+ for (ExportContext e : allExports.values()) {
+ try {
+ e.export(simulation, step);
+ } catch (Exception eee) {
+ e.setException(eee);
+ }
+ }
}
}
- /*
- * @see fr.ifremer.isisfish.simulator.SimulationListener#beforeSimulation(fr.ifremer.isisfish.simulator.SimulationContext)
- */
@Override
- public void beforeSimulation(SimulationContext context) {
+ public void afterSimulation(SimulationContext context) {
+ SimulationControl control = context.getSimulationControl();
+
+ // make exports
+ if (!allExports.isEmpty()) {
+ control.setText(t("isisfish.message.export.export"));
+ SimulationStorage simulation = context.getSimulationStorage();
+ for (ExportContext e : allExports.values()) {
+ // on ne met pas les deux exports dans le meme try-catch, au cas ou une seul des deux echouerait
+ try {
+ // un seul des deux est reellement fait
+ // pour les ExportStep
+ e.export(simulation, lastStep);
+ // pour les Export
+ e.export(simulation);
+ } catch (Exception eee) {
+ e.setException(eee);
+ }
+ try {
+ // pour les ExportStep
+ e.exportEnd(simulation);
+ } catch (Exception eee) {
+ e.setException(eee);
+ }
+ // il n'y aura plus d'ecriture dans le fichier on le ferme
+ e.close();
+ }
+
+ long writtenAll = 0;
+ long timeAll = 0;
+ for (ExportContext e : allExports.values()) {
+ String exportName = ExportStorage.getName(e.export);
+ writtenAll += e.bytes;
+ timeAll += e.time;
+ simulation.getInformation().addExportSize(exportName, e.bytes);
+ simulation.getInformation().addExportTime(exportName, e.time);
+ if (e.exception != null) {
+ simulation.getInformation().addExportException(exportName, e.exception);
+ }
+ }
+ simulation.getInformation().addAllExportSize(writtenAll);
+ simulation.getInformation().addAllExportTime(timeAll);
+ }
}
- @Override
- public void stepChange(SimulationContext context, TimeStep step) {
- }
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationListener.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationListener.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationListener.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -49,7 +49,7 @@
* Receive event when simulation change step
*
* @param context
- * @param step
+ * @param step new Step
*/
public void stepChange(SimulationContext context, TimeStep step);
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -38,7 +38,7 @@
import fr.ifremer.isisfish.entities.Observation;
import fr.ifremer.isisfish.entities.Population;
import fr.ifremer.isisfish.entities.Strategy;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis;
@@ -381,14 +381,14 @@
*
* @return exports and observations map
*/
- public Map<Export, Observation> getOptimizationExportsObservations();
+ public Map<ExportInfo, Observation> getOptimizationExportsObservations();
/**
* Set exports and observations map.
*
* @param exportsObservations exports and observations map
*/
- public void setOptimizationExportsObservations(Map<Export, Observation> exportsObservations);
+ public void setOptimizationExportsObservations(Map<ExportInfo, Observation> exportsObservations);
/**
* If this simulation is generated by Optimization, return generation number
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -48,7 +48,7 @@
import fr.ifremer.isisfish.entities.Observation;
import fr.ifremer.isisfish.entities.Population;
import fr.ifremer.isisfish.entities.Strategy;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis;
@@ -990,13 +990,13 @@
}
@Override
- public Map<Export, Observation> getOptimizationExportsObservations() {
+ public Map<ExportInfo, Observation> getOptimizationExportsObservations() {
SimulationParameter param = getParam();
return param.getOptimizationExportsObservations();
}
@Override
- public void setOptimizationExportsObservations(Map<Export, Observation> exportsObservations) {
+ public void setOptimizationExportsObservations(Map<ExportInfo, Observation> exportsObservations) {
SimulationParameter param = getParam();
param.setOptimizationExportsObservations(exportsObservations);
store(param);
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -68,7 +68,7 @@
import fr.ifremer.isisfish.entities.PopulationDAO;
import fr.ifremer.isisfish.entities.Strategy;
import fr.ifremer.isisfish.entities.StrategyDAO;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.ExportHelper;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.rule.Rule;
@@ -163,7 +163,7 @@
* plan la valeur est -1. */
protected Integer simulationPlanNumber;
- /** Export utilisés pour les analyses de sensibilités. */
+ /** ExportInfo utilisés pour les analyses de sensibilités. */
protected List<SensitivityExport> sensitivityExports;
/**
@@ -197,7 +197,7 @@
protected Objective objective;
/** Exports et observations (optimisation). */
- protected Map<Export, Observation> optimizationExportsObservations;
+ protected Map<ExportInfo, Observation> optimizationExportsObservations;
/** If this simulation is generated by Optimization, generation number */
protected Integer optimizationGeneration;
@@ -992,7 +992,7 @@
}
@Override
- public Map<Export, Observation> getOptimizationExportsObservations() {
+ public Map<ExportInfo, Observation> getOptimizationExportsObservations() {
if (optimizationExportsObservations == null) {
// must be sorted for ui (LinkedHashMap)
optimizationExportsObservations = new LinkedHashMap<>();
@@ -1019,7 +1019,7 @@
for (String name : optimizationExportList) {
if (StringUtils.isNotBlank(name)) {
try {
- Export export = ExportStorage.getExport(name).getNewInstance();
+ ExportInfo export = ExportStorage.getExport(name).getNewInstance();
Observation observation = null;
String observationId = propertiesParameters.getProperty(
SimulationParameterPropertiesHelper.
@@ -1055,7 +1055,7 @@
}
@Override
- public void setOptimizationExportsObservations(Map<Export, Observation> optimizationExportsObservations) {
+ public void setOptimizationExportsObservations(Map<ExportInfo, Observation> optimizationExportsObservations) {
this.optimizationExportsObservations = optimizationExportsObservations;
}
@@ -1653,7 +1653,7 @@
result.optimization = optimization;
}
if (optimizationExportsObservations != null) {
- result.optimizationExportsObservations = new LinkedHashMap<Export, Observation>(optimizationExportsObservations);
+ result.optimizationExportsObservations = new LinkedHashMap<ExportInfo, Observation>(optimizationExportsObservations);
}
if (resultEnabled != null) {
result.resultEnabled = new LinkedList<String>(resultEnabled);
@@ -1852,8 +1852,8 @@
String optimizationExportsList = "";
int optimizationExportIndex = 0;
ConvertUtilsBean beanUtils = ConverterUtil.getConverter(null);
- for (Map.Entry<Export, Observation> exportObservationEntry : optimizationExportsObservations.entrySet()) {
- Export export = exportObservationEntry.getKey();
+ for (Map.Entry<ExportInfo, Observation> exportObservationEntry : optimizationExportsObservations.entrySet()) {
+ ExportInfo export = exportObservationEntry.getKey();
optimizationExportsList += ExportStorage.getName(export) + LIST_SEPARATOR;
// add in props observation id export index
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -553,6 +553,9 @@
SimulationStorage simulation = context.getSimulationStorage();
// enregistrement des listeners de resultat
// - ResultStorage
+ // TODO poussin 20141219 ca ne sert plus a rien que le result storage
+ // soit listener avec ResultStorageCSV, donc a supprimer et l'implement
+ // dans ResultStorage de SimulationListener
context.addSimulationListener(simulation.getResultStorage());
// - TODO: mexico xml result
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -25,6 +25,8 @@
* #L%
*/
+import fr.ifremer.isisfish.IsisConfig;
+
import static org.nuiton.i18n.I18n.t;
import java.io.File;
@@ -41,12 +43,19 @@
import fr.ifremer.isisfish.IsisFishRuntimeException;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.entities.Observation;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.simulator.Objective;
import fr.ifremer.isisfish.simulator.Optimization;
import fr.ifremer.isisfish.simulator.OptimizationContextInternal;
import fr.ifremer.isisfish.simulator.SimulationControl;
import fr.ifremer.isisfish.simulator.SimulationParameter;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.zip.GZIPInputStream;
+import org.apache.commons.lang3.StringUtils;
/**
* Permet de generer l'enchainement des simulations d'optimisation.
@@ -179,15 +188,29 @@
List<MatrixND> observations = new ArrayList<>();
// recuperation des exports et observations
- Map<Export, Observation> exportsObservations = sim.getParameter().getOptimizationExportsObservations();
- for (Map.Entry<Export, Observation> exportObservation : exportsObservations.entrySet()) {
- Export export = exportObservation.getKey();
+ Map<ExportInfo, Observation> exportsObservations = sim.getParameter().getOptimizationExportsObservations();
+ for (Map.Entry<ExportInfo, Observation> exportObservation : exportsObservations.entrySet()) {
+ ExportInfo export = exportObservation.getKey();
Observation observation = exportObservation.getValue();
File rootDirectory = sim.getDirectory();
File resultExportDirectory = SimulationStorage.getResultExportDirectory(rootDirectory);
String fullFilename = export.getExportFilename() + export.getExtensionFilename();
File exportFile = new File(resultExportDirectory, fullFilename);
+
+ if (!exportFile.isFile() && !StringUtils.endsWithIgnoreCase(fullFilename, IsisConfig.COMPRESSION_EXTENSION)) {
+ // file doesn't exist, perhaps gzipped version exist, we try with .gz
+ fullFilename += ".gz";
+ exportFile = new File(resultExportDirectory, fullFilename);
+ }
+
+ Reader reader;
+ if (StringUtils.endsWithIgnoreCase(fullFilename, IsisConfig.COMPRESSION_EXTENSION)) {
+ reader = new BufferedReader(new InputStreamReader(
+ new GZIPInputStream(new FileInputStream(exportFile)), IsisConfig.charset));
+ } else {
+ reader = new BufferedReader(new FileReader(exportFile));
+ }
// read matrix file
MatrixND exportMatrix = null;
@@ -198,7 +221,7 @@
exportMatrix = observation.getValue().clone();
// import
- exportMatrix.importCSV(exportFile, new int[] {0, 0});
+ exportMatrix.importCSV(reader, new int[] {0, 0});
}
exports.add(exportMatrix);
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -77,7 +77,7 @@
import fr.ifremer.isisfish.datastore.SimulationPlanStorage;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.datastore.SimulatorStorage;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.mexico.MexicoHelper;
import fr.ifremer.isisfish.rule.Rule;
@@ -831,7 +831,7 @@
}
// copie des export d'optimisation
- for (Export export : param.getOptimizationExportsObservations().keySet()) {
+ for (ExportInfo export : param.getOptimizationExportsObservations().keySet()) {
String name = ExportStorage.getName(export);
if (!param.getExportNames().contains(name)) {
// duplicated code
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -29,7 +29,7 @@
import javax.swing.AbstractListModel;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
/**
* Model pour la liste des instances d'exports.
@@ -40,12 +40,12 @@
* Last update : $Date$
* By : $Author$
*/
-public class ExportListModel extends AbstractListModel<Export> {
+public class ExportListModel extends AbstractListModel<ExportInfo> {
/** serialVersionUID. */
private static final long serialVersionUID = -4070846632975105788L;
- protected List<Export> exports;
+ protected List<ExportInfo> exports;
/**
* Empty constructor.
@@ -59,7 +59,7 @@
*
* @param exports exports
*/
- public ExportListModel(List<Export> exports) {
+ public ExportListModel(List<ExportInfo> exports) {
setExport(exports);
}
@@ -68,7 +68,7 @@
*
* @return the exports
*/
- public List<Export> getExports() {
+ public List<ExportInfo> getExports() {
return exports;
}
@@ -77,7 +77,7 @@
*
* @param exports the exports to set
*/
- public void setExport(List<Export> exports) {
+ public void setExport(List<ExportInfo> exports) {
this.exports = exports;
}
@@ -85,7 +85,7 @@
* @see javax.swing.ListModel#getElementAt(int)
*/
@Override
- public Export getElementAt(int index) {
+ public ExportInfo getElementAt(int index) {
return exports.get(index);
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -32,7 +32,7 @@
import javax.swing.JList;
import fr.ifremer.isisfish.datastore.ExportStorage;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
/**
* Renderer pour la liste des export.
@@ -60,7 +60,7 @@
JLabel c = (JLabel) super.getListCellRendererComponent(list, value,
index, isSelected, cellHasFocus);
- Export export = (Export) value;
+ ExportInfo export = (ExportInfo) value;
c.setText(ExportStorage.getName(export));
try {
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -36,7 +36,7 @@
import javax.swing.JList;
import fr.ifremer.isisfish.datastore.ExportStorage;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.ui.util.TooltipHelper;
/**
@@ -53,14 +53,14 @@
/** serialVersionUID. */
private static final long serialVersionUID = -4070846632975105788L;
- /** Export cache. */
- protected Map<String, Export> exportCache;
+ /** ExportInfo cache. */
+ protected Map<String, ExportInfo> exportCache;
/**
* Empty constructor.
*/
public ExportNameListRenderer() {
- exportCache = new HashMap<String, Export>();
+ exportCache = new HashMap<String, ExportInfo>();
}
/*
@@ -81,7 +81,7 @@
// c'est tres couteux d'avoir une instance
// on les met en cache
try {
- Export export = exportCache.get(exportName);
+ ExportInfo export = exportCache.get(exportName);
if (export == null) {
ExportStorage storage = ExportStorage.getExport(exportName);
export = storage.getNewInstance();
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportObservationTableModel.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportObservationTableModel.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportObservationTableModel.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -31,7 +31,7 @@
import javax.swing.table.AbstractTableModel;
import fr.ifremer.isisfish.entities.Observation;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
public class ExportObservationTableModel extends AbstractTableModel {
@@ -39,10 +39,10 @@
private static final long serialVersionUID = 7555677813473489539L;
/** Optimizations exports and observations. */
- protected Map<Export, Observation> optimizationExportsObservations;
+ protected Map<ExportInfo, Observation> optimizationExportsObservations;
/** Indexed keys list. */
- protected List<Export> keysCache;
+ protected List<ExportInfo> keysCache;
/** Columns names. */
public final static String[] COLUMN_NAMES = {
@@ -54,22 +54,22 @@
}
- public ExportObservationTableModel(Map<Export, Observation> optimizationExportsObservations) {
+ public ExportObservationTableModel(Map<ExportInfo, Observation> optimizationExportsObservations) {
this();
setOptimizationExportsObservations(optimizationExportsObservations);
}
- public void setOptimizationExportsObservations(Map<Export, Observation> optimizationExportsObservations) {
+ public void setOptimizationExportsObservations(Map<ExportInfo, Observation> optimizationExportsObservations) {
this.optimizationExportsObservations = optimizationExportsObservations;
- keysCache = new ArrayList<Export>(optimizationExportsObservations.keySet());
+ keysCache = new ArrayList<ExportInfo>(optimizationExportsObservations.keySet());
fireTableDataChanged();
}
- public Export getExportForRow(int line) {
+ public ExportInfo getExportForRow(int line) {
return keysCache.get(line);
}
- public void deleteExport(Export export) {
+ public void deleteExport(ExportInfo export) {
int index = keysCache.indexOf(export);
keysCache.remove(index);
fireTableRowsDeleted(index, index);
@@ -106,7 +106,7 @@
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
- Export export = keysCache.get(rowIndex);
+ ExportInfo export = keysCache.get(rowIndex);
Object result = export;
if (columnIndex == 1) {
result = optimizationExportsObservations.get(export);
@@ -124,7 +124,7 @@
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
- Export export = getExportForRow(rowIndex);
+ ExportInfo export = getExportForRow(rowIndex);
this.optimizationExportsObservations.put(export, (Observation)aValue);
}
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportTableCellRenderer.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportTableCellRenderer.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ExportTableCellRenderer.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -32,10 +32,10 @@
import javax.swing.table.DefaultTableCellRenderer;
import fr.ifremer.isisfish.entities.Observation;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
/**
- * Export renderer for table.
+ * ExportInfo renderer for table.
*
* @author chatellier
* @version $Revision$
@@ -60,7 +60,7 @@
switch (column) {
case 0:
- Export export = (Export)value;
+ ExportInfo export = (ExportInfo)value;
stringValue = value.getClass().getSimpleName();
tooltip = export.getDescription();
break;
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -23,6 +23,8 @@
package fr.ifremer.isisfish.ui.result;
+import fr.ifremer.isisfish.IsisConfig;
+
import static org.nuiton.i18n.I18n.t;
import java.awt.BorderLayout;
@@ -33,13 +35,13 @@
import java.beans.PropertyVetoException;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileWriter;
import java.io.Writer;
import java.util.List;
import javax.swing.JMenuItem;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.math.matrix.MatrixND;
@@ -56,12 +58,19 @@
import fr.ifremer.isisfish.datastore.StorageException;
import fr.ifremer.isisfish.entities.FisheryRegion;
import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportHelper;
+import fr.ifremer.isisfish.export.ExportInfo;
+import fr.ifremer.isisfish.export.ExportStep;
import fr.ifremer.isisfish.logging.SimulationLoggerUtil;
import fr.ifremer.isisfish.simulator.launcher.SimulationJob;
import fr.ifremer.isisfish.simulator.launcher.SimulationService;
import fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener;
+import fr.ifremer.isisfish.types.TimeStep;
import fr.ifremer.isisfish.ui.CommonHandler;
import fr.ifremer.isisfish.ui.models.common.GenericComboModel;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.util.zip.GZIPOutputStream;
/**
* Handler for result UIs.
@@ -245,23 +254,14 @@
public void actionPerformed(ActionEvent e) {
try {
- File file = FileUtil.getFile(".+\\.csv", t("isisfish.result.export.file"));
- // add csv extension if not set
- if (!file.getName().endsWith(".csv")) {
- file = new File(file.getAbsolutePath() + ".csv");
- }
+ File file = FileUtil.getFile(".+\\.csv(\\.gz)?", t("isisfish.result.export.file"));
if (file != null) {
- Writer out = null;
- try {
- out = new BufferedWriter(new FileWriter(file));
- ExportStorage storage = ExportStorage.getExport(exportName);
- Export export = storage.getNewInstance();
- export.export(simulationStorage, out);
+ // add csv extension if not set
+ if (!file.getName().matches(".+\\.csv(\\.gz)?")) {
+ file = new File(file.getAbsolutePath() + ".csv.gz");
}
- finally {
- IOUtils.closeQuietly(out);
- }
- }
+ ExportHelper.exportToFile(simulationStorage, exportName, file);
+ }
} catch(Exception eee) {
if (log.isWarnEnabled()) {
log.warn("Erreur lors de l'export ", eee);
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -476,6 +476,7 @@
script = SimulationPlanStorage.getSimulationPlan(file.getName(), Location.OFFICIAL);
break;
case Export:
+ case ExportStep:
script = ExportStorage.getExport(file.getName(), Location.OFFICIAL);
break;
case Script:
@@ -503,6 +504,7 @@
script = SimulationPlanStorage.getSimulationPlan(file.getName(), Location.COMMUNITY);
break;
case CommunityExport:
+ case CommunityExportStep:
script = ExportStorage.getExport(file.getName(), Location.COMMUNITY);
break;
case CommunityScript:
@@ -1130,6 +1132,9 @@
Export(
ExportStorage.getExportDirectory(),
ExportStorage.EXPORT_TEMPLATE, true),
+ ExportStep(
+ ExportStorage.getExportDirectory(),
+ ExportStorage.EXPORT_STEP_TEMPLATE, true),
Rule(
RuleStorage.getRuleDirectory(),
RuleStorage.RULE_TEMPLATE, true),
@@ -1159,8 +1164,11 @@
FormuleStorage.FORMULE_TEMPLATE, true),
CommunityExport(
- ExportStorage.getCommunityExportDirectory(),
+ ExportStorage.getCommunityExportDirectory(),
ExportStorage.EXPORT_TEMPLATE),
+ CommunityExportStep(
+ ExportStorage.getCommunityExportDirectory(),
+ ExportStorage.EXPORT_STEP_TEMPLATE),
CommunityObjective(
ObjectiveStorage.getCommunityObjectiveDirectory(),
ObjectiveStorage.OBJECTIVE_TEMPLATE, true),
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2014-12-19 18:40:04 UTC (rev 4166)
@@ -51,6 +51,8 @@
onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunitySimulator)' icon="script.png" />
<JMenuItem id="miNewExport" text="isisfish.script.menu.txtNewExport"
onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityExport)' icon="script.png" />
+ <JMenuItem id="miNewExportStep" text="isisfish.script.menu.txtNewExportStep"
+ onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityExportStep)' icon="script.png" />
<JMenuItem id="miNewRule" text="isisfish.script.menu.txtNewRule"
onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityRule)' icon="script.png" />
<JMenuItem id="miNewSImulationPlan" text="isisfish.script.menu.txtNewSimulationPlan"
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -45,7 +45,7 @@
import fr.ifremer.isisfish.datastore.RegionStorage;
import fr.ifremer.isisfish.entities.FisheryRegion;
import fr.ifremer.isisfish.entities.Observation;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.simulator.Objective;
import fr.ifremer.isisfish.simulator.Optimization;
import fr.ifremer.isisfish.simulator.SimulationParameter;
@@ -286,7 +286,7 @@
}
/**
- * Export model for combo box.
+ * ExportInfo model for combo box.
*
* @return model
*/
@@ -306,14 +306,14 @@
}
/**
- * Export model for combo box.
+ * ExportInfo model for combo box.
*
* @param view view
* @return model
*/
public ExportObservationTableModel getExportObservationTableModel(OptimizationUI view) {
SimulationParameter param = getSimulationParameter(view);
- Map<Export, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations();
+ Map<ExportInfo, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations();
ExportObservationTableModel model = new ExportObservationTableModel(optimizationExportsObservations);
return model;
}
@@ -334,10 +334,10 @@
try {
// create export instance
ExportStorage exportStorage = ExportStorage.getExport(selectedExport);
- Export export = exportStorage.getNewInstance();
+ ExportInfo export = exportStorage.getNewInstance();
// add export instance into parameters
- Map<Export, Observation> optimizationExports = param.getOptimizationExportsObservations();
+ Map<ExportInfo, Observation> optimizationExports = param.getOptimizationExportsObservations();
optimizationExports.put(export, null); // new entry
tableModel.setOptimizationExportsObservations(optimizationExports); // FIXME add fire
param.setOptimizationExportsObservations(optimizationExports);
@@ -355,14 +355,14 @@
public void removeExports(OptimizationUI view) {
// get element
SimulationParameter param = getSimulationParameter(view);
- Map<Export, Observation> optimizationExports = param.getOptimizationExportsObservations();
+ Map<ExportInfo, Observation> optimizationExports = param.getOptimizationExportsObservations();
ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel();
JTable table = view.getExportObservationTable();
int[] rows = table.getSelectedRows();
// reverse order
for (int i = rows.length - 1; i >= 0; i--) {
- Export export = tableModel.getExportForRow(rows[i]);
+ ExportInfo export = tableModel.getExportForRow(rows[i]);
optimizationExports.remove(export);
tableModel.deleteExport(export);
}
@@ -379,7 +379,7 @@
public void clearExports(OptimizationUI view) {
// get elements
SimulationParameter param = getSimulationParameter(view);
- Map<Export, Observation> optimizationExports = param.getOptimizationExportsObservations();
+ Map<ExportInfo, Observation> optimizationExports = param.getOptimizationExportsObservations();
ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel();
// clear
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -75,7 +75,7 @@
import fr.ifremer.isisfish.entities.Population;
import fr.ifremer.isisfish.entities.Species;
import fr.ifremer.isisfish.entities.Strategy;
-import fr.ifremer.isisfish.export.Export;
+import fr.ifremer.isisfish.export.ExportInfo;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.mexico.MexicoHelper;
import fr.ifremer.isisfish.rule.Rule;
@@ -774,7 +774,7 @@
return SensitivityExportStorage.getParameterNames(export);
}
- public void setSensitivityExportParameterValue(Export export,
+ public void setSensitivityExportParameterValue(ExportInfo export,
String paramName, Object value) {
if (value != null) {
try {
Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-19 18:40:04 UTC (rev 4166)
@@ -896,6 +896,7 @@
isisfish.script.menu.txtImport=Import
isisfish.script.menu.txtNewEquationModel=New equation model
isisfish.script.menu.txtNewExport=New export
+isisfish.script.menu.txtNewExportStep=New export per Step
isisfish.script.menu.txtNewObjective=New objective function
isisfish.script.menu.txtNewOptimization=New optimization script
isisfish.script.menu.txtNewRule=New rule
Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-18 12:17:02 UTC (rev 4165)
+++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-19 18:40:04 UTC (rev 4166)
@@ -894,6 +894,7 @@
isisfish.script.menu.txtImport=Importer
isisfish.script.menu.txtNewEquationModel=Nouvelle formule
isisfish.script.menu.txtNewExport=Nouveau script d'export
+isisfish.script.menu.txtNewExportStep=Nouveau script d'export par pas de temps
isisfish.script.menu.txtNewObjective=Nouvelle fonction d'objectif
isisfish.script.menu.txtNewOptimization=Nouveau script d'optimisation
isisfish.script.menu.txtNewRule=Nouvelle règle
Added: trunk/src/main/resources/templates/script/exportStep.ftl
===================================================================
--- trunk/src/main/resources/templates/script/exportStep.ftl (rev 0)
+++ trunk/src/main/resources/templates/script/exportStep.ftl 2014-12-19 18:40:04 UTC (rev 4166)
@@ -0,0 +1,173 @@
+<#--
+ #%L
+ IsisFish
+
+ $Id: export.ftl 4156 2014-12-09 11:27:18Z echatellier $
+ $HeadURL: http://svn.forge.codelutin.com/svn/isis-fish/trunk/src/main/resources/templ… $
+ %%
+ Copyright (C) 2009 - 2014 Ifremer, CodeLutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/gpl-3.0.html>.
+ #L%
+-->
+/*
+ * Copyright (C) ${date?date?string("yyyy")} ${author}
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ */
+
+package exports;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Writer;
+
+import org.nuiton.math.matrix.*;
+
+import scripts.ResultName;
+
+import fr.ifremer.isisfish.util.Doc;
+import fr.ifremer.isisfish.entities.*;
+import fr.ifremer.isisfish.export.ExportStep;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.datastore.ResultStorage;
+
+/**
+ * ${name}.java
+ *
+ * Created: ${date?date?string.long}
+ *
+ * @author ${author} <${email}>
+ * @version $Revision: 4156 $
+ *
+ * Last update: $Date: 2014-12-09 12:27:18 +0100 (mar. 09 déc. 2014) ${date?date?string.long} $
+ * by : $Author: echatellier ${author} $
+ */
+public class ${name} implements ExportStep {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ private static Log log = LogFactory.getLog(${name}.class);
+
+ protected String[] necessaryResult = {
+ // put here all necessary result for this rule
+ // example:
+ // ResultName.MATRIX_BIOMASS,
+ // ResultName.MATRIX_EFFORT_PER_STRATEGY_MET,
+ };
+
+ /**
+ * Necessary results names for export execution.
+ *
+ * @return the necessaryResult name
+ */
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+ /**
+ * Return Export description.
+ *
+ * @return string displayable to the end user
+ */
+ @Override
+ public String getExportFilename() {
+ return "${name}";
+ }
+
+ /**
+ * Return filename used to contains export data.
+ *
+ * @return filename by example "myexport"
+ */
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ /**
+ * Return extension used as filename name extension.
+ *
+ * @return extension by example ".csv"
+ */
+ @Override
+ public String getDescription() {
+ return "TODO export description";
+ }
+
+ /**
+ * Exporte les resultats, cette methode est appellee a la fin de chaque pas
+ * de temps. Elle peut ecrire dans le fichier via le parametre out,
+ * ou collecter les informations et les ecrires a la fin de la simulation
+ * lorsque la methode {@link #export(fr.ifremer.isisfish.datastore.SimulationStorage, java.io.Writer)
+ * est appelee.
+ *
+ * @param simulation la simulation dont on souhaite exporter les resultats
+ * @param step le pas de temps courant de la simulation
+ * @param out la sortie sur lequel il faut ecrire l'export
+ * @throws Exception if export fail
+ */
+ @Override
+ public void export(SimulationStorage simulation, TimeStep step, Writer out)
+ throws Exception {
+ // If your export can be done by step, write your code here.
+ // You can collect data and write result in exportEnd method.
+ // If you need to access database during simulation
+ // you can use: TopiaContext tx = SimulationContext.get().getDB()
+
+ // example:
+ // MatrixND mat = simulation.getResultStorage().getMatrix(step,
+ // ResultName.MATRIX_EFFORT_PER_STRATEGY_MET);
+ // if (mat != null) { // can be null if no result for this step
+ // for (MatrixIterator i = mat.iterator(); i.hasNext();) {
+ // i.next();
+ // Object[] sems = i.getSemanticsCoordinates();
+ // Strategy strategy = (Strategy) sems[0];
+ // Metier metier = (Metier) sems[1];
+ //
+ // double val = i.getValue();
+ // out.write(step.getStep() + strategy.getName() + ";"
+ // + metier.getName() + val + "\n");
+ // }
+ // }
+ }
+
+ /**
+ * Appeler a la fin de l'export
+ *
+ * @param simulation la simulation dont on souhaite exporter les resultats
+ * @param out la sortie sur lequel il faut ecrire l'export
+ * @throws Exception if export fail
+ */
+ public void exportEnd(SimulationStorage simulation, Writer out)
+ throws Exception {
+ // if you need to do something at the end of export, put your code here
+ }
+
+
+}
Copied: trunk/src/test/java/fr/ifremer/isisfish/datastore/ExportStepStorageTest.java (from rev 4158, trunk/src/test/java/fr/ifremer/isisfish/datastore/ExportStorageTest.java)
===================================================================
--- trunk/src/test/java/fr/ifremer/isisfish/datastore/ExportStepStorageTest.java (rev 0)
+++ trunk/src/test/java/fr/ifremer/isisfish/datastore/ExportStepStorageTest.java 2014-12-19 18:40:04 UTC (rev 4166)
@@ -0,0 +1,95 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2014 Ifremer, CodeLutin, Chatellier Eric, Poussin Benjamin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.datastore;
+
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import fr.ifremer.isisfish.AbstractIsisFishTest;
+import fr.ifremer.isisfish.IsisFish;
+import fr.ifremer.isisfish.datastore.CodeSourceStorage.Location;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+
+/**
+ * ExportStorageTest.
+ *
+ * Created: 19 dec. 2014 18:22
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class ExportStepStorageTest extends AbstractIsisFishTest {
+
+ protected Configuration freemarkerConfiguration;
+
+ @Before
+ public void setUp() throws Exception {
+ freemarkerConfiguration = getFreemarkerConfiguration();
+ }
+
+ @Test
+ public void testNewExportWithCompilation() throws Exception {
+
+ String fileName = "TestExport1";
+
+ ExportStorage exportStorage = ExportStorage.createExport(fileName, Location.COMMUNITY);
+
+ // get template
+ Template template = freemarkerConfiguration
+ .getTemplate(ExportStorage.EXPORT_STEP_TEMPLATE);
+
+ // context values
+ Map<String, Object> root = new HashMap<String, Object>();
+ // FIXME what is category ?
+ root.put("category", "");
+ root.put("name", fileName);
+ root.put("date", new Date());
+ root.put("author", IsisFish.config.getUserName());
+ root.put("email", IsisFish.config.getUserMail());
+
+ // process template
+ Writer out = new StringWriter();
+ template.process(root, out);
+ out.flush();
+ exportStorage.setContent(out.toString());
+
+ // 0 = compile success
+ int compileResult = exportStorage.compile(false, null);
+ Assert.assertEquals(0, compileResult);
+ }
+
+}
1
0
r4165 - in trunk/src/main/java/fr/ifremer/isisfish: datastore simulator
by bpoussin@users.forge.codelutin.com 18 Dec '14
by bpoussin@users.forge.codelutin.com 18 Dec '14
18 Dec '14
Author: bpoussin
Date: 2014-12-18 12:17:02 +0000 (Thu, 18 Dec 2014)
New Revision: 4165
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4165
Log:
fixes #1728: Matrix returned by ResultManager must be not modifiable
fixes #1729: Add new method on ResultManager to get matrix for multiple step
Modified:
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultGetter.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -62,7 +62,6 @@
import fr.ifremer.isisfish.simulator.SimulationException;
import fr.ifremer.isisfish.simulator.SimulationPlan;
import fr.ifremer.isisfish.simulator.SimulationResultGetter;
-import fr.ifremer.isisfish.types.Month;
import fr.ifremer.isisfish.types.TimeStep;
/**
@@ -76,7 +75,11 @@
*
* Mise a jour: $Date$
* par : $Author$
+ *
+ * @deprecated {@link ResultStorageCSV} replace this implementation. This class
+ * will be remove in 5.0.0.0
*/
+@Deprecated
public class ResultDatabaseStorage implements SimulationResultGetter, ResultStorage { // ResultDatabaseStorage
/** to use log facility, just put in your code: log.info(\"...\"); */
@@ -867,4 +870,47 @@
// return rules;
// }
+ @Override
+ public MatrixND getMatrix(SimulationContext context, List<TimeStep> steps, String name) {
+ MatrixND result = null;
+ try {
+ result = getMatrix(steps, name, context.getDbResult());
+ } catch (TopiaException eee) {
+ if (log.isWarnEnabled()) {
+ log.warn(t("Can't get result: %1$s", name), eee);
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public MatrixND getMatrix(TimeStep step, Population pop, String name, TopiaContext tx) {
+ String newName = name + " " + pop;
+ return getMatrix(step, newName, tx);
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, Population pop, String name) {
+ String newName = name + " " + pop;
+ return getMatrix(steps, newName, null);
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, Population pop, String name, TopiaContext tx) {
+ String newName = name + " " + pop;
+ return getMatrix(steps, newName, tx);
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, String name) {
+ return getMatrix(steps, name, null);
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, String name, TopiaContext tx) {
+ MatrixND result = getMatrix(name, tx);
+ result = result.getSubMatrix(0, steps.toArray());
+ return result;
+ }
+
} // ResultDatabaseStorage
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -61,7 +61,11 @@
*
* Mise a jour: $Date$
* par : $Author$
+ *
+ * @deprecated {@link ResultStorageCSV} replace this implementation. This class
+ * will be remove in 5.0.0.0
*/
+@Deprecated
public class ResultMappedStorage extends ResultStorageAbstract { // ResultStorage
/** to use log facility, just put in your code: log.info(\"...\"); */
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -108,6 +108,8 @@
*/
public MatrixND getMatrix(TimeStep step, Population pop, String name);
+ public MatrixND getMatrix(TimeStep step, Population pop, String name, TopiaContext tx);
+
public MatrixND getMatrix(TimeStep step, String name);
/**
@@ -122,6 +124,32 @@
public MatrixND getMatrix(TimeStep step, String name, TopiaContext tx);
/**
+ * Retourne la matrice stocke pour des pas de temps
+ * @param steps les pas de temps que l'on souhaite
+ * @param pop la population pour lequelle on souhaite le resultat
+ * @param name le nom des resultats dont on veut la matrice
+ * @return La matrice demandée ou null si aucune matrice ne correspond a
+ * la demande.
+ */
+ public MatrixND getMatrix(List<TimeStep> steps, Population pop, String name);
+
+ public MatrixND getMatrix(List<TimeStep> steps, Population pop, String name, TopiaContext tx);
+
+ public MatrixND getMatrix(List<TimeStep> steps, String name);
+
+ /**
+ * Retourne la matrice stocke pour des pas de temps.
+ *
+ * @param steps les pas de temps que l'on souhaite
+ * @param name le nom des resultats dont on veut la matrice
+ * @param tx TopiaContext a utiliser pour recuperer les resultats et donc les semantiques
+ * @return La matrice demandée ou {@code null} si aucune matrice ne correspond a
+ * la demande.
+ */
+ public MatrixND getMatrix(List<TimeStep> steps, String name, TopiaContext tx);
+
+
+ /**
* Retourne une matrice contenant tous les pas de temps.
* @param pop la population pour lequel on souhaite la matrice
* @param name le nom des resultats dont on veut une matrice globale.
@@ -150,6 +178,7 @@
*/
public MatrixND getMatrix(String name, TopiaContext tx);
+
/**
* Get last simulation date.
*
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -235,6 +235,7 @@
* result storage type
* @return
*/
+ @Override
public String getInfo() {
return getClass().getSimpleName() + " No more information";
}
@@ -477,6 +478,7 @@
* @return La matrice demandée ou null si aucune matrice ne correspond a
* la demande.
*/
+ @Override
public MatrixND getMatrix(TimeStep step, Population pop, String name, TopiaContext tx) {
String newName = name + " " + pop;
return getMatrix(step, newName, tx);
@@ -491,10 +493,15 @@
* Retourne une matrice contenant tous les pas de temps.
*
* @param name le nom des resultats dont on veut une matrice globale.
+ * @return copy of result matrix
*/
@Override
public MatrixND getMatrix(TimeStep step, String name, TopiaContext tx) {
MatrixND mat = readResult(step, name);
+ if (mat != null) {
+ mat = mat.copy();
+ }
+
mat = decorate(mat, tx);
return mat;
}
@@ -532,6 +539,7 @@
/**
* Retourne une matrice contenant tous les pas de temps.
* @param name le nom des resultats dont on veut une matrice globale.
+ * @return new Matrix
*/
@Override
public MatrixND getMatrix(String name, TopiaContext tx) {
@@ -547,6 +555,30 @@
steps.add(step);
}
+ MatrixND result = getMatrix(steps, name, tx);
+ return result;
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, Population pop, String name) {
+ String newName = name + " " + pop;
+ return getMatrix(steps, newName, null);
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, Population pop, String name, TopiaContext tx) {
+ String newName = name + " " + pop;
+ return getMatrix(steps, newName, tx);
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, String name) {
+ return getMatrix(steps, name, null);
+ }
+
+ @Override
+ public MatrixND getMatrix(List<TimeStep> steps, String name, TopiaContext tx) {
+ log.debug("Get result: " + name);
// collect de toutes les matrices existantes
Map<TimeStep, MatrixND> results = new LinkedHashMap<TimeStep, MatrixND>();
@@ -650,6 +682,18 @@
}
+ public MatrixND getMatrix(SimulationContext context, List<TimeStep> steps, String name) {
+ MatrixND result = null;
+ try {
+ result = getMatrix(steps, name, context.getDB());
+ } catch (TopiaException eee) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Can't get result: %1$s", name), eee);
+ }
+ }
+ return result;
+ }
+
/*
* @see fr.ifremer.isisfish.simulator.SimulationResultGetter#getMatrix(fr.ifremer.isisfish.simulator.SimulationContext, java.lang.String)
*/
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -28,7 +28,6 @@
import fr.ifremer.isisfish.simulator.SimulationContext;
import fr.ifremer.isisfish.simulator.SimulationControl;
import fr.ifremer.isisfish.types.TimeStep;
-import fr.ifremer.isisfish.util.ConverterUtil;
import fr.ifremer.isisfish.util.SimpleParser;
import java.io.BufferedWriter;
import java.io.File;
@@ -37,7 +36,6 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
-import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -53,8 +53,9 @@
* Mise a jour: $Date$
* par : $Author$
*
- * @deprecated ResultStorageCSV now support no storage and in memory usage, will be removed in version 4.4
+ * @deprecated ResultStorageCSV now support no storage and in memory usage, will be removed in version 5.0.0.0
*/
+@Deprecated
public class ResultStorageInMemory extends ResultStorageAbstract {
/** to use log facility, just put in your code: log.info(\"...\"); */
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -242,6 +242,13 @@
return getMatrix(step, name);
}
+ /**
+ * Retourne la matrice stocke pour un pas de temps
+ * @param step le pas de temps que l'on souhaite
+ * @param name le nom des resultats dont on veut la matrice
+ * @return La matrice demandée ou null si aucune matrice ne correspond a
+ * la demande.
+ */
public MatrixND getMatrix(TimeStep step, String name){
MatrixND result = null;
if (getter != null) {
@@ -249,7 +256,36 @@
}
return result;
}
-
+
+ /**
+ * Retourne la matrice stocke pour des pas de temps
+ * @param steps les pas de temps que l'on souhaite
+ * @param pop la population pour lequelle on souhaite le resultat
+ * @param name le nom des resultats dont on veut la matrice
+ * @return La matrice demandée ou null si aucune matrice ne correspond a
+ * la demande.
+ */
+ public MatrixND getMatrix(List<TimeStep> steps, Population pop, String name){
+ name += " " + pop;
+ return getMatrix(steps, name);
+ }
+
+ /**
+ * Retourne la matrice stocke pour des pas de temps
+ * @param steps les pas de temps que l'on souhaite
+ * @param name le nom des resultats dont on veut la matrice
+ * @return La matrice demandée ou null si aucune matrice ne correspond a
+ * la demande.
+ */
+ public MatrixND getMatrix(List<TimeStep> steps, String name){
+ MatrixND result = null;
+ if (getter != null) {
+ result = getter.getMatrix(context, steps, name);
+ }
+ return result;
+ }
+
+
/**
* Retourne une matrice contenant tous les pas de temps.
* @param pop la population pour lequel on souhaite la matrice
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultGetter.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultGetter.java 2014-12-18 11:19:15 UTC (rev 4164)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultGetter.java 2014-12-18 12:17:02 UTC (rev 4165)
@@ -28,6 +28,7 @@
import org.nuiton.math.matrix.MatrixND;
import fr.ifremer.isisfish.types.TimeStep;
+import java.util.List;
/**
* Some SimulationResultListener can implement this interface to show that can
@@ -39,14 +40,24 @@
/**
* Retourne la matrice stocke pour un pas de temps.
- *
+ *
* @param step le pas de temps que l'on souhaite
* @param name le nom des resultats dont on veut la matrice
* @return La matrice demandée ou null si aucune matrice ne correspond a
* la demande.
*/
public MatrixND getMatrix(SimulationContext context, TimeStep step, String name);
-
+
+ /**
+ * Retourne la matrice stocke pour un ensemble de pas de temps.
+ *
+ * @param steps les pas de temps que l'on souhaite
+ * @param name le nom des resultats dont on veut la matrice
+ * @return La matrice demandée ou null si aucune matrice ne correspond a
+ * la demande.
+ */
+ public MatrixND getMatrix(SimulationContext context, List<TimeStep> steps, String name);
+
/**
* Retourne une matrice contenant tous les pas de temps.
*
1
0
r4164 - in trunk/src/main/java/fr/ifremer/isisfish: datastore export util
by bpoussin@users.forge.codelutin.com 18 Dec '14
by bpoussin@users.forge.codelutin.com 18 Dec '14
18 Dec '14
Author: bpoussin
Date: 2014-12-18 11:19:15 +0000 (Thu, 18 Dec 2014)
New Revision: 4164
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4164
Log:
fixes #6341: Am?\195?\169liorer l'affichage des informations d'une simulation
Modified:
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java
trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java
trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnGuava.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java 2014-12-17 15:35:57 UTC (rev 4163)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageCSV.java 2014-12-18 11:19:15 UTC (rev 4164)
@@ -28,6 +28,7 @@
import fr.ifremer.isisfish.simulator.SimulationContext;
import fr.ifremer.isisfish.simulator.SimulationControl;
import fr.ifremer.isisfish.types.TimeStep;
+import fr.ifremer.isisfish.util.ConverterUtil;
import fr.ifremer.isisfish.util.SimpleParser;
import java.io.BufferedWriter;
import java.io.File;
@@ -36,6 +37,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
+import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
@@ -51,11 +53,13 @@
import java.util.zip.GZIPOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.CountingOutputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.math.matrix.MatrixIterator;
import org.nuiton.math.matrix.MatrixND;
+import org.nuiton.util.StringUtil;
/**
* Ecrit les resultats dans des fichiers au format pseudo csv compresse (gz)
@@ -124,6 +128,8 @@
protected int numberOfResultReadInCache = 0;
/** le nombre de resultat lu sur le disque */
protected int numberOfResultReadOnDisk = 0;
+ /** le nombre d'octet ecris sur le disque */
+ protected long bytesWritten = 0;
/**
* le plus vieux pas de temps demande par rapport au pas de temps courant
* lu sur le disque
@@ -156,10 +162,10 @@
return String.format(
"ResultStorageCSV:\n"
- + "\t%s results written to disk on a total of %s\n"
+ + "\t%s results written to disk on a total of %s (for %s)\n"
+ "\t%s results read (%s in cache and %s on disk)\n"
+ "%s",
- numberOfResultOnDisk, numberOfResult,
+ numberOfResultOnDisk, numberOfResult, StringUtil.convertMemory(bytesWritten),
numberOfResultAsked, numberOfResultReadInCache, numberOfResultReadOnDisk,
oldest);
}
@@ -340,28 +346,6 @@
return result;
}
-// @Override
-// protected Map<TimeStep, MatrixND> readResult(String name) {
-// File dir = getMatrixDirectory(name);
-// String[] files = dir.list();
-//
-// Map<TimeStep, MatrixND> result = new HashMap<TimeStep, MatrixND>();
-// for(String file : files) {
-// try {
-// TimeStep step = getTimeStep(file);
-// if (step != null) {
-// MatrixND mat = readResult(step, name);
-// if (mat != null) {
-// result.put(step, mat);
-// }
-// }
-// } catch (Exception eee) {
-// log.error("Can't read result file: " + file, eee);
-// }
-// }
-// return result;
-// }
-
/**
* Indique s'il faut sauver sur disque les resultats
* @param step
@@ -403,9 +387,10 @@
File file = getMatrixFile(step, name);
file.getParentFile().mkdirs();
PrintWriter out = null;
+ CountingOutputStream counter = null;
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
- new GZIPOutputStream(new FileOutputStream(file)),
+ new GZIPOutputStream(counter = new CountingOutputStream(new FileOutputStream(file))),
charset
)));
@@ -448,6 +433,9 @@
throw new IsisFishRuntimeException("Can't write result: " + file, eee);
} finally {
IOUtils.closeQuietly(out);
+ if (counter != null) {
+ this.bytesWritten += counter.getByteCount();
+ }
}
}
}
@@ -471,4 +459,8 @@
return result;
}
+ public long getBytesWritten() {
+ return bytesWritten;
+ }
+
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-12-17 15:35:57 UTC (rev 4163)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-12-18 11:19:15 UTC (rev 4164)
@@ -38,15 +38,18 @@
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import java.util.TreeMap;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.StringUtil;
/**
* Cette classe permet de conserver des informations sur le deroulement d'une
@@ -68,6 +71,7 @@
private static final String START_SIMULATION = "simulationStart";
private static final String END_SIMULATION = "simulationEnd";
private static final String EXPORT_TIME = "exportTime";
+ private static final String EXPORT_SIZE = "exportSize";
private static final String RULE_TIME = "ruleTime";
private static final String RULE_TIME_INIT = RULE_TIME + ".init";
private static final String RULE_TIME_PRE = RULE_TIME + ".pre";
@@ -117,13 +121,21 @@
String result = "Simulation Information:\n";
// date start/end
- result += "Start: " + dateFormat.format(getSimulationStart())
- + " End: " + dateFormat.format(getSimulationEnd()) + "\n";
+ Date start = getSimulationStart();
+ Date end = getSimulationEnd();
+ result += "Duration: " + StringUtil.convertTime(start.getTime()*1000000, end.getTime()*1000000)
+ + " Start: " + dateFormat.format(start)
+ + " End: " + dateFormat.format(end) + "\n";
+
+ result += "\n";
+
// exports
Map<String, Long> exportTime = getExportTimes();
if (exportTime.size() > 0) {
- result += "Export time:\n";
+ result += "Export time: " +
+ DurationFormatUtils.formatDuration(getAllExportTime(),
+ "s'.'S") + "s\n";
for (Map.Entry<String, Long> entry : exportTime.entrySet()) {
result += "\t"
+ entry.getKey()
@@ -133,6 +145,18 @@
}
}
+ // exports
+ Map<String, Long> exportSize = getExportSizes();
+ if (exportSize.size() > 0) {
+ result += "Export size: " + StringUtil.convertMemory(getAllExportSize()) + "\n";
+ for (Map.Entry<String, Long> entry : exportSize.entrySet()) {
+ result += "\t"
+ + entry.getKey()
+ + " : "
+ + StringUtil.convertMemory(entry.getValue()) + "\n";
+ }
+ }
+
// rules
Set<String> ruleNames = getRuleNames();
if (ruleNames.size() > 0) {
@@ -279,37 +303,51 @@
setInfo(EXPORT_TIME + "." + exportName, String.valueOf(time));
}
+ public void addExportSize(String exportName, long size) {
+ setInfo(EXPORT_SIZE + "." + exportName, String.valueOf(size));
+ }
+
+ public void addAllExportTime(long time) {
+ setInfo(EXPORT_TIME, String.valueOf(time));
+ }
+
+ public void addAllExportSize(long size) {
+ setInfo(EXPORT_SIZE, String.valueOf(size));
+ }
+
/**
* Get all export time in map.
*
* @return a map with all export time
*/
protected Map<String, Long> getExportTimes() {
- Map<String, Long> result = new HashMap<String, Long>();
+ Map<String, Long> result = new TreeMap<String, Long>();
for (String key : info.stringPropertyNames()) {
if (key.startsWith(EXPORT_TIME + ".")) {
String exportName = key.substring(EXPORT_TIME.length() + 1);
- String t = info.getProperty(key);
- Long value = null;
- if (t != null) {
- try {
- value = Long.valueOf(t);
- } catch (NumberFormatException eee) {
- if (log.isWarnEnabled()) {
- log.warn(t("isisfish.error.parse.long", t), eee);
- }
- }
- }
- if (value == null) {
- value = Long.valueOf(0);
- }
- result.put(exportName, value);
+ result.put(exportName, getExportTime(exportName));
}
}
return result;
}
/**
+ * Get all export size in map.
+ *
+ * @return a map with all export size
+ */
+ protected Map<String, Long> getExportSizes() {
+ Map<String, Long> result = new TreeMap<String, Long>();
+ for (String key : info.stringPropertyNames()) {
+ if (key.startsWith(EXPORT_SIZE + ".")) {
+ String exportName = key.substring(EXPORT_SIZE.length() + 1);
+ result.put(exportName, getExportSize(exportName));
+ }
+ }
+ return result;
+ }
+
+ /**
* Get all export time in map.
*
* @return a map with all export time
@@ -319,8 +357,8 @@
return getExportTimes();
}
- public long getExportTime(String exportName) {
- String t = info.getProperty(EXPORT_TIME + "." + exportName);
+ protected long getLong(String prop) {
+ String t = info.getProperty(prop);
long result = 0;
if (t != null) {
try {
@@ -332,8 +370,33 @@
}
}
return result;
+
}
+ public long getExportTime(String exportName) {
+ String prop = EXPORT_TIME;
+ if (StringUtils.isNotEmpty(exportName)) {
+ prop += "." + exportName;
+ }
+ return getLong(prop);
+ }
+
+ public long getExportSize(String exportName) {
+ String prop = EXPORT_SIZE;
+ if (StringUtils.isNotEmpty(exportName)) {
+ prop += "." + exportName;
+ }
+ return getLong(prop);
+ }
+
+ public long getAllExportTime() {
+ return getExportTime(null);
+ }
+
+ public long getAllExportSize() {
+ return getExportSize(null);
+ }
+
/**
* Add rule time.
*
@@ -548,6 +611,6 @@
* @param info new info
*/
public void addInformation(String info) {
- setInfo(OTHER_INFO, getInformation() + info + "\n");
+ setInfo(OTHER_INFO, getInformation() + info + "\n\n");
}
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-17 15:35:57 UTC (rev 4163)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-18 11:19:15 UTC (rev 4164)
@@ -46,6 +46,7 @@
import java.util.Properties;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.CountingOutputStream;
import org.apache.commons.lang3.StringUtils;
@@ -83,22 +84,27 @@
// on ne compte plus ici les temps d'instanciations
// deplacer dans SimulationExportResultWrapper#afterSimulation(SimulationContext)
-
+
+ long writtenAll = 0;
long timeStart = System.currentTimeMillis();
for (Export export : exports) {
String exportName = ExportStorage.getName(export);
+ long written = 0;
long time = System.currentTimeMillis();
try {
- exportToFile(simulation, destdir, export);
+ written = exportToFile(simulation, destdir, export);
+ writtenAll += written;
} catch (Exception eee) {
if (log.isWarnEnabled()) {
log.warn("Can't export object: " + exportName, eee);
}
}
+ simulation.getInformation().addExportSize(exportName, written);
simulation.getInformation().addExportTime(exportName,
System.currentTimeMillis() - time);
}
- simulation.getInformation().addExportTime("All export",
+ simulation.getInformation().addAllExportSize(writtenAll);
+ simulation.getInformation().addAllExportTime(
System.currentTimeMillis() - timeStart);
}
@@ -108,10 +114,14 @@
* @param simulation la simulation pour lequel il faut faire les exports
* @param destdir le repertoire dans lequel il faut ecrire les exports
* @param export le nom des exports a faire
+ *
+ * @return number of byte written on disk
+ *
* @throws Exception si une erreur survient
*/
- protected static void exportToFile(SimulationStorage simulation,
+ protected static long exportToFile(SimulationStorage simulation,
File destdir, Export export) throws Exception {
+ long result = 0;
String filename = export.getExportFilename();
String extension = export.getExtensionFilename();
@@ -131,9 +141,11 @@
}
Writer out = null;
+ CountingOutputStream counter = null;
try {
OutputStream os = new FileOutputStream(file);
+ os = counter = new CountingOutputStream(os);
// if compression is needed by extension, add compression writer
if (StringUtils.endsWithIgnoreCase(extension, COMPRESSION_EXTENSION)) {
@@ -146,7 +158,11 @@
export.export(simulation, out);
} finally {
IOUtils.closeQuietly(out);
+ if (counter != null) {
+ result = counter.getByteCount();
+ }
}
+ return result;
}
/**
Modified: trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnGuava.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnGuava.java 2014-12-17 15:35:57 UTC (rev 4163)
+++ trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnGuava.java 2014-12-18 11:19:15 UTC (rev 4164)
@@ -299,7 +299,7 @@
StringUtil.convertMemory(biggestStepCached + 500 * 1024 *1024));
}
String result = String.format("%s - \n%s"
- + "\tmaxMemory: %s, cacheMemory: %s, totalCached: %s, numberStep: %s, numberEntries: %s\n"
+ + "\tinitial cache size: %s, cache size reevaluated: %s, totalCached: %s, numberStep: %s, numberEntries: %s\n"
+ "\tStep min: %s, max: %s, mean: %s, standard deviation: %s\n"
+ "\tEntry min: %s, max: %s, mean: %s, standard deviation: %s\n",
trick,
1
0
r4163 - in trunk/src/main: java/fr/ifremer/isisfish/simulator resources/i18n
by bpoussin@users.forge.codelutin.com 17 Dec '14
by bpoussin@users.forge.codelutin.com 17 Dec '14
17 Dec '14
Author: bpoussin
Date: 2014-12-17 15:35:57 +0000 (Wed, 17 Dec 2014)
New Revision: 4163
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4163
Log:
add generation and individual info in parameter for optimization
Modified:
trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java
trunk/src/main/resources/i18n/isis-fish_en_GB.properties
trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java 2014-12-17 15:35:57 UTC (rev 4163)
@@ -2,11 +2,16 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.math.matrix.MatrixFactory;
+import org.nuiton.math.matrix.MatrixIterator;
+import org.nuiton.math.matrix.MatrixND;
/**
* Useful class to stock some double value for simulation, and export all
@@ -23,29 +28,85 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(Historic.class);
- Map<String, Experience> experiences = new LinkedHashMap<String, Experience>();
+
+ protected String id;
+ protected Map<Integer, Experience> experiences = new LinkedHashMap<Integer, Experience>();
+
+ public Historic(String id) {
+ this.id = id;
+ }
+
public Experience get(SimulationStorage sim) {
- Experience result = experiences.get(sim.getName());
+ int simNumber = sim.getParameter().getSimulationPlanNumber();
+ Experience result = experiences.get(simNumber);
if (result == null) {
result = new Experience();
- experiences.put(sim.getName(), result);
+ experiences.put(simNumber, result);
+ result.set("SimulationNumnber", simNumber);
+ result.set("Generation", sim.getParameter().getOptimizationGeneration());
+ result.set("Individual", sim.getParameter().getOptimizationGenerationIndividual());
}
return result;
}
+ public MatrixND toMatrix(String ... fieldNames) {
+ List semVar = new ArrayList();
+ semVar.add("Generation");
+ semVar.add("Individual");
+ for (String f : fieldNames) {
+ semVar.add(f);
+ }
+
+ List semExp = new ArrayList();
+ for (Experience e : experiences.values()) {
+ semExp.add(e.get("SimulationNumnber"));
+ }
+
+ List[] sems = new List[2];
+ sems[0] = semExp;
+ sems[1] = semVar;
+
+ String[] dimNames = new String[]{"Experience", "Variables"};
+
+ MatrixND result = MatrixFactory.getInstance().create(id, sems, dimNames);
+
+ for (MatrixIterator i = result.iterator(); i.hasNext();) {
+ i.next();
+ Object[] s = i.getSemanticsCoordinates();
+ Object exp = s[0];
+ String var = (String)s[1];
+
+ Double v = experiences.get(exp).get(var);
+ if (v != null) {
+ i.setValue(v);
+ }
+ }
+
+ return result;
+ }
+
public String toCSV(String ... fieldNames) {
StringBuilder result = new StringBuilder();
String sep = ";";
- result.append("simulation");
+ result.append("SimulationNumber");
+ result.append(sep);
+ result.append("Generation");
+ result.append(sep);
+ result.append("Individual");
for (String field: fieldNames) {
result.append(sep).append(field);
}
- for (Map.Entry<String, Experience> e: experiences.entrySet()) {
+ for (Map.Entry<Integer, Experience> e: experiences.entrySet()) {
+ Experience exp = e.getValue();
result.append(e.getKey());
- Experience exp = e.getValue();
+ result.append(sep);
+ result.append(exp.get("Generation"));
+ result.append(sep);
+ result.append(exp.get("Individual"));
+
for (String field : fieldNames) {
result.append(sep);
Double value = exp.get(field);
@@ -60,7 +121,7 @@
return result.toString();
}
- private static class Experience {
+ public static class Experience {
Map<String, Double> values = new HashMap<String, Double>();
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java 2014-12-17 15:35:57 UTC (rev 4163)
@@ -100,7 +100,10 @@
String simId = id + "_" + number;
SimulationParameter childParam = param.copy();
childParam.setSimulationPlanNumber(number);
+ childParam.setOptimizationGeneration(generations.size());
+ childParam.setOptimizationGenerationIndividual(nextSimulations.size());
SimulationStorage result = SimulationStorage.importAndRenameZip(job.getItem().getSimulationZip(), simId);
+ result.setParameter(childParam);
incNumber();
addSimulation(result);
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-12-17 15:35:57 UTC (rev 4163)
@@ -391,6 +391,26 @@
public void setOptimizationExportsObservations(Map<Export, Observation> exportsObservations);
/**
+ * If this simulation is generated by Optimization, return generation number
+ */
+ public int getOptimizationGeneration();
+
+ /**
+ * If this simulation is generated by Optimization, set generation number
+ */
+ public void setOptimizationGeneration(int optimizationGeneration);
+
+ /**
+ * If this simulation is generated by Optimization, return individual number in generation
+ */
+ public int getOptimizationGenerationIndividual();
+
+ /**
+ * If this simulation is generated by Optimization, set individual number in generation
+ */
+ public void setOptimizationGenerationIndividual(int optimizationGenerationIndividual);
+
+ /**
* Get use simulation plans property.
*
* @return use simulation plan.
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-12-17 15:35:57 UTC (rev 4163)
@@ -516,6 +516,38 @@
}
@Override
+ public int getOptimizationGeneration() {
+ SimulationParameter param = getParam();
+ return param.getOptimizationGeneration();
+ }
+
+ /*
+ * @see fr.ifremer.isisfish.simulator.SimulationParameter#setSimulationPlanNumber(int)
+ */
+ @Override
+ public void setOptimizationGeneration(int optimizationGeneration) {
+ SimulationParameter param = getParam();
+ param.setOptimizationGeneration(optimizationGeneration);
+ store(param);
+ }
+
+ @Override
+ public int getOptimizationGenerationIndividual() {
+ SimulationParameter param = getParam();
+ return param.getOptimizationGenerationIndividual();
+ }
+
+ /*
+ * @see fr.ifremer.isisfish.simulator.SimulationParameter#setSimulationPlanNumber(int)
+ */
+ @Override
+ public void setOptimizationGenerationIndividual(int optimizationGenerationIndividual) {
+ SimulationParameter param = getParam();
+ param.setOptimizationGenerationIndividual(optimizationGenerationIndividual);
+ store(param);
+ }
+
+ @Override
public boolean isSensitivityAnalysisOnlyKeepFirst() {
SimulationParameter param = getParam();
return param.isSensitivityAnalysisOnlyKeepFirst();
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-12-17 15:35:57 UTC (rev 4163)
@@ -199,6 +199,12 @@
/** Exports et observations (optimisation). */
protected Map<Export, Observation> optimizationExportsObservations;
+ /** If this simulation is generated by Optimization, generation number */
+ protected Integer optimizationGeneration;
+
+ /** If this simulation is generated by Optimization, individual number in generation */
+ protected Integer optimizationGenerationIndividual;
+
/** La liste des resultats qui nous interesse. */
protected Collection<String> resultEnabled;
@@ -1104,7 +1110,60 @@
this.simulationPlanNumber = simulationPlanNumber;
}
+ /**
+ * If this simulation is generated by Optimization, return generation number
+ */
@Override
+ public int getOptimizationGeneration() {
+
+ if (optimizationGeneration == null) {
+
+ if (propertiesParameters != null) {
+ optimizationGeneration = SimulationParameterPropertiesHelper.getOptimizationGeneration(propertiesParameters);
+ } else {
+ optimizationGeneration = -1;
+ }
+ }
+
+ return optimizationGeneration;
+ }
+
+ /**
+ * If this simulation is generated by Optimization, set generation number
+ */
+ @Override
+ public void setOptimizationGeneration(int optimizationGeneration) {
+ this.optimizationGeneration = optimizationGeneration;
+ }
+
+ /**
+ * If this simulation is generated by Optimization, return individual number in generation
+ */
+ @Override
+ public int getOptimizationGenerationIndividual() {
+
+ if (optimizationGenerationIndividual == null) {
+
+ if (propertiesParameters != null) {
+ optimizationGenerationIndividual = SimulationParameterPropertiesHelper.getOptimizationGenerationIndividual(propertiesParameters);
+ } else {
+ optimizationGenerationIndividual = -1;
+ }
+ }
+
+ return optimizationGenerationIndividual;
+ }
+
+ /**
+ * If this simulation is generated by Optimization, set individual number in generation
+ */
+ @Override
+ public void setOptimizationGenerationIndividual(int optimizationGenerationIndividual) {
+ this.optimizationGenerationIndividual = optimizationGenerationIndividual;
+ }
+
+
+ @Override
public boolean isSensitivityAnalysisOnlyKeepFirst() {
if (sensitivityAnalysisOnlyKeepFirst == null) {
@@ -1569,6 +1628,8 @@
result.generatedPreScript = getGeneratedPreScript();
result.useSimulationPlan = getUseSimulationPlan();
result.simulationPlanNumber = getSimulationPlanNumber();
+ result.optimizationGeneration = getOptimizationGeneration();
+ result.optimizationGenerationIndividual = getOptimizationGenerationIndividual();
if (exportNames != null) {
result.exportNames = new LinkedList<String>(exportNames);
}
@@ -1895,6 +1956,10 @@
String.valueOf(getSimulationPlanNumber()));
result.setProperty(SimulationParameterPropertiesHelper.USE_OPTIMIZATION_KEY,
String.valueOf(getUseOptimization()));
+ result.setProperty(SimulationParameterPropertiesHelper.OPTIMIZATION_GENERATION_KEY,
+ String.valueOf(getOptimizationGeneration()));
+ result.setProperty(SimulationParameterPropertiesHelper.OPTIMIZATION_GENERATION_INDIVIDUAL_KEY,
+ String.valueOf(getOptimizationGenerationIndividual()));
String resultList = StringUtils.join(getResultEnabled(),
SimulationParameterPropertiesHelper.LIST_SEPARATOR);
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java 2014-12-17 15:35:57 UTC (rev 4163)
@@ -72,6 +72,8 @@
final public static String SIMULATION_PLAN_NUMBER_KEY = "simulationPlanNumber";
final public static String USE_OPTIMIZATION_KEY = "useOptimization";
final public static String OPTIMIZATION_KEY = "optimization";
+ final public static String OPTIMIZATION_GENERATION_KEY = "optimizationGeneration";
+ final public static String OPTIMIZATION_GENERATION_INDIVIDUAL_KEY = "optimizationGenerationIndividual";
final public static String OBJECTIVE_KEY = "objective";
final public static String OPTIMIZATION_EXPORTS_KEY = "optimizationexports";
final public static String OPTIMIZATION_OBSERVATION_KEY = "optimizationobservation";
@@ -122,7 +124,17 @@
return result;
}
- public static boolean getUseCache(Properties prop) {
+ public static int getOptimizationGeneration(Properties prop) {
+ int result = Integer.valueOf(prop.getProperty(OPTIMIZATION_GENERATION_KEY, "-1"));
+ return result;
+ }
+
+ public static int getOptimizationGenerationIndividual(Properties prop) {
+ int result = Integer.valueOf(prop.getProperty(OPTIMIZATION_GENERATION_INDIVIDUAL_KEY, "-1"));
+ return result;
+ }
+
+ public static boolean getUseCache(Properties prop) {
boolean result;
if (VersionUtil.smallerThan(getIsisFishVersion(prop), "4.3.0.0")) {
result = Boolean.valueOf(prop.getProperty(USE_OPTIMIZATION_KEY, "true"));
@@ -429,6 +441,12 @@
result.append(t("isisfish.params.toString.use.optimization",
useOptimization));
+ result.append(" ").append(t("isisfish.params.toString.optimization.generation",
+ getOptimizationGeneration(prop)));
+ result.append(" ").append(t("isisfish.params.toString.optimization.generation.individual",
+ getOptimizationGenerationIndividual(prop)));
+ result.append("\n");
+
String objective = getObjectiveName(prop);
if (StringUtils.isNotBlank(objective)) {
result.append(t("isisfish.params.toString.objective", objective));
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java 2014-12-17 15:35:57 UTC (rev 4163)
@@ -52,7 +52,7 @@
/** Simulation parameters. */
protected SimulationParameter param;
- protected Historic historic = new Historic();
+ protected Historic historic;
/** Additional context values. */
protected Map<String, Object> values = new HashMap<String, Object>();
@@ -60,6 +60,7 @@
public SimulationPlanContextInternal(String id, SimulationParameter param) {
this.id = id;
this.param = param;
+ this.historic = new Historic(id);
}
/**
Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-17 15:35:57 UTC (rev 4163)
@@ -701,6 +701,8 @@
isisfish.params.toString.number.years=Number of years\: %1$s
isisfish.params.toString.objective=Objective function \: %s
isisfish.params.toString.optimization=Optimization methode \: %s
+isisfish.params.toString.optimization.generation=Generation\: %s
+isisfish.params.toString.optimization.generation.individual=Individual\: %s
isisfish.params.toString.optimizationExport=Optimization export \: %s
isisfish.params.toString.optimizationObservation=Optimization observation \: %s
isisfish.params.toString.plan=Plan\: %1$s
Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-16 15:50:21 UTC (rev 4162)
+++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-17 15:35:57 UTC (rev 4163)
@@ -699,6 +699,8 @@
isisfish.params.toString.number.months=Nombre de mois \: %s
isisfish.params.toString.objective=Fonction d'objectif \: %s
isisfish.params.toString.optimization=Méthode d'optimisation \: %s
+isisfish.params.toString.optimization.generation=Génération\: %s
+isisfish.params.toString.optimization.generation.individual=Individu\: %s
isisfish.params.toString.optimizationExport=Export d'optimisation \: %s
isisfish.params.toString.optimizationObservation=Observation d'optimisation \: %s
isisfish.params.toString.plan=Plan\: %s
1
0
Author: bpoussin
Date: 2014-12-16 15:50:21 +0000 (Tue, 16 Dec 2014)
New Revision: 4162
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4162
Log:
add translation for export.force.compression
Modified:
trunk/src/main/resources/i18n/isis-fish_en_GB.properties
trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-16 15:38:15 UTC (rev 4161)
+++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-16 15:50:21 UTC (rev 4162)
@@ -177,6 +177,7 @@
isisfish.config.category.simulation=Simulations
isisfish.config.category.simulation.description=Simulation execution configuration
isisfish.config.database.lockmode.description=Database lock mode
+isisfish.config.export.force.compression.description=Force compression of all export result (.gz)
isisfish.config.main.compileDirectory.description=Script compilation directory
isisfish.config.main.configFileName.description=Configuration filename
isisfish.config.main.defaultBackupDirectory.description=Backup directory
@@ -720,7 +721,7 @@
isisfish.population.capturability=Capturability
isisfish.population.comments=Comments
isisfish.population.group=Group
-isisfish.population.groups=Groups
+isisfish.population.groups=
isisfish.population.mappingZoneReproZoneRecru=MappingZoneReproZoneRecru
isisfish.population.matrixAbundance=Abundance matrix
isisfish.population.matrixAbundance1D=matrixAbundance1D
@@ -760,20 +761,20 @@
isisfish.populationGroup.naturalDeathRate=Natural death rate
isisfish.populationGroup.price=Price
isisfish.populationGroup.reproductionRate=Reproduction rate
-isisfish.populationGroup.title=Groups
+isisfish.populationGroup.title=
isisfish.populationGroup.toString=%1$s Group %2$s
isisfish.populationMigration.comments=Comments
isisfish.populationMigration.selectSeason=Select a season
isisfish.populationMigration.title=Migration
isisfish.populationMigration.useEquation=Use equation
-isisfish.populationMigrationEmigration.coefficient=Coefficient
+isisfish.populationMigrationEmigration.coefficient=
isisfish.populationMigrationEmigration.departureZone=Departure Zone
isisfish.populationMigrationEmigration.title=Population emigration
isisfish.populationMigrationImmigration.arrivalZone=Arrival Zone
-isisfish.populationMigrationImmigration.coefficient=Coefficient
+isisfish.populationMigrationImmigration.coefficient=
isisfish.populationMigrationImmigration.title=Population immigration
isisfish.populationMigrationMigration.arrivalZone=Arrival zone
-isisfish.populationMigrationMigration.coefficient=Coefficient
+isisfish.populationMigrationMigration.coefficient=
isisfish.populationMigrationMigration.departureZone=Departure zone
isisfish.populationMigrationMigration.title=Population migration
isisfish.populationPrice.title=Price
Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-16 15:38:15 UTC (rev 4161)
+++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-16 15:50:21 UTC (rev 4162)
@@ -177,6 +177,7 @@
isisfish.config.category.simulation=Simulations
isisfish.config.category.simulation.description=Configuration des simulations
isisfish.config.database.lockmode.description=Méthode de vérouillage à utiliser pour la base de données
+isisfish.config.export.force.compression.description=Force la compression de tous les exports de resultats (format .gz)
isisfish.config.main.compileDirectory.description=le répertoire où sont compilés les scripts
isisfish.config.main.configFileName.description=le fichier de configuration à utiliser
isisfish.config.main.defaultBackupDirectory.description=le répertoire où stocker les backups des données
@@ -764,14 +765,14 @@
isisfish.populationMigration.selectSeason=Sélectionnez une saison
isisfish.populationMigration.title=Migration
isisfish.populationMigration.useEquation=Utiliser l'équation
-isisfish.populationMigrationEmigration.coefficient=Coefficient
+isisfish.populationMigrationEmigration.coefficient=
isisfish.populationMigrationEmigration.departureZone=Zone de départ
isisfish.populationMigrationEmigration.title=Emmigration
isisfish.populationMigrationImmigration.arrivalZone=Zone d'arrivée
-isisfish.populationMigrationImmigration.coefficient=Coefficient
+isisfish.populationMigrationImmigration.coefficient=
isisfish.populationMigrationImmigration.title=Immigration
isisfish.populationMigrationMigration.arrivalZone=Zone d'arrivée
-isisfish.populationMigrationMigration.coefficient=Coefficient
+isisfish.populationMigrationMigration.coefficient=
isisfish.populationMigrationMigration.departureZone=Zone de départ
isisfish.populationMigrationMigration.title=Migration de population
isisfish.populationPrice.title=Prix
1
0
r4161 - in trunk/src/main/java/fr/ifremer/isisfish: . export ui
by bpoussin@users.forge.codelutin.com 16 Dec '14
by bpoussin@users.forge.codelutin.com 16 Dec '14
16 Dec '14
Author: bpoussin
Date: 2014-12-16 15:38:15 +0000 (Tue, 16 Dec 2014)
New Revision: 4161
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4161
Log:
add possibility to force export result compression (.gz)
Modified:
trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java
trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-12-16 09:48:40 UTC (rev 4160)
+++ trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-12-16 15:38:15 UTC (rev 4161)
@@ -761,6 +761,18 @@
return result;
}
+ /**
+ * Force la compression des fichiers d'export
+ *
+ * @return
+ * @since 4.4.0.0
+ */
+ public boolean getExportForceCompression() {
+ ApplicationConfig config = SimulationContext.get().getConfig();
+ boolean result = config.getOptionAsBoolean(Option.EXPORT_FORCE_COMPRESSION.key);
+ return result;
+ }
+
public void setDefaultExportNames(List<String> exportNames) {
StringBuilder sb = new StringBuilder();
for (String exportName : exportNames) {
@@ -875,6 +887,9 @@
result.put(Option.CACHE_BACKEND_FACTORY_CLASS.key,
getOption(Option.CACHE_BACKEND_FACTORY_CLASS.key));
+ result.put(Option.EXPORT_FORCE_COMPRESSION.key,
+ getOption(Option.EXPORT_FORCE_COMPRESSION.key));
+
return result;
}
@@ -1098,6 +1113,7 @@
JAVADOC_DIRECTORY("javadoc.directory", n("isisfish.config.main.javadocDirectory.description"), "${isis.home.directory}" + File.separator + "isis-docs"),
BACKUP_DIRECTORY("backup.directory", n("isisfish.config.main.defaultBackupDirectory.description"), "${isis.home.directory}" + File.separator + "isis-backup"),
+ EXPORT_FORCE_COMPRESSION("export.force.compression", n("isisfish.config.export.force.compression.description"), "false"),
DEFAULT_EXPORT_NAMES("default.export.names", n("isisfish.config.main.defaultExportNames.description"), ""),
DEFAULT_RESULT_NAMES("default.result.names", n("isisfish.config.main.defaultResultNames.description"), ""),
DEFAULT_MAP_FILENAME("default.map.filename", n("isisfish.config.main.defaultMapFile.description"), "maps/vmap_area_thin.shp"),
Modified: trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-16 09:48:40 UTC (rev 4160)
+++ trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-16 15:38:15 UTC (rev 4161)
@@ -25,14 +25,11 @@
package fr.ifremer.isisfish.export;
+import fr.ifremer.isisfish.IsisFish;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileWriter;
import java.io.Writer;
import java.util.List;
-import java.util.Properties;
-
-import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.TopiaContext;
@@ -41,7 +38,17 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.datastore.StorageHelper;
import fr.ifremer.isisfish.simulator.SimulationParameterPropertiesHelper;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.nio.charset.Charset;
+import java.util.Properties;
+import java.util.zip.GZIPOutputStream;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+
/**
* Helper for exports manipulation.
*
@@ -58,6 +65,11 @@
/** Class logger. */
private static Log log = LogFactory.getLog(ExportHelper.class);
+ static final private String COMPRESSION_EXTENSION = ".gz";
+ // IDEA: perhaps add this in simulation configuration to permit easy portable
+ // export between CapArmor and Windows world
+ static final private Charset charset = Charset.forName("UTF-8");
+
/**
* Permet de faire les exports pour une simulation.
*
@@ -100,9 +112,15 @@
*/
protected static void exportToFile(SimulationStorage simulation,
File destdir, Export export) throws Exception {
+
String filename = export.getExportFilename();
String extension = export.getExtensionFilename();
+ if (!StringUtils.endsWithIgnoreCase(extension, COMPRESSION_EXTENSION)
+ && IsisFish.config.getExportForceCompression()) {
+ extension += COMPRESSION_EXTENSION;
+ }
+
File file = new File(destdir, filename + extension);
// prevent two export with same name
// name MyExport.csv become MyExport_1.csv
@@ -114,7 +132,17 @@
Writer out = null;
try {
- out = new BufferedWriter(new FileWriter(file));
+
+ OutputStream os = new FileOutputStream(file);
+
+ // if compression is needed by extension, add compression writer
+ if (StringUtils.endsWithIgnoreCase(extension, COMPRESSION_EXTENSION)) {
+ os = new GZIPOutputStream(os);
+ }
+
+ out = new PrintWriter(new BufferedWriter(
+ new OutputStreamWriter(os, charset)));
+
export.export(simulation, out);
} finally {
IOUtils.closeQuietly(out);
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2014-12-16 09:48:40 UTC (rev 4160)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2014-12-16 15:38:15 UTC (rev 4161)
@@ -232,6 +232,7 @@
modelBuilder.addOption(IsisConfig.Option.MAPPED_RESULT_MATRIX_VECTOR_CLASS);
modelBuilder.addOption(IsisConfig.Option.SIMULATION_STORE_RESULT_ON_DISK);
modelBuilder.addOption(IsisConfig.Option.SIMULATION_STORE_RESULT_CACHE_STEP);
+ modelBuilder.addOption(IsisConfig.Option.EXPORT_FORCE_COMPRESSION);
// category database vcs
modelBuilder.addCategory(t("isisfish.config.category.officialvcs"), t("isisfish.config.category.officialvcs.description"));
1
0
r4160 - trunk/src/main/java/fr/ifremer/isisfish/simulator
by bpoussin@users.forge.codelutin.com 16 Dec '14
by bpoussin@users.forge.codelutin.com 16 Dec '14
16 Dec '14
Author: bpoussin
Date: 2014-12-16 09:48:40 +0000 (Tue, 16 Dec 2014)
New Revision: 4160
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4160
Log:
we must use interface for users classes
Modified:
trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java 2014-12-16 08:58:42 UTC (rev 4159)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java 2014-12-16 09:48:40 UTC (rev 4160)
@@ -59,5 +59,5 @@
* @param observations observations
* @return double value
*/
- double eval(OptimizationContextInternal context, List<MatrixND> exports, List<MatrixND> observations);
+ double eval(OptimizationContext context, List<MatrixND> exports, List<MatrixND> observations);
}
1
0
r4159 - trunk/src/main/java/fr/ifremer/isisfish/simulator
by bpoussin@users.forge.codelutin.com 16 Dec '14
by bpoussin@users.forge.codelutin.com 16 Dec '14
16 Dec '14
Author: bpoussin
Date: 2014-12-16 08:58:42 +0000 (Tue, 16 Dec 2014)
New Revision: 4159
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4159
Log:
we must use interface in users class
Modified:
trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlan.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java 2014-12-15 15:30:39 UTC (rev 4158)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java 2014-12-16 08:58:42 UTC (rev 4159)
@@ -53,7 +53,7 @@
*
* @param context
*/
- void init(OptimizationContextInternal context) throws Exception;
+ void init(OptimizationContext context) throws Exception;
/**
* La premiere generation doit etre construite dans cette methode
@@ -61,14 +61,14 @@
*
* @param context
*/
- void firstSimulation(OptimizationContextInternal context) throws Exception;
+ void firstSimulation(OptimizationContext context) throws Exception;
/**
* Génère une nouvelle série de simulation suivant le context d'optimisation.
*
* @param context context
*/
- void nextSimulation(OptimizationContextInternal context) throws Exception;
+ void nextSimulation(OptimizationContext context) throws Exception;
/**
* Cette methode est appelee après chaque serie de simulation soit apres firstSimulation et
@@ -76,12 +76,12 @@
*
* @param context
*/
- void endSimulation(OptimizationContextInternal context) throws Exception;
+ void endSimulation(OptimizationContext context) throws Exception;
/**
* Cette methode est appelee lorsqu'il n'y a plus de simulation a faire
* (init ou nextSimulation n'ont pas fait appel a context.addSimulation)
* @param context
*/
- void finish(OptimizationContextInternal context) throws Exception;
+ void finish(OptimizationContext context) throws Exception;
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlan.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlan.java 2014-12-15 15:30:39 UTC (rev 4158)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlan.java 2014-12-16 08:58:42 UTC (rev 4159)
@@ -63,7 +63,7 @@
* @param context plan context
* @throws Exception
*/
- public void init(SimulationPlanContextInternal context) throws Exception;
+ public void init(SimulationPlanContext context) throws Exception;
/**
* Call before each simulation.
@@ -73,7 +73,7 @@
* @return true if we must do next simulation, false to stop plan
* @throws Exception
*/
- public boolean beforeSimulation(SimulationPlanContextInternal context,
+ public boolean beforeSimulation(SimulationPlanContext context,
SimulationStorage nextSimulation) throws Exception;
/**
@@ -84,7 +84,7 @@
* @return true if we must do next simulation, false to stop plan
* @throws Exception
*/
- public boolean afterSimulation(SimulationPlanContextInternal context,
+ public boolean afterSimulation(SimulationPlanContext context,
SimulationStorage lastSimulation) throws Exception;
}
1
0