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
r4421 - in trunk: doc src/main/java/fr/ifremer/isisfish src/main/java/fr/ifremer/isisfish/simulator/launcher src/main/java/fr/ifremer/isisfish/ui/config src/main/resources/i18n src/test/java/fr/ifremer/isisfish/simulator/launcher
by echatellier@users.forge.codelutin.com 12 Sep '17
by echatellier@users.forge.codelutin.com 12 Sep '17
12 Sep '17
Author: echatellier
Date: 2017-09-12 12:28:35 +0200 (Tue, 12 Sep 2017)
New Revision: 4421
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4421
Log:
fixes #9363: Add datarmor simulation launcher
Modified:
trunk/doc/SimulationSSH.rst
trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulatorLauncher.java
trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java
trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx
trunk/src/main/resources/i18n/isis-fish_en_GB.properties
trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java
Modified: trunk/doc/SimulationSSH.rst
===================================================================
--- trunk/doc/SimulationSSH.rst 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/doc/SimulationSSH.rst 2017-09-12 10:28:35 UTC (rev 4421)
@@ -6,7 +6,7 @@
Il faut configurer les paramètres :
ssh.key.file=/home/username/.ssh/id_rsa
- simulation.ssh.server=caparmor.ifremer.fr\:22
+ simulation.ssh.server=datarmor.ifremer.fr\:22
simulation.ssh.username=username
simulation.ssh.datapath=/home/username/isis-database-3
simulation.ssh.addscripttoqueuecommand=/usr/pbs/bin/qsub
Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2017-09-12 10:28:35 UTC (rev 4421)
@@ -137,7 +137,7 @@
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
+ // export between datarmor and Windows world
public static final Charset charset = Charset.forName("UTF-8");
public static final String COMPRESSION_EXTENSION = ".gz";
@@ -216,7 +216,7 @@
IsisConfig.databaseVersion = Versions.extractVersion(IsisConfig.version, 0, 1);
IsisConfig.apiVersion = Versions.extractVersion(IsisConfig.version, 0, 2);
- setDefaultOption(Option.SIMULATOR_SSH_ISIS_HOME.key, "/home3/caparmor/poussin/isis-fish-" + apiVersion.toString());
+ setDefaultOption(Option.SIMULATOR_SSH_ISIS_HOME.key, "/home3/datahome/echatell/isis-fish-" + apiVersion.toString());
}
//////////////////////////////////////////////////
@@ -554,25 +554,6 @@
public void setSimulatorSshTmpPath(String sshtemppath) {
setOption(Option.SIMULATOR_SSH_TMPPATH.key, sshtemppath);
}
-
- /**
- * PBS bin path directory.
- *
- * @return path
- */
- public String getSimulatorSshPbsBinPath() {
- String result = getOption(Option.SIMULATOR_SSH_PBSBINPATH.key);
- return result;
- }
-
- /**
- * Change PBS bin path.
- *
- * @param path new path
- */
- public void setSimulatorSshPbsBinPath(String path) {
- setOption(Option.SIMULATOR_SSH_PBSBINPATH.key, path);
- }
/**
* PBS qsub options (command line).
@@ -1130,7 +1111,7 @@
/** prevu pour l'architecture de lancement en plugin: local, isis-server, caparmor, ... */
SIMULATOR_LAUNCHER(SimulationService.SIMULATION_LAUNCHER + ".3", n("isisfish.config.main.localSimulator.description"), InProcessSimulatorLauncher.class.getName()),
SIMULATOR_LAUNCHER2(SimulationService.SIMULATION_LAUNCHER + ".1", n("isisfish.config.main.subSimulator.description"), SubProcessSimulationLauncher.class.getName()),
- SIMULATOR_LAUNCHER_REMOTE(SimulationService.SIMULATION_LAUNCHER + ".2", n("isisfish.config.main.remoteCaparmor.description"), SSHSimulatorLauncher.class.getName()),
+ SIMULATOR_LAUNCHER_REMOTE(SimulationService.SIMULATION_LAUNCHER + ".2", n("isisfish.config.main.remoteDatarmor.description"), SSHSimulatorLauncher.class.getName()),
// pour les simulations
@@ -1150,31 +1131,29 @@
SIMULATOR_SUB_MAXMEMORY("simulation.sub.max.memory", n("isisfish.config.main.simulation.sub.max.memory.description"), "1024M"),
/** Serveur accessible par ssh : address */
- SIMULATOR_SSH_SERVER("simulation.ssh.server", n("isisfish.config.main.simulation.ssh.server.description"), "caparmor-sftp"),
+ SIMULATOR_SSH_SERVER("simulation.ssh2.server", n("isisfish.config.main.simulation.ssh.server.description"), "datarmor"),
/** Serveur accessible par ssh : login */
- SIMULATOR_SSH_USER_NAME("simulation.ssh.username", n("isisfish.config.main.simulation.ssh.username.description"), ""),
+ SIMULATOR_SSH_USER_NAME("simulation.ssh2.username", n("isisfish.config.main.simulation.ssh.username.description"), ""),
/** Serveur accessible par ssh : user home directory */
- SIMULATOR_SSH_USER_HOME("simulation.ssh.userhome", n("isisfish.config.main.simulation.ssh.userhome.description"), ""),
+ SIMULATOR_SSH_USER_HOME("simulation.ssh2.userhome", n("isisfish.config.main.simulation.ssh.userhome.description"), ""),
/** Serveur accessible par ssh : remote data path */
- SIMULATOR_SSH_DATAPATH("simulation.ssh.datapath", n("isisfish.config.main.simulation.ssh.datapath.description"), "isis-fish-4/isis-database"),
+ SIMULATOR_SSH_DATAPATH("simulation.ssh2.datapath", n("isisfish.config.main.simulation.ssh.datapath.description"), "isis-fish-4/isis-database"),
/** Serveur accessible par ssh : remote isis home install */
- SIMULATOR_SSH_ISIS_HOME("simulation.ssh.isis.home", n("isisfish.config.main.simulation.ssh.isis.home.description"), null),
+ SIMULATOR_SSH_ISIS_HOME("simulation.ssh2.isis.home", n("isisfish.config.main.simulation.ssh.isis.home.description"), null),
/** Serveur accessible par ssh : remote tmp path */
- SIMULATOR_SSH_TMPPATH("simulation.ssh.tmppath", n("isisfish.config.main.simulation.ssh.tmppath.description"), "isis-tmp"),
+ SIMULATOR_SSH_TMPPATH("simulation.ssh2.tmppath", n("isisfish.config.main.simulation.ssh.tmppath.description"), "isis-tmp"),
/** Serveur accessible par SSH : emplacement de Java (full path) */
- SIMULATOR_SSH_JAVAPATH("simulation.ssh.javapath430", n("isisfish.config.main.simulation.ssh.javapath.description"), "/home3/caparmor/poussin/jdk7/bin/java"),
- /** Serveur accessible par SSH : emplacement des executables pbs */
- SIMULATOR_SSH_PBSBINPATH("simulation.ssh.pbsbinpath", n("isisfish.config.main.simulation.ssh.pbsbinpath.description"), "/usr/pbs/bin"),
+ SIMULATOR_SSH_JAVAPATH("simulation.ssh2.javapath431", n("isisfish.config.main.simulation.ssh.javapath.description"), "/home3/datahome/echatell/jdk8/bin/java"),
/** Serveur accessible par SSH : option de l'executable qsub (defaut to -m n = no mail) */
- SIMULATOR_SSH_PBSQSUBOPTIONS("simulation.ssh.pbsqsuboptions", n("isisfish.config.main.simulation.ssh.pbsqsuboptions.description"), "-m n"),
+ SIMULATOR_SSH_PBSQSUBOPTIONS("simulation.ssh2.pbsqsuboptions", n("isisfish.config.main.simulation.ssh.pbsqsuboptions.description"), "-m n -l mem=2GB -l walltime=01:00:00"),
/** Serveur accessible par SSH : interval de check du fichier de control */
- SIMULATOR_SSH_CONTROLCHECKINTERVAL("simulation.ssh.control.check.interval", n("isisfish.config.main.simulation.ssh.control.check.interval.description"), "120"),
+ SIMULATOR_SSH_CONTROLCHECKINTERVAL("simulation.ssh2.control.check.interval", n("isisfish.config.main.simulation.ssh.control.check.interval.description"), "120"),
/** Serveur accessible par SSH : nombre de thread au maximum a utilise simultanement */
- SIMULATOR_SSH_MAXTHREADS("simulation.ssh.max.threads", n("isisfish.config.main.simulation.ssh.max.threads.description"), "1"),
- /** Serveur accessible par SSH : mémoire (Xmx) allouée pour les process java sur caparmor */
- SIMULATOR_SSH_MAXMEMORY("simulation.ssh.max.memory", n("isisfish.config.main.simulation.ssh.max.memory.description"), "2000M"),
+ SIMULATOR_SSH_MAXTHREADS("simulation.ssh2.max.threads", n("isisfish.config.main.simulation.ssh.max.threads.description"), "1"),
+ /** Serveur accessible par SSH : mémoire (Xmx) allouée pour les process java sur datarmor */
+ SIMULATOR_SSH_MAXMEMORY("simulation.ssh2.max.memory", n("isisfish.config.main.simulation.ssh.max.memory.description"), "2000M"),
/** Serveur accessible par SSH : la proxy commande a ajouter pour ouvrir la connexion. */
- SIMULATOR_SSH_PROXYCOMMAND("simulation.ssh.proxy.command", n("isisfish.config.main.simulation.ssh.proxy.command.description"), null),
+ SIMULATOR_SSH_PROXYCOMMAND("simulation.ssh2.proxy.command", n("isisfish.config.main.simulation.ssh.proxy.command.description"), null),
/** Application locale (for i18n init). */
LOCALE("locale", n("isisfish.config.main.locale.description"), "fr_FR"),
@@ -1194,7 +1173,7 @@
/** Database lock mode (h2).*/
DATABASE_LOCK_MODE("database.lockmode", n("isisfish.config.database.lockmode.description"), "file"),
- // SSH (global, for both VCS and caparmor)
+ // SSH (global, for both VCS and datarmor)
SSH_KEY_FILE("ssh.key.file", n("isisfish.config.ssh.key.file.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"),
DATABASE_DIRECTORY("database.directory", n("isisfish.config.vcs.localDatabasePath.description"), "${isis.home.directory}" + File.separator + "isis-database"),
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2017-09-12 10:28:35 UTC (rev 4421)
@@ -75,7 +75,7 @@
*
* Isis-Fish must be installed on remote server.
*
- * Caparmor file layout ($i = plan/as increment) :
+ * Datarmor file layout ($i = plan/as increment) :
* <ul>
* <li>$ISIS-TMP/simulation-$id-preparation.zip</li>
* <li>$ISIS-TMP/simulation-$id-prescript.bsh</li>
@@ -864,7 +864,7 @@
}
/**
- * Remove all {@code $ISIS-TMP/simulation-$id-*} files on caparmor.
+ * Remove all {@code $ISIS-TMP/simulation-$id-*} files on datarmor.
*
* @param session valid opened ssh session
* @param control simulation control
@@ -1126,7 +1126,7 @@
// command to :
// - add script in qsub queue
String remoteFilenameId = getRemoteTempDirectory() + "simulation-" + simulationId + "-pbs.id";
- String command = IsisFish.config.getSimulatorSshPbsBinPath() + "/qsub";
+ String command = "qsub";
// add qsub options
String qsubOptions = IsisFish.config.getSimulatorSshPbsQsubOptions();
@@ -1173,7 +1173,7 @@
// command to :
String remoteFilenameId = getRemoteTempDirectory() + "simulation-" + simulationId + "-pbs.id";
- String command = IsisFish.config.getSimulatorSshPbsBinPath() + "/qdel `cat \"" + remoteFilenameId + "\"`";
+ String command = "qdel `cat \"" + remoteFilenameId + "\"`";
// and delete simulation
//command += " && rm -rf \"" + IsisFish.config.getSimulatorSshDataPath() + "/simulations/" + simulationId + "\"";
@@ -1193,7 +1193,7 @@
/**
* Get remote directory absolute path.
*
- * Don't use {@link java.io.File#separator} here, caparmor is always unix.
+ * Don't use {@link java.io.File#separator} here, datarmor is always unix.
*
* @return remote temp directory path
*/
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2017-09-12 10:28:35 UTC (rev 4421)
@@ -222,7 +222,7 @@
SimulationJob subjob = i.next();
subjob.setLauncher(getLauncher());
// c'est bloquant seulement le temps du lancement
- // (envoie sur caparmor par exemple)
+ // (envoie sur datarmor par exemple)
// l'appel peut ensuite passer alors que la simulation
// n'a pas effectivement demarré
subjob.run();
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2017-09-12 10:28:35 UTC (rev 4421)
@@ -676,7 +676,7 @@
// il faut bien penser a supprimer le launcher pour qu'un autre executor
// puisse y mettre le sien.
// FIXME: est ce le bon choix si l'utilisateur avait force un launcher particulier, ne faudrait t'il pas prevenir l'utilisateur ?
- // FIXME: disabled since caparmor is not our friend. Retry on caparmor in the limit of 50 errors
+ // FIXME: disabled since datarmor is not our friend. Retry on datarmor in the limit of 50 errors
//job.setLauncher(null);
try {
// not resubmit immediatly, wait some time (max 10 min and about 4,2 hours in total)
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulatorLauncher.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulatorLauncher.java 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulatorLauncher.java 2017-09-12 10:28:35 UTC (rev 4421)
@@ -32,7 +32,7 @@
/**
* Interface devant etre implantée par les classes souhaitants etre utilisees
- * comme plugin de simulation (InProcess, SubProcess, CapArmor, ...)
+ * comme plugin de simulation (InProcess, SubProcess, Datarmor, ...)
*
* @author poussin
* @version $Revision$
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java 2017-09-12 10:28:35 UTC (rev 4421)
@@ -77,7 +77,6 @@
protected String currentSSHIsisHome;
protected String currentSSHTempPath;
protected String currentSSHJavaPath;
- protected String currentSSHPbsBinPath;
protected String currentSSHPbsQsubOptions;
protected String currentSSHMaxThreads;
protected String currentSSHMaxMemory;
@@ -112,7 +111,6 @@
configUI.getSshIsisHomeField().setText(IsisFish.config.getSimulatorSshIsisHome());
configUI.getSshTemppathField().setText(IsisFish.config.getSimulatorSshTmpPath());
configUI.getSshJavaPathField().setText(IsisFish.config.getSimulatorSshJavaPath());
- configUI.getSshPbsBinPathField().setText(IsisFish.config.getSimulatorSshPbsBinPath());
configUI.getSshPbsQsubOptionsField().setText(IsisFish.config.getSimulatorSshPbsQsubOptions());
configUI.getSshControlIntervalField().setText(String.valueOf(IsisFish.config.getSimulatorSshControlCheckInterval()));
configUI.getSshMaxThreadsField().setText(String.valueOf(IsisFish.config.getSimulatorSshMaxThreads()));
@@ -197,14 +195,6 @@
setColor(false, configUI.getSshJavaPathField());
}
- currentSSHPbsBinPath = configUI.getSshPbsBinPathField().getText()
- .trim();
- if (currentSSHPbsBinPath.isEmpty()) {
- setColor(true, configUI.getSshPbsBinPathField());
- } else {
- setColor(false, configUI.getSshPbsBinPathField());
- }
-
// currentSSHPbsQsubOptions
currentSSHPbsQsubOptions = configUI.getSshPbsQsubOptionsField().getText().trim();
@@ -243,7 +233,6 @@
IsisFish.config.setSimulatorSshIsisHome(currentSSHIsisHome);
IsisFish.config.setSimulatorSshTmpPath(currentSSHTempPath);
IsisFish.config.setSimulatorSshJavaPath(currentSSHJavaPath);
- IsisFish.config.setSimulatorSshPbsBinPath(currentSSHPbsBinPath);
IsisFish.config.setSimulatorSshPbsQsubOptions(currentSSHPbsQsubOptions);
IsisFish.config.setSimulatorSshControlCheckInterval(Integer.parseInt(currentSSHControlInterval));
IsisFish.config.setSimulatorSshMaxThreads(Integer.parseInt(currentSSHMaxThreads));
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2017-09-12 10:28:35 UTC (rev 4421)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2009 - 2014 Ifremer, CodeLutin
+ Copyright (C) 2009 - 2017 Ifremer, CodeLutin
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -128,17 +128,6 @@
</row>
<row fill='horizontal'>
<cell>
- <JLabel id='sshPbsBinPathLabel' text='isisfish.config.main.simulation.ssh.pbsbinpath'
- toolTipText='isisfish.config.main.simulation.ssh.pbsbinpath.description' />
- </cell>
- <cell>
- <JTextField id='sshPbsBinPathField'
- toolTipText='isisfish.config.main.simulation.ssh.pbsbinpath.description'
- onKeyReleased="handler.doCheck()" />
- </cell>
- </row>
- <row fill='horizontal'>
- <cell>
<JLabel id='sshPbsQsubOptionsLabel' text='isisfish.config.main.simulation.ssh.pbsqsuboptions'
toolTipText='isisfish.config.main.simulation.ssh.pbsqsuboptions.description' />
</cell>
Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2017-09-12 10:28:35 UTC (rev 4421)
@@ -202,7 +202,7 @@
isisfish.config.main.performcron.description=Perform all task registered in cron service
isisfish.config.main.performmigration.description=Perform data migration
isisfish.config.main.performvcsupdate.description=Perform vcs update
-isisfish.config.main.remoteCaparmor.description=Remote simulator launcher name
+isisfish.config.main.remoteDatarmor.description=Remote simulator launcher name
isisfish.config.main.script.autoconfig.description=Display a dialog to force script configuration
isisfish.config.main.simulation.in.max.threads.description=Max threads count in current process
isisfish.config.main.simulation.ssh.control.check.interval=Control check interval (seconds)
@@ -212,7 +212,7 @@
isisfish.config.main.simulation.ssh.isis.home=ISIS-Fish home
isisfish.config.main.simulation.ssh.isis.home.description=ISIS-Fish installation directory
isisfish.config.main.simulation.ssh.javapath=Java path
-isisfish.config.main.simulation.ssh.javapath.description=Java location on remote server (full path or relative to $PATH, by default value is caparmor configuration)
+isisfish.config.main.simulation.ssh.javapath.description=Java location on remote server (full path or relative to $PATH, by default value is datarmor configuration)
isisfish.config.main.simulation.ssh.max.memory=Ssh simulation Xmx allocated memory
isisfish.config.main.simulation.ssh.max.memory.description=Ssh simulation Xmx allocated memory
isisfish.config.main.simulation.ssh.max.threads=SSH threads count
@@ -931,7 +931,7 @@
isisfish.simulation.message.analyzeResults=Results analysis
isisfish.simulation.message.lookingforlast=Looking for last simulation
isisfish.simulation.message.scriptscompilation=Rules and scripts compilation
-isisfish.simulation.remote.message.connection=Connecting to Caparmor
+isisfish.simulation.remote.message.connection=Connecting to Datarmor
isisfish.simulation.remote.message.deletingfiles=Deleting simulation files
isisfish.simulation.remote.message.downloadresults=Downloading results
isisfish.simulation.remote.message.upload=Uploading simulation
@@ -952,7 +952,7 @@
isisfish.simulator.configuration.r.testok=R successfully tested \!
isisfish.simulator.configuration.r.title=R Configuration
isisfish.simulator.launcher.inprocess=in current process
-isisfish.simulator.launcher.remote=on Caparmor server
+isisfish.simulator.launcher.remote=on Datarmor server
isisfish.simulator.launcher.subprocess=in subprocess
isisfish.simulator.simulaction.badid=Can't start simulation, bad id\: %s
isisfish.simulator.ssh.configuration.connecting=Connection...
@@ -960,7 +960,7 @@
isisfish.simulator.ssh.configuration.connection=Connection information
isisfish.simulator.ssh.configuration.connectionerror=Can't connect
isisfish.simulator.ssh.configuration.connectionok=Connection successfull
-isisfish.simulator.ssh.configuration.environment=Caparmor configuration
+isisfish.simulator.ssh.configuration.environment=Datarmor configuration
isisfish.simulator.ssh.configuration.freespace=Used space disk \:
isisfish.simulator.ssh.configuration.freespace.confirmdelete=Warning, deleting folder '%s' is irreversible.\nDo you confirm the deletion of contents ?
isisfish.simulator.ssh.configuration.freespace.label=Size of %s \: %s
@@ -968,7 +968,7 @@
isisfish.simulator.ssh.configuration.keygenerate=Generate
isisfish.simulator.ssh.configuration.status=Status
isisfish.simulator.ssh.configuration.test=Test configuration
-isisfish.simulator.ssh.configuration.title=Caparmor launcher configuration
+isisfish.simulator.ssh.configuration.title=Datarmor launcher configuration
isisfish.simulator.subprocess.readoutput.error=
isisfish.species.age=Age
isisfish.species.cee=CEE
@@ -1075,7 +1075,7 @@
isisfish.welcome.menu.close=Close
isisfish.welcome.menu.configuration=Configuration
isisfish.welcome.menu.configuration.r=R configuration
-isisfish.welcome.menu.configuration.sshlauncher=Caparmor configuration
+isisfish.welcome.menu.configuration.sshlauncher=Datarmor configuration
isisfish.welcome.menu.configuration.vcs=VCS configuration
isisfish.welcome.menu.file=File
isisfish.welcome.menu.frame=Window
Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2017-09-12 10:28:35 UTC (rev 4421)
@@ -202,7 +202,7 @@
isisfish.config.main.performcron.description=Démarre toutes les tâches définies dans le service cron
isisfish.config.main.performmigration.description=Migre les données
isisfish.config.main.performvcsupdate.description=Met à jour le dépôt VCS
-isisfish.config.main.remoteCaparmor.description=Nom du lanceur de simulation distante
+isisfish.config.main.remoteDatarmor.description=Nom du lanceur de simulation distante
isisfish.config.main.script.autoconfig.description=Affiche une fenêtre pour forcer la configuration des scripts
isisfish.config.main.simulation.in.max.threads.description=Nombre de thread maximum dans le processus courant
isisfish.config.main.simulation.ssh.control.check.interval=Vérification de la progression (secondes)
@@ -212,7 +212,7 @@
isisfish.config.main.simulation.ssh.isis.home=Installation d'ISIS-Fish
isisfish.config.main.simulation.ssh.isis.home.description=Emplacement d'installation d'ISIS-Fish sur le serveur
isisfish.config.main.simulation.ssh.javapath=Emplacement de java
-isisfish.config.main.simulation.ssh.javapath.description=Emplacement de java sur le serveur (chemin total, ou relatif au $PATH, par défaut la valeur est celle de caparmor)
+isisfish.config.main.simulation.ssh.javapath.description=Emplacement de java sur le serveur (chemin total, ou relatif au $PATH, par défaut la valeur est celle de datarmor)
isisfish.config.main.simulation.ssh.max.memory=Quantité de mémoire allouée
isisfish.config.main.simulation.ssh.max.memory.description=Quantité de mémoire maximum allouée (Xmx)
isisfish.config.main.simulation.ssh.max.threads=Nombre de thread SSH
@@ -931,7 +931,7 @@
isisfish.simulation.message.analyzeResults=Analyse des résultats
isisfish.simulation.message.lookingforlast=Recherche de la dernière simulation
isisfish.simulation.message.scriptscompilation=Compilation des scripts
-isisfish.simulation.remote.message.connection=Connexion à Caparmor
+isisfish.simulation.remote.message.connection=Connexion à Datarmor
isisfish.simulation.remote.message.deletingfiles=Suppression des fichiers de simulation
isisfish.simulation.remote.message.downloadresults=Téléchargement des résultats
isisfish.simulation.remote.message.upload=Upload de la simulation
@@ -952,7 +952,7 @@
isisfish.simulator.configuration.r.testok=R testé avec succès \!
isisfish.simulator.configuration.r.title=Configuration de R
isisfish.simulator.launcher.inprocess=dans le même processus
-isisfish.simulator.launcher.remote=sur le serveur Caparmor
+isisfish.simulator.launcher.remote=sur le serveur Datarmor
isisfish.simulator.launcher.subprocess=dans un sous processus
isisfish.simulator.simulaction.badid=Impossible de lancer la simulation '%s' \: l'identifiant existe déjà \!
isisfish.simulator.ssh.configuration.connecting=Connexion en cours
@@ -960,7 +960,7 @@
isisfish.simulator.ssh.configuration.connection=Information de connexion
isisfish.simulator.ssh.configuration.connectionerror=Connexion impossible (%s)
isisfish.simulator.ssh.configuration.connectionok=Connecté avec succès
-isisfish.simulator.ssh.configuration.environment=Configuration sur Caparmor
+isisfish.simulator.ssh.configuration.environment=Configuration sur Datarmor
isisfish.simulator.ssh.configuration.freespace=Espace disque utilisé \:
isisfish.simulator.ssh.configuration.freespace.confirmdelete=Attention, la suppression du dossier '%s' est irréversible.\nConfirmez-vous la suppression de son contenu ?
isisfish.simulator.ssh.configuration.freespace.label=Taille de %s \: %s
@@ -968,7 +968,7 @@
isisfish.simulator.ssh.configuration.keygenerate=Générer
isisfish.simulator.ssh.configuration.status=Statut
isisfish.simulator.ssh.configuration.test=Tester la configuration
-isisfish.simulator.ssh.configuration.title=Configuration du lanceur Caparmor
+isisfish.simulator.ssh.configuration.title=Configuration du lanceur Datarmor
isisfish.simulator.subprocess.readoutput.error=
isisfish.species.age=Age
isisfish.species.cee=CEE
@@ -1075,7 +1075,7 @@
isisfish.welcome.menu.close=Fermer
isisfish.welcome.menu.configuration=Configuration
isisfish.welcome.menu.configuration.r=Configuration R
-isisfish.welcome.menu.configuration.sshlauncher=Configuration Caparmor
+isisfish.welcome.menu.configuration.sshlauncher=Configuration Datarmor
isisfish.welcome.menu.configuration.vcs=Configuration vcs
isisfish.welcome.menu.file=Fichier
isisfish.welcome.menu.frame=Fenêtre
Modified: trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java
===================================================================
--- trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2017-08-18 15:48:57 UTC (rev 4420)
+++ trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2017-09-12 10:28:35 UTC (rev 4421)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2008 - 2012 Ifremer, Code Lutin
+ * Copyright (C) 2008 - 2017 Ifremer, Code Lutin
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -52,7 +52,7 @@
private static Log log = LogFactory.getLog(SshSimulatorLauncherTest.class);
/**
- * Test l'instantiation du script qsub (caparmor).
+ * Test l'instantiation du script qsub (datarmor).
*
* Le script contient plusieurs variables qui doivent être remplacées.
*
@@ -85,7 +85,7 @@
Assert.assertTrue("String \"" + simulationResultZip + "\" not found in template", content.indexOf(simulationResultZip) > 0);
Assert.assertTrue("String \"" + simulationPreScript + "\" not found in template", content.indexOf(simulationPreScript) > 0);
Assert.assertTrue("Action --simulateRemotellyWithPreScript not on script", content.indexOf(" --simulateRemotellyWithPreScript ") > 0);
- Assert.assertTrue("Remote Java path not found in template", content.indexOf("/home3/caparmor/poussin/jdk7/bin/java") > 0);
+ Assert.assertTrue("Remote Java path not found in template", content.indexOf("/home3/datahome/echatell/jdk8/bin/java") > 0);
// isis location
Assert.assertTrue("String \"" + isisHome + "\" not found in template", content.indexOf(isisHome) > 0);
@@ -95,7 +95,7 @@
}
/**
- * Test l'instantiation du script qsub (caparmor).
+ * Test l'instantiation du script qsub (datarmor).
*
* Test sans script de pre simu.
*
1
0
r4420 - trunk/src/main/java/fr/ifremer/isisfish/datastore
by bpoussin@users.forge.codelutin.com 18 Aug '17
by bpoussin@users.forge.codelutin.com 18 Aug '17
18 Aug '17
Author: bpoussin
Date: 2017-08-18 17:48:57 +0200 (Fri, 18 Aug 2017)
New Revision: 4420
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4420
Log:
fixes #9339: NPE sur une matrice r?\195?\169cup?\195?\169r?\195?\169 depuis le ResultStorage en dehors d'une simulation
Modified:
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java 2017-08-18 10:10:01 UTC (rev 4419)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageAbstract.java 2017-08-18 15:48:57 UTC (rev 4420)
@@ -160,10 +160,9 @@
if (mat != null) {
// on decore la matrice resultat au dernier moment, tous les calcules
// ce font avec les strings
- tx = getTx(tx);
+ EntitySemanticsDecorator.EntityProvider provider = getProvider(tx);
result = new MatrixSemanticsDecorator(mat,
- new EntitySemanticsDecorator(
- new EntitySemanticsDecorator.EntityTxProvider(tx)));
+ new EntitySemanticsDecorator(provider));
}
return result;
}
@@ -623,9 +622,7 @@
* @param tx
* @return
*/
- protected TopiaContext getTx(TopiaContext tx) {
- TopiaContext result = tx;
-
+ protected EntitySemanticsDecorator.EntityProvider getProvider(TopiaContext tx) {
// FIXME echatellier 20140811 : when reruninig again export outside of simulation
// no simulation is registred into SimulationContext thread local, so this
// method return no transaction
@@ -635,12 +632,17 @@
// pour recuperer la tx de la simulation
if (simulation == SimulationContext.get().getSimulationStorage()) {
try {
- result = SimulationContext.get().getDB();
+ tx = SimulationContext.get().getDB();
} catch (TopiaException eee) {
throw new IsisFishRuntimeException("Can't get database from SimulationContext", eee);
}
}
}
+
+ EntitySemanticsDecorator.EntityProvider result = null;
+ if (tx != null) {
+ result = new EntitySemanticsDecorator.EntityTxProvider(tx);
+ }
return result;
}
1
0
r4419 - in trunk/src/main/java/fr/ifremer/isisfish: datastore simulator simulator/launcher
by bpoussin@users.forge.codelutin.com 18 Aug '17
by bpoussin@users.forge.codelutin.com 18 Aug '17
18 Aug '17
Author: bpoussin
Date: 2017-08-18 12:10:01 +0200 (Fri, 18 Aug 2017)
New Revision: 4419
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4419
Log:
fixes #9334: Probl?\195?\168me lors de l'utilisation de script d'optimisation (lock de la base)
Modified:
trunk/src/main/java/fr/ifremer/isisfish/datastore/IsisH2Config.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/IsisH2Config.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/IsisH2Config.java 2017-05-29 17:40:23 UTC (rev 4418)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/IsisH2Config.java 2017-08-18 10:10:01 UTC (rev 4419)
@@ -57,7 +57,7 @@
/** Set in static field to be overridden by tests. Default to swing callback. */
protected static Class<?> databaseMigrationClass = DatabaseMigrationClass.class;
- protected static final String COMMON_URL =
+ protected static final String COMMON_URL =
// Sets the default lock timeout (in milliseconds) in this database
// that is used for the new sessions.
"DEFAULT_LOCK_TIMEOUT=1000;" +
@@ -89,6 +89,13 @@
// changes is disabled (default), 2: logging of both data and index
// changes are enabled
"LOG=1;" +
+ // permet de prevenir le bug lorsqu'on utilise un script d'optimisation
+ // la simulation est deja creer (pour etre configurable par le script)
+ // et on dezippe dessus la simulation a faire si la simulation se fait
+ // sur la meme machine. Normalement la simulation devrait etre ferme
+ // fr.ifremer.isisfish.simulator.launcher.OptimizationPrepareJob.run#118
+ // mais certaine fois non (pourquoi ???)
+ "AUTO_SERVER=TRUE;" +
COMMON_URL;
protected static final String H2_MEM_URL =
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2017-05-29 17:40:23 UTC (rev 4418)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2017-08-18 10:10:01 UTC (rev 4419)
@@ -808,6 +808,8 @@
File data = result.getDataBackupFile();
if (data.exists()) {
TopiaContext tx = result.getStorage().beginTransaction();
+ // force to have clean database before import
+// tx.executeSQL("DROP ALL OBJECTS;");
tx.restore(data);
tx.commitTransaction();
result.closeStorage();
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java 2017-05-29 17:40:23 UTC (rev 4418)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java 2017-08-18 10:10:01 UTC (rev 4419)
@@ -36,6 +36,8 @@
*/
public interface OptimizationContext extends SimulationPlanContext {
+ String TEMP_PREFIX = "__tmp__";
+
/**
* Return the current generation.
* 0 for no generation (in firstGeneration)
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java 2017-05-29 17:40:23 UTC (rev 4418)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java 2017-08-18 10:10:01 UTC (rev 4419)
@@ -71,6 +71,9 @@
* @return null or empty collection if no more simulation to do
*/
public List<SimulationStorage> clearNextSimulation() {
+ // /!\ la collection renvoyee est modifiee par l'appelant (OptimizationPrepareJob)
+ // les simulations ancienne et temporaire on ete supprimer
+ // et remplacer par les simulations qui ont ete faites
List<SimulationStorage> result = nextSimulations;
if (CollectionUtils.isNotEmpty(result)) {
@@ -96,7 +99,7 @@
@Override
public SimulationStorage newSimulation() {
try {
- String simId = id + "_" + number;
+ String simId = TEMP_PREFIX + id + "_" + number;
SimulationParameter childParam = param.copy();
childParam.setSimulationPlanNumber(number);
childParam.setOptimizationGeneration(generations.size());
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java 2017-05-29 17:40:23 UTC (rev 4418)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java 2017-08-18 10:10:01 UTC (rev 4419)
@@ -33,8 +33,10 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.ListIterator;
import java.util.Map;
+import fr.ifremer.isisfish.simulator.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -44,11 +46,7 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.entities.Observation;
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;
@@ -110,12 +108,17 @@
List<SimulationStorage> sims = optimizationContext.clearNextSimulation();
while (!exception && !control.isStopSimulationRequest()
&& CollectionUtils.isNotEmpty(sims)) {
+ List<String> simulationNames = new ArrayList<>(sims.size());
for (SimulationStorage s : sims) {
if (!exception && !control.isStopSimulationRequest()) {
- String simId = s.getName();
+ // on renomme en la version final
+ String simId = s.getName().replaceFirst(OptimizationContext.TEMP_PREFIX, "");
+ simulationNames.add(simId);
File zip = s.createZip();
+ // on ferme et on supprime les simulations temporaire utilisee pour la configuration
s.closeStorage();
+ s.delete(false);
SimulationParameter childParam = s.getParameter();
int childNumber = childParam.getSimulationPlanNumber();
@@ -147,6 +150,14 @@
// FIXME echatellier 20140418 exception is always false, it's value never changes
if (!exception && !control.isStopSimulationRequest()) {
+ // tous les simulations ont ete faites, on recreer les storages avec les nouveaux nom en local
+ // /!\ on modifie la collection qu'on nous a envoyer, on utilise un effet de bord
+ // le probleme est que la simulation qui etait precedement dans la collection n'est plus valide
+ sims.clear();
+ for (String name : simulationNames) {
+ sims.add(SimulationStorage.getSimulation(name));
+ }
+
optimization.endSimulation(optimizationContext);
optimizationContext.incGenerationNumber();
// close current generation simulations
1
0
r4418 - trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher
by bpoussin@users.forge.codelutin.com 29 May '17
by bpoussin@users.forge.codelutin.com 29 May '17
29 May '17
Author: bpoussin
Date: 2017-05-29 19:40:23 +0200 (Mon, 29 May 2017)
New Revision: 4418
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4418
Log:
fixes #9204: Probl?\195?\168me d'interface lorsque l'estimation de la dur?\195?\169e restante pour la simulation est n?\195?\169gative
Modified:
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2017-05-18 07:49:57 UTC (rev 4417)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2017-05-29 17:40:23 UTC (rev 4418)
@@ -287,8 +287,13 @@
}
long milli = (long)Unit.Time.s.convertTo(Unit.Time.milli, time);
- String restTime = DurationFormatUtils.formatDurationHMS(milli);
-
+ String restTime;
+ if (milli >= 0) {
+ restTime = DurationFormatUtils.formatDurationHMS(milli);
+ } else {
+ restTime = "";
+ }
+
pb.setMaximum(max);
pb.setValue(value);
1
0
Author: echatellier
Date: 2017-05-18 09:49:57 +0200 (Thu, 18 May 2017)
New Revision: 4417
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4417
Log:
Add jrs331 api
Modified:
branches/isis-fish-4.4.0.x/pom.xml
Modified: branches/isis-fish-4.4.0.x/pom.xml
===================================================================
--- branches/isis-fish-4.4.0.x/pom.xml 2017-05-17 15:50:48 UTC (rev 4416)
+++ branches/isis-fish-4.4.0.x/pom.xml 2017-05-18 07:49:57 UTC (rev 4417)
@@ -359,6 +359,13 @@
</dependency>
<!-- fin ssj pour les calculs stockastiques -->
+ <dependency>
+ <groupId>org.improving</groupId>
+ <artifactId>jsr331-api</artifactId>
+ <version>2.7.0-1</version>
+ <scope>runtime</scope>
+ </dependency>
+
<!-- debut svnkit pour communication subversion -->
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
1
0
Author: echatellier
Date: 2017-05-17 17:50:48 +0200 (Wed, 17 May 2017)
New Revision: 4416
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4416
Log:
wtf
Removed:
branches/isis-fish-4.4.0.x/isis-fish-4.4.0.2/
1
0
Author: echatellier
Date: 2017-05-17 17:38:08 +0200 (Wed, 17 May 2017)
New Revision: 4415
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4415
Log:
New branch fro maintenance
Added:
branches/isis-fish-4.4.0.x/isis-fish-4.4.0.2/
1
0
Author: echatellier
Date: 2017-03-27 11:58:27 +0200 (Mon, 27 Mar 2017)
New Revision: 4414
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4414
Log:
refs #8733: Export de tous les param?\195?\168tres pour illustrer un papier
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2017-03-27 09:35:09 UTC (rev 4413)
+++ trunk/pom.xml 2017-03-27 09:58:27 UTC (rev 4414)
@@ -373,7 +373,7 @@
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
- <version>2.3.26-incubating</version>
+ <version>2.3.25-incubating</version>
<scope>compile</scope>
</dependency>
1
0
r4413 - in trunk: . src/main src/main/java/fr/ifremer/isisfish/entities src/main/java/fr/ifremer/isisfish/simulator/launcher src/main/java/fr/ifremer/isisfish/ui/input src/main/javascript src/main/javascript/templates src/main/javascript/templates/web src/main/resources/i18n
by echatellier@users.forge.codelutin.com 27 Mar '17
by echatellier@users.forge.codelutin.com 27 Mar '17
27 Mar '17
Author: echatellier
Date: 2017-03-27 11:35:09 +0200 (Mon, 27 Mar 2017)
New Revision: 4413
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4413
Log:
refs #8733: Export de tous les param?\195?\168tres pour illustrer un papier
Added:
trunk/.babelrc
trunk/package.json
trunk/src/main/javascript/
trunk/src/main/javascript/templates/
trunk/src/main/javascript/templates/web/
trunk/src/main/javascript/templates/web/region-web.html
Modified:
trunk/
trunk/pom.xml
trunk/src/main/java/fr/ifremer/isisfish/entities/RegionExportJson.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java
trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx
trunk/src/main/resources/i18n/isis-fish_en_GB.properties
trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
Index: trunk
===================================================================
--- trunk 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk 2017-03-27 09:35:09 UTC (rev 4413)
Property changes on: trunk
___________________________________________________________________
Modified: svn:ignore
## -13,3 +13,7 ##
.idea
build
.gradle
+node
+node_modules
+etc
+npm-debug.log
Added: trunk/.babelrc
===================================================================
--- trunk/.babelrc (rev 0)
+++ trunk/.babelrc 2017-03-27 09:35:09 UTC (rev 4413)
@@ -0,0 +1,5 @@
+{
+ "presets": [
+ "env"
+ ]
+}
\ No newline at end of file
Added: trunk/package.json
===================================================================
--- trunk/package.json (rev 0)
+++ trunk/package.json 2017-03-27 09:35:09 UTC (rev 4413)
@@ -0,0 +1,10 @@
+{
+ "devDependencies": {
+ "babel-cli": "^6.24.0",
+ "babel-preset-env": "^1.2.2",
+ "babel-html": "^0.5.0"
+ },
+ "scripts": {
+ "build": "babel-html -s src/main/javascript -d target/classes"
+ }
+}
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk/pom.xml 2017-03-27 09:35:09 UTC (rev 4413)
@@ -12,7 +12,7 @@
<groupId>fr.ifremer</groupId>
<artifactId>isis-fish</artifactId>
<version>4.4.1.0-SNAPSHOT</version>
-
+
<!-- POM Relationships : Inheritance : Dependencies -->
<dependencies>
@@ -373,7 +373,7 @@
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
- <version>2.3.25-incubating</version>
+ <version>2.3.26-incubating</version>
<scope>compile</scope>
</dependency>
@@ -608,75 +608,6 @@
</resource>
</resources>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.nuiton.eugene</groupId>
- <artifactId>eugene-maven-plugin</artifactId>
- <version>2.14</version>
- </plugin>
-
- <plugin>
- <groupId>org.nuiton.jaxx</groupId>
- <artifactId>jaxx-maven-plugin</artifactId>
- <version>${jaxxVersion}</version>
- </plugin>
-
- <plugin>
- <groupId>org.nuiton.i18n</groupId>
- <artifactId>i18n-maven-plugin</artifactId>
- <version>${nuitonI18nVersion}</version>
- </plugin>
-
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <mainClass>fr.ifremer.isisfish.IsisFish</mainClass>
- <classpathPrefix>lib/</classpathPrefix>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <systemPropertyVariables>
- <java.io.tmpdir>${project.build.directory}/surefire-workdir</java.io.tmpdir>
- </systemPropertyVariables>
- </configuration>
- <executions>
- <execution>
- <id>surefire-it</id>
- <phase>integration-test</phase>
- <goals>
- <goal>test</goal>
- </goals>
- <configuration>
- <includes>
- <include>**/*IT.java</include>
- </includes>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <artifactId>maven-site-plugin</artifactId>
- <dependencies>
- <dependency>
- <groupId>org.nuiton.jrst</groupId>
- <artifactId>doxia-module-jrst</artifactId>
- <version>${jrstPluginVersion}</version>
- </dependency>
- </dependencies>
- </plugin>
- </plugins>
- </pluginManagement>
-
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -710,6 +641,7 @@
<plugin>
<groupId>org.nuiton.eugene</groupId>
<artifactId>eugene-maven-plugin</artifactId>
+ <version>2.14</version>
<executions>
<execution>
<id>eugene-generation</id>
@@ -739,6 +671,7 @@
<plugin>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-maven-plugin</artifactId>
+ <version>${jaxxVersion}</version>
<executions>
<execution>
<goals>
@@ -756,6 +689,7 @@
<plugin>
<groupId>org.nuiton.i18n</groupId>
<artifactId>i18n-maven-plugin</artifactId>
+ <version>${nuitonI18nVersion}</version>
<configuration>
<entries>
<entry>
@@ -813,13 +747,90 @@
</execution>
</executions>
</plugin>
+
<plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ <mainClass>fr.ifremer.isisfish.IsisFish</mainClass>
+ <classpathPrefix>lib/</classpathPrefix>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>com.github.eirslett</groupId>
+ <artifactId>frontend-maven-plugin</artifactId>
+ <version>1.3</version>
+ <configuration>
+ <nodeVersion>v7.7.4</nodeVersion>
+ </configuration>
+ <executions>
+ <execution>
+ <id>install node and npm</id>
+ <goals>
+ <goal>install-node-and-npm</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>npm install</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <configuration>
+ <arguments>install</arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>npm run</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <configuration>
+ <arguments>run build</arguments>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>${argLine}</argLine>
+ <systemPropertyVariables>
+ <java.io.tmpdir>${project.build.directory}/surefire-workdir</java.io.tmpdir>
+ </systemPropertyVariables>
</configuration>
+ <executions>
+ <execution>
+ <id>surefire-it</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <includes>
+ <include>**/*IT.java</include>
+ </includes>
+ </configuration>
+ </execution>
+ </executions>
</plugin>
+
+ <plugin>
+ <artifactId>maven-site-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.nuiton.jrst</groupId>
+ <artifactId>doxia-module-jrst</artifactId>
+ <version>${jrstPluginVersion}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
</plugins>
</build>
Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/RegionExportJson.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/entities/RegionExportJson.java 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk/src/main/java/fr/ifremer/isisfish/entities/RegionExportJson.java 2017-03-27 09:35:09 UTC (rev 4413)
@@ -24,7 +24,6 @@
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.ObjectMapper;
import fr.ifremer.isisfish.IsisConfig;
import fr.ifremer.isisfish.types.Month;
import fr.ifremer.isisfish.types.RangeOfValues;
@@ -97,7 +96,7 @@
public RegionExportJson(Writer w) {
try {
JsonFactory f = new JsonFactory();
- g = f.createGenerator(w);
+ g = f.createGenerator(w)/*.useDefaultPrettyPrinter()*/;
toVisit = new LinkedList<>();
visited = new HashSet<>();
@@ -231,7 +230,6 @@
public void start() {
try {
g.writeStartObject();
- ObjectMapper m = new ObjectMapper();
} catch (IOException eee) {
throw new RuntimeException(eee);
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2017-03-27 09:35:09 UTC (rev 4413)
@@ -142,7 +142,7 @@
*/
protected void initFreemarker() {
- freemarkerConfiguration = new Configuration(Configuration.VERSION_2_3_0);
+ freemarkerConfiguration = new Configuration(Configuration.VERSION_2_3_25);
// needed to overwrite "Defaults to default system encoding."
// fix encoding issue on some systems
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2017-03-27 09:35:09 UTC (rev 4413)
@@ -33,6 +33,7 @@
import java.awt.Cursor;
import java.awt.event.ItemEvent;
import java.io.File;
+import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JOptionPane;
@@ -44,9 +45,16 @@
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
+import fr.ifremer.isisfish.IsisFish;
import fr.ifremer.isisfish.entities.FisheryRegionImpl;
import fr.ifremer.isisfish.logging.RegionChangeLogger;
+import fr.ifremer.isisfish.simulator.launcher.SSHSimulatorLauncher;
import fr.ifremer.isisfish.ui.input.spatial.AskNewSpatialUI;
+import freemarker.cache.ClassTemplateLoader;
+import freemarker.ext.beans.BeansWrapper;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -54,6 +62,7 @@
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.persistence.TopiaEntityContextable;
+import org.nuiton.util.DesktopUtil;
import org.nuiton.util.FileUtil;
import fr.ifremer.isisfish.IsisFishDAOHelper;
@@ -87,7 +96,12 @@
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.nuiton.topia.persistence.TopiaEntity;
@@ -391,7 +405,7 @@
/**
* Exporter une entite json gzip
*/
- protected void exportJson(TopiaEntity e) {
+ protected void exportJson(TopiaEntity e) {
try {
File file = FileUtil.getFile(t("isisfish.input.menu.exportJson"), t("isisfish.common.export"), (Component)null,
".*" + RegionExportJson.FORMAT_EXTENSION + "$", t("isisfish.message.import.json.zipped"));
@@ -755,4 +769,43 @@
askNewSpatialUI.setVisible(true);
}
}
+
+ /**
+ * Realise un export JSON et affiche la page de visualisation dans un navigateur.
+ */
+ public void exportWeb() {
+ try {
+ StringWriter outJson = new StringWriter();
+ RegionExportJson json = new RegionExportJson(outJson);
+
+ FisheryRegion fisheryRegion = inputUI.getContextValue(FisheryRegion.class);
+ json.export(fisheryRegion);
+
+ Configuration freemarkerConfiguration = new Configuration(Configuration.VERSION_2_3_25);
+ freemarkerConfiguration.setDefaultEncoding("utf-8");
+ ClassTemplateLoader templateLoader = new ClassTemplateLoader(InputHandler.class, "/");
+ freemarkerConfiguration.setTemplateLoader(templateLoader);
+ freemarkerConfiguration.setObjectWrapper(new BeansWrapper(Configuration.VERSION_2_3_25));
+
+ // get template
+ Template template = freemarkerConfiguration.getTemplate("templates/web/region-web.html");
+ Map<String, Object> root = new HashMap<>();
+ root.put("fisheryRegion", fisheryRegion);
+ root.put("jsonExport", "\nvar jsonExport = " + outJson.toString() + ";");
+
+ // render template
+ File outFile = File.createTempFile("isis-export-", ".html");
+ outFile.deleteOnExit();
+ Writer outWriter = new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(outFile)), StandardCharsets.UTF_8);
+ template.process(root, outWriter);
+ outWriter.flush();
+
+ // open file
+ DesktopUtil.browse(outFile.toURI());
+
+ } catch (IOException|TemplateException ex) {
+ throw new IsisFishRuntimeException("Can't export web", ex);
+ }
+
+ }
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx 2017-03-27 09:35:09 UTC (rev 4413)
@@ -42,9 +42,11 @@
<JMenuItem id="menuRegionExport" text="isisfish.input.menu.exportRegion" enabled='{isRegionLoaded()}' onActionPerformed="handler.exportRegion()" />
<JMenuItem id="menuExportJson" text="isisfish.input.menu.exportJson" enabled='{isRegionLoaded()}' onActionPerformed="handler.exportEntityJson()" />
<JMenuItem id="menuImportJson" text="isisfish.input.menu.importJson" enabled='{isRegionLoaded()}' onActionPerformed="handler.importEntityJson()" />
- <JMenuItem id="menuChangeResolution" text="isisfish.input.menu.changeResolution" enabled='{isRegionLoaded()}' onActionPerformed="handler.changeSpatialResolution()" />
<JMenuItem id="menuRegionCopy" text="isisfish.input.menu.copyRegion" enabled='{isRegionLoaded()}' onActionPerformed="handler.copyRegion()" />
<JSeparator/>
+ <JMenuItem id="menuChangeResolution" text="isisfish.input.menu.changeResolution" enabled='{isRegionLoaded()}' onActionPerformed="handler.changeSpatialResolution()" />
+ <JMenuItem id="menuExportWeb" text="isisfish.input.menu.exportWeb" enabled='{isRegionLoaded()}' onActionPerformed="handler.exportWeb()" />
+ <JSeparator/>
<JMenuItem text="isisfish.input.menu.removeLocaly" enabled='{isRegionLoaded()}' onActionPerformed="handler.removeRegion(false)" />
</JMenu>
<JMenu text="isisfish.input.menu.server">
Added: trunk/src/main/javascript/templates/web/region-web.html
===================================================================
--- trunk/src/main/javascript/templates/web/region-web.html (rev 0)
+++ trunk/src/main/javascript/templates/web/region-web.html 2017-03-27 09:35:09 UTC (rev 4413)
@@ -0,0 +1,601 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Region ${fisheryRegion.name}</title>
+ <meta charset="UTF-8">
+
+ <style type="text/css">
+ .exportTitle {
+ text-align: center;
+ }
+ .category {
+
+ }
+ .category > .title {
+ color: #044F90;
+ border-bottom: 1px solid;
+ }
+ .category .entity {
+ margin-left: 15px;
+ }
+ .category .entity > .detailblock {
+ margin-left: 15px;
+ }
+ .category .entity > .title {
+ text-decoration: underline;
+ cursor: pointer;
+ }
+ .warning {
+ color: #FFA500;
+ }
+ .error {
+ color: red;
+ }
+ </style>
+
+ <script>
+ function render(json) {
+ let content = renderJsonExport(json);
+ document.getElementById("render").innerHTML = content;
+ }
+
+ function renderJsonExport(json) {
+ return `<div class='category' id="regions">
+ <div class='title'>Region</div>
+ ${renderCollection(json, json.FisheryRegion, renderFisheryRegion)}
+ </div>
+ <div class='category' id="cells">
+ <div class='title'>Mailles</div>
+ ${renderCollection(json, json.Cell, renderCell)}
+ </div>
+ <div class='category' id="zones">
+ <div class='title'>Zones</div>
+ ${renderCollection(json, json.Zone, renderZone)}
+ </div>
+ <div class='category' id="ports">
+ <div class='title'>Ports</div>
+ ${renderCollection(json, json.Port, renderPort)}
+ </div>
+ <div class='category' id="species">
+ <div class='title'>Species</div>
+ ${renderCollection(json, json.Species, renderSpecies)}
+ </div>
+ <div class='category' id='populations'>
+ <div class='title'>Population</div>
+ ${renderCollection(json, json.Population, renderPopulation)}
+ </div>
+ <div class='category' id='gears'>
+ <div class='title'>Gears</div>
+ ${renderCollection(json, json.Gear, renderGear)}
+ </div>
+ <div class='category' id='metiers'>
+ <div class='title'>Metiers</div>
+ ${renderCollection(json, json.Metier, renderMetier)}
+ </div>
+ <div class='category' id='triptypes'>
+ <div class='title'>Trip types</div>
+ ${renderCollection(json, json.TripType, renderTripType)}
+ </div>
+ <div class='category' id='vesselTypes'>
+ <div class='title'>Vessel types</div>
+ ${renderCollection(json, json.VesselType, renderVesselType)}
+ </div>
+ <div class='category' id='setofvessels'>
+ <div class='title'>Set of vessels</div>
+ ${renderCollection(json, json.SetOfVessels, renderSetOfVessels)}
+ </div>
+ <div class='category' id='strategies'>
+ <div class='title'>Strategies</div>
+ ${renderCollection(json, json.Strategy, renderStrategy)}
+ </div>
+ <div class='category' id='observations'>
+ <div class='title'>Observation</div>
+ ${renderCollection(json, json.Observation, renderObservation)}
+ </div>
+ `;
+ }
+
+ function renderFisheryRegion(json, fisheryRegion) {
+ return `<!-- ${JSON.stringify(fisheryRegion)} -->
+ <div class='entity' id='${cleanEntityId(fisheryRegion)}'>
+ <span class='title' onclick='switchDetail(this)'>${fisheryRegion.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Latitude minimale : ${fisheryRegion.minLatitude}</div>
+ <div class='detail'>Latitude maximale : ${fisheryRegion.maxLatitude}</div>
+ <div class='detail'>Longitude minimale : ${fisheryRegion.minLongitude}</div>
+ <div class='detail'>Longitude maximale : ${fisheryRegion.maxLongitude}</div>
+ <div class='detail'>Longitude maximale : ${fisheryRegion.maxLongitude}</div>
+ <div class='detail'>Latitude : ${fisheryRegion.cellLengthLatitude}</div>
+ <div class='detail'>Longitude : ${fisheryRegion.cellLengthLongitude}</div>
+ <div class='detail'>Commentaire : ${fisheryRegion.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderCell(json, cell) {
+ return `<!-- ${JSON.stringify(cell)} -->
+ <div class='entity' id='${cleanEntityId(cell)}'>
+ <span class='title' onclick='switchDetail(this)'>${cell.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Latitude : ${cell.latitude}</div>
+ <div class='detail'>Longitude : ${cell.longitude}</div>
+ <div class='detail'>Terre : ${cell.land}</div>
+ <div class='detail'>Comment : ${cell.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderZone(json, zone) {
+ return `<!-- ${JSON.stringify(zone)} -->
+ <div class='entity' id='${cleanEntityId(zone)}'>
+ <span class='title' onclick='switchDetail(this)'>${zone.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Cell : ${entityIdsLinks(json, zone.cell)}</div>
+ <div class='detail'>Comment : ${zone.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderPort(json, port) {
+ return `<!-- ${JSON.stringify(port)} -->
+ <div class='entity' id='${cleanEntityId(port)}'>
+ <span class='title' onclick='switchDetail(this)'>${port.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Cell : ${entityIdLink(json, port.cell)}</div>
+ <div class='detail'>Comment : ${port.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderSpecies(json, species) {
+ return `<!-- ${JSON.stringify(species)} -->
+ <div class='entity' id='${cleanEntityId(species)}'>
+ <span class='title' onclick='switchDetail(this)'>${species.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Scientific name : ${species.scientificName}</div>
+ <div class='detail'>Code rubbin : ${species.codeRubbin}</div>
+ <div class='detail'>Code CEE : ${species.codeCEE}</div>
+ <div class='detail'>Age group type : ${species.ageGroupType}</div>
+ <div class='detail'>Populations : ${entityIdsLinks(json, species.population)}</div>
+ <div class='detail'>Comment : ${species.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderPopulation(json, population) {
+ return `<!-- ${JSON.stringify(population)} -->
+ <div class='entity' id='${cleanEntityId(population)}'>
+ <span class='title' onclick='switchDetail(this)'>${population.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Geographic Id : ${population.geographicId}</div>
+ <div class='detail'>plusGroup : ${population.plusGroup}</div>
+ ${renderEquation(json, "growth", population.growth)}
+ ${renderEquation(json, "growthReverse", population.growthReverse)}
+ <div class='detail'>Comment : ${population.comment}</div>
+
+ <div class='detail'>Population zones : ${entityIdsLinks(json, population.populationZone)}</div>
+ <div class='detail'>Reproduction zones : ${entityIdsLinks(json, population.reproductionZone)}</div>
+ <div class='detail'>Recruitment zones : ${entityIdsLinks(json, population.reproductionZone)}</div>
+ ${renderMatrix(json, "Mapping of reproduction zones and recruitment zones", population.mappingZoneReproZoneRecru)}
+
+ ${renderCollection(json, population.populationSeasonInfo, renderPopulationSeasonInfo)}
+
+ ${renderEquation(json, "naturalDeathRate", population.naturalDeathRate)}
+ ${renderEquation(json, "meanWeight", population.meanWeight)}
+ ${renderEquation(json, "maturityOgive", population.maturityOgiveEquation)}
+ ${renderEquation(json, "reproductionRateEquation", population.reproductionRateEquation)}
+
+ ${renderEquation(json, "reproduction", population.reproductionEquation)}
+ <div class='detail'>Month gap between repro and recruitment : ${population.monthGapBetweenReproRecrutement}</div>
+ ${renderMatrix1D(json, "Recruitment distribution", population.recruitmentDistribution)}
+ ${renderEquation(json, "Recruitment equation", population.recruitmentEquation)}
+ <div class='detail'>Recruitment comment : ${population.recruitmentComment}</div>
+
+ ${renderCollection(json, population.populationGroup, renderPopulationGroup)}
+
+ ${renderMatrix(json, "Accessibility", population.capturability)}
+ ${renderEquation(json, "Accessibility equation", population.capturabilityEquation)}
+ <div class='detail'>Accessibility comment : ${population.capturabilityComment}</div>
+
+ ${renderCollection(json, population.populationSeasonInfo, renderPopulationSeasonInfoMigration)}
+ <div class='detail'>Migration comment : ${population.migrationComment}</div>
+
+ ${renderEquation(json, "Price", population.price)}
+
+ <div class='detail'>Fbar Group Min : ${population.fbarGroupMin}</div>
+ <div class='detail'>Fbar Group Max : ${population.fbarGroupMax}</div>
+ <div class='detail'>Abundance reference month : ${population.abundanceReferenceMonth}</div>
+ <div class='detail'>F computing : ${population.computeFOnLandings}</div>
+ ${renderEquation(json, "Fishing mortality other fleets", population.fishingMortalityOtherFleets)}
+ </div>
+ </div>`;
+ }
+
+ function renderPopulationSeasonInfo(json, psi) {
+ return `<!-- ${JSON.stringify(psi)} -->
+ <div class='entity' id='${cleanEntityId(psi)}'>
+ <span class='title' onclick='switchDetail(this)'>${psi.firstMonth} - ${psi.lastMonth}</span>
+ <div class='detailblock'>
+ <div class='detail'>Group change : ${psi.groupChange}</div>
+ <div class='detail'>Reproduction : ${psi.reproduction}</div>
+ ${renderMatrix(json, "Reproduction distribution", psi.reproductionDistribution)}
+ <div class='detail'>Comment : ${psi.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderPopulationSeasonInfoMigration(json, psi) {
+ return `<!-- ${JSON.stringify(psi)} -->
+ <div class='entity' id='${cleanEntityId(psi)}'>
+ <span class='title' onclick='switchDetail(this)'>${psi.firstMonth} - ${psi.lastMonth}</span>
+ <div class='detailblock'>
+ <div class='detail'>Use migration equation : ${psi.useEquationMigration}</div>
+ ${renderEquation(json, "reproductionRateEquation", psi.migrationEquation)}
+ ${renderEquation(json, "reproductionRateEquation", psi.immigrationEquation)}
+ ${renderEquation(json, "reproductionRateEquation", psi.emigrationEquation)}
+ ${renderMatrix(json, "Migration matrix", psi.migrationMatrix)}
+ ${renderMatrix(json, "Immigration matrix", psi.immigrationMatrix)}
+ ${renderMatrix(json, "Emmigration matrix", psi.emigrationMatrix)}
+ </div>
+ </div>`;
+ }
+
+ function renderPopulationGroup(json, pg) {
+ return `<!-- ${JSON.stringify(pg)} -->
+ <div class='entity' id='${cleanEntityId(pg)}'>
+ <span class='title' onclick='switchDetail(this)'>${pg["#toString"]}</span>
+ <div class='detailblock'>
+ <div class='detail'>Age : ${pg.age}</div>
+ <div class='detail'>Min length : ${pg.minLength}</div>
+ <div class='detail'>Max length : ${pg.maxLength}</div>
+ <div class='detail'>Comment : ${pg.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderGear(json, gear) {
+ return `<!-- ${JSON.stringify(gear)} -->
+ <div class='entity' id='${cleanEntityId(gear)}'>
+ <span class='title' onclick='switchDetail(this)'>${gear.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Effort unit : ${gear.effortUnit}</div>
+ <div class='detail'>Standardisation factor : ${gear.standardisationFactor}</div>
+ <div class='detail'>Technical parameter : ${gear.parameterName}</div>
+ <div class='detail'>Range of values : ${gear.possibleValue}</div>
+ <div class='detail'>Comment : ${gear.comment}</div>
+ ${renderCollection(json, gear.populationSelectivity, renderSelectivity)}
+ </div>
+ </div>`;
+ }
+
+ function renderSelectivity(json, selectivity) {
+ return `<!-- ${JSON.stringify(selectivity)} -->
+ <div class='entity' id='${cleanEntityId(selectivity)}'>
+ <span class='title' onclick='switchDetail(this)'>${selectivity['#toString']}</span>
+ <div class='detailblock'>
+ <div class='detail'>Population : ${entityIdLink(json, selectivity.population)}</div>
+ ${renderEquation(json, "Equation", selectivity.equation)}
+ </div>
+ </div>`;
+ }
+
+ function renderMetier(json, metier) {
+ return `<!-- ${JSON.stringify(metier)} -->
+ <div class='entity' id='${cleanEntityId(metier)}'>
+ <span class='title' onclick='switchDetail(this)'>${metier.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Gear : ${entityIdLink(json, metier.gear)}</div>
+ <div class='detail'>Range of values : ${metier.gearParameterValue}</div>
+ <div class='detail'>Comment : ${metier.comment}</div>
+ ${renderCollection(json, metier.metierSeasonInfo, renderMetierSeasonInfo)}
+ </div>
+ </div>`;
+ }
+
+ function renderMetierSeasonInfo(json, msi) {
+ return `<!-- ${JSON.stringify(msi)} -->
+ <div class='entity' id='${cleanEntityId(msi)}'>
+ <span class='title' onclick='switchDetail(this)'>${msi['#toString']}</span>
+ <div class='detailblock'>
+ <div class='detail'>Zones : ${entityIdsLinks(json, msi.zone)}</div>
+ <div class='detail'>Comment : ${msi.comment}</div>
+ ${renderCollection(json, msi.speciesTargetSpecies, renderTargetSpecies)}
+ </div>
+ </div>`;
+ }
+
+ function renderTargetSpecies(json, ts) {
+ return `<!-- ${JSON.stringify(ts)} -->
+ <div class='entity' id='${cleanEntityId(ts)}'>
+ <span class='title' onclick='switchDetail(this)'>${ts['#toString']}</span>
+ <div class='detailblock'>
+ <div class='detail'>Species : ${entityIdLink(json, ts.species)}</div>
+ ${renderEquation(json, "Target factor", ts.targetFactorEquation)}
+ <div class='detail'>Main species for the metier : ${ts.primaryCatch}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderTripType(json, tripType) {
+ return `<!-- ${JSON.stringify(tripType)} -->
+ <div class='entity' id='${cleanEntityId(tripType)}'>
+ <span class='title' onclick='switchDetail(this)'>${tripType.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Duration : ${tripType.tripDuration}</div>
+ <div class='detail'>Minimum time between trips : ${tripType.minTimeBetweenTrip}</div>
+ <div class='detail'>Comment : ${tripType.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderVesselType(json, vesselType) {
+ return `<!-- ${JSON.stringify(vesselType)} -->
+ <div class='entity' id='${cleanEntityId(vesselType)}'>
+ <span class='title' onclick='switchDetail(this)'>${vesselType.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Length : ${vesselType.length}</div>
+ <div class='detail'>Speed : ${vesselType.speed}</div>
+ <div class='detail'>Max trip duration : ${vesselType.maxTripDuration}</div>
+ <div class='detail'>Activity range : ${vesselType.activityRange}</div>
+ <div class='detail'>Minimum Crew Size : ${vesselType.minCrewSize}</div>
+ <div class='detail'>Travel fuel cost : ${vesselType.unitFuelCostOfTravel}</div>
+ <div class='detail'>Trip type : ${entityIdsLinks(json, vesselType.tripType)}</div>
+ <div class='detail'>Comment : ${vesselType.comment}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderSetOfVessels(json, setOfVessels) {
+ return `<!-- ${JSON.stringify(setOfVessels)} -->
+ <div class='entity' id='${cleanEntityId(setOfVessels)}'>
+ <span class='title' onclick='switchDetail(this)'>${setOfVessels.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Port : ${entityIdLink(json, setOfVessels.port)}</div>
+ <div class='detail'>Vessel type : ${entityIdLink(json, setOfVessels.vesselType)}</div>
+ <div class='detail'>numberOfVessels : ${setOfVessels.numberOfVessels}</div>
+ <div class='detail'>fixedCosts : ${setOfVessels.fixedCosts}</div>
+ ${renderEquation(json, "Technical efficiency", setOfVessels.technicalEfficiencyEquation)}
+ <div class='detail'>Comment : ${setOfVessels.comment}</div>
+ ${renderCollection(json, setOfVessels.possibleMetiers, renderEffortDescription)}
+ </div>
+ </div>`;
+ }
+
+ function renderEffortDescription(json, ed) {
+ return `<!-- ${JSON.stringify(ed)} -->
+ <div class='entity' id='${cleanEntityId(ed)}'>
+ <span class='title' onclick='switchDetail(this)'>${ed['#toString']}</span>
+ <div class='detailblock'>
+ <div class='detail'>Possible metier : ${entityIdLink(json, ed.possibleMetiers)}</div>
+ <div class='detail'>Fishing operation : ${ed.fishingOperation}</div>
+ <div class='detail'>fishingOperationDuration : ${ed.fishingOperationDuration}</div>
+ <div class='detail'>gearsNumberPerOperation : ${ed.gearsNumberPerOperation}</div>
+ <div class='detail'>crewSize : ${ed.crewSize}</div>
+ <div class='detail'>unitCostOfFishing : ${ed.unitCostOfFishing}</div>
+ <div class='detail'>fixedCrewSalary : ${ed.fixedCrewSalary}</div>
+ <div class='detail'>crewShareRate : ${ed.crewShareRate}</div>
+ <div class='detail'>repairAndMaintenanceGearCost : ${ed.repairAndMaintenanceGearCost}</div>
+ <div class='detail'>landingCosts : ${ed.landingCosts}</div>
+ <div class='detail'>otherRunningCost : ${ed.otherRunningCost}</div>
+ </div>
+ </div>`;
+ }
+
+ function renderStrategy(json, strategy) {
+ return `<!-- ${JSON.stringify(strategy)} -->
+ <div class='entity' id='${cleanEntityId(strategy)}'>
+ <span class='title' onclick='switchDetail(this)'>${strategy.name}</span>
+ <div class='detailblock'>
+ <div class='detail'>Set of vessels : ${entityIdLink(json, strategy.setOfVessels)}</div>
+ <div class='detail'>Set of vessels proportion : ${strategy.proportionSetOfVessels}</div>
+ <div class='detail'>Use inactivity equation : ${strategy.inactivityEquationUsed}</div>
+ ${renderEquation(json, "Inactivity equation", strategy.inactivityEquation)}
+ <div class='detail'>Comment : ${strategy.comment}</div>
+ ${renderCollection(json, strategy.strategyMonthInfo, renderStrategyMonthInfo)}
+ </div>
+ </div>`;
+ }
+
+ function renderStrategyMonthInfo(json, smi) {
+ return `<!-- ${JSON.stringify(smi)} -->
+ <div class='entity' id='${cleanEntityId(smi)}'>
+ <span class='title' onclick='switchDetail(this)'>${smi['#toString']}</span>
+ <div class='detailblock'>
+ <div class='detail'>Trip type : ${entityIdLink(json, smi.tripType)}</div>
+ <div class='detail'>numberOfTrips : ${smi.numberOfTrips}</div>
+ <div class='detail'>minInactivityDays : ${smi.minInactivityDays}</div>
+ ${renderMatrix1D(json, "Proportion metier", smi.proportionMetier)}
+ </div>
+ </div>`;
+ }
+
+ function renderObservation(json, observation) {
+ return `<!-- ${JSON.stringify(observation)} -->
+ <div class='entity' id='${cleanEntityId(observation)}'>
+ <span class='title' onclick='switchDetail(this)'>${observation.name}</span>
+ <div class='detailblock'>
+ ${renderMatrix(json, "Value", observation.value)}
+ </div>
+ </div>`;
+ }
+
+ // apply "f" function for each entity of each id of collection
+ function renderCollection(json, ids, f) {
+ return ids.map(id => f(json, json["#entities"][id])).join("\n")
+ }
+
+ // clean entity id to be used in anchor
+ function cleanEntityId(entity) {
+ return entity["#id"].replace(/#/g,'_');
+ }
+
+ // generate entity link on id with name as content
+ function entityLink(entity) {
+ return `<a href='#${cleanEntityId(entity)}'>${entity.name || entity["#toString"]}</a>`;
+ }
+
+ // generate link on entity represented by his id
+ function entityIdLink(json, entityId) {
+ let entity = json["#entities"][entityId];
+ let result = "";
+ if (entity) { //entity found
+ result = entityLink(entity);
+ } else if (!entityId || entityId == "null") { // entity id empty
+ result = "";
+ } else if (entityId.indexOf("fr.") == 0) { // topia id, but not found
+ result = `<span class='error' title='${entityId}'>Todo</span>`;
+ } else { // other case "Month 0" ...
+ result = `<span class='warning'>${entityId}</span>`;
+ }
+ return result;
+ }
+
+ // generate link on entity for each id of collection
+ function entityIdsLinks(json, entityIds) {
+ return entityIds.map(id => entityIdLink(json, id)).join(", ");
+ }
+
+ // render equation
+ function renderEquation(json, name, id) {
+ let equation = json["#entities"][id];
+ let result = "";
+ if (equation) {
+ result = `<div class='detail'>${name} : <pre class='highlight java'>${equation.content}</pre></div>`;
+ }
+ return result;
+ }
+
+ // render matrix 1D
+ function renderMatrix1D(json, name, content) {
+ if (!content) {
+ return "";
+ }
+
+ // convert semantics
+ let contentLines = content.split('\n');
+ let semantique0 = contentLines[1].substring(contentLines[1].indexOf(":") + 1).split(";").map(s => s.substring(0, s.indexOf(":")));
+
+ // create matrix filled with 0
+ let matrix = new Array(semantique0.length);
+ for (var i = 0; i < semantique0.length; i++) {
+ matrix[i] = 0;
+ }
+ // add values in matrix with coordinate
+ for (let index = 3; index < contentLines.length; index++) {
+ if (contentLines[index]) {
+ let values = contentLines[index].split(";");
+ matrix[values[0]] = values[1];
+ }
+ }
+
+ // render matrix
+ let html = `${name} : <table border='1'>` +
+ "<tr>";
+ semantique0.forEach(sem => html += "<th>" + entityIdLink(json, sem) + "</th>");
+ html += "</tr>";
+ html += "<tr>";
+ for (let i = 0; i < matrix.length; i++) {
+ html += "<td>" + matrix[i] + "</td>";
+ }
+ html += "</tr>";
+ html += "</table>";
+ return html;
+ }
+
+ // render matrix 2D
+ function renderMatrix(json, name, content) {
+ if (!content) {
+ return "";
+ }
+
+ // convert semantics
+ let contentLines = content.split('\n');
+ let semantique0 = contentLines[1].substring(contentLines[1].indexOf(":") + 1).split(";").map(s => s.substring(0, s.indexOf(":")));
+ let semantique1 = contentLines[2].substring(contentLines[2].indexOf(":") + 1).split(";").map(s => s.substring(0, s.indexOf(":")));
+
+ // create matrix filled with 0
+ let matrix = new Array(semantique0.length);
+ for (var i = 0; i < semantique0.length; i++) {
+ matrix[i] = new Array(semantique1.length);
+ for (var j = 0; j < semantique1.length; j++) {
+ matrix[i][j] = 0;
+ }
+ }
+ // add values in matrix with coordinate
+ for (let index = 4; index < contentLines.length; index++) {
+ if (contentLines[index]) {
+ let values = contentLines[index].split(";");
+ matrix[values[0]][values[1]] = values[2];
+ }
+ }
+
+ // render matrix
+ let html = `${name} : <table border='1'>` +
+ "<tr><th />";
+ semantique1.forEach(sem => html += "<th>" + entityIdLink(json, sem) + "</th>");
+ html += "</tr>";
+ for (let i = 0; i < matrix.length; i++) {
+ html += "<tr><th>" + entityIdLink(json, semantique0[i]) + "</th>";
+ for (let j = 0; j < matrix[i].length; j++) {
+ html += "<td>" + matrix[i][j] + "</td>";
+ }
+ html += "</tr>";
+ }
+ html += "</table>";
+ return html;
+ }
+
+ // display or hide details
+ function switchDetail(element) {
+ let detailBlock = element.parentNode.getElementsByClassName("detailblock")[0];
+ if (detailBlock.style.display == "none") {
+ detailBlock.style.display = "block"
+ } else {
+ detailBlock.style.display = "none"
+ }
+ }
+
+ // ${jsonExport}
+ </script>
+ </head>
+
+ <body>
+ <h1 class="exportTitle">Region XXX</h1>
+
+ Menu:
+ <div id="toc">
+ <ul>
+ <li><a href="#regions">Region</a></li>
+ <li><a href="#cells">Mailles</a></li>
+ <li><a href="#ports">Ports</a></li>
+ <li><a href="#species">Species</a></li>
+ <li><a href="#populations">Populations</a></li>
+ <li><a href="#gears">Gears</a></li>
+ <li><a href="#metiers">Metier</a></li>
+ <li><a href="#triptypes">Trip types</a></li>
+ <li><a href="#vesseltypes">Vessel types</a></li>
+ <li><a href="#setofvessels">Set of vessels</a></li>
+ <li><a href="#strategies">Strategies</a></li>
+ <li><a href="#observations">Observations</a></li>
+ </ul>
+ <div>
+ <div id="render">
+
+ </div>
+
+ <script>
+ render(jsonExport)
+ </script>
+
+ <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.10.0/styles/default.mi…" />
+ <script src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.10.0/highlight.min.js"></script>
+ <script>
+ if (window.hljs) {
+ for (let block of document.getElementsByClassName("highlight")) {
+ hljs.highlightBlock(block)
+ }
+ }
+ </script>
+
+ </body>
+</html>
\ No newline at end of file
Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2017-03-27 09:35:09 UTC (rev 4413)
@@ -491,6 +491,7 @@
isisfish.input.menu.copyRegion=Copy region
isisfish.input.menu.exportJson=Export current object in JSON
isisfish.input.menu.exportRegion=Export region
+isisfish.input.menu.exportWeb=Export web
isisfish.input.menu.importJson=Import objets from JSON
isisfish.input.menu.importRegion=Import region
isisfish.input.menu.importRegionSimulation=Import region from simulation
Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2017-03-17 16:43:07 UTC (rev 4412)
+++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2017-03-27 09:35:09 UTC (rev 4413)
@@ -491,6 +491,7 @@
isisfish.input.menu.copyRegion=Copier région
isisfish.input.menu.exportJson=Exporter l'objet courant en JSON
isisfish.input.menu.exportRegion=Exporter la région
+isisfish.input.menu.exportWeb=Export web
isisfish.input.menu.importJson=Importer des objets JSON
isisfish.input.menu.importRegion=Importer une région
isisfish.input.menu.importRegionSimulation=Importer la région d'une simulation
1
0
The ISIS-Fish team is pleased to announce the isis-fish-4.4.1.0-rc-1 release!
Simulateur de pecherie complexe.
Documentation of the project can be found here:
http://doc.codelutin.com/isis-fish
Changes
-------
Changes in this version include:
New features:
o Pouvoir copier/coller une partie de base dans une autre base Issue: 429. Thanks to Jean Couteau. Resolved by bpoussin.
o Lorsqu'on utilise ses propres fichiers cartes, ne pas utiliser de couleur de fond Issue: 8833. Thanks to Benjamin Poussin. Resolved by bpoussin.
o Export / Import des éléments d'une région, soit pour import dans une autre région, soit pour fusion de deux régions. Issue: 8737. Thanks to Benjamin Poussin. Resolved by bpoussin.
o Améliorer l'affichage du temps de progression des simulations Issue: 8484. Thanks to Benjamin Poussin. Resolved by bpoussin.
o Log de toutes les modifications de la base Issue: 8451. Thanks to Eric Chatellier. Resolved by echatellier.
o Amélioration du fond de carte Issue: 419. Thanks to Jean Couteau. Resolved by bpoussin.
o Supprimer l'option -Xmx des scripts de lancement Issue: 8834. Thanks to Benjamin Poussin. Resolved by echatellier.
o Pouvoir utilisé des objets natifs java pour les semantiques dans IsisMatrixSemanticMapper Issue: 8972. Thanks to Benjamin Poussin. Resolved by bpoussin.
o Pouvoir charger des matrice d'observation avec sémantique Issue: 8971. Thanks to Benjamin Poussin. Resolved by bpoussin.
o Modification de la finesse de la résolution spatiale Issue: 8734. Thanks to Benjamin Poussin. Resolved by echatellier.
Fixed Bugs:
o getRecruitment Issue: 8968. Thanks to Sigrid Lehuta. Resolved by bpoussin.
o Impossible d'utiliser R via le package rJava en x64 Issue: 8787. Thanks to Eric Chatellier. Resolved by echatellier.
o Les resultats nécéssaires aux exports sont mal pris en compte par le cache Issue: 8802. Thanks to Eric Chatellier. Resolved by echatellier.
o Lors du changement des shp file, la carte ne se met pas a jour Issue: 8827. Thanks to Benjamin Poussin. Resolved by echatellier.
o Les shapes chargés dans l'onglet de définition de la pêcherie, n'apparaissents pas dans l'onglet zones Issue: 9085. Thanks to Sigrid Lehuta. Resolved by echatellier.
Changes:
o Update to h2 1.4.194 Issue: 7988. Thanks to Eric Chatellier. Resolved by echatellier.
Downloads
---------
For a manual installation, you can download files here:
https://forge.codelutin.com/projects/isis-fish/files
* isis-fish-4.4.1.0-rc-1-bin.zip - https://forge.codelutin.com/attachments/download/4558
Maven artifacts
---------------
Artifacts are deployed in nuiton maven repository
http://maven.nuiton.org/other-releases/
Have fun!
-ISIS-Fish team
1
0